From b761e863ad382487ba5abbce5084555aed0388c7 Mon Sep 17 00:00:00 2001 From: kutscher <kutscher@irmb.tu-bs.de> Date: Wed, 17 Feb 2021 16:20:27 +0100 Subject: [PATCH] add Hesam's multiphase extention --- apps/cpu/Applications.cmake | 1 + apps/cpu/JetBreakup/CMakeLists.txt | 6 + apps/cpu/JetBreakup/JetBreakup.cfg | 48 + apps/cpu/JetBreakup/JetBreakup.cpp | 516 ++ apps/cpu/Multiphase/CMakeLists.txt | 3 + .../Multiphase (Droplet Test).cpp.backup | 482 ++ ...iphase (Jet breakup on Phoenix).cpp.backup | 508 ++ apps/cpu/Multiphase/Multiphase.cfg | 48 + apps/cpu/Multiphase/Multiphase.cpp | 503 ++ .../Multiphase/backup/3D flow-focusing.STL | Bin 0 -> 20684 bytes apps/cpu/Multiphase/backup/Cubic_jet.stl | Bin 0 -> 1484 bytes ...ntKernel-Before Cumulant modifications.cpp | 2006 +++++++ apps/cpu/Multiphase/backup/Final.ast | 5042 +++++++++++++++++ apps/cpu/Multiphase/backup/Final.stl | Bin 0 -> 36084 bytes apps/cpu/Multiphase/backup/FlowFocusing.FCStd | Bin 0 -> 25943 bytes .../cpu/Multiphase/backup/FlowFocusing.FCStd1 | Bin 0 -> 25938 bytes apps/cpu/Multiphase/backup/FlowFocusing.ast | 3194 +++++++++++ apps/cpu/Multiphase/backup/FlowFocusing.stl | Bin 0 -> 22884 bytes apps/cpu/Multiphase/backup/FlowFocusingS.ast | 3082 ++++++++++ apps/cpu/Multiphase/backup/FlowFocusingS.stl | Bin 0 -> 22084 bytes apps/cpu/Multiphase/backup/FlowFocusingS2.ast | 422 ++ apps/cpu/Multiphase/backup/FlowFocusingS2.stl | Bin 0 -> 3084 bytes .../backup/FlowFocusingS2_Small.ast | 366 ++ .../backup/FlowFocusingS2_Small.stl | Bin 0 -> 2684 bytes apps/cpu/Multiphase/backup/FlowFocusingSL.ast | 3082 ++++++++++ apps/cpu/Multiphase/backup/FlowFocusingSL.stl | Bin 0 -> 22084 bytes apps/cpu/Multiphase/backup/FlowFocusingSS.ast | 3096 ++++++++++ apps/cpu/Multiphase/backup/FlowFocusingSS.stl | Bin 0 -> 22184 bytes .../Multiphase/backup/FlowFocusingSq.FCStd | Bin 0 -> 10332 bytes .../Multiphase/backup/FlowFocusingSq.FCStd1 | Bin 0 -> 10330 bytes apps/cpu/Multiphase/backup/FlowFocusingSq.ast | 310 + apps/cpu/Multiphase/backup/FlowFocusingSq.stl | Bin 0 -> 2284 bytes .../Multiphase/backup/FlowFocusingSq1.FCStd | Bin 0 -> 10349 bytes .../Multiphase/backup/FlowFocusingSq1.FCStd1 | Bin 0 -> 10337 bytes .../cpu/Multiphase/backup/FlowFocusingSq1.ast | 310 + .../cpu/Multiphase/backup/FlowFocusingSq1.stl | Bin 0 -> 2284 bytes .../Multiphase/backup/FlowFocusingSq2.FCStd | Bin 0 -> 11382 bytes .../Multiphase/backup/FlowFocusingSq2.FCStd1 | Bin 0 -> 11746 bytes .../cpu/Multiphase/backup/FlowFocusingSq2.ast | 310 + .../cpu/Multiphase/backup/FlowFocusingSq2.stl | Bin 0 -> 2284 bytes .../Multiphase/backup/JetBreakup.ASCII.stl | 1318 +++++ apps/cpu/Multiphase/backup/JetBreakup.FCStd | Bin 0 -> 11555 bytes apps/cpu/Multiphase/backup/JetBreakup.stl | Bin 0 -> 9484 bytes .../Multiphase/backup/JetBreakup2.ASCII.stl | 1584 ++++++ apps/cpu/Multiphase/backup/JetBreakup2.FCStd | Bin 0 -> 30227 bytes apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 | Bin 0 -> 29584 bytes apps/cpu/Multiphase/backup/JetBreakup2.stl | Bin 0 -> 11384 bytes apps/cpu/Multiphase/backup/JetBreakup3.FCStd | Bin 0 -> 28673 bytes apps/cpu/Multiphase/backup/JetBreakup3.stl | Bin 0 -> 11384 bytes .../backup/Multiphase (Droplet Test).cpp | 482 ++ .../Multiphase (Final before automation).cpp | 586 ++ .../backup/Multiphase (Flow Focusing).cpp | 560 ++ .../Multiphase (Jet breakup on Phoenix).cpp | 508 ++ .../backup/Multiphase (T-Junction).cpp | 488 ++ .../backup/Multiphase (Thermal).cpp | 529 ++ .../Multiphase/backup/Multiphase (Tube).cpp | 404 ++ .../Multiphase - Cfg_file (The last).txt | 72 + apps/cpu/Multiphase/backup/Multiphase.cfg | 115 + apps/cpu/Multiphase/backup/Multiphase.cpp | 755 +++ ...ltiphaseCumulantLBMKernel (New VBased).cpp | 1258 ++++ ...BMKernel (Original Final from Phoenix).cpp | 0 ...haseCumulantLBMKernel (Original Final).cpp | 2700 +++++++++ apps/cpu/Multiphase/backup/Multiphase_Jet.cfg | 75 + apps/cpu/Multiphase/backup/T-Junction.FCStd | Bin 0 -> 14928 bytes apps/cpu/Multiphase/backup/T-Junction.FCStd1 | Bin 0 -> 4308 bytes apps/cpu/Multiphase/backup/T-Junction.ast | 2088 +++++++ apps/cpu/Multiphase/backup/T-Junction.stl | Bin 0 -> 14984 bytes .../Multiphase/backup/Thermal - Cfg_file.txt | 72 + apps/cpu/Multiphase/backup/Tube_jet.FCStd | Bin 0 -> 11826 bytes apps/cpu/Multiphase/backup/Tube_jet.stl | Bin 0 -> 15084 bytes apps/cpu/Multiphase/backup/Tube_jet1.FCStd | Bin 0 -> 11785 bytes apps/cpu/Multiphase/backup/Tube_jet1.stl | Bin 0 -> 28884 bytes apps/cpu/Multiphase/backup/Tube_jet_s.stl | Bin 0 -> 26284 bytes apps/cpu/Multiphase/backup/aaaa.stl | Bin 0 -> 2684 bytes apps/cpu/Multiphase/backup/dd.ast | 198 + apps/cpu/Multiphase/backup/dd.stl | Bin 0 -> 1484 bytes src/basics/geometry3d/GbTriFaceMesh3D.cpp | 82 +- src/basics/geometry3d/GbTriFaceMesh3D.h | 8 +- src/cpu/VirtualFluids.h | 8 + .../BoundaryConditions/BCAlgorithm.cpp | 15 +- .../BoundaryConditions/BCAlgorithm.h | 53 +- .../BoundaryConditions/BoundaryConditions.h | 7 +- .../NoSlipBCAlgorithmMultiphase.cpp | 111 + .../NoSlipBCAlgorithmMultiphase.h | 50 + ...ReflectingOutflowBCAlgorithmMultiphase.cpp | 372 ++ ...onReflectingOutflowBCAlgorithmMultiphase.h | 49 + .../SlipBCAlgorithmMultiphase.cpp | 141 + .../SlipBCAlgorithmMultiphase.h | 51 + .../VelocityBCAdapterMultiphase.cpp | 344 ++ .../VelocityBCAdapterMultiphase.h | 169 + .../VelocityBCAlgorithmMultiphase.cpp | 148 + .../VelocityBCAlgorithmMultiphase.h | 51 + .../Connectors/D3Q27ETFullVectorConnector.cpp | 2 +- .../ThixotropyFullVectorConnector.cpp | 2 +- .../Data/D3Q27EsoTwist3DSoA.cpp | 24 +- .../Data/D3Q27EsoTwist3DSoA.h | 2 +- .../Data/D3Q27EsoTwist3DSplittedVector.cpp | 24 +- src/cpu/VirtualFluidsCore/Data/DataSet3D.h | 96 +- .../Data/EsoTwistD3Q27System.cpp | 4 +- .../Data/EsoTwistD3Q27System.h | 2 +- src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp | 2 +- src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h | 2 +- .../VirtualFluidsCore/LBM/BGKLBMKernel.cpp | 14 +- ...mpressibleOffsetInterpolationProcessor.cpp | 4 +- ...bleOffsetMomentsInterpolationProcessor.cpp | 4 +- ...etSquarePressureInterpolationProcessor.cpp | 4 +- src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp | 194 +- src/cpu/VirtualFluidsCore/LBM/D3Q27System.h | 2214 ++++---- ...mpressibleOffsetInterpolationProcessor.cpp | 4 +- .../LBM/InitDensityLBMKernel.cpp | 12 +- src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp | 46 + src/cpu/VirtualFluidsCore/LBM/LBMKernel.h | 31 + .../LBM/LBMKernelETD3Q27BGK.cpp | 14 +- .../LBM/MultiphaseCumulantLBMKernel.cpp | 1748 ++++++ .../LBM/MultiphaseCumulantLBMKernel.h | 99 + .../LBM/ThixotropyInterpolationProcessor.cpp | 4 +- ...undaryConditionsBlockVisitorMultiphase.cpp | 145 + ...BoundaryConditionsBlockVisitorMultiphase.h | 55 + .../InitDistributionsBlockVisitor.cpp | 2 +- ...nitDistributionsBlockVisitorMultiphase.cpp | 499 ++ .../InitDistributionsBlockVisitorMultiphase.h | 102 + .../InitDistributionsFromFileBlockVisitor.cpp | 2 +- .../Visitors/InitThixotropyBlockVisitor.cpp | 2 +- .../SetKernelBlockVisitorMultiphase.cpp | 96 + .../SetKernelBlockVisitorMultiphase.h | 70 + 125 files changed, 42863 insertions(+), 1448 deletions(-) create mode 100644 apps/cpu/JetBreakup/CMakeLists.txt create mode 100644 apps/cpu/JetBreakup/JetBreakup.cfg create mode 100644 apps/cpu/JetBreakup/JetBreakup.cpp create mode 100644 apps/cpu/Multiphase/CMakeLists.txt create mode 100644 apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup create mode 100644 apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup create mode 100644 apps/cpu/Multiphase/Multiphase.cfg create mode 100644 apps/cpu/Multiphase/Multiphase.cpp create mode 100644 apps/cpu/Multiphase/backup/3D flow-focusing.STL create mode 100644 apps/cpu/Multiphase/backup/Cubic_jet.stl create mode 100644 apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp create mode 100644 apps/cpu/Multiphase/backup/Final.ast create mode 100644 apps/cpu/Multiphase/backup/Final.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusing.FCStd create mode 100644 apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 create mode 100644 apps/cpu/Multiphase/backup/FlowFocusing.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusing.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingS.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingS.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingS2.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingS2.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSL.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSL.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSS.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSS.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq1.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq1.stl create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq2.ast create mode 100644 apps/cpu/Multiphase/backup/FlowFocusingSq2.stl create mode 100644 apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl create mode 100644 apps/cpu/Multiphase/backup/JetBreakup.FCStd create mode 100644 apps/cpu/Multiphase/backup/JetBreakup.stl create mode 100644 apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl create mode 100644 apps/cpu/Multiphase/backup/JetBreakup2.FCStd create mode 100644 apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 create mode 100644 apps/cpu/Multiphase/backup/JetBreakup2.stl create mode 100644 apps/cpu/Multiphase/backup/JetBreakup3.FCStd create mode 100644 apps/cpu/Multiphase/backup/JetBreakup3.stl create mode 100644 apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase (Tube).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt create mode 100644 apps/cpu/Multiphase/backup/Multiphase.cfg create mode 100644 apps/cpu/Multiphase/backup/Multiphase.cpp create mode 100644 apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp create mode 100644 apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp create mode 100644 apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp create mode 100644 apps/cpu/Multiphase/backup/Multiphase_Jet.cfg create mode 100644 apps/cpu/Multiphase/backup/T-Junction.FCStd create mode 100644 apps/cpu/Multiphase/backup/T-Junction.FCStd1 create mode 100644 apps/cpu/Multiphase/backup/T-Junction.ast create mode 100644 apps/cpu/Multiphase/backup/T-Junction.stl create mode 100644 apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt create mode 100644 apps/cpu/Multiphase/backup/Tube_jet.FCStd create mode 100644 apps/cpu/Multiphase/backup/Tube_jet.stl create mode 100644 apps/cpu/Multiphase/backup/Tube_jet1.FCStd create mode 100644 apps/cpu/Multiphase/backup/Tube_jet1.stl create mode 100644 apps/cpu/Multiphase/backup/Tube_jet_s.stl create mode 100644 apps/cpu/Multiphase/backup/aaaa.stl create mode 100644 apps/cpu/Multiphase/backup/dd.ast create mode 100644 apps/cpu/Multiphase/backup/dd.stl create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h create mode 100644 src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h create mode 100644 src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp create mode 100644 src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h diff --git a/apps/cpu/Applications.cmake b/apps/cpu/Applications.cmake index fb5b9cdf5..2fc89f703 100644 --- a/apps/cpu/Applications.cmake +++ b/apps/cpu/Applications.cmake @@ -68,4 +68,5 @@ add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleySphere) add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleyModel) add_subdirectory(${APPS_ROOT_CPU}/rheometer) add_subdirectory(${APPS_ROOT_CPU}/CouetteFlow) +add_subdirectory(${APPS_ROOT_CPU}/Multiphase) diff --git a/apps/cpu/JetBreakup/CMakeLists.txt b/apps/cpu/JetBreakup/CMakeLists.txt new file mode 100644 index 000000000..19553ec4c --- /dev/null +++ b/apps/cpu/JetBreakup/CMakeLists.txt @@ -0,0 +1,6 @@ +######################################################## +## C++ PROJECT ### +######################################################## +PROJECT(JetBreakup) + +vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES JetBreakup.cpp ) \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cfg b/apps/cpu/JetBreakup/JetBreakup.cfg new file mode 100644 index 000000000..22d20f7d5 --- /dev/null +++ b/apps/cpu/JetBreakup/JetBreakup.cfg @@ -0,0 +1,48 @@ +pathname = d:/temp/Multiphase +pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup +geoFile = JetBreakup2.ASCII.stl +numOfThreads = 4 +availMem = 10e9 + +#Grid + +#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 #(Jet Breakup) (Original with inlet length) +#boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) +#blocknx = 22 20 22 + +boundingBox = -60.5 60.5 -1.0 -21.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) +blocknx = 22 20 22 + + +dx = 0.5 +refineLevel = 0 + +#Simulation +uLB = 0.05 #inlet velocity +uF2 = 0.0001 +Re = 10 +nuL = 1.0e-5 #!1e-2 +nuG = 1.16e-4 #!1e-2 +densityRatio = 10 #30 +sigma = 4.66e-3 #surface tension 1e-4 ./. 1e-5 +interfaceThickness = 5 +radius = 615.0 (Jet Breakup) +contactAngle = 110.0 +gravity = 0.0 +#gravity = -5.04e-6 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.6 +Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 1 +endTime = 200000000 \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp new file mode 100644 index 000000000..e2dc0f0e3 --- /dev/null +++ b/apps/cpu/JetBreakup/JetBreakup.cpp @@ -0,0 +1,516 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12 * sigma / interfaceThickness; + double kappa = 1.5 * interfaceThickness * sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + GbTriFaceMesh3DPtr cylinder; + if (myid == 0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/" + geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // For JetBreakup (Original) + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-2.0*dx, g_minX2-2.0*dx, g_minX3-2.0*dx, g_maxX1+2.0*dx, g_minX2+2.0*dx, g_maxX3+2.0*dx)); + //if (myid == 0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + ////outflow + ////GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1-2.0*dx, g_maxX2, g_minX3-2.0*dx, g_maxX1+2.0*dx, g_maxX2+2.0*dx, g_maxX3+2.0*dx)); + //if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(false, true, false, fctF1, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + //D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID)); + + //D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2 + g_minX2) / 2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3 + g_minX3) / 2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + + + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); + fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0); + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/CMakeLists.txt b/apps/cpu/Multiphase/CMakeLists.txt new file mode 100644 index 000000000..3daebaf85 --- /dev/null +++ b/apps/cpu/Multiphase/CMakeLists.txt @@ -0,0 +1,3 @@ +PROJECT(Multiphase) + +vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES Multiphase.cpp ) diff --git a/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup b/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup new file mode 100644 index 000000000..46297d526 --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup @@ -0,0 +1,482 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, 20.0)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(true); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-34.0, -20.0, 1.0, -31.5, 16.0, 46.0)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-24.0, 3, 20.0, -22.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + /*GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-24.0, -24.0, 0.0, 26.0, 26.0, 3.5)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-24.0, -24.0, 56.5, 26.0, 26.0, 59.9)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());*/ + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0-50, -20.0, 1.0, 130.0-50, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0, -20.0, 1.0, 130.0, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(78.0, 3, 20.0, 81.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + //BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + //BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + //denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + mu::Parser fctF1; + fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vx1"); + fctF1.DefineConst("R", 10.0); + //fctF1.DefineConst("R", 8.0); // FlowFocusingSS + fctF1.DefineConst("vx1", uLB); + fctF1.DefineConst("y0", 1.0); + fctF1.DefineConst("z0", 31.0); + + mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_1.SetExpr("vx3"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_2.SetExpr("vx3"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + //velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + /*bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1_init); + bcVisitor.addBC(velBCAdapterF2_2_init);*/ + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + + + //intHelper.setBC(); + //grid->accept(bcVisitor); + + //initialization of distributions + //initialization of distributions + LBMReal x1c = (g_maxX1 - g_minX1-1)/2; + LBMReal x2c = (g_maxX2 - g_minX2-1)/2; + LBMReal x3c = (g_maxX3 - g_minX3-1)/2; + mu::Parser fct1; + fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + //fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct2.SetExpr("vx1"); + /*fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0);*/ + fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + //WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup b/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup new file mode 100644 index 000000000..9f2800898 --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup @@ -0,0 +1,508 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // For JetBreakup (Original) + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + BCAdapterPtr velBCAdapterF1 (new VelocityBCAdapterMultiphase(false, true, false, fctF1 , phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + //D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID)); + + //D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + + + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); + fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0); + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/Multiphase.cfg b/apps/cpu/Multiphase/Multiphase.cfg new file mode 100644 index 000000000..0d3e5633e --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase.cfg @@ -0,0 +1,48 @@ +pathname = d:/temp/MultiphaseNew +pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup +geoFile = JetBreakup2.ASCII.stl +numOfThreads = 4 +availMem = 10e9 + +#Grid + +#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 #(Jet Breakup) (Original with inlet length) +#boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) +#blocknx = 22 20 22 + +boundingBox = -60.5 60.5 -1.0 -21.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) +blocknx = 22 20 22 + + +dx = 0.5 +refineLevel = 0 + +#Simulation +uLB = 0.05 #inlet velocity +uF2 = 0.0001 +Re = 10 +nuL = 1.0e-5 #!1e-2 +nuG = 1.16e-4 #!1e-2 +densityRatio = 10 #30 +sigma = 4.66e-3 #surface tension 1e-4 ./. 1e-5 +interfaceThickness = 5 +radius = 615.0 (Jet Breakup) +contactAngle = 110.0 +gravity = 0.0 +#gravity = -5.04e-6 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.6 +Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 1 +endTime = 200000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp new file mode 100644 index 000000000..4ea38e31c --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase.cpp @@ -0,0 +1,503 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + +void run(string configname) +{ + try { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getValue<string>("pathname"); + string pathGeo = config.getValue<string>("pathGeo"); + string geoFile = config.getValue<string>("geoFile"); + int numOfThreads = config.getValue<int>("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + // vector<double> length = config.getVector<double>("length"); + double uLB = config.getValue<double>("uLB"); + // double uF2 = config.getValue<double>("uF2"); + double nuL = config.getValue<double>("nuL"); + double nuG = config.getValue<double>("nuG"); + double densityRatio = config.getValue<double>("densityRatio"); + double sigma = config.getValue<double>("sigma"); + int interfaceThickness = config.getValue<int>("interfaceThickness"); + double radius = config.getValue<double>("radius"); + double theta = config.getValue<double>("contactAngle"); + double gr = config.getValue<double>("gravity"); + double phiL = config.getValue<double>("phi_L"); + double phiH = config.getValue<double>("phi_H"); + double tauH = config.getValue<double>("Phase-field Relaxation"); + double mob = config.getValue<double>("Mobility"); + + double endTime = config.getValue<double>("endTime"); + double outTime = config.getValue<double>("outTime"); + double availMem = config.getValue<double>("availMem"); + int refineLevel = config.getValue<int>("refineLevel"); + double Re = config.getValue<double>("Re"); + double dx = config.getValue<double>("dx"); + bool logToFile = config.getValue<bool>("logToFile"); + double restartStep = config.getValue<double>("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12 * sigma / interfaceThickness; + double kappa = 1.5 * interfaceThickness * sigma; + + SPtr<Communicator> comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (myid == 0) + UBLOG(logINFO, "Jet Breakup: Start!"); + + if (logToFile) { +#if defined(__unix__) + if (myid == 0) { + const char *str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + // Sleep(30000); + + // LBMReal dLB = 0; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); + + const int baseLevel = 0; + + SPtr<LBMKernel> kernel; + + kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + SPtr<BCProcessor> bcProc(new BCProcessor()); + // BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SPtr<Grid3D> grid(new Grid3D(comm)); + // grid->setPeriodicX1(true); + // grid->setPeriodicX2(true); + // grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + // restart + SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); + // RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestartCoProcessor rcp(grid, rSch, pathname, comm); + rcp.setLBMKernel(kernel); + rcp.setBCProcessor(bcProc); + ////////////////////////////////////////////////////////////////////////// + + mu::Parser fctF1; + // fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + // fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + if (newStart) { + + // bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + // geometry + + // GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, + // g_maxX3-2)); + + // GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, + // g_maxX2/2, g_maxX3/2, radius)); GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, + // g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + // GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, + // g_maxX2/2, g_maxX3/2, dLB / 2.0)); GbObject3DPtr cylinders(new GbObject3DManager()); GbObject3DPtr + // cylinders1(new GbObjectGroup3D()); + + SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) + GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", + WbWriterVtkXmlBinary::getInstance()); + + + if (myid == 0) UBLOG(logINFO, "Read geoFile:start"); + SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>(); + cylinder->readMeshFromSTLFileASCII(pathGeo + "/" + geoFile, false); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + if (myid == 0) UBLOG(logINFO, "Read geoFile:stop"); + // inflow + // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // For JetBreakup + // (Original) GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-2.0*dx, g_minX2-2.0*dx, g_minX3-2.0*dx, + // g_maxX1+2.0*dx, g_minX2+2.0*dx, g_maxX3+2.0*dx)); if (myid == 0) + // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", + // WbWriterVtkXmlASCII::getInstance()); + + ////outflow + ////GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup + ///(Original) + // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1-2.0*dx, g_maxX2, g_minX3-2.0*dx, g_maxX1+2.0*dx, + // g_maxX2+2.0*dx, g_maxX3+2.0*dx)); if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + + // "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF1( + new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * dx, g_maxX3)); + if (myid == 0) + GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", + WbWriterVtkXmlASCII::getInstance()); + + // outflow + // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 1 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) + GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", + WbWriterVtkXmlASCII::getInstance()); + + // double blockLength = blocknx[0] * dx; + + if (myid == 0) { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + // BC Adapter + ////////////////////////////////////////////////////////////////////////////// + SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithmMultiphase())); + + SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithmMultiphase())); + + // double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + // double cx1 = g_minX1; + // double cx2 = 0.0; //cylinder->getX2Centroid(); + // double cx3 = 0.0; //cylinder->getX3Centroid(); + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + // fct.SetExpr("U"); + // fct.DefineConst("U", uLB); + // BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + SPtr<BCAdapter> velBCAdapterF1( + new VelocityBCAdapterMultiphase(false, true, false, fctF1, phiH, 0.0, endTime)); + + // BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, + // 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, + // fctF2_2, phiH, 0.0, endTime)); + + // BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, + // phiL, 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, + // true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithmMultiphase())); + // velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + // velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + // mu::Parser fct; + // fct.SetExpr("U"); + // fct.DefineConst("U", uLB); + // BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + ////////////////////////////////////////////////////////////////////////////////// + // BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + // bcVisitor.addBC(velBCAdapterF2_1_init); + // bcVisitor.addBC(velBCAdapterF2_2_init); + + SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor( + grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + //ppblocks->process(0); + + SPtr<Interactor3D> tubes( + new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + SPtr<D3Q27Interactor> inflowF1Int( + new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + // D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, + // velBCAdapterF2_1_init, Interactor3D::SOLID)); + + // D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, + // velBCAdapterF2_2_init, Interactor3D::SOLID)); + + SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + // SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + // grid->accept(visitor1); + // SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + // grid->accept(visitor2); + + SPtr<Grid3DVisitor> metisVisitor( + new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = + (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = + numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = + double(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + // LBMKernelPtr kernel; + + // kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], + // MultiphaseCumulantLBMKernel::NORMAL)); + + // kernel->setWithForcing(true); + // kernel->setForcingX1(0.0); + // kernel->setForcingX2(gr); + // kernel->setForcingX3(0.0); + + // kernel->setPhiL(phiL); + // kernel->setPhiH(phiH); + // kernel->setPhaseFieldRelaxation(tauH); + // kernel->setMobility(mob); + + // BCProcessorPtr bcProc(new BCProcessor()); + // //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + // kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, + needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + // inflowF2_1Int->initInteractor(); + // inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + grid->accept(bcVisitor); + + // initialization of distributions + LBMReal x1c = radius; // g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2 + g_minX2) / 2; // g_minX2 + 2; + LBMReal x3c = (g_maxX3 + g_minX3) / 2; + mu::Parser fct1; + + // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + // fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + // fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - + // phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + + // fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); + fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + // fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0); + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + // initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + // set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + // InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + // ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + // ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + // domain decomposition for threads + // PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + // grid->accept(pqPartVisitor); + + // boundary conditions grid + { + SPtr<UbScheduler> geoSch(new UbScheduler(1)); + SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor( + grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) + UBLOG(logINFO, "Preprocess - end"); + } else { + if (myid == 0) { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + // BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + // bcVisitor.addBC(velBCAdapter); + // grid->accept(bcVisitor); + + // set connectors + // InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) + UBLOG(logINFO, "Restart - end"); + } + SPtr<UbScheduler> visSch(new UbScheduler(outTime)); + SPtr<WriteMacroscopicQuantitiesCoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor( + grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm)); + + SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); + SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); + + SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); + SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); + calculator->addCoProcessor(npr); + calculator->addCoProcessor(pp); + + if (myid == 0) + UBLOG(logINFO, "Simulation-start"); + calculator->calculate(); + if (myid == 0) + UBLOG(logINFO, "Simulation-end"); + } catch (std::exception &e) { + cerr << e.what() << endl << flush; + } catch (std::string &s) { + cerr << s << endl; + } catch (...) { + cerr << "unknown exception" << endl; + } +} +int main(int argc, char *argv[]) +{ + // Sleep(30000); + if (argv != NULL) { + if (argv[1] != NULL) { + run(string(argv[1])); + } else { + cout << "Configuration file is missing!" << endl; + } + } +} diff --git a/apps/cpu/Multiphase/backup/3D flow-focusing.STL b/apps/cpu/Multiphase/backup/3D flow-focusing.STL new file mode 100644 index 0000000000000000000000000000000000000000..88aa3e365ce64c70526dc909d3578ac35a72f815 GIT binary patch literal 20684 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Cubic_jet.stl b/apps/cpu/Multiphase/backup/Cubic_jet.stl new file mode 100644 index 0000000000000000000000000000000000000000..c72bd5e4cc997a156f43cc526b38d7fb49077aa1 GIT binary patch literal 1484 zcmb`HO-=(b4282sJpy~!aE7KxNNl>|B0WNm(oKO|klD>~I0EnaZ#<JhVu2-hGWPpy zCuw_rd3$|2|J%pieWA54_^p)wUdsGX%C*9KDThaW%KFpd$gPR2nm>$y>aZe6(b(&H zTIycdubVSobxo}riLA;KN~M~Kb_CTBNwszfP-;$O)rI?jLfk9i9oFQtkjkpO^XOew zyAU}u5MBG38oQ=tRXzo&)CZy=;-_2J=N55LdJlZk@>E>U<`M5y@gCfAW=jY?QMn~N zBLoyPJXhKwvZ_N(Kf$Z6M`CqrR8tAU_cRimA|^?Me=A2qGG3Q7C;D>_>1TvjDq%dc z?`NIJr}7CU&OTGfu^=Jc5e>prBjI-v1eCExh3JjAnh<TB*(E?5am2G3fjYlVwe%nX zle$|1@39Xhnuz5$7z8pg)kr8HM6NXu6Q-3O@~>c2oC&f)=k-F^WI-Sk>kaV(*`ijR literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp b/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp new file mode 100644 index 000000000..860a1f112 --- /dev/null +++ b/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp @@ -0,0 +1,2006 @@ +#include "MultiphaseCumulantLBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include <omp.h> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() +{ + this->nx1 = 0; + this->nx2 = 0; + this->nx3 = 0; + this->parameter = NORMAL; + this->OxyyMxzz = 1.0; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) +{ + this->nx1 = nx1; + this->nx2 = nx2; + this->nx3 = nx3; + parameter = p; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::init() +{ + //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); + DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); + DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field + //PhaseFieldArray3DPtr phi(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, -999.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + //dataSet->setPhaseField(phi); +} +////////////////////////////////////////////////////////////////////////// +LBMKernelPtr MultiphaseCumulantLBMKernel::clone() +{ + LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter)); + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init(); + + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + switch (parameter) + { + case NORMAL: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0; + break; + case MAGIC: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor); + break; + } + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate() +{ + timer.resetAndStart(); + collideAll(); + timer.stop(); +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::collideAll() +{ + using namespace D3Q27System; + + //initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + //phaseField = dataSet->getPhaseField(); + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + +//#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} +//#pragma omp for + + + +/* +/////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + +///////////////////////////////////////////////////////// +*/ + + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + + //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + //LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + // h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + //if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + } + } + } + } + + + LBMReal collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF+1]; + LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; + LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222; + LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + + ////////////////////////////////////////////////////////////////////////// + //Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + //E N T + //c c c + ////////// + //W S B + //a a a + + //Rest ist b + + //mfxyz + //a - negative + //b - null + //c - positive + + // a b c + //-1 0 1 + + /* + phi[ZERO] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, x1, x2, x3); + + g[E ] = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + g[N ] = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + g[T ] = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + g[NE ] = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + g[NW ] = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + g[TE ] = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + g[TW ] = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + g[TN ] = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + g[TS ] = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + g[TNE] = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + g[TNW] = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + g[TSE] = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + g[TSW] = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + + g[W ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + g[S ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + g[B ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + g[SW ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + g[SE ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + g[BW ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + g[BE ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + g[BS ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + g[BN ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + g[BSW] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + g[BSE] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + g[BNW] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + g[BNE] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + + g[ZERO] = (*this->zeroDistributionsF)(x1,x2,x3); + + + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + + //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL); + + //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG; + //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL; + collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL); + + w1 = collFactorM; + //LBMReal tauH = 1.0; + LBMReal dX1_phi = gradX1_phi(); + LBMReal dX2_phi = gradX2_phi(); + LBMReal dX3_phi = gradX3_phi(); + LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi(); + + //LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + + + //----------- Calculating Macroscopic Values ------------- + + //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH); + //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]); + + if (withForcing) + { + //muX1 = static_cast<double>(x1-1+ix1*maxX1); + //muX2 = static_cast<double>(x2-1+ix2*maxX2); + //muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + LBMReal rho_m = 1.0/densityRatio; + forcingX1 = forcingX1*(rho-rho_m); + forcingX2 = forcingX2*(rho-rho_m); + forcingX3 = forcingX3*(rho-rho_m); + + //ux += forcingX1*deltaT*0.5; // X + //uy += forcingX2*deltaT*0.5; // Y + //uz += forcingX3*deltaT*0.5; // Z + } + + LBMReal ux = (g[BE] + g[BNE] - g[BNW] + g[BSE] - g[BSW] - g[BW] + g[E] + g[NE] - g[NW] + g[SE] - g[SW] + g[TE] + + g[TNE] - g[TNW] + g[TSE] - g[TSW] - g[TW] - g[W]) / (rho*c1o3) + (mu*dX1_phi + forcingX1)/(2*rho); + + LBMReal uy = (g[BN] + g[BNE] + g[BNW] - g[BS] - g[BSE] - g[BSW] + g[N] + g[NE] + g[NW] - g[S] - g[SE] - g[SW] + + g[TN] + g[TNE] + g[TNW] - g[TS] - g[TSE] - g[TSW]) / (rho*c1o3) + (mu*dX2_phi + forcingX2)/(2*rho); + + LBMReal uz = (g[T] + g[TE] + g[TN] + g[TNE] + g[TNW] + g[TS] + g[TSE] + g[TSW] + g[TW] - g[B] - g[BE] - g[BN] - + g[BNE] - g[BNW] - g[BS] - g[BSE] - g[BSW] - g[BW]) / (rho*c1o3) + (mu*dX3_phi + forcingX3)/(2*rho); + + LBMReal p1 = (g[ZERO] + g[E] + g[W] + g[N] + g[S] + g[T] + g[B] + g[NE] + g[SW] + g[SE] + g[NW] + g[TE] + g[BW] + + g[BE] + g[TW] + g[TN] + g[BS] + g[BN] + g[TS] + g[TNE] + g[TNW] + g[TSE] + g[TSW] + g[BNE] + g[BNW] + g[BSE] + g[BSW]) + + (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + //vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + + + + LBMReal ux2 = ux*ux; + LBMReal uy2 = uy*uy; + LBMReal uz2 = uz*uz; + LBMReal ux_uy = ux*uy; + LBMReal ux_uz = ux*uz; + LBMReal uy_uz = uy*uz; + LBMReal ux_uy_uz = ux*uy*uz; + + +/* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - + (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[ZERO] = -(forcingTerm1)*WEIGTH[ZERO]; + } + } + //-------------------------------------------------------- +*/ + + //----------- Calculating Forcing Terms * ------------- + //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + + //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi; + //LBMReal fac2 = gamma*mu; + //LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + /*forcingTerm[dir] = (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3) - + (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi);*/ + forcingTerm[dir] = (DX1[dir] - ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (DX2[dir] - uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (DX3[dir] - uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + } + + LBMReal gamma = WEIGTH[ZERO]*(1 - 1.5*(ux2+uy2+uz2)); + /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi; + forcingTerm[ZERO] = (-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + //-------------------------------------------------------- + +/* + f1[E ] = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + f1[N ] = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + f1[T ] = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE ]/c1o3; + f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE ]/c1o3; + f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN ]/c1o3; + f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNE]/c1o3; + f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNW]/c1o3; + f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSE]/c1o3; + f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSW]/c1o3; + f1[W ] = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[W ]/c1o3; + f1[S ] = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[S ]/c1o3; + f1[B ] = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[B ]/c1o3; + f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SW ]/c1o3; + f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SE ]/c1o3; + f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BW ]/c1o3; + f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BE ]/c1o3; + f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BS ]/c1o3; + f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BN ]/c1o3; + f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSW]/c1o3; + f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSE]/c1o3; + f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNW]/c1o3; + f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNE]/c1o3; + f1[ZERO] = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - (p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3; +*/ + + LBMReal mfcbb = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + LBMReal mfbcb = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + LBMReal mfbbc = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + LBMReal mfccb = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[NE ]/c1o3; + LBMReal mfacb = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + LBMReal mfcbc = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TE ]/c1o3; + LBMReal mfabc = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + LBMReal mfbcc = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TN ]/c1o3; + LBMReal mfbac = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + LBMReal mfccc = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TNE]/c1o3; + LBMReal mfacc = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TNW]/c1o3; + LBMReal mfcac = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TSE]/c1o3; + LBMReal mfaac = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TSW]/c1o3; + LBMReal mfabb = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[W ]/c1o3; + LBMReal mfbab = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[S ]/c1o3; + LBMReal mfbba = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[B ]/c1o3; + LBMReal mfaab = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[SW ]/c1o3; + LBMReal mfcab = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[SE ]/c1o3; + LBMReal mfaba = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BW ]/c1o3; + LBMReal mfcba = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BE ]/c1o3; + LBMReal mfbaa = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BS ]/c1o3; + LBMReal mfbca = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BN ]/c1o3; + LBMReal mfaaa = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BSW]/c1o3; + LBMReal mfcaa = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BSE]/c1o3; + LBMReal mfaca = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BNW]/c1o3; + LBMReal mfcca = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BNE]/c1o3; + + LBMReal mfbbb = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3; + + + + /* + //forcing + /////////////////////////////////////////////////////////////////////////////////////////// + if (withForcing) + { + muX1 = static_cast<double>(x1-1+ix1*maxX1); + muX2 = static_cast<double>(x2-1+ix2*maxX2); + muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + vvx += forcingX1*deltaT*0.5; // X + vvy += forcingX2*deltaT*0.5; // Y + vvz += forcingX3*deltaT*0.5; // Z + } + /////////////////////////////////////////////////////////////////////////////////////////// + */ + + LBMReal oMdrho, m0, m1, m2; + + oMdrho=mfccc+mfaaa; + m0=mfaca+mfcac; + m1=mfacc+mfcaa; + m2=mfaac+mfcca; + oMdrho+=m0; + m1+=m2; + oMdrho+=m1; + m0=mfbac+mfbca; + m1=mfbaa+mfbcc; + m0+=m1; + m1=mfabc+mfcba; + m2=mfaba+mfcbc; + m1+=m2; + m0+=m1; + m1=mfacb+mfcab; + m2=mfaab+mfccb; + m1+=m2; + m0+=m1; + oMdrho+=m0; + m0=mfabb+mfcbb; + m1=mfbab+mfbcb; + m2=mfbba+mfbbc; + m0+=m1+m2; + m0+=mfbbb; //hat gefehlt + //oMdrho = 1. - (oMdrho + m0); + oMdrho = rho - (oMdrho + p1/c1o3); + + + //////////////////////////////////////////////////////////////////////////////////// + LBMReal wadjust; + LBMReal qudricLimit = 0.01; + //////////////////////////////////////////////////////////////////////////////////// + //Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; + mfaac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity + LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// + //LBMReal OxyyMxzz = 1.;//2+s9;// + LBMReal O4 = 1.; + LBMReal O5 = 1.; + LBMReal O6 = 1.; + + //Cum 4. + //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + + //LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + + //Cum 5. + LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; + LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; + LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; + + //Cum 6. + LBMReal CUMccc = mfccc +((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; + + //2. + // linear combinations + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; + + LBMReal dxux = -c1o2 * collFactorM *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; + + //relax + mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz); + mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy); + mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz); + + mfabb += collFactorM * (-mfabb); + mfbab += collFactorM * (-mfbab); + mfbba += collFactorM * (-mfbba); + + // linear combinations back + mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); + mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); + mfaac = c1o3 * ( mxxMyy - 2. * mxxMzz + mxxPyyPzz); + + //3. + // linear combinations + LBMReal mxxyPyzz = mfcba + mfabc; + LBMReal mxxyMyzz = mfcba - mfabc; + + LBMReal mxxzPyyz = mfcab + mfacb; + LBMReal mxxzMyyz = mfcab - mfacb; + + LBMReal mxyyPxzz = mfbca + mfbac; + LBMReal mxyyMxzz = mfbca - mfbac; + + //relax + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit); + mfbbb += wadjust * (-mfbbb); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit); + mxyyMxzz += wadjust * (-mxyyMxzz); + + // linear combinations back + mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; + mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; + mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; + mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; + mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; + mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; + + //4. + CUMacc += O4 * (-CUMacc); + CUMcac += O4 * (-CUMcac); + CUMcca += O4 * (-CUMcca); + + CUMbbc += O4 * (-CUMbbc); + CUMbcb += O4 * (-CUMbcb); + CUMcbb += O4 * (-CUMcbb); + + //5. + CUMbcc += O5 * (-CUMbcc); + CUMcbc += O5 * (-CUMcbc); + CUMccb += O5 * (-CUMccb); + + //6. + CUMccc += O6 * (-CUMccc); + + //back cumulants to central moments + //4. + //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + mfcbb = CUMcbb + ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + mfbcb = CUMbcb + ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + mfbbc = CUMbbc + ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + + //mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + + //5. + mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; + mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; + mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; + + //6. + mfccc = CUMccc -((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; + + //////////////////////////////////////////////////////////////////////////////////// + //forcing + mfbaa=-mfbaa; + mfaba=-mfaba; + mfaab=-mfaab; + ////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////// + //back + //////////////////////////////////////////////////////////////////////////////////// + //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * ( uz2 - uz) * c1o2; + m1 = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * ( uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * ( uz2 - uz) * c1o2; + m1 = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * ( uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * ( uz2 - uz) * c1o2; + m1 = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * ( uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * ( uz2 - uz) * c1o2; + m1 = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * ( uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * ( uz2 - uz) * c1o2; + m1 = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * ( uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * ( uy2 - uy) * c1o2; + m1 = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * ( uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * ( uy2 - uy) * c1o2; + m1 = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * ( uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * ( uy2 - uy) * c1o2; + m1 = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * ( uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + + +/////////////////////////////////////////////////////////////////////////// + +/* + m000 = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; + + m100 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[E] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW] - f1[W]; + m010 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[N] + f1[NE] + f1[NW] - f1[S] - f1[SE] - f1[SW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m001 = f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW] - f1[B] - f1[BE] - f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] - f1[BW]; + + m110 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[NE] - f1[NW] - f1[SE] + f1[SW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m101 = -f1[BE] - f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m011 = -f1[BN] - f1[BNE] - f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m200 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[E] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW] + f1[W]; + m020 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[N] + f1[NE] + f1[NW] + f1[S] + f1[SE] + f1[SW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m002 = f1[B] + f1[BE] + f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[BW] + f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW]; + m120 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m102 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m210 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[NE] + f1[NW] - f1[SE] - f1[SW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m012 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m201 = -f1[BE] - f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m021 = -f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m111 = -f1[BNE] + f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m220 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m202 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m022 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m211 = -f1[BNE] - f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m121 = -f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m112 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m221 = -f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m212 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m122 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m222 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + + k200 = m200 - m000*ux2; + k020 = m020 - m000*uy2; + k002 = m002 - m000*uz2; + k110 = m110 - m000*ux_uy; + k101 = m101 - m000*ux_uz; + k011 = m011 - m000*uy_uz; + + k021 = m021 - (m020*uz + 2.0*uy*k011); + k012 = m012 - (uy*m002 + 2.0*uz*k011); + k102 = m102 - (ux*m002 + 2.0*uz*k101); + k201 = m201 - (m200*uz + 2.0*ux*k101 ); + k210 = m210 - (m200*uy + 2.0*ux*k110 ); + k120 = m120 - (ux*m020 + 2.0*uy*k110); + k111 = m111 - (ux_uy_uz + ux*k011 + uy*k101 + uz*k110); + + k121 = m121 - (uz*m120+ 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111); + k112 = m112 - (uy*m102+ 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111); + k211 = m211 - (uz*m210+ 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111); + + + k220 = m220 - ( ux2*m020+ 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210); + k022 = m022 - ( uy2*m002+ 4.0*uy_uz*k011 + 2.0*uy*k012 + uz2*k020 + 2.0*uz*k021); + k202 = m202 - ( ux2*m002+ 4.0*ux_uz*k101 + 2.0*ux*k102 + uz2*k200 + 2.0*uz*k201); + + k221 = m221 - (uz*m220+ + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111 + + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211); + k122 = m122 - (ux*m022 + + 2.0*uy2*uz*k101 + uy2*k102 + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + + 2.0*uy*k112 + uz2*k120 + 2.0*uz*k121); + k212 = m212 - (uy*m202 + + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211); + + k222 = m222 - (ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221); + + //////////////// Central moments to Cumulants \\\\\\\\\\\\\\\\\\\\\\\\\ + + c200 = k200; + c020 = k020; + c002 = k002; + c110 = k110; + c101 = k101; + c011 = k011; + + c021 = k021; + c012 = k012; + c102 = k102; + c201 = k201; + c210 = k210; + c120 = k120; + c111 = k111; + + c121 = k121 - (k020*k101 + 2*k011*k110)/m000; + c211 = k211 - (k200*k011 + 2*k110*k101)/m000; + c112 = k112 - (k002*k110 + 2*k011*k101)/m000; + + c220 = k220 - (k200*k020 + 2*k110*k110)/m000; + c202 = k202 - (k200*k002 + 2*k101*k101)/m000; + c022 = k022 - (k020*k002 + 2*k011*k011)/m000; + + c122 = k122 - (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + c212 = k212 - (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + c221 = k221 - (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + c222 = k222 - (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + + (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + c200_pl_c020_pl_c002 = c200 + c020 + c002; + c200_mi_c020 = c200 - c020; + c200_mi_c002 = c200 - c002; + + c210_pl_c012 = c210+c012; + c210_mi_c012 = c210-c012; + c201_pl_c021 = c201+c021; + c201_mi_c021 = c201-c021; + c120_pl_c102 = c120+c102; + c120_mi_c102 = c120-c102; + + c220_pl_c202_pl_c022 = c220 + c202 + c022; + c220_mi2_c202_pl_c022 = c220 - 2.0*c202 + c022; + c220_pl_c202_mi2_c022 = c220 + c202 - 2.0*c022; + + /////////////////////////// Relaxation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + c110 = c110*(1-w1); + c101 = c101*(1-w1); + c011 = c011*(1-w1); + + c200_mi_c020 = c200_mi_c020*(1-w1); + c200_mi_c002 = c200_mi_c002*(1-w1); + + c200_pl_c020_pl_c002 = c200_pl_c020_pl_c002*(1-w2) + m000*w2; + + c120_pl_c102 = c120_pl_c102*(1-w3); + c210_pl_c012 = c210_pl_c012*(1-w3); + c201_pl_c021 = c201_pl_c021*(1-w3); + + + c120_mi_c102 = c120_mi_c102*(1-w4); + c210_mi_c012 = c210_mi_c012*(1-w4); + c201_mi_c021 = c201_mi_c021*(1-w4); + + c111 = c111*(1-w5); + + c220_mi2_c202_pl_c022 = c220_mi2_c202_pl_c022*(1-w6); + c220_pl_c202_mi2_c022 = c220_pl_c202_mi2_c022*(1-w6); + + c220_pl_c202_pl_c022 = c220_pl_c202_pl_c022*(1-w7); + + c211 = c211*(1-w8); + c121 = c121*(1-w8); + c112 = c112*(1-w8); + + + c221 = c221*(1-w9); + c212 = c212*(1-w9); + c122 = c122*(1-w9); + + c222 = c222*(1-w10); + + + c200 = c1o3 *c200_mi_c020 + c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c020 = -2*c1o3* c200_mi_c020+ c1o3* c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c002 = c1o3 * c200_mi_c020 -2*c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + + c210 = (c210_mi_c012 + c210_pl_c012)*0.5; + c012 = 0.5*(-c210_mi_c012 + c210_pl_c012); + c120 =(c120_mi_c102 + c120_pl_c102)*0.5; + c102 = 0.5*(-c120_mi_c102 + c120_pl_c102); + c201 = (c201_mi_c021 + c201_pl_c021)*0.5; + c021 = 0.5*(-c201_mi_c021 + c201_pl_c021); + + c220 = c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_mi2_c022 + c1o3*c220_pl_c202_pl_c022; + c202 = -c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_pl_c022; + c022 = -c1o3* c220_pl_c202_mi2_c022 + c1o3* c220_pl_c202_pl_c022; + + + ////////////////////// Cumulants to Central moments \\\\\\\\\\\\\\\\\\\\\\\\\ + + k200 = c200; + k020 = c020; + k002 = c002; + k110 = c110; + k101 = c101; + k011 = c011; + + k021 = c021; + k012 = c012; + k102 = c102; + k201 = c201; + k210 = c210; + k120 = c120; + k111 = c111; + + k121 = c121 + (k020*k101 + 2*k011*k110)/m000; + k211 = c211 + (k200*k011 + 2*k110*k101)/m000; + k112 = c112 + (k002*k110 + 2*k011*k101)/m000; + + k220 = c220 + (k200*k020 + 2*k110*k110)/m000; + k202 = c202 + (k200*k002 + 2*k101*k101)/m000; + k022 = c022 + (k020*k002 + 2*k011*k011)/m000; + + k122 = c122 + (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + k212 = c212 + (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + k221 = c221 + (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + k222 = c222 + (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + - (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + /////////////////////////////////////////////////////////////////////////////// + + + m200 = k200 + m000*ux2; + m020 = k020 + m000*uy2; + m002 = k002 + m000*uz2; + m110 = k110 + m000*ux_uy; + m101 = k101 + m000*ux_uz; + m011 = k011 + m000*uy_uz; + + m021 = m020*uz + 2.0*uy*k011 + k021; + m012 = uy*m002 + 2.0*uz*k011 + k012; + m102 = ux*m002 + 2.0*uz*k101 + k102; + m112 = uy*m102 + 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111+k112; + + m201 = m200*uz + 2.0*ux*k101 + k201; + m210 = m200*uy + 2.0*ux*k110 + k210; + m211 = uz*m210 + 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111+k211; + + m120 = ux*m020 + 2.0*uy*k110 + k120; + m121 = uz*m120 + 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111+ k121; + + m111 = ux_uy_uz + ux*k011 + uy*k101 + uz*k110+k111; + + m220 = ux2*m020 + 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210 + k220; + + m221 = uz*m220 + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111+ + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211 + k221; + + m022 = uy2*m002 + 4.0*uy_uz*k011 +2.0*uy*k012+ uz2*k020+ 2.0*uz*k021 + k022; + + m122 = ux*m022 + 2.0*uy2*uz*k101 + uy2*k102 + + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + 2.0*uy*k112 +uz2*k120 + 2.0*uz*k121 + k122; + + m202 = ux2*m002 + 4.0*ux_uz*k101+ 2.0*ux*k102 + uz2*k200+ 2.0*uz*k201 + k202; + + m212 = uy*m202 + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211 + k212; + + m222 = ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221 + k222; + + f1[ZERO] = (-m200 + m220 - m222 + m202 - m020 + m022 - m002 + m000); + f1[E] = 0.5* (m200 - m220 + m222 - m202 - m120 + m122 - m102 +m100); + f1[W] = 0.5* (m200 - m220 + m222 - m202 + m120 - m122 + m102 -m100); + f1[N] = 0.5* (-m210 - m220 + m222 + m212 + m020 - m022 - m012 +m010); + f1[S] = 0.5* (m210 - m220 + m222 - m212 + m020 - m022 + m012 -m010); + f1[T] = 0.5* (m221 + m222 - m201 - m202 - m021 - m022 + m002 +m001); + f1[B] = 0.5* (-m221 + m222 + m201 - m202 + m021 - m022 + m002-m001); + + f1[NE] = 0.25*( m210 + m220- m222 - m212 + m110+ m120- m122 -m112); + f1[SW] = 0.25*(-m210 + m220- m222 + m212 + m110- m120+ m122 -m112); + f1[SE] = 0.25*(-m210 + m220- m222 + m212 - m110+ m120- m122 +m112); + f1[NW] = 0.25*( m210 + m220- m222 - m212 - m110- m120+ m122 + m112); + f1[TE] = 0.25*(-m221 - m222 + m201 + m202 - m121 - m122 + m101 + m102); + f1[BW] = 0.25*( m221 -m222 - m201 + m202 - m121 + m122 + m101 - m102); + f1[BE] = 0.25*(m221 - m222 - m201 + m202 + m121 - m122 - m101 +m102); + f1[TW] = 0.25*(-m221 - m222 + m201 + m202 + m121 + m122 - m101 -m102); + f1[TN] = 0.25*(-m221 - m222 - m211 - m212 + m021 + m022 + m011+m012); + f1[BS] = 0.25*( m221 - m222 - m211 + m212 - m021 + m022 + m011 - m012); + f1[BN] = 0.25*( m221 - m222 + m211 - m212 - m021 + m022 - m011 + m012); + f1[TS] = 0.25*(-m221 - m222 + m211 + m212 + m021 + m022 - m011 -m012); + + f1[TNE]=0.125*( m221 + m222 + m211 + m212 + m121 + m122 + m111 + m112); + f1[BNE]=0.125*(-m221 + m222 -m211 + m212 -m121 + m122 -m111 + m112); + f1[TSE]=0.125*( m221 + m222 - m211 - m212 + m121 + m122 - m111 - m112); + f1[BSE]=0.125*(-m221 + m222 +m211 - m212 -m121 + m122 +m111 - m112); + f1[TNW]=0.125*( m221 + m222 + m211 + m212 - m121 - m122 - m111 - m112); + f1[BNW]=0.125*(-m221 + m222 -m211 + m212 +m121 - m122 +m111 - m112); + f1[TSW]=0.125*( m221 + m222 - m211 - m212 - m121 - m122 + m111 + m112); + f1[BSW]=0.125*(-m221 + m222+m211 - m212+m121 - m122-m111 + m112); + +*/ + ////////////////////////////////////////////////////////////////////////// + //proof correctness + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + LBMReal rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; + + /*LBMReal rho_post = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */ + //LBMReal dif = fabs(rho - rho_post); + LBMReal dif = rho - rho_post; +#ifdef SINGLEPRECISION + if(dif > 10.0E-7 || dif < -10.0E-7) +#else + if(dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post) + +" dif="+UbSystem::toString(dif) + +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3))); + //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + //exit(EXIT_FAILURE); + } +#endif + /* + g[E ] = (f1[E ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[E ] + 0.5*forcingTerm[E ]); + g[N ] = (f1[N ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[N ] + 0.5*forcingTerm[N ]); + g[T ] = (f1[T ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[T ] + 0.5*forcingTerm[T ]); + g[NE ] = (f1[NE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[NE ] + 0.5*forcingTerm[NE ]); + g[NW ] = (f1[NW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[NW ] + 0.5*forcingTerm[NW ]); + g[TE ] = (f1[TE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TE ] + 0.5*forcingTerm[TE ]); + g[TW ] = (f1[TW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TW ] + 0.5*forcingTerm[TW ]); + g[TN ] = (f1[TN ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TN ] + 0.5*forcingTerm[TN ]); + g[TS ] = (f1[TS ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TS ] + 0.5*forcingTerm[TS ]); + g[TNE] = (f1[TNE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TNE] + 0.5*forcingTerm[TNE]); + g[TNW] = (f1[TNW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TNW] + 0.5*forcingTerm[TNW]); + g[TSE] = (f1[TSE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TSE] + 0.5*forcingTerm[TSE]); + g[TSW] = (f1[TSW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TSW] + 0.5*forcingTerm[TSW]); + g[W ] = (f1[W ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[W ] + 0.5*forcingTerm[W ]); + g[S ] = (f1[S ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[S ] + 0.5*forcingTerm[S ]); + g[B ] = (f1[B ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[B ] + 0.5*forcingTerm[B ]); + g[SW ] = (f1[SW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[SW ] + 0.5*forcingTerm[SW ]); + g[SE ] = (f1[SE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[SE ] + 0.5*forcingTerm[SE ]); + g[BW ] = (f1[BW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BW ] + 0.5*forcingTerm[BW ]); + g[BE ] = (f1[BE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BE ] + 0.5*forcingTerm[BE ]); + g[BS ] = (f1[BS ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BS ] + 0.5*forcingTerm[BS ]); + g[BN ] = (f1[BN ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BN ] + 0.5*forcingTerm[BN ]); + g[BSW] = (f1[BSW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BSW] + 0.5*forcingTerm[BSW]); + g[BSE] = (f1[BSE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BSE] + 0.5*forcingTerm[BSE]); + g[BNW] = (f1[BNW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BNW] + 0.5*forcingTerm[BNW]); + g[BNE] = (f1[BNE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BNE] + 0.5*forcingTerm[BNE]); + + g[ZERO] = (f1[ZERO]*c1o3 + (p1 - rho*c1o3)*WEIGTH[ZERO] + 0.5*forcingTerm[ZERO]); + */ + + + mfcbb = (mfcbb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[E ] + 0.5*forcingTerm[E ]); + mfbcb = (mfbcb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[N ] + 0.5*forcingTerm[N ]); + mfbbc = (mfbbc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[T ] + 0.5*forcingTerm[T ]); + mfccb = (mfccb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[NE ] + 0.5*forcingTerm[NE ]); + mfacb = (mfacb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[NW ] + 0.5*forcingTerm[NW ]); + mfcbc = (mfcbc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TE ] + 0.5*forcingTerm[TE ]); + mfabc = (mfabc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TW ] + 0.5*forcingTerm[TW ]); + mfbcc = (mfbcc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TN ] + 0.5*forcingTerm[TN ]); + mfbac = (mfbac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TS ] + 0.5*forcingTerm[TS ]); + mfccc = (mfccc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TNE] + 0.5*forcingTerm[TNE]); + mfacc = (mfacc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TNW] + 0.5*forcingTerm[TNW]); + mfcac = (mfcac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TSE] + 0.5*forcingTerm[TSE]); + mfaac = (mfaac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TSW] + 0.5*forcingTerm[TSW]); + mfabb = (mfabb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[W ] + 0.5*forcingTerm[W ]); + mfbab = (mfbab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[S ] + 0.5*forcingTerm[S ]); + mfbba = (mfbba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[B ] + 0.5*forcingTerm[B ]); + mfaab = (mfaab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[SW ] + 0.5*forcingTerm[SW ]); + mfcab = (mfcab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[SE ] + 0.5*forcingTerm[SE ]); + mfaba = (mfaba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BW ] + 0.5*forcingTerm[BW ]); + mfcba = (mfcba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BE ] + 0.5*forcingTerm[BE ]); + mfbaa = (mfbaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BS ] + 0.5*forcingTerm[BS ]); + mfbca = (mfbca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BN ] + 0.5*forcingTerm[BN ]); + mfaaa = (mfaaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BSW] + 0.5*forcingTerm[BSW]); + mfcaa = (mfcaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BSE] + 0.5*forcingTerm[BSE]); + mfaca = (mfaca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BNW] + 0.5*forcingTerm[BNW]); + mfcca = (mfcca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BNE] + 0.5*forcingTerm[BNE]); + + mfbbb = (mfbbb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[ZERO] + 0.5*forcingTerm[ZERO]); + + + + + LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9; + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal hEq, gEq; + + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; + hEq = phi[ZERO]*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir]; + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = h[dir] - (h[dir] - hEq)/(tauH); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + hEq = phi[ZERO]*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; + h[dir] = h[dir] - (h[dir] - hEq)/(tauH); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + ////////////////////////////////////////////////////////////////////////// + //write distribution + ////////////////////////////////////////////////////////////////////////// + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + (*this->zeroDistributionsF)(x1,x2,x3) = mfbbb; + + + /* + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = g[D3Q27System::INV_E]; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = g[D3Q27System::INV_N]; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = g[D3Q27System::INV_T]; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = g[D3Q27System::INV_NE]; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = g[D3Q27System::INV_NW]; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = g[D3Q27System::INV_TE]; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = g[D3Q27System::INV_TW]; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = g[D3Q27System::INV_TN]; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = g[D3Q27System::INV_TS]; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = g[D3Q27System::INV_TNE]; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = g[D3Q27System::INV_TNW]; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = g[D3Q27System::INV_TSE]; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = g[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = g[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = g[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = g[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = g[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = g[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = g[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = g[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = g[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = g[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = g[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = g[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = g[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = g[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsF)(x1,x2,x3) = g[D3Q27System::ZERO]; + */ + + + (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; + (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; + (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; + (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; + (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; + (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; + (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; + (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; + (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; + (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; + (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; + (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; + (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3 ) = h[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3 ) = h[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3 ) = h[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3 ) = h[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsH)(x1,x2,x3) = h[D3Q27System::ZERO]; + ////////////////////////////////////////////////////////////////////////// + + } + } + } + } + + } +} +////////////////////////////////////////////////////////////////////////// +double MultiphaseCumulantLBMKernel::getCallculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*(phi[k] - phi[ZERO]); + } + return 6.0*sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + DistributionArray3DPtr distributionsH = dataSet->getHdistributions(); + + //const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + //const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + //const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + //if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + /*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/ + + } + } + } + } + //---------------------------------------------------------- + +/* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// +*/ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + phi[ZERO] = (*ph)(x1,x2,x3); + + LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180); + LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } + else + { + /* + if (phi[ZERO] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + + + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + dataSet->getFdistributions()->swap(); + dataSet->getHdistributions()->swap(); + //computePhasefield(); +} \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Final.ast b/apps/cpu/Multiphase/backup/Final.ast new file mode 100644 index 000000000..d1909c7ae --- /dev/null +++ b/apps/cpu/Multiphase/backup/Final.ast @@ -0,0 +1,5042 @@ +solid Mesh + facet normal -0.945841 -0.324629 0.000002 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -190.732468 12.537620 -470.000000 + vertex -190.758972 12.614843 -470.000000 + endloop + endfacet + facet normal -0.913815 -0.406131 -0.000259 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -190.692001 12.446568 -470.000000 + vertex -190.732468 12.537620 -470.000000 + endloop + endfacet + facet normal -0.913813 -0.406134 -0.000259 + outer loop + vertex -190.732468 12.537620 -470.000000 + vertex -190.759033 12.614820 -497.317169 + vertex -190.716019 12.517895 -497.096222 + endloop + endfacet + facet normal -0.913987 -0.405744 0.000002 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -190.758972 12.614843 -470.000000 + vertex -190.829590 12.773918 -470.000000 + endloop + endfacet + facet normal -0.914011 -0.405689 0.000002 + outer loop + vertex -190.829590 12.773918 -470.000000 + vertex -190.833801 12.783269 -497.701202 + vertex -190.759033 12.614820 -497.317169 + endloop + endfacet + facet normal 0.000000 -0.915769 -0.401705 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -90.000000 12.563623 -497.200470 + vertex -90.000000 12.517895 -497.096222 + endloop + endfacet + facet normal 0.000000 -0.915761 -0.401724 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -190.759033 12.614820 -497.317169 + vertex -90.000000 12.563623 -497.200470 + endloop + endfacet + facet normal -0.928601 -0.371080 -0.000154 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -190.555878 12.105928 -470.000000 + vertex -190.692001 12.446568 -470.000000 + endloop + endfacet + facet normal -0.928600 -0.371082 -0.000154 + outer loop + vertex -190.692001 12.446568 -470.000000 + vertex -190.716019 12.517895 -497.096222 + vertex -190.571716 12.156562 -496.543152 + endloop + endfacet + facet normal 0.000000 -0.915773 -0.401697 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -90.000000 12.783269 -497.701202 + vertex -90.000000 12.703794 -497.520020 + endloop + endfacet + facet normal 0.000000 -0.915776 -0.401689 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -190.833801 12.783269 -497.701202 + vertex -90.000000 12.783269 -497.701202 + endloop + endfacet + facet normal -0.904908 -0.425607 -0.000006 + outer loop + vertex -190.833801 12.783269 -497.701202 + vertex -190.829590 12.773918 -470.000000 + vertex -190.871490 12.863006 -470.000000 + endloop + endfacet + facet normal -0.904902 -0.425620 -0.000006 + outer loop + vertex -190.871490 12.863006 -470.000000 + vertex -190.878250 12.877775 -498.018738 + vertex -190.833801 12.783269 -497.701202 + endloop + endfacet + facet normal 0.000000 -0.837180 -0.546928 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -90.000000 12.517895 -497.096222 + vertex -90.000000 12.327077 -496.804138 + endloop + endfacet + facet normal 0.000000 -0.915770 -0.401704 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -90.000000 12.703794 -497.520020 + vertex -90.000000 12.563623 -497.200470 + endloop + endfacet + facet normal 0.000000 -0.837160 -0.546958 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -90.000000 12.327077 -496.804138 + vertex -90.000000 12.156562 -496.543152 + endloop + endfacet + facet normal 0.000000 -0.837171 -0.546942 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -190.716019 12.517895 -497.096222 + vertex -90.000000 12.327077 -496.804138 + endloop + endfacet + facet normal -0.945346 -0.326068 -0.000058 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -190.409958 11.682874 -470.000000 + vertex -190.555878 12.105928 -470.000000 + endloop + endfacet + facet normal -0.945348 -0.326063 -0.000058 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -190.417419 11.709126 -496.057098 + vertex -190.555878 12.105928 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.958450 -0.285260 + outer loop + vertex -190.833801 12.783269 -497.701202 + vertex -90.000000 12.827829 -497.850922 + vertex -90.000000 12.783269 -497.701202 + endloop + endfacet + facet normal 0.000000 -0.958451 -0.285258 + outer loop + vertex -190.833801 12.783269 -497.701202 + vertex -190.878250 12.877775 -498.018738 + vertex -90.000000 12.827829 -497.850922 + endloop + endfacet + facet normal -0.900645 -0.434557 -0.000012 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -190.871490 12.863006 -470.000000 + vertex -190.902206 12.926666 -470.000000 + endloop + endfacet + facet normal -0.900605 -0.434639 -0.000012 + outer loop + vertex -190.902206 12.926666 -470.000000 + vertex -190.910904 12.945445 -498.341614 + vertex -190.878250 12.877775 -498.018738 + endloop + endfacet + facet normal 0.000000 -0.735719 -0.677287 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -90.000000 12.156562 -496.543152 + vertex -90.000000 11.920433 -496.286652 + endloop + endfacet + facet normal -0.962260 -0.272134 0.000001 + outer loop + vertex -190.276031 11.209196 -495.667999 + vertex -190.276001 11.209205 -470.000000 + vertex -190.409958 11.682874 -470.000000 + endloop + endfacet + facet normal -0.962258 -0.272141 0.000001 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -190.276031 11.209196 -495.667999 + vertex -190.409958 11.682874 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.735742 -0.677262 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -90.000000 11.920433 -496.286652 + vertex -90.000000 11.709126 -496.057098 + endloop + endfacet + facet normal 0.000000 -0.735730 -0.677275 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -190.571716 12.156562 -496.543152 + vertex -90.000000 11.920433 -496.286652 + endloop + endfacet + facet normal -0.000072 -0.969398 -0.245496 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -90.000000 12.913538 -498.189362 + vertex -90.000000 12.827829 -497.850922 + endloop + endfacet + facet normal -0.897461 -0.441094 -0.000017 + outer loop + vertex -190.910904 12.945445 -498.341614 + vertex -190.902206 12.926666 -470.000000 + vertex -190.920990 12.964884 -470.000000 + endloop + endfacet + facet normal -0.897547 -0.440920 -0.000017 + outer loop + vertex -190.920990 12.964884 -470.000000 + vertex -190.930923 12.986210 -498.668121 + vertex -190.910904 12.945445 -498.341614 + endloop + endfacet + facet normal 0.000000 -0.978739 -0.205112 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -90.000000 12.945445 -498.341614 + vertex -90.000000 12.913538 -498.189362 + endloop + endfacet + facet normal 0.000000 -0.978735 -0.205128 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -190.910904 12.945445 -498.341614 + vertex -90.000000 12.945445 -498.341614 + endloop + endfacet + facet normal 0.000000 -0.614219 -0.789136 + outer loop + vertex -90.000000 11.709126 -496.057098 + vertex -90.000000 11.472660 -495.873047 + vertex -190.276031 11.209196 -495.667999 + endloop + endfacet + facet normal 0.000000 -0.614201 -0.789149 + outer loop + vertex -90.000000 11.709126 -496.057098 + vertex -190.276031 11.209196 -495.667999 + vertex -190.417419 11.709126 -496.057098 + endloop + endfacet + facet normal -0.986371 -0.164536 0.000001 + outer loop + vertex -190.276031 11.209196 -495.667999 + vertex -190.263336 11.133281 -470.000000 + vertex -190.276001 11.209205 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.992295 -0.123895 + outer loop + vertex -190.910904 12.945445 -498.341614 + vertex -90.000000 12.964661 -498.495514 + vertex -90.000000 12.945445 -498.341614 + endloop + endfacet + facet normal 0.000000 -0.992296 -0.123889 + outer loop + vertex -190.910904 12.945445 -498.341614 + vertex -190.930923 12.986210 -498.668121 + vertex -90.000000 12.964661 -498.495514 + endloop + endfacet + facet normal -0.896136 -0.443780 -0.000020 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -190.920990 12.964884 -470.000000 + vertex -190.927307 12.977640 -470.000000 + endloop + endfacet + facet normal -0.896165 -0.443720 -0.000020 + outer loop + vertex -190.927307 12.977640 -470.000000 + vertex -190.937744 13.000000 -499.000000 + vertex -190.930923 12.986210 -498.668121 + endloop + endfacet + facet normal 0.000000 -0.614203 -0.789148 + outer loop + vertex -90.000000 11.472660 -495.873047 + vertex -90.000000 11.197916 -495.659210 + vertex -190.276031 11.209196 -495.667999 + endloop + endfacet + facet normal -0.961940 -0.273261 -0.000332 + outer loop + vertex -190.269958 11.187792 -495.651337 + vertex -190.257584 11.113030 -470.000000 + vertex -190.263336 11.133281 -470.000000 + endloop + endfacet + facet normal -0.961959 -0.273194 -0.000332 + outer loop + vertex -190.276031 11.209196 -495.667999 + vertex -190.269958 11.187792 -495.651337 + vertex -190.263336 11.133281 -470.000000 + endloop + endfacet + facet normal -0.000072 -0.996585 -0.082575 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -90.000000 12.993500 -498.843567 + vertex -90.000000 12.964661 -498.495514 + endloop + endfacet + facet normal 0.000000 -0.999138 -0.041517 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -90.000000 13.000000 -499.000000 + vertex -90.000000 12.993500 -498.843567 + endloop + endfacet + facet normal 0.000000 -0.999138 -0.041516 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -190.937744 13.000000 -499.000000 + vertex -90.000000 13.000000 -499.000000 + endloop + endfacet + facet normal -0.879513 -0.475874 -0.000050 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -190.927307 12.977640 -470.000000 + vertex -190.968414 13.053615 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.613899 -0.789384 + outer loop + vertex -90.000000 11.197916 -495.659210 + vertex -90.000000 11.187792 -495.651337 + vertex -190.269958 11.187792 -495.651337 + endloop + endfacet + facet normal 0.000000 -0.614281 -0.789087 + outer loop + vertex -90.000000 11.197916 -495.659210 + vertex -190.269958 11.187792 -495.651337 + vertex -190.276031 11.209196 -495.667999 + endloop + endfacet + facet normal -0.977484 -0.211011 -0.000143 + outer loop + vertex -190.144592 10.606782 -495.336914 + vertex -190.138763 10.562610 -470.000000 + vertex -190.257584 11.113030 -470.000000 + endloop + endfacet + facet normal -0.977488 -0.210993 -0.000143 + outer loop + vertex -190.269958 11.187792 -495.651337 + vertex -190.144592 10.606782 -495.336914 + vertex -190.257584 11.113030 -470.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -90.000000 13.000000 -499.942719 + vertex -90.000000 13.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -190.937744 13.000000 -501.000000 + vertex -90.000000 13.000000 -499.942719 + endloop + endfacet + facet normal -0.868067 -0.496447 0.000000 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -190.968414 13.053615 -470.000000 + vertex -190.970398 13.057083 -470.000000 + endloop + endfacet + facet normal -0.868015 -0.496539 0.000000 + outer loop + vertex -190.970398 13.057083 -470.000000 + vertex -190.937744 13.000000 -501.000000 + vertex -190.937744 13.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 -0.475973 -0.879460 + outer loop + vertex -90.000000 11.187792 -495.651337 + vertex -90.000000 10.881607 -495.485626 + vertex -190.269958 11.187792 -495.651337 + endloop + endfacet + facet normal -0.989593 -0.143898 -0.000024 + outer loop + vertex -190.053726 9.981941 -495.122406 + vertex -190.052567 9.969829 -470.000000 + vertex -190.138763 10.562610 -470.000000 + endloop + endfacet + facet normal -0.989590 -0.143917 -0.000023 + outer loop + vertex -190.144592 10.606782 -495.336914 + vertex -190.053726 9.981941 -495.122406 + vertex -190.138763 10.562610 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.475908 -0.879495 + outer loop + vertex -90.000000 10.881607 -495.485626 + vertex -90.000000 10.606782 -495.336914 + vertex -190.144592 10.606782 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.475942 -0.879476 + outer loop + vertex -90.000000 10.881607 -495.485626 + vertex -190.144592 10.606782 -495.336914 + vertex -190.269958 11.187792 -495.651337 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -90.000000 13.000000 -501.000000 + vertex -90.000000 13.000000 -499.942719 + endloop + endfacet + facet normal -0.868001 -0.496562 0.000000 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -190.970398 13.057083 -470.000000 + vertex -191.465500 13.922533 -470.000000 + endloop + endfacet + facet normal -0.868002 -0.496561 0.000000 + outer loop + vertex -191.465500 13.922533 -530.000000 + vertex -190.968414 13.053615 -530.000000 + vertex -190.937744 13.000000 -501.000000 + endloop + endfacet + facet normal -0.868002 -0.496560 0.000000 + outer loop + vertex -191.465500 13.922533 -470.000000 + vertex -191.465500 13.922533 -530.000000 + vertex -190.937744 13.000000 -501.000000 + endloop + endfacet + facet normal -0.995390 -0.095910 0.000000 + outer loop + vertex -190.030731 9.743214 -495.069641 + vertex -190.030731 9.743214 -470.000000 + vertex -190.052567 9.969829 -470.000000 + endloop + endfacet + facet normal -0.995393 -0.095879 0.000000 + outer loop + vertex -190.053726 9.981941 -495.122406 + vertex -190.030731 9.743214 -495.069641 + vertex -190.052567 9.969829 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.324699 -0.945817 + outer loop + vertex -90.000000 10.277694 -495.223938 + vertex -90.000000 9.981941 -495.122406 + vertex -190.053726 9.981941 -495.122406 + endloop + endfacet + facet normal 0.000000 -0.324699 -0.945817 + outer loop + vertex -90.000000 10.277694 -495.223938 + vertex -190.053726 9.981941 -495.122406 + vertex -190.144592 10.606782 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.324699 -0.945817 + outer loop + vertex -90.000000 10.606782 -495.336914 + vertex -90.000000 10.277694 -495.223938 + vertex -190.144592 10.606782 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.999143 0.041403 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -90.000000 12.993538 -501.155945 + vertex -90.000000 13.000000 -501.000000 + endloop + endfacet + facet normal 0.000000 -0.999143 0.041401 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -190.930969 12.986291 -501.330841 + vertex -90.000000 13.000000 -501.000000 + endloop + endfacet + facet normal -0.895361 -0.445340 0.000124 + outer loop + vertex -190.968414 13.053615 -530.000000 + vertex -190.961700 13.040116 -530.000000 + vertex -190.930969 12.986291 -501.330841 + endloop + endfacet + facet normal -0.895315 -0.445434 0.000123 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -190.968414 13.053615 -530.000000 + vertex -190.930969 12.986291 -501.330841 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -191.465500 13.922533 -530.000000 + vertex -191.465500 13.922533 -470.000000 + vertex -191.894608 14.473844 -470.000000 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -191.949387 14.544223 -530.000000 + vertex -191.465500 13.922533 -530.000000 + vertex -191.894608 14.473844 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.215817 -0.976434 + outer loop + vertex -90.000000 9.981941 -495.122406 + vertex -190.030731 9.743214 -495.069641 + vertex -190.053726 9.981941 -495.122406 + endloop + endfacet + facet normal 0.000000 -0.215851 -0.976426 + outer loop + vertex -90.000000 9.981941 -495.122406 + vertex -90.000000 9.868878 -495.097412 + vertex -190.030731 9.743214 -495.069641 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -190.030731 9.743214 -495.069641 + vertex -190.030731 9.667943 -470.000000 + vertex -190.030731 9.743214 -470.000000 + endloop + endfacet + facet normal -0.000072 -0.996585 0.082575 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -90.000000 12.964699 -501.503998 + vertex -90.000000 12.993538 -501.155945 + endloop + endfacet + facet normal -0.897115 -0.441797 0.000132 + outer loop + vertex -190.961700 13.040116 -530.000000 + vertex -190.942444 13.001014 -530.000000 + vertex -190.910904 12.945445 -501.658386 + endloop + endfacet + facet normal -0.897128 -0.441770 0.000132 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -190.961700 13.040116 -530.000000 + vertex -190.910904 12.945445 -501.658386 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -191.949387 14.544223 -530.000000 + vertex -191.894608 14.473844 -470.000000 + vertex -192.378494 15.095533 -470.000000 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -192.378494 15.095533 -530.000000 + vertex -191.949387 14.544223 -530.000000 + vertex -192.378494 15.095533 -470.000000 + endloop + endfacet + facet normal -0.000106 -0.134402 -0.990927 + outer loop + vertex -90.000000 9.868878 -495.097412 + vertex -190.006058 9.330317 -495.013641 + vertex -190.030731 9.743214 -495.069641 + endloop + endfacet + facet normal -0.000107 -0.134359 -0.990933 + outer loop + vertex -90.000000 9.868878 -495.097412 + vertex -90.000000 9.673287 -495.070892 + vertex -190.006058 9.330317 -495.013641 + endloop + endfacet + facet normal -0.998219 -0.059664 -0.000179 + outer loop + vertex -190.006058 9.330317 -495.013641 + vertex -190.007309 9.276071 -470.000000 + vertex -190.030731 9.667943 -470.000000 + endloop + endfacet + facet normal -0.998218 -0.059675 -0.000179 + outer loop + vertex -190.030731 9.743214 -495.069641 + vertex -190.006058 9.330317 -495.013641 + vertex -190.030731 9.667943 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.992313 0.123751 + outer loop + vertex -190.910904 12.945445 -501.658386 + vertex -90.000000 12.945445 -501.658386 + vertex -90.000000 12.964699 -501.503998 + endloop + endfacet + facet normal 0.000000 -0.992314 0.123745 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -190.910904 12.945445 -501.658386 + vertex -90.000000 12.964699 -501.503998 + endloop + endfacet + facet normal -0.900340 -0.435187 0.000149 + outer loop + vertex -190.942444 13.001014 -530.000000 + vertex -190.910950 12.935857 -530.000000 + vertex -190.877899 12.877043 -501.984131 + endloop + endfacet + facet normal -0.900362 -0.435142 0.000149 + outer loop + vertex -190.910904 12.945445 -501.658386 + vertex -190.942444 13.001014 -530.000000 + vertex -190.877899 12.877043 -501.984131 + endloop + endfacet + facet normal -0.677284 -0.735722 0.000000 + outer loop + vertex -192.892487 15.568697 -470.000000 + vertex -192.958099 15.629101 -530.000000 + vertex -192.378494 15.095533 -530.000000 + endloop + endfacet + facet normal -0.677282 -0.735724 0.000000 + outer loop + vertex -192.378494 15.095533 -470.000000 + vertex -192.892487 15.568697 -470.000000 + vertex -192.378494 15.095533 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.164649 -0.986352 + outer loop + vertex -90.000000 9.673287 -495.070892 + vertex -90.000000 9.330317 -495.013641 + vertex -190.006058 9.330317 -495.013641 + endloop + endfacet + facet normal -0.999830 -0.018425 -0.000090 + outer loop + vertex -190.000000 9.001518 -495.000000 + vertex -190.001556 8.963905 -470.000000 + vertex -190.007309 9.276071 -470.000000 + endloop + endfacet + facet normal -0.999830 -0.018424 -0.000090 + outer loop + vertex -190.006058 9.330317 -495.013641 + vertex -190.000000 9.001518 -495.000000 + vertex -190.007309 9.276071 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.978657 0.205501 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -90.000000 12.913193 -501.811981 + vertex -90.000000 12.945445 -501.658386 + endloop + endfacet + facet normal 0.000000 -0.978656 0.205505 + outer loop + vertex -190.910904 12.945445 -501.658386 + vertex -190.877899 12.877043 -501.984131 + vertex -90.000000 12.945445 -501.658386 + endloop + endfacet + facet normal -0.904717 -0.426013 0.000173 + outer loop + vertex -190.910950 12.935857 -530.000000 + vertex -190.868958 12.846679 -530.000000 + vertex -190.833801 12.783269 -502.298767 + endloop + endfacet + facet normal -0.904710 -0.426027 0.000173 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -190.910950 12.935857 -530.000000 + vertex -190.833801 12.783269 -502.298767 + endloop + endfacet + facet normal -0.677282 -0.735724 0.000000 + outer loop + vertex -193.472092 16.102264 -470.000000 + vertex -193.472092 16.102264 -530.000000 + vertex -192.958099 15.629101 -530.000000 + endloop + endfacet + facet normal -0.677284 -0.735722 0.000000 + outer loop + vertex -192.892487 15.568697 -470.000000 + vertex -193.472092 16.102264 -470.000000 + vertex -192.958099 15.629101 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.041453 -0.999140 + outer loop + vertex -90.000000 9.330317 -495.013641 + vertex -190.000000 9.001518 -495.000000 + vertex -190.006058 9.330317 -495.013641 + endloop + endfacet + facet normal 0.000000 -0.041504 -0.999138 + outer loop + vertex -90.000000 9.330317 -495.013641 + vertex -90.000000 9.174570 -495.007172 + vertex -190.000000 9.001518 -495.000000 + endloop + endfacet + facet normal -0.999833 0.018254 -0.000035 + outer loop + vertex -190.000000 9.001518 -495.000000 + vertex -190.007309 8.648817 -470.000000 + vertex -190.001556 8.963905 -470.000000 + endloop + endfacet + facet normal -0.999833 0.018254 -0.000035 + outer loop + vertex -190.000000 9.001518 -495.000000 + vertex -190.006058 8.669682 -495.013641 + vertex -190.007309 8.648817 -470.000000 + endloop + endfacet + facet normal -0.000072 -0.969398 0.245496 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -90.000000 12.827484 -502.150421 + vertex -90.000000 12.913193 -501.811981 + endloop + endfacet + facet normal 0.000000 -0.958338 0.285637 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -90.000000 12.783269 -502.298767 + vertex -90.000000 12.827484 -502.150421 + endloop + endfacet + facet normal 0.000000 -0.958342 0.285623 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -190.833801 12.783269 -502.298767 + vertex -90.000000 12.827484 -502.150421 + endloop + endfacet + facet normal -0.913816 -0.406128 0.000230 + outer loop + vertex -190.868958 12.846679 -530.000000 + vertex -190.797836 12.686651 -530.000000 + vertex -190.759033 12.614820 -502.682800 + endloop + endfacet + facet normal -0.913815 -0.406131 0.000230 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -190.868958 12.846679 -530.000000 + vertex -190.759033 12.614820 -502.682800 + endloop + endfacet + facet normal -0.546945 -0.837169 0.000000 + outer loop + vertex -194.056946 16.484375 -470.000000 + vertex -194.131622 16.533154 -530.000000 + vertex -193.472092 16.102264 -530.000000 + endloop + endfacet + facet normal -0.546955 -0.837162 0.000000 + outer loop + vertex -193.472092 16.102264 -470.000000 + vertex -194.056946 16.484375 -470.000000 + vertex -193.472092 16.102264 -530.000000 + endloop + endfacet + facet normal -0.000143 0.041077 -0.999156 + outer loop + vertex -90.000000 9.017395 -495.013641 + vertex -190.006058 8.669682 -495.013641 + vertex -190.000000 9.001518 -495.000000 + endloop + endfacet + facet normal -0.000143 0.041128 -0.999154 + outer loop + vertex -90.000000 9.174570 -495.007172 + vertex -90.000000 9.017395 -495.013641 + vertex -190.000000 9.001518 -495.000000 + endloop + endfacet + facet normal -0.998220 0.059639 0.000000 + outer loop + vertex -190.006058 8.669682 -495.013641 + vertex -190.030731 8.256785 -470.000000 + vertex -190.007309 8.648817 -470.000000 + endloop + endfacet + facet normal -0.998219 0.059651 0.000000 + outer loop + vertex -190.006058 8.669682 -495.013641 + vertex -190.030731 8.256785 -495.069641 + vertex -190.030731 8.256785 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.915789 0.401660 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -90.000000 12.643049 -502.618469 + vertex -90.000000 12.783269 -502.298767 + endloop + endfacet + facet normal 0.000000 -0.915764 0.401717 + outer loop + vertex -190.759033 12.614820 -502.682800 + vertex -90.000000 12.563623 -502.799530 + vertex -90.000000 12.643049 -502.618469 + endloop + endfacet + facet normal 0.000000 -0.915776 0.401689 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -190.759033 12.614820 -502.682800 + vertex -90.000000 12.643049 -502.618469 + endloop + endfacet + facet normal -0.879455 -0.475982 -0.000002 + outer loop + vertex -190.797836 12.686651 -530.000000 + vertex -190.758972 12.614843 -530.000000 + vertex -190.759033 12.614820 -502.682800 + endloop + endfacet + facet normal -0.546955 -0.837162 0.000000 + outer loop + vertex -194.716476 16.915264 -470.000000 + vertex -194.716476 16.915264 -530.000000 + vertex -194.131622 16.533154 -530.000000 + endloop + endfacet + facet normal -0.546945 -0.837169 0.000000 + outer loop + vertex -194.056946 16.484375 -470.000000 + vertex -194.716476 16.915264 -470.000000 + vertex -194.131622 16.533154 -530.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -190.006058 8.669682 -495.013641 + vertex -90.000000 9.017395 -495.013641 + vertex -90.000000 8.669682 -495.013641 + endloop + endfacet + facet normal 0.000000 0.134396 -0.990928 + outer loop + vertex -90.000000 8.474131 -495.040161 + vertex -190.030731 8.256785 -495.069641 + vertex -190.006058 8.669682 -495.013641 + endloop + endfacet + facet normal 0.000000 0.134386 -0.990929 + outer loop + vertex -90.000000 8.669682 -495.013641 + vertex -90.000000 8.474131 -495.040161 + vertex -190.006058 8.669682 -495.013641 + endloop + endfacet + facet normal -0.986359 0.164606 0.000000 + outer loop + vertex -190.030731 8.256785 -495.069641 + vertex -190.043121 8.182541 -470.000000 + vertex -190.030731 8.256785 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.915813 0.401606 + outer loop + vertex -190.716019 12.517895 -502.903809 + vertex -90.000000 12.517895 -502.903809 + vertex -90.000000 12.563623 -502.799530 + endloop + endfacet + facet normal 0.000000 -0.915801 0.401631 + outer loop + vertex -190.759033 12.614820 -502.682800 + vertex -190.716019 12.517895 -502.903809 + vertex -90.000000 12.563623 -502.799530 + endloop + endfacet + facet normal -0.914051 -0.405598 -0.000002 + outer loop + vertex -190.758972 12.614843 -530.000000 + vertex -190.718307 12.523202 -530.000000 + vertex -190.716019 12.517895 -502.903809 + endloop + endfacet + facet normal -0.914034 -0.405637 -0.000002 + outer loop + vertex -190.759033 12.614820 -502.682800 + vertex -190.758972 12.614843 -530.000000 + vertex -190.716019 12.517895 -502.903809 + endloop + endfacet + facet normal -0.401696 -0.915773 0.000000 + outer loop + vertex -195.356247 17.195898 -470.000000 + vertex -195.437927 17.231722 -530.000000 + vertex -194.716476 16.915264 -530.000000 + endloop + endfacet + facet normal -0.401701 -0.915771 0.000000 + outer loop + vertex -194.716476 16.915264 -470.000000 + vertex -195.356247 17.195898 -470.000000 + vertex -194.716476 16.915264 -530.000000 + endloop + endfacet + facet normal -0.000181 0.215833 -0.976430 + outer loop + vertex -90.000000 8.361105 -495.065155 + vertex -190.053726 8.018058 -495.122406 + vertex -190.030731 8.256785 -495.069641 + endloop + endfacet + facet normal -0.000181 0.215918 -0.976411 + outer loop + vertex -90.000000 8.474131 -495.040161 + vertex -90.000000 8.361105 -495.065155 + vertex -190.030731 8.256785 -495.069641 + endloop + endfacet + facet normal -0.995390 0.095915 -0.000208 + outer loop + vertex -190.030731 8.256785 -495.069641 + vertex -190.064972 7.955779 -470.000000 + vertex -190.043121 8.182541 -470.000000 + endloop + endfacet + facet normal -0.995389 0.095925 -0.000208 + outer loop + vertex -190.030731 8.256785 -495.069641 + vertex -190.053726 8.018058 -495.122406 + vertex -190.064972 7.955779 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.837147 0.546978 + outer loop + vertex -190.571716 12.156562 -503.456818 + vertex -90.000000 12.347251 -503.164978 + vertex -90.000000 12.517895 -502.903809 + endloop + endfacet + facet normal 0.000000 -0.837143 0.546984 + outer loop + vertex -190.716019 12.517895 -502.903809 + vertex -190.571716 12.156562 -503.456818 + vertex -90.000000 12.517895 -502.903809 + endloop + endfacet + facet normal -0.928683 -0.370874 0.000006 + outer loop + vertex -190.718307 12.523202 -530.000000 + vertex -190.581680 12.181082 -530.000000 + vertex -190.571716 12.156562 -503.456818 + endloop + endfacet + facet normal -0.928678 -0.370887 0.000006 + outer loop + vertex -190.716019 12.517895 -502.903809 + vertex -190.718307 12.523202 -530.000000 + vertex -190.571716 12.156562 -503.456818 + endloop + endfacet + facet normal -0.401701 -0.915771 0.000000 + outer loop + vertex -196.077698 17.512356 -470.000000 + vertex -196.077698 17.512356 -530.000000 + vertex -195.437927 17.231722 -530.000000 + endloop + endfacet + facet normal -0.401696 -0.915773 0.000000 + outer loop + vertex -195.356247 17.195898 -470.000000 + vertex -196.077698 17.512356 -470.000000 + vertex -195.437927 17.231722 -530.000000 + endloop + endfacet + facet normal 0.000000 0.164613 -0.986358 + outer loop + vertex -90.000000 8.361105 -495.065155 + vertex -90.000000 8.018058 -495.122406 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal -0.989587 0.143938 -0.000087 + outer loop + vertex -190.053726 8.018058 -495.122406 + vertex -190.144592 7.393218 -495.336914 + vertex -190.151291 7.362395 -470.000000 + endloop + endfacet + facet normal -0.989584 0.143954 -0.000086 + outer loop + vertex -190.053726 8.018058 -495.122406 + vertex -190.151291 7.362395 -470.000000 + vertex -190.064972 7.955779 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.837139 0.546990 + outer loop + vertex -190.571716 12.156562 -503.456818 + vertex -90.000000 12.156562 -503.456818 + vertex -90.000000 12.347251 -503.164978 + endloop + endfacet + facet normal -0.945350 -0.326059 0.000054 + outer loop + vertex -190.581680 12.181082 -530.000000 + vertex -190.417419 11.709126 -503.942902 + vertex -190.571716 12.156562 -503.456818 + endloop + endfacet + facet normal -0.945351 -0.326054 0.000054 + outer loop + vertex -190.581680 12.181082 -530.000000 + vertex -190.435318 11.756723 -530.000000 + vertex -190.417419 11.709126 -503.942902 + endloop + endfacet + facet normal -0.245483 -0.969401 0.000000 + outer loop + vertex -196.754944 17.683857 -470.000000 + vertex -196.841400 17.705750 -530.000000 + vertex -196.077698 17.512356 -530.000000 + endloop + endfacet + facet normal -0.245484 -0.969401 0.000000 + outer loop + vertex -196.077698 17.512356 -470.000000 + vertex -196.754944 17.683857 -470.000000 + vertex -196.077698 17.512356 -530.000000 + endloop + endfacet + facet normal 0.000000 0.324667 -0.945828 + outer loop + vertex -90.000000 8.018058 -495.122406 + vertex -90.000000 7.689111 -495.235321 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal -0.977242 0.212130 0.000000 + outer loop + vertex -190.144592 7.393218 -495.336914 + vertex -190.270752 6.812060 -470.000000 + vertex -190.151291 7.362395 -470.000000 + endloop + endfacet + facet normal -0.977241 0.212134 0.000000 + outer loop + vertex -190.144592 7.393218 -495.336914 + vertex -190.270493 6.813230 -495.653198 + vertex -190.270752 6.812060 -470.000000 + endloop + endfacet + facet normal 0.000000 0.324700 -0.945817 + outer loop + vertex -90.000000 7.393218 -495.336914 + vertex -190.144592 7.393218 -495.336914 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal 0.000000 0.324736 -0.945805 + outer loop + vertex -90.000000 7.689111 -495.235321 + vertex -90.000000 7.393218 -495.336914 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal 0.000000 -0.735737 0.677268 + outer loop + vertex -190.417419 11.709126 -503.942902 + vertex -90.000000 11.945083 -503.686554 + vertex -90.000000 12.156562 -503.456818 + endloop + endfacet + facet normal 0.000000 -0.735751 0.677253 + outer loop + vertex -190.571716 12.156562 -503.456818 + vertex -190.417419 11.709126 -503.942902 + vertex -90.000000 12.156562 -503.456818 + endloop + endfacet + facet normal -0.961883 -0.273460 0.000161 + outer loop + vertex -190.435318 11.756723 -530.000000 + vertex -190.275406 11.209369 -504.334442 + vertex -190.417419 11.709126 -503.942902 + endloop + endfacet + facet normal -0.961882 -0.273466 0.000161 + outer loop + vertex -190.435318 11.756723 -530.000000 + vertex -190.300400 11.282166 -530.000000 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.245484 -0.969401 0.000000 + outer loop + vertex -197.518646 17.877251 -470.000000 + vertex -197.518646 17.877251 -530.000000 + vertex -196.841400 17.705750 -530.000000 + endloop + endfacet + facet normal -0.245483 -0.969401 0.000000 + outer loop + vertex -196.754944 17.683857 -470.000000 + vertex -197.518646 17.877251 -470.000000 + vertex -196.841400 17.705750 -530.000000 + endloop + endfacet + facet normal -0.977221 0.212222 0.000000 + outer loop + vertex -190.270493 6.813230 -495.653198 + vertex -190.275406 6.790630 -470.000000 + vertex -190.270752 6.812060 -470.000000 + endloop + endfacet + facet normal -0.977173 0.212444 0.000000 + outer loop + vertex -190.270493 6.813230 -495.653198 + vertex -190.275406 6.790630 -495.665527 + vertex -190.275406 6.790630 -470.000000 + endloop + endfacet + facet normal 0.000011 0.478766 -0.877943 + outer loop + vertex -90.000000 6.812691 -495.652222 + vertex -190.270493 6.813230 -495.653198 + vertex -190.144592 7.393218 -495.336914 + endloop + endfacet + facet normal 0.000011 0.478802 -0.877923 + outer loop + vertex -90.000000 7.087213 -495.502502 + vertex -90.000000 6.812691 -495.652222 + vertex -190.144592 7.393218 -495.336914 + endloop + endfacet + facet normal 0.000000 0.475919 -0.879489 + outer loop + vertex -90.000000 7.393218 -495.336914 + vertex -90.000000 7.087213 -495.502502 + vertex -190.144592 7.393218 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.735763 0.677239 + outer loop + vertex -190.417419 11.709126 -503.942902 + vertex -90.000000 11.709126 -503.942902 + vertex -90.000000 11.945083 -503.686554 + endloop + endfacet + facet normal -0.000011 -0.616727 0.787177 + outer loop + vertex -90.000000 11.434198 -504.156891 + vertex -190.417419 11.709126 -503.942902 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.000011 -0.616734 0.787171 + outer loop + vertex -90.000000 11.197998 -504.341949 + vertex -90.000000 11.434198 -504.156891 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.945806 -0.324731 0.000000 + outer loop + vertex -190.300400 11.282166 -530.000000 + vertex -190.275406 11.209369 -530.000000 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.082581 -0.996584 0.000000 + outer loop + vertex -198.214890 17.934942 -470.000000 + vertex -198.303757 17.942308 -530.000000 + vertex -197.518646 17.877251 -530.000000 + endloop + endfacet + facet normal -0.082578 -0.996585 0.000000 + outer loop + vertex -197.518646 17.877251 -470.000000 + vertex -198.214890 17.934942 -470.000000 + vertex -197.518646 17.877251 -530.000000 + endloop + endfacet + facet normal 0.000011 0.478910 -0.877864 + outer loop + vertex -90.000000 6.802001 -495.658051 + vertex -190.275406 6.790630 -495.665527 + vertex -190.270493 6.813230 -495.653198 + endloop + endfacet + facet normal 0.000011 0.478731 -0.877961 + outer loop + vertex -90.000000 6.812691 -495.652222 + vertex -90.000000 6.802001 -495.658051 + vertex -190.270493 6.813230 -495.653198 + endloop + endfacet + facet normal -0.945806 0.324731 0.000000 + outer loop + vertex -190.275406 6.790630 -495.665527 + vertex -190.300400 6.717834 -470.000000 + vertex -190.275406 6.790630 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.614221 0.789134 + outer loop + vertex -90.000000 11.434198 -504.156891 + vertex -90.000000 11.709126 -503.942902 + vertex -190.417419 11.709126 -503.942902 + endloop + endfacet + facet normal 0.000011 -0.479830 0.877361 + outer loop + vertex -90.000000 11.197998 -504.341949 + vertex -190.275406 11.209369 -504.334442 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal 0.000011 -0.480660 0.876907 + outer loop + vertex -90.000000 11.187308 -504.347809 + vertex -90.000000 11.197998 -504.341949 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal -0.977172 -0.212448 0.000000 + outer loop + vertex -190.275406 11.209369 -530.000000 + vertex -190.270493 11.186769 -504.346802 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.977221 -0.212222 0.000000 + outer loop + vertex -190.275406 11.209369 -530.000000 + vertex -190.270752 11.187939 -530.000000 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal -0.082578 -0.996585 0.000000 + outer loop + vertex -199.000000 18.000000 -470.000000 + vertex -199.000000 18.000000 -530.000000 + vertex -198.303757 17.942308 -530.000000 + endloop + endfacet + facet normal -0.082581 -0.996584 0.000000 + outer loop + vertex -198.214890 17.934942 -470.000000 + vertex -199.000000 18.000000 -470.000000 + vertex -198.303757 17.942308 -530.000000 + endloop + endfacet + facet normal -0.000011 0.616756 -0.787154 + outer loop + vertex -90.000000 6.565801 -495.843109 + vertex -190.417419 6.290874 -496.057098 + vertex -190.275406 6.790630 -495.665527 + endloop + endfacet + facet normal -0.000011 0.616734 -0.787171 + outer loop + vertex -90.000000 6.802001 -495.658051 + vertex -90.000000 6.565801 -495.843109 + vertex -190.275406 6.790630 -495.665527 + endloop + endfacet + facet normal -0.961882 0.273466 -0.000161 + outer loop + vertex -190.275406 6.790630 -495.665527 + vertex -190.435318 6.243276 -470.000000 + vertex -190.300400 6.717834 -470.000000 + endloop + endfacet + facet normal -0.961883 0.273460 -0.000161 + outer loop + vertex -190.275406 6.790630 -495.665527 + vertex -190.417419 6.290874 -496.057098 + vertex -190.435318 6.243276 -470.000000 + endloop + endfacet + facet normal 0.000011 -0.478801 0.877923 + outer loop + vertex -90.000000 11.187308 -504.347809 + vertex -190.270493 11.186769 -504.346802 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal 0.000011 -0.478802 0.877923 + outer loop + vertex -90.000000 10.912786 -504.497528 + vertex -90.000000 11.187308 -504.347809 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal -0.977241 -0.212134 0.000000 + outer loop + vertex -190.270752 11.187939 -530.000000 + vertex -190.144592 10.606782 -504.663116 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal -0.977241 -0.212130 0.000000 + outer loop + vertex -190.270752 11.187939 -530.000000 + vertex -190.151291 10.637605 -530.000000 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -199.000000 18.000000 -470.000000 + vertex -199.940002 18.000000 -530.000000 + vertex -199.000000 18.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -200.059998 18.000000 -470.000000 + vertex -199.940002 18.000000 -530.000000 + vertex -199.000000 18.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 0.614221 -0.789134 + outer loop + vertex -90.000000 6.565801 -495.843109 + vertex -90.000000 6.290874 -496.057098 + vertex -190.417419 6.290874 -496.057098 + endloop + endfacet + facet normal -0.945351 0.326054 -0.000054 + outer loop + vertex -190.417419 6.290874 -496.057098 + vertex -190.581680 5.818917 -470.000000 + vertex -190.435318 6.243276 -470.000000 + endloop + endfacet + facet normal -0.945349 0.326059 -0.000054 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -190.581680 5.818917 -470.000000 + vertex -190.417419 6.290874 -496.057098 + endloop + endfacet + facet normal 0.000000 -0.475920 0.879489 + outer loop + vertex -90.000000 10.606782 -504.663116 + vertex -90.000000 10.912786 -504.497528 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal -0.989587 -0.143938 0.000087 + outer loop + vertex -190.151291 10.637605 -530.000000 + vertex -190.053726 9.981941 -504.877625 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal -0.989584 -0.143954 0.000086 + outer loop + vertex -190.151291 10.637605 -530.000000 + vertex -190.064972 10.044221 -530.000000 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -200.059998 18.000000 -470.000000 + vertex -201.000000 18.000000 -530.000000 + vertex -199.940002 18.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -201.000000 18.000000 -470.000000 + vertex -201.000000 18.000000 -530.000000 + vertex -200.059998 18.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 0.735722 -0.677283 + outer loop + vertex -190.417419 6.290874 -496.057098 + vertex -90.000000 6.290874 -496.057098 + vertex -90.000000 6.054916 -496.313416 + endloop + endfacet + facet normal -0.928683 0.370874 -0.000006 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -190.718307 5.476798 -470.000000 + vertex -190.581680 5.818917 -470.000000 + endloop + endfacet + facet normal -0.928678 0.370887 -0.000006 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -190.718307 5.476798 -470.000000 + vertex -190.571716 5.843437 -496.543152 + endloop + endfacet + facet normal 0.000000 0.735737 -0.677267 + outer loop + vertex -190.417419 6.290874 -496.057098 + vertex -90.000000 6.054916 -496.313416 + vertex -90.000000 5.843437 -496.543152 + endloop + endfacet + facet normal 0.000000 0.735729 -0.677275 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -190.417419 6.290874 -496.057098 + vertex -90.000000 5.843437 -496.543152 + endloop + endfacet + facet normal 0.000000 -0.324699 0.945817 + outer loop + vertex -90.000000 10.606782 -504.663116 + vertex -190.144592 10.606782 -504.663116 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal 0.000000 -0.324735 0.945805 + outer loop + vertex -90.000000 10.310888 -504.764709 + vertex -90.000000 10.606782 -504.663116 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal -0.995389 -0.095925 0.000208 + outer loop + vertex -190.064972 10.044221 -530.000000 + vertex -190.030731 9.743214 -504.930389 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal -0.995390 -0.095914 0.000208 + outer loop + vertex -190.064972 10.044221 -530.000000 + vertex -190.043121 9.817457 -530.000000 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal 0.082581 -0.996584 0.000000 + outer loop + vertex -201.696243 17.942308 -470.000000 + vertex -201.785110 17.934942 -530.000000 + vertex -201.000000 18.000000 -530.000000 + endloop + endfacet + facet normal 0.082578 -0.996585 0.000000 + outer loop + vertex -201.000000 18.000000 -470.000000 + vertex -201.696243 17.942308 -470.000000 + vertex -201.000000 18.000000 -530.000000 + endloop + endfacet + facet normal -0.914052 0.405597 0.000002 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -190.758972 5.385156 -470.000000 + vertex -190.718307 5.476798 -470.000000 + endloop + endfacet + facet normal -0.914034 0.405637 0.000002 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.758972 5.385156 -470.000000 + vertex -190.716019 5.482105 -497.096222 + endloop + endfacet + facet normal 0.000000 0.837176 -0.546933 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -90.000000 5.652749 -496.835022 + vertex -90.000000 5.482105 -497.096222 + endloop + endfacet + facet normal 0.000000 0.837171 -0.546941 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -190.571716 5.843437 -496.543152 + vertex -90.000000 5.482105 -497.096222 + endloop + endfacet + facet normal 0.000000 0.837166 -0.546949 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -90.000000 5.843437 -496.543152 + vertex -90.000000 5.652749 -496.835022 + endloop + endfacet + facet normal 0.000000 -0.324667 0.945828 + outer loop + vertex -90.000000 9.981941 -504.877625 + vertex -90.000000 10.310888 -504.764709 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal -0.000181 -0.215833 0.976430 + outer loop + vertex -90.000000 9.638894 -504.934875 + vertex -190.053726 9.981941 -504.877625 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal -0.000181 -0.215667 0.976467 + outer loop + vertex -90.000000 9.525868 -504.959839 + vertex -90.000000 9.638894 -504.934875 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal -0.986359 -0.164609 0.000000 + outer loop + vertex -190.043121 9.817457 -530.000000 + vertex -190.030731 9.743214 -530.000000 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal 0.082578 -0.996585 0.000000 + outer loop + vertex -202.481354 17.877251 -470.000000 + vertex -202.481354 17.877251 -530.000000 + vertex -201.785110 17.934942 -530.000000 + endloop + endfacet + facet normal 0.082581 -0.996584 0.000000 + outer loop + vertex -201.696243 17.942308 -470.000000 + vertex -202.481354 17.877251 -470.000000 + vertex -201.785110 17.934942 -530.000000 + endloop + endfacet + facet normal 0.000000 0.915768 -0.401708 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -90.000000 5.482105 -497.096222 + vertex -90.000000 5.436376 -497.200470 + endloop + endfacet + facet normal 0.000000 0.915761 -0.401724 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.716019 5.482105 -497.096222 + vertex -90.000000 5.436376 -497.200470 + endloop + endfacet + facet normal -0.879454 0.475985 0.000002 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.797836 5.313348 -470.000000 + vertex -190.758972 5.385156 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.164613 0.986358 + outer loop + vertex -90.000000 9.638894 -504.934875 + vertex -90.000000 9.981941 -504.877625 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal 0.000000 -0.134324 0.990937 + outer loop + vertex -90.000000 9.525868 -504.959839 + vertex -190.030731 9.743214 -504.930389 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal 0.000000 -0.134386 0.990929 + outer loop + vertex -90.000000 9.330317 -504.986359 + vertex -90.000000 9.525868 -504.959839 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal -0.998219 -0.059651 0.000000 + outer loop + vertex -190.030731 9.743214 -530.000000 + vertex -190.006058 9.330317 -504.986359 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal -0.998220 -0.059639 0.000000 + outer loop + vertex -190.030731 9.743214 -530.000000 + vertex -190.007309 9.351182 -530.000000 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal 0.245483 -0.969401 0.000000 + outer loop + vertex -203.158600 17.705750 -470.000000 + vertex -203.245056 17.683857 -530.000000 + vertex -202.481354 17.877251 -530.000000 + endloop + endfacet + facet normal 0.245484 -0.969401 0.000000 + outer loop + vertex -202.481354 17.877251 -470.000000 + vertex -203.158600 17.705750 -470.000000 + vertex -202.481354 17.877251 -530.000000 + endloop + endfacet + facet normal 0.000000 0.915765 -0.401715 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -90.000000 5.436376 -497.200470 + vertex -90.000000 5.356950 -497.381531 + endloop + endfacet + facet normal 0.000000 0.915776 -0.401689 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -190.759033 5.385180 -497.317169 + vertex -90.000000 5.356950 -497.381531 + endloop + endfacet + facet normal -0.913816 0.406129 -0.000230 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.868958 5.153321 -470.000000 + vertex -190.797836 5.313348 -470.000000 + endloop + endfacet + facet normal -0.913815 0.406131 -0.000230 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -190.868958 5.153321 -470.000000 + vertex -190.759033 5.385180 -497.317169 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -90.000000 9.330317 -504.986359 + vertex -190.006058 9.330317 -504.986359 + vertex -90.000000 8.982604 -504.986359 + endloop + endfacet + facet normal -0.999833 -0.018254 0.000035 + outer loop + vertex -190.007309 9.351182 -530.000000 + vertex -190.000000 8.998481 -505.000000 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal -0.999833 -0.018254 0.000035 + outer loop + vertex -190.007309 9.351182 -530.000000 + vertex -190.001556 9.036094 -530.000000 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal 0.245484 -0.969401 0.000000 + outer loop + vertex -203.922302 17.512356 -470.000000 + vertex -203.922302 17.512356 -530.000000 + vertex -203.245056 17.683857 -530.000000 + endloop + endfacet + facet normal 0.245483 -0.969401 0.000000 + outer loop + vertex -203.158600 17.705750 -470.000000 + vertex -203.922302 17.512356 -470.000000 + vertex -203.245056 17.683857 -530.000000 + endloop + endfacet + facet normal 0.000000 0.915775 -0.401692 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -90.000000 5.356950 -497.381531 + vertex -90.000000 5.216731 -497.701202 + endloop + endfacet + facet normal -0.904718 0.426011 -0.000173 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -190.910950 5.064143 -470.000000 + vertex -190.868958 5.153321 -470.000000 + endloop + endfacet + facet normal -0.904710 0.426027 -0.000173 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -190.910950 5.064143 -470.000000 + vertex -190.833801 5.216731 -497.701202 + endloop + endfacet + facet normal -0.000143 -0.041077 0.999156 + outer loop + vertex -90.000000 8.982604 -504.986359 + vertex -190.006058 9.330317 -504.986359 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.000143 -0.041128 0.999154 + outer loop + vertex -90.000000 8.825429 -504.992828 + vertex -90.000000 8.982604 -504.986359 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.999830 0.018424 0.000090 + outer loop + vertex -190.007309 8.723928 -530.000000 + vertex -190.006058 8.669682 -504.986359 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.999830 0.018425 0.000090 + outer loop + vertex -190.001556 9.036094 -530.000000 + vertex -190.007309 8.723928 -530.000000 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal 0.401696 -0.915773 0.000000 + outer loop + vertex -204.562073 17.231722 -470.000000 + vertex -204.643753 17.195898 -530.000000 + vertex -203.922302 17.512356 -530.000000 + endloop + endfacet + facet normal 0.401701 -0.915771 0.000000 + outer loop + vertex -203.922302 17.512356 -470.000000 + vertex -204.562073 17.231722 -470.000000 + vertex -203.922302 17.512356 -530.000000 + endloop + endfacet + facet normal 0.000000 0.958339 -0.285634 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -90.000000 5.216731 -497.701202 + vertex -90.000000 5.172516 -497.849548 + endloop + endfacet + facet normal 0.000000 0.958342 -0.285623 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -190.833801 5.216731 -497.701202 + vertex -90.000000 5.172516 -497.849548 + endloop + endfacet + facet normal -0.900340 0.435187 -0.000149 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -190.942444 4.998986 -470.000000 + vertex -190.910950 5.064143 -470.000000 + endloop + endfacet + facet normal -0.900362 0.435142 -0.000149 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -190.942444 4.998986 -470.000000 + vertex -190.877899 5.122957 -498.015839 + endloop + endfacet + facet normal 0.000000 0.041453 0.999140 + outer loop + vertex -90.000000 8.669682 -504.986359 + vertex -190.000000 8.998481 -505.000000 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal 0.000000 0.041504 0.999138 + outer loop + vertex -90.000000 8.669682 -504.986359 + vertex -90.000000 8.825429 -504.992828 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.998218 0.059675 0.000179 + outer loop + vertex -190.030731 8.332056 -530.000000 + vertex -190.030731 8.256785 -504.930389 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal -0.998219 0.059664 0.000179 + outer loop + vertex -190.007309 8.723928 -530.000000 + vertex -190.030731 8.332056 -530.000000 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal 0.401701 -0.915771 0.000000 + outer loop + vertex -205.283524 16.915264 -470.000000 + vertex -205.283524 16.915264 -530.000000 + vertex -204.643753 17.195898 -530.000000 + endloop + endfacet + facet normal 0.401696 -0.915773 0.000000 + outer loop + vertex -204.562073 17.231722 -470.000000 + vertex -205.283524 16.915264 -470.000000 + vertex -204.643753 17.195898 -530.000000 + endloop + endfacet + facet normal -0.000072 0.969402 -0.245478 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -90.000000 5.172516 -497.849548 + vertex -90.000000 5.086806 -498.188019 + endloop + endfacet + facet normal 0.000000 0.978657 -0.205498 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -90.000000 5.086806 -498.188019 + vertex -90.000000 5.054554 -498.341614 + endloop + endfacet + facet normal 0.000000 0.978660 -0.205487 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -190.877899 5.122957 -498.015839 + vertex -90.000000 5.054554 -498.341614 + endloop + endfacet + facet normal -0.897122 0.441784 -0.000132 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -190.961700 4.959882 -470.000000 + vertex -190.942444 4.998986 -470.000000 + endloop + endfacet + facet normal -0.897133 0.441762 -0.000132 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -190.961700 4.959882 -470.000000 + vertex -190.910904 5.054554 -498.341614 + endloop + endfacet + facet normal 0.000000 0.164564 0.986367 + outer loop + vertex -90.000000 8.326712 -504.929138 + vertex -90.000000 8.669682 -504.986359 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal -0.000106 0.134331 0.990937 + outer loop + vertex -90.000000 8.131121 -504.902618 + vertex -190.006058 8.669682 -504.986359 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal -0.000106 0.134359 0.990933 + outer loop + vertex -90.000000 8.131121 -504.902618 + vertex -90.000000 8.326712 -504.929138 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -190.030731 8.332056 -530.000000 + vertex -190.030731 8.256785 -530.000000 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal 0.546945 -0.837169 0.000000 + outer loop + vertex -205.868393 16.533154 -470.000000 + vertex -205.943054 16.484375 -530.000000 + vertex -205.283524 16.915264 -530.000000 + endloop + endfacet + facet normal 0.546944 -0.837169 0.000000 + outer loop + vertex -205.283524 16.915264 -470.000000 + vertex -205.868393 16.533154 -470.000000 + vertex -205.283524 16.915264 -530.000000 + endloop + endfacet + facet normal 0.000000 0.992313 -0.123754 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -90.000000 5.054554 -498.341614 + vertex -90.000000 5.035300 -498.496002 + endloop + endfacet + facet normal 0.000000 0.992312 -0.123759 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -190.910904 5.054554 -498.341614 + vertex -90.000000 5.035300 -498.496002 + endloop + endfacet + facet normal -0.895336 0.445391 -0.000124 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -190.968414 4.946385 -470.000000 + vertex -190.961700 4.959882 -470.000000 + endloop + endfacet + facet normal -0.895303 0.445458 -0.000123 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -190.968414 4.946385 -470.000000 + vertex -190.930969 5.013708 -498.669128 + endloop + endfacet + facet normal 0.000000 0.215817 0.976434 + outer loop + vertex -90.000000 8.018058 -504.877625 + vertex -190.030731 8.256785 -504.930389 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal 0.000000 0.215851 0.976426 + outer loop + vertex -90.000000 8.018058 -504.877625 + vertex -90.000000 8.131121 -504.902618 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal -0.995393 0.095879 0.000000 + outer loop + vertex -190.052567 8.030170 -530.000000 + vertex -190.053726 8.018058 -504.877625 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal -0.995390 0.095910 0.000000 + outer loop + vertex -190.030731 8.256785 -530.000000 + vertex -190.052567 8.030170 -530.000000 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal 0.546944 -0.837169 0.000000 + outer loop + vertex -206.527924 16.102264 -470.000000 + vertex -206.527924 16.102264 -530.000000 + vertex -205.943054 16.484375 -530.000000 + endloop + endfacet + facet normal 0.546945 -0.837169 0.000000 + outer loop + vertex -205.868393 16.533154 -470.000000 + vertex -206.527924 16.102264 -470.000000 + vertex -205.943054 16.484375 -530.000000 + endloop + endfacet + facet normal -0.000072 0.996584 -0.082583 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -90.000000 5.035300 -498.496002 + vertex -90.000000 5.006461 -498.844025 + endloop + endfacet + facet normal -0.868002 0.496561 0.000000 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -191.465500 4.077466 -470.000000 + vertex -190.968414 4.946385 -470.000000 + endloop + endfacet + facet normal -0.868002 0.496561 0.000000 + outer loop + vertex -190.970398 4.942916 -530.000000 + vertex -191.465500 4.077466 -530.000000 + vertex -190.937744 5.000000 -499.000000 + endloop + endfacet + facet normal -0.868002 0.496560 0.000000 + outer loop + vertex -191.465500 4.077466 -530.000000 + vertex -191.465500 4.077466 -470.000000 + vertex -190.937744 5.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 0.999143 -0.041392 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -90.000000 5.006461 -498.844025 + vertex -90.000000 5.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 0.999143 -0.041395 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -190.930969 5.013708 -498.669128 + vertex -90.000000 5.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 0.324700 0.945817 + outer loop + vertex -90.000000 7.722306 -504.776093 + vertex -90.000000 8.018058 -504.877625 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal 0.000000 0.324700 0.945817 + outer loop + vertex -90.000000 7.722306 -504.776093 + vertex -190.053726 8.018058 -504.877625 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal -0.989590 0.143917 0.000023 + outer loop + vertex -190.138763 7.437390 -530.000000 + vertex -190.144592 7.393218 -504.663116 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal -0.989593 0.143898 0.000024 + outer loop + vertex -190.052567 8.030170 -530.000000 + vertex -190.138763 7.437390 -530.000000 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal 0.677284 -0.735722 0.000000 + outer loop + vertex -207.041916 15.629101 -470.000000 + vertex -207.107529 15.568697 -530.000000 + vertex -206.527924 16.102264 -530.000000 + endloop + endfacet + facet normal 0.677282 -0.735724 0.000000 + outer loop + vertex -206.527924 16.102264 -470.000000 + vertex -207.041916 15.629101 -470.000000 + vertex -206.527924 16.102264 -530.000000 + endloop + endfacet + facet normal -0.868096 0.496396 0.000000 + outer loop + vertex -190.968414 4.946385 -530.000000 + vertex -190.970398 4.942916 -530.000000 + vertex -190.937744 5.000000 -501.000000 + endloop + endfacet + facet normal -0.868015 0.496539 0.000000 + outer loop + vertex -190.970398 4.942916 -530.000000 + vertex -190.937744 5.000000 -499.000000 + vertex -190.937744 5.000000 -501.000000 + endloop + endfacet + facet normal -0.789137 0.614217 0.000000 + outer loop + vertex -191.894608 3.526156 -530.000000 + vertex -191.949387 3.455776 -470.000000 + vertex -191.465500 4.077466 -470.000000 + endloop + endfacet + facet normal -0.789137 0.614218 0.000000 + outer loop + vertex -191.465500 4.077466 -530.000000 + vertex -191.894608 3.526156 -530.000000 + vertex -191.465500 4.077466 -470.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -90.000000 5.000000 -499.000000 + vertex -90.000000 5.000000 -500.057281 + endloop + endfacet + facet normal 0.000000 0.324699 0.945817 + outer loop + vertex -90.000000 7.393218 -504.663116 + vertex -90.000000 7.722306 -504.776093 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal -0.977488 0.210993 0.000143 + outer loop + vertex -190.257584 6.886968 -530.000000 + vertex -190.269958 6.812207 -504.348694 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal -0.977484 0.211010 0.000143 + outer loop + vertex -190.138763 7.437390 -530.000000 + vertex -190.257584 6.886968 -530.000000 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal 0.677282 -0.735724 0.000000 + outer loop + vertex -207.621521 15.095533 -470.000000 + vertex -207.621521 15.095533 -530.000000 + vertex -207.107529 15.568697 -530.000000 + endloop + endfacet + facet normal 0.677284 -0.735722 0.000000 + outer loop + vertex -207.041916 15.629101 -470.000000 + vertex -207.621521 15.095533 -470.000000 + vertex -207.107529 15.568697 -530.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -190.937744 5.000000 -501.000000 + vertex -90.000000 5.000000 -500.057281 + vertex -90.000000 5.000000 -501.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -190.937744 5.000000 -501.000000 + vertex -190.937744 5.000000 -499.000000 + vertex -90.000000 5.000000 -500.057281 + endloop + endfacet + facet normal -0.879512 0.475877 0.000050 + outer loop + vertex -190.927307 5.022359 -530.000000 + vertex -190.968414 4.946385 -530.000000 + vertex -190.937744 5.000000 -501.000000 + endloop + endfacet + facet normal -0.789137 0.614218 0.000000 + outer loop + vertex -192.378494 2.904465 -530.000000 + vertex -192.378494 2.904465 -470.000000 + vertex -191.949387 3.455776 -470.000000 + endloop + endfacet + facet normal -0.789137 0.614217 0.000000 + outer loop + vertex -191.894608 3.526156 -530.000000 + vertex -192.378494 2.904465 -530.000000 + vertex -191.949387 3.455776 -470.000000 + endloop + endfacet + facet normal 0.000000 0.475908 0.879495 + outer loop + vertex -90.000000 7.118392 -504.514404 + vertex -90.000000 7.393218 -504.663116 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal 0.000000 0.475942 0.879477 + outer loop + vertex -90.000000 7.118392 -504.514404 + vertex -190.144592 7.393218 -504.663116 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal -0.961957 0.273200 0.000332 + outer loop + vertex -190.263336 6.866718 -530.000000 + vertex -190.276031 6.790803 -504.332001 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal -0.961937 0.273273 0.000332 + outer loop + vertex -190.257584 6.886968 -530.000000 + vertex -190.263336 6.866718 -530.000000 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -207.621521 15.095533 -530.000000 + vertex -207.621521 15.095533 -470.000000 + vertex -208.050629 14.544223 -470.000000 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -208.105408 14.473844 -530.000000 + vertex -207.621521 15.095533 -530.000000 + vertex -208.050629 14.544223 -470.000000 + endloop + endfacet + facet normal 0.000000 0.999138 0.041517 + outer loop + vertex -190.930923 5.013789 -501.331879 + vertex -90.000000 5.000000 -501.000000 + vertex -90.000000 5.006500 -501.156433 + endloop + endfacet + facet normal 0.000000 0.999138 0.041514 + outer loop + vertex -190.930923 5.013789 -501.331879 + vertex -190.937744 5.000000 -501.000000 + vertex -90.000000 5.000000 -501.000000 + endloop + endfacet + facet normal -0.896122 0.443807 0.000020 + outer loop + vertex -190.920990 5.035115 -530.000000 + vertex -190.927307 5.022359 -530.000000 + vertex -190.930923 5.013789 -501.331879 + endloop + endfacet + facet normal -0.896159 0.443733 0.000020 + outer loop + vertex -190.927307 5.022359 -530.000000 + vertex -190.937744 5.000000 -501.000000 + vertex -190.930923 5.013789 -501.331879 + endloop + endfacet + facet normal -0.677282 0.735724 0.000000 + outer loop + vertex -192.378494 2.904465 -470.000000 + vertex -192.378494 2.904465 -530.000000 + vertex -192.892487 2.431302 -530.000000 + endloop + endfacet + facet normal -0.677284 0.735722 0.000000 + outer loop + vertex -192.958099 2.370898 -470.000000 + vertex -192.378494 2.904465 -470.000000 + vertex -192.892487 2.431302 -530.000000 + endloop + endfacet + facet normal 0.000000 0.475972 0.879460 + outer loop + vertex -90.000000 6.812207 -504.348694 + vertex -90.000000 7.118392 -504.514404 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal 0.000000 0.615397 0.788217 + outer loop + vertex -90.000000 6.802083 -504.340790 + vertex -90.000000 6.812207 -504.348694 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal 0.000000 0.614990 0.788535 + outer loop + vertex -90.000000 6.802083 -504.340790 + vertex -190.269958 6.812207 -504.348694 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal -0.986371 0.164535 -0.000001 + outer loop + vertex -190.263336 6.866718 -530.000000 + vertex -190.276001 6.790794 -530.000000 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -208.105408 14.473844 -530.000000 + vertex -208.050629 14.544223 -470.000000 + vertex -208.534515 13.922533 -470.000000 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -208.534515 13.922533 -530.000000 + vertex -208.105408 14.473844 -530.000000 + vertex -208.534515 13.922533 -470.000000 + endloop + endfacet + facet normal -0.000072 0.996585 0.082575 + outer loop + vertex -190.930923 5.013789 -501.331879 + vertex -90.000000 5.006500 -501.156433 + vertex -90.000000 5.035339 -501.504486 + endloop + endfacet + facet normal -0.897463 0.441089 0.000017 + outer loop + vertex -190.902206 5.073333 -530.000000 + vertex -190.920990 5.035115 -530.000000 + vertex -190.910904 5.054554 -501.658386 + endloop + endfacet + facet normal -0.897549 0.440916 0.000017 + outer loop + vertex -190.920990 5.035115 -530.000000 + vertex -190.930923 5.013789 -501.331879 + vertex -190.910904 5.054554 -501.658386 + endloop + endfacet + facet normal -0.677284 0.735722 0.000000 + outer loop + vertex -192.958099 2.370898 -470.000000 + vertex -192.892487 2.431302 -530.000000 + vertex -193.472092 1.897735 -530.000000 + endloop + endfacet + facet normal -0.677282 0.735724 0.000000 + outer loop + vertex -193.472092 1.897735 -470.000000 + vertex -192.958099 2.370898 -470.000000 + vertex -193.472092 1.897735 -530.000000 + endloop + endfacet + facet normal 0.000000 0.614203 0.789148 + outer loop + vertex -90.000000 6.527339 -504.126953 + vertex -90.000000 6.802083 -504.340790 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal -0.962258 0.272141 -0.000001 + outer loop + vertex -190.409958 6.317125 -530.000000 + vertex -190.417419 6.290874 -503.942902 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal -0.962260 0.272134 -0.000001 + outer loop + vertex -190.276001 6.790794 -530.000000 + vertex -190.409958 6.317125 -530.000000 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal 0.868006 -0.496553 0.000000 + outer loop + vertex -209.062256 13.000000 -494.000000 + vertex -208.534515 13.922533 -470.000000 + vertex -209.036621 13.044820 -470.000000 + endloop + endfacet + facet normal 0.868011 -0.496545 0.000000 + outer loop + vertex -209.024704 13.065635 -530.000000 + vertex -208.534515 13.922533 -530.000000 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.868008 -0.496549 0.000000 + outer loop + vertex -208.534515 13.922533 -530.000000 + vertex -208.534515 13.922533 -470.000000 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.000000 0.992295 0.123895 + outer loop + vertex -190.910904 5.054554 -501.658386 + vertex -90.000000 5.035339 -501.504486 + vertex -90.000000 5.054554 -501.658386 + endloop + endfacet + facet normal 0.000000 0.992296 0.123891 + outer loop + vertex -190.910904 5.054554 -501.658386 + vertex -190.930923 5.013789 -501.331879 + vertex -90.000000 5.035339 -501.504486 + endloop + endfacet + facet normal -0.900643 0.434559 0.000012 + outer loop + vertex -190.871490 5.136993 -530.000000 + vertex -190.902206 5.073333 -530.000000 + vertex -190.878250 5.122224 -501.981262 + endloop + endfacet + facet normal -0.900604 0.434641 0.000012 + outer loop + vertex -190.902206 5.073333 -530.000000 + vertex -190.910904 5.054554 -501.658386 + vertex -190.878250 5.122224 -501.981262 + endloop + endfacet + facet normal -0.546954 0.837163 0.000000 + outer loop + vertex -193.472092 1.897735 -470.000000 + vertex -193.472092 1.897735 -530.000000 + vertex -194.056946 1.515625 -530.000000 + endloop + endfacet + facet normal -0.546945 0.837168 0.000000 + outer loop + vertex -194.131622 1.466845 -470.000000 + vertex -193.472092 1.897735 -470.000000 + vertex -194.056946 1.515625 -530.000000 + endloop + endfacet + facet normal 0.000000 0.614220 0.789135 + outer loop + vertex -90.000000 6.290874 -503.942902 + vertex -90.000000 6.527339 -504.126953 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal 0.000000 0.614201 0.789149 + outer loop + vertex -90.000000 6.290874 -503.942902 + vertex -190.276031 6.790803 -504.332001 + vertex -190.417419 6.290874 -503.942902 + endloop + endfacet + facet normal -0.945348 0.326063 0.000058 + outer loop + vertex -190.555878 5.894070 -530.000000 + vertex -190.571716 5.843437 -503.456818 + vertex -190.417419 6.290874 -503.942902 + endloop + endfacet + facet normal -0.945346 0.326068 0.000058 + outer loop + vertex -190.409958 6.317125 -530.000000 + vertex -190.555878 5.894070 -530.000000 + vertex -190.417419 6.290874 -503.942902 + endloop + endfacet + facet normal 0.867832 -0.496858 -0.000001 + outer loop + vertex -209.036621 13.044820 -530.000000 + vertex -209.024704 13.065635 -530.000000 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.867979 -0.496601 0.000000 + outer loop + vertex -209.024704 13.065635 -530.000000 + vertex -209.062256 13.000000 -494.000000 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.895214 -0.445636 -0.000124 + outer loop + vertex -209.069046 12.986291 -493.669128 + vertex -209.036621 13.044820 -470.000000 + vertex -209.043411 13.031179 -470.000000 + endloop + endfacet + facet normal 0.894924 -0.446218 -0.000123 + outer loop + vertex -209.062256 13.000000 -494.000000 + vertex -209.036621 13.044820 -470.000000 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal 0.000000 0.978739 0.205109 + outer loop + vertex -190.878250 5.122224 -501.981262 + vertex -90.000000 5.054554 -501.658386 + vertex -90.000000 5.086461 -501.810638 + endloop + endfacet + facet normal 0.000000 0.978735 0.205127 + outer loop + vertex -190.878250 5.122224 -501.981262 + vertex -190.910904 5.054554 -501.658386 + vertex -90.000000 5.054554 -501.658386 + endloop + endfacet + facet normal -0.904911 0.425601 0.000006 + outer loop + vertex -190.829590 5.226082 -530.000000 + vertex -190.871490 5.136993 -530.000000 + vertex -190.833801 5.216731 -502.298767 + endloop + endfacet + facet normal -0.904903 0.425618 0.000006 + outer loop + vertex -190.871490 5.136993 -530.000000 + vertex -190.878250 5.122224 -501.981262 + vertex -190.833801 5.216731 -502.298767 + endloop + endfacet + facet normal -0.546945 0.837168 0.000000 + outer loop + vertex -194.131622 1.466845 -470.000000 + vertex -194.056946 1.515625 -530.000000 + vertex -194.716476 1.084736 -530.000000 + endloop + endfacet + facet normal -0.546954 0.837163 0.000000 + outer loop + vertex -194.716476 1.084736 -470.000000 + vertex -194.131622 1.466845 -470.000000 + vertex -194.716476 1.084736 -530.000000 + endloop + endfacet + facet normal 0.000000 0.735742 0.677262 + outer loop + vertex -190.417419 6.290874 -503.942902 + vertex -90.000000 6.079566 -503.713348 + vertex -90.000000 6.290874 -503.942902 + endloop + endfacet + facet normal 0.000000 0.735751 0.677253 + outer loop + vertex -190.417419 6.290874 -503.942902 + vertex -190.571716 5.843437 -503.456818 + vertex -90.000000 6.079566 -503.713348 + endloop + endfacet + facet normal -0.928601 0.371080 0.000154 + outer loop + vertex -190.555878 5.894070 -530.000000 + vertex -190.692001 5.553431 -530.000000 + vertex -190.571716 5.843437 -503.456818 + endloop + endfacet + facet normal -0.928600 0.371083 0.000154 + outer loop + vertex -190.692001 5.553431 -530.000000 + vertex -190.716019 5.482105 -502.903809 + vertex -190.571716 5.843437 -503.456818 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -230.000000 13.000000 -494.253540 + vertex -230.000000 13.000000 -505.999969 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -230.000000 13.000000 -494.253540 + vertex -209.062256 13.000000 -505.999969 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.879521 -0.475861 0.000051 + outer loop + vertex -209.070984 12.981308 -530.000000 + vertex -209.036621 13.044820 -530.000000 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.897251 -0.441521 -0.000134 + outer loop + vertex -209.089096 12.945445 -493.341614 + vertex -209.043411 13.031179 -470.000000 + vertex -209.062851 12.991674 -470.000000 + endloop + endfacet + facet normal 0.897254 -0.441514 -0.000134 + outer loop + vertex -209.069046 12.986291 -493.669128 + vertex -209.043411 13.031179 -470.000000 + vertex -209.089096 12.945445 -493.341614 + endloop + endfacet + facet normal 0.000000 -0.999143 -0.041398 + outer loop + vertex -230.000000 13.000000 -494.000000 + vertex -209.062256 13.000000 -494.000000 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal 0.000000 -0.999143 -0.041397 + outer loop + vertex -230.000000 12.986581 -493.676117 + vertex -230.000000 13.000000 -494.000000 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal -0.000072 0.969392 0.245518 + outer loop + vertex -190.878250 5.122224 -501.981262 + vertex -90.000000 5.086461 -501.810638 + vertex -90.000000 5.172170 -502.149048 + endloop + endfacet + facet normal -0.913986 0.405746 -0.000002 + outer loop + vertex -190.758972 5.385156 -530.000000 + vertex -190.829590 5.226082 -530.000000 + vertex -190.759033 5.385180 -502.682800 + endloop + endfacet + facet normal -0.914011 0.405689 -0.000002 + outer loop + vertex -190.829590 5.226082 -530.000000 + vertex -190.833801 5.216731 -502.298767 + vertex -190.759033 5.385180 -502.682800 + endloop + endfacet + facet normal 0.000000 0.958450 0.285260 + outer loop + vertex -190.833801 5.216731 -502.298767 + vertex -90.000000 5.172170 -502.149048 + vertex -90.000000 5.216731 -502.298767 + endloop + endfacet + facet normal 0.000000 0.958443 0.285285 + outer loop + vertex -190.833801 5.216731 -502.298767 + vertex -190.878250 5.122224 -501.981262 + vertex -90.000000 5.172170 -502.149048 + endloop + endfacet + facet normal -0.401700 0.915771 0.000000 + outer loop + vertex -194.716476 1.084736 -470.000000 + vertex -194.716476 1.084736 -530.000000 + vertex -195.356247 0.804103 -530.000000 + endloop + endfacet + facet normal -0.401696 0.915773 0.000000 + outer loop + vertex -195.437927 0.768277 -470.000000 + vertex -194.716476 1.084736 -470.000000 + vertex -195.356247 0.804103 -530.000000 + endloop + endfacet + facet normal 0.000000 0.735759 0.677244 + outer loop + vertex -190.571716 5.843437 -503.456818 + vertex -90.000000 5.843437 -503.456818 + vertex -90.000000 6.079566 -503.713348 + endloop + endfacet + facet normal 0.000000 0.837131 0.547002 + outer loop + vertex -190.571716 5.843437 -503.456818 + vertex -90.000000 5.672922 -503.195862 + vertex -90.000000 5.843437 -503.456818 + endloop + endfacet + facet normal 0.000000 0.837143 0.546984 + outer loop + vertex -190.571716 5.843437 -503.456818 + vertex -190.716019 5.482105 -502.903809 + vertex -90.000000 5.672922 -503.195862 + endloop + endfacet + facet normal -0.913815 0.406131 0.000259 + outer loop + vertex -190.692001 5.553431 -530.000000 + vertex -190.732468 5.462380 -530.000000 + vertex -190.716019 5.482105 -502.903809 + endloop + endfacet + facet normal -0.913813 0.406135 0.000259 + outer loop + vertex -190.732468 5.462380 -530.000000 + vertex -190.759033 5.385180 -502.682800 + vertex -190.716019 5.482105 -502.903809 + endloop + endfacet + facet normal 0.000000 -0.999138 0.041518 + outer loop + vertex -230.000000 13.000000 -505.999969 + vertex -230.000000 12.986501 -506.324829 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.000000 -0.999138 0.041516 + outer loop + vertex -230.000000 13.000000 -505.999969 + vertex -209.069092 12.986210 -506.331848 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -230.000000 13.000000 -494.000000 + vertex -230.000000 13.000000 -494.253540 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.895763 -0.444533 0.000020 + outer loop + vertex -209.077377 12.968425 -530.000000 + vertex -209.070984 12.981308 -530.000000 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.895763 -0.444533 0.000020 + outer loop + vertex -209.070984 12.981308 -530.000000 + vertex -209.062256 13.000000 -505.999969 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.000000 -0.992313 -0.123756 + outer loop + vertex -230.000000 12.985428 -493.662201 + vertex -209.069046 12.986291 -493.669128 + vertex -209.089096 12.945445 -493.341614 + endloop + endfacet + facet normal 0.000000 -0.992312 -0.123759 + outer loop + vertex -230.000000 12.945445 -493.341614 + vertex -230.000000 12.985428 -493.662201 + vertex -209.089096 12.945445 -493.341614 + endloop + endfacet + facet normal 0.900352 -0.435162 -0.000150 + outer loop + vertex -209.122101 12.877043 -493.015869 + vertex -209.062851 12.991674 -470.000000 + vertex -209.094666 12.925850 -470.000000 + endloop + endfacet + facet normal 0.900359 -0.435149 -0.000151 + outer loop + vertex -209.089096 12.945445 -493.341614 + vertex -209.062851 12.991674 -470.000000 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.000014 -0.996585 -0.082571 + outer loop + vertex -230.000000 12.985428 -493.662201 + vertex -230.000000 12.986581 -493.676117 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal 0.000000 0.915773 0.401697 + outer loop + vertex -190.759033 5.385180 -502.682800 + vertex -90.000000 5.216731 -502.298767 + vertex -90.000000 5.296205 -502.479950 + endloop + endfacet + facet normal 0.000000 0.915776 0.401689 + outer loop + vertex -190.759033 5.385180 -502.682800 + vertex -190.833801 5.216731 -502.298767 + vertex -90.000000 5.216731 -502.298767 + endloop + endfacet + facet normal -0.945842 0.324627 -0.000002 + outer loop + vertex -190.732468 5.462380 -530.000000 + vertex -190.758972 5.385156 -530.000000 + vertex -190.759033 5.385180 -502.682800 + endloop + endfacet + facet normal -0.401696 0.915773 0.000000 + outer loop + vertex -195.437927 0.768277 -470.000000 + vertex -195.356247 0.804103 -530.000000 + vertex -196.077698 0.487644 -530.000000 + endloop + endfacet + facet normal -0.401700 0.915771 0.000000 + outer loop + vertex -196.077698 0.487644 -470.000000 + vertex -195.437927 0.768277 -470.000000 + vertex -196.077698 0.487644 -530.000000 + endloop + endfacet + facet normal 0.000000 0.837154 0.546967 + outer loop + vertex -190.716019 5.482105 -502.903809 + vertex -90.000000 5.482105 -502.903809 + vertex -90.000000 5.672922 -503.195862 + endloop + endfacet + facet normal 0.000000 0.915811 0.401610 + outer loop + vertex -190.716019 5.482105 -502.903809 + vertex -90.000000 5.436376 -502.799530 + vertex -90.000000 5.482105 -502.903809 + endloop + endfacet + facet normal 0.000000 0.915801 0.401631 + outer loop + vertex -190.716019 5.482105 -502.903809 + vertex -190.759033 5.385180 -502.682800 + vertex -90.000000 5.436376 -502.799530 + endloop + endfacet + facet normal 0.000014 -0.996591 0.082503 + outer loop + vertex -230.000000 12.986501 -506.324829 + vertex -230.000000 12.985349 -506.338745 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.897655 -0.440700 0.000017 + outer loop + vertex -209.096329 12.929823 -530.000000 + vertex -209.077377 12.968425 -530.000000 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.897680 -0.440648 0.000017 + outer loop + vertex -209.077377 12.968425 -530.000000 + vertex -209.069092 12.986210 -506.331848 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.000000 -0.978656 -0.205505 + outer loop + vertex -230.000000 12.945445 -493.341614 + vertex -209.089096 12.945445 -493.341614 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.000000 -0.978655 -0.205508 + outer loop + vertex -230.000000 12.878484 -493.022736 + vertex -230.000000 12.945445 -493.341614 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.904666 -0.426122 -0.000174 + outer loop + vertex -209.166199 12.783269 -492.701202 + vertex -209.094666 12.925850 -470.000000 + vertex -209.137100 12.835760 -470.000000 + endloop + endfacet + facet normal 0.904708 -0.426033 -0.000175 + outer loop + vertex -209.122101 12.877043 -493.015869 + vertex -209.094666 12.925850 -470.000000 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.000000 0.915784 0.401671 + outer loop + vertex -190.759033 5.385180 -502.682800 + vertex -90.000000 5.296205 -502.479950 + vertex -90.000000 5.436376 -502.799530 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -196.077698 0.487644 -470.000000 + vertex -196.077698 0.487644 -530.000000 + vertex -196.754944 0.316143 -530.000000 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -196.841400 0.294249 -470.000000 + vertex -196.077698 0.487644 -470.000000 + vertex -196.754944 0.316143 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.992298 0.123877 + outer loop + vertex -230.000000 12.985349 -506.338745 + vertex -230.000000 12.945445 -506.658386 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.000000 -0.992298 0.123878 + outer loop + vertex -230.000000 12.985349 -506.338745 + vertex -209.089096 12.945445 -506.658386 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.900591 -0.434668 0.000012 + outer loop + vertex -209.127365 12.865519 -530.000000 + vertex -209.096329 12.929823 -530.000000 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.900605 -0.434639 0.000012 + outer loop + vertex -209.096329 12.929823 -530.000000 + vertex -209.089096 12.945445 -506.658386 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.000014 -0.969380 -0.245566 + outer loop + vertex -230.000000 12.875067 -493.009247 + vertex -230.000000 12.878484 -493.022736 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.000000 -0.958350 -0.285598 + outer loop + vertex -230.000000 12.875067 -493.009247 + vertex -209.122101 12.877043 -493.015869 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.000000 -0.958352 -0.285591 + outer loop + vertex -230.000000 12.783269 -492.701202 + vertex -230.000000 12.875067 -493.009247 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.913835 -0.406086 -0.000233 + outer loop + vertex -209.240967 12.614820 -492.317169 + vertex -209.137100 12.835760 -470.000000 + vertex -209.208939 12.674099 -470.000000 + endloop + endfacet + facet normal 0.913813 -0.406135 -0.000232 + outer loop + vertex -209.166199 12.783269 -492.701202 + vertex -209.137100 12.835760 -470.000000 + vertex -209.240967 12.614820 -492.317169 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -196.841400 0.294249 -470.000000 + vertex -196.754944 0.316143 -530.000000 + vertex -197.518646 0.122748 -530.000000 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -197.518646 0.122748 -470.000000 + vertex -196.841400 0.294249 -470.000000 + vertex -197.518646 0.122748 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.978735 0.205130 + outer loop + vertex -230.000000 12.945445 -506.658386 + vertex -230.000000 12.879201 -506.974457 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.000000 -0.978735 0.205128 + outer loop + vertex -230.000000 12.945445 -506.658386 + vertex -209.121750 12.877775 -506.981262 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.904899 -0.425627 0.000006 + outer loop + vertex -209.169693 12.775528 -530.000000 + vertex -209.127365 12.865519 -530.000000 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.904902 -0.425620 0.000006 + outer loop + vertex -209.127365 12.865519 -530.000000 + vertex -209.121750 12.877775 -506.981262 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.000000 -0.915829 -0.401568 + outer loop + vertex -230.000000 12.777689 -492.688477 + vertex -230.000000 12.783269 -492.701202 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.000000 -0.915776 -0.401689 + outer loop + vertex -230.000000 12.777689 -492.688477 + vertex -209.166199 12.783269 -492.701202 + vertex -209.240967 12.614820 -492.317169 + endloop + endfacet + facet normal 0.000000 -0.915778 -0.401684 + outer loop + vertex -230.000000 12.612789 -492.312531 + vertex -230.000000 12.777689 -492.688477 + vertex -209.240967 12.614820 -492.317169 + endloop + endfacet + facet normal 0.879447 -0.475998 0.000002 + outer loop + vertex -209.240967 12.614820 -492.317169 + vertex -209.208939 12.674099 -470.000000 + vertex -209.241013 12.614840 -470.000000 + endloop + endfacet + facet normal -0.082578 0.996585 0.000000 + outer loop + vertex -197.518646 0.122748 -470.000000 + vertex -197.518646 0.122748 -530.000000 + vertex -198.214890 0.065057 -530.000000 + endloop + endfacet + facet normal -0.082580 0.996584 0.000000 + outer loop + vertex -198.303757 0.057692 -470.000000 + vertex -197.518646 0.122748 -470.000000 + vertex -198.214890 0.065057 -530.000000 + endloop + endfacet + facet normal 0.000014 -0.969380 0.245566 + outer loop + vertex -230.000000 12.879201 -506.974457 + vertex -230.000000 12.875784 -506.987946 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.914017 -0.405675 -0.000002 + outer loop + vertex -209.241013 12.614840 -530.000000 + vertex -209.169693 12.775528 -530.000000 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.914011 -0.405688 -0.000002 + outer loop + vertex -209.169693 12.775528 -530.000000 + vertex -209.166199 12.783269 -507.298828 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.000000 -0.958460 0.285226 + outer loop + vertex -230.000000 12.875784 -506.987946 + vertex -230.000000 12.783269 -507.298828 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.000000 -0.958458 0.285233 + outer loop + vertex -230.000000 12.875784 -506.987946 + vertex -209.166199 12.783269 -507.298828 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.000000 -0.915761 -0.401724 + outer loop + vertex -230.000000 12.612789 -492.312531 + vertex -209.240967 12.614820 -492.317169 + vertex -209.283997 12.517895 -492.096222 + endloop + endfacet + facet normal 0.000000 -0.915754 -0.401740 + outer loop + vertex -230.000000 12.517895 -492.096222 + vertex -230.000000 12.612789 -492.312531 + vertex -209.283997 12.517895 -492.096222 + endloop + endfacet + facet normal 0.914001 -0.405712 0.000002 + outer loop + vertex -209.283997 12.517895 -492.096222 + vertex -209.241013 12.614840 -470.000000 + vertex -209.282104 12.522266 -470.000000 + endloop + endfacet + facet normal 0.913981 -0.405757 0.000002 + outer loop + vertex -209.240967 12.614820 -492.317169 + vertex -209.241013 12.614840 -470.000000 + vertex -209.283997 12.517895 -492.096222 + endloop + endfacet + facet normal -0.082580 0.996584 0.000000 + outer loop + vertex -198.303757 0.057692 -470.000000 + vertex -198.214890 0.065057 -530.000000 + vertex -199.000000 0.000000 -530.000000 + endloop + endfacet + facet normal -0.082578 0.996585 0.000000 + outer loop + vertex -199.000000 0.000000 -470.000000 + vertex -198.303757 0.057692 -470.000000 + vertex -199.000000 0.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.915748 0.401753 + outer loop + vertex -230.000000 12.783269 -507.298828 + vertex -230.000000 12.618349 -507.674744 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.000000 -0.915753 0.401743 + outer loop + vertex -230.000000 12.783269 -507.298828 + vertex -209.240967 12.614820 -507.682800 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.945806 -0.324732 -0.000002 + outer loop + vertex -209.262894 12.551109 -530.000000 + vertex -209.241013 12.614840 -530.000000 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.000000 -0.837170 -0.546942 + outer loop + vertex -230.000000 12.517895 -492.096222 + vertex -209.283997 12.517895 -492.096222 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.000000 -0.837175 -0.546935 + outer loop + vertex -230.000000 12.164065 -491.554626 + vertex -230.000000 12.517895 -492.096222 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.928671 -0.370905 -0.000006 + outer loop + vertex -209.428299 12.156562 -491.543152 + vertex -209.282104 12.522266 -470.000000 + vertex -209.420135 12.176665 -470.000000 + endloop + endfacet + facet normal 0.928678 -0.370887 -0.000006 + outer loop + vertex -209.283997 12.517895 -492.096222 + vertex -209.282104 12.522266 -470.000000 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -199.000000 0.000000 -530.000000 + vertex -199.940002 0.000000 -470.000000 + vertex -199.000000 0.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -200.059998 0.000000 -530.000000 + vertex -199.940002 0.000000 -470.000000 + vertex -199.000000 0.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.916006 0.401165 + outer loop + vertex -230.000000 12.618349 -507.674744 + vertex -230.000000 12.612789 -507.687439 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.913746 -0.406286 0.000262 + outer loop + vertex -209.303787 12.459139 -530.000000 + vertex -209.262894 12.551109 -530.000000 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.913757 -0.406260 0.000262 + outer loop + vertex -209.262894 12.551109 -530.000000 + vertex -209.240967 12.614820 -507.682800 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.000000 -0.836940 -0.547294 + outer loop + vertex -230.000000 12.156562 -491.543152 + vertex -230.000000 12.164065 -491.554626 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.945359 -0.326031 -0.000054 + outer loop + vertex -209.582581 11.709126 -491.057098 + vertex -209.420135 12.176665 -470.000000 + vertex -209.567978 11.747981 -470.000000 + endloop + endfacet + facet normal 0.945359 -0.326030 -0.000054 + outer loop + vertex -209.428299 12.156562 -491.543152 + vertex -209.420135 12.176665 -470.000000 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -200.059998 0.000000 -530.000000 + vertex -201.000000 0.000000 -470.000000 + vertex -199.940002 0.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -201.000000 0.000000 -530.000000 + vertex -201.000000 0.000000 -470.000000 + vertex -200.059998 0.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.915795 0.401645 + outer loop + vertex -230.000000 12.612789 -507.687439 + vertex -230.000000 12.517895 -507.903809 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.000000 -0.915801 0.401631 + outer loop + vertex -230.000000 12.612789 -507.687439 + vertex -209.283997 12.517895 -507.903809 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.928606 -0.371067 0.000155 + outer loop + vertex -209.441284 12.115048 -530.000000 + vertex -209.303787 12.459139 -530.000000 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.928599 -0.371084 0.000155 + outer loop + vertex -209.303787 12.459139 -530.000000 + vertex -209.283997 12.517895 -507.903809 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.000000 -0.735729 -0.677276 + outer loop + vertex -230.000000 12.156562 -491.543152 + vertex -209.428299 12.156562 -491.543152 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.000000 -0.735737 -0.677268 + outer loop + vertex -230.000000 11.718349 -491.067108 + vertex -230.000000 12.156562 -491.543152 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.961875 -0.273488 -0.000162 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.567978 11.747981 -470.000000 + vertex -209.704285 11.268581 -470.000000 + endloop + endfacet + facet normal 0.961875 -0.273488 -0.000162 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.582581 11.709126 -491.057098 + vertex -209.567978 11.747981 -470.000000 + endloop + endfacet + facet normal 0.082578 0.996585 0.000000 + outer loop + vertex -201.000000 0.000000 -470.000000 + vertex -201.000000 0.000000 -530.000000 + vertex -201.696243 0.057692 -530.000000 + endloop + endfacet + facet normal 0.082580 0.996584 0.000000 + outer loop + vertex -201.785110 0.065057 -470.000000 + vertex -201.000000 0.000000 -470.000000 + vertex -201.696243 0.057692 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.837186 0.546918 + outer loop + vertex -230.000000 12.517895 -507.903809 + vertex -230.000000 12.510339 -507.915375 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.000000 -0.837142 0.546986 + outer loop + vertex -230.000000 12.510339 -507.915375 + vertex -230.000000 12.156562 -508.456818 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.000000 -0.837143 0.546984 + outer loop + vertex -230.000000 12.510339 -507.915375 + vertex -209.428299 12.156562 -508.456818 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.945358 -0.326035 0.000058 + outer loop + vertex -209.441284 12.115048 -530.000000 + vertex -209.428299 12.156562 -508.456818 + vertex -209.582581 11.709126 -508.942902 + endloop + endfacet + facet normal 0.945358 -0.326033 0.000058 + outer loop + vertex -209.588669 11.687696 -530.000000 + vertex -209.441284 12.115048 -530.000000 + vertex -209.582581 11.709126 -508.942902 + endloop + endfacet + facet normal 0.000000 -0.735383 -0.677651 + outer loop + vertex -230.000000 11.709126 -491.057098 + vertex -230.000000 11.718349 -491.067108 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.000002 -0.616772 -0.787142 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -230.000000 11.208927 -490.665222 + vertex -230.000000 11.698379 -491.048737 + endloop + endfacet + facet normal 0.000002 -0.616755 -0.787155 + outer loop + vertex -209.582581 11.709126 -491.057098 + vertex -209.724609 11.209369 -490.665527 + vertex -230.000000 11.698379 -491.048737 + endloop + endfacet + facet normal 0.945832 -0.324656 0.000000 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.704285 11.268581 -470.000000 + vertex -209.724609 11.209369 -470.000000 + endloop + endfacet + facet normal 0.082580 0.996584 0.000000 + outer loop + vertex -201.785110 0.065057 -470.000000 + vertex -201.696243 0.057692 -530.000000 + vertex -202.481354 0.122748 -530.000000 + endloop + endfacet + facet normal 0.082578 0.996585 0.000000 + outer loop + vertex -202.481354 0.122748 -470.000000 + vertex -201.785110 0.065057 -470.000000 + vertex -202.481354 0.122748 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.735953 0.677032 + outer loop + vertex -230.000000 12.156562 -508.456818 + vertex -230.000000 12.147269 -508.466919 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.962250 -0.272168 -0.000001 + outer loop + vertex -209.588669 11.687696 -530.000000 + vertex -209.582581 11.709126 -508.942902 + vertex -209.723984 11.209196 -509.332001 + endloop + endfacet + facet normal 0.962246 -0.272180 -0.000002 + outer loop + vertex -209.724014 11.209204 -530.000000 + vertex -209.588669 11.687696 -530.000000 + vertex -209.723984 11.209196 -509.332001 + endloop + endfacet + facet normal 0.000000 -0.735746 0.677257 + outer loop + vertex -230.000000 12.147269 -508.466919 + vertex -230.000000 11.709126 -508.942902 + vertex -209.582581 11.709126 -508.942902 + endloop + endfacet + facet normal 0.000000 -0.735751 0.677253 + outer loop + vertex -230.000000 12.147269 -508.466919 + vertex -209.582581 11.709126 -508.942902 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.000000 -0.614081 -0.789243 + outer loop + vertex -209.582581 11.709126 -491.057098 + vertex -230.000000 11.698379 -491.048737 + vertex -230.000000 11.709126 -491.057098 + endloop + endfacet + facet normal -0.000002 -0.477302 -0.878739 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -230.000000 11.186790 -490.653198 + vertex -230.000000 11.208927 -490.665222 + endloop + endfacet + facet normal -0.000003 -0.478005 -0.878357 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.729507 11.186769 -490.653229 + vertex -230.000000 11.208927 -490.665222 + endloop + endfacet + facet normal 0.977380 -0.211493 0.000000 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -209.724609 11.209369 -470.000000 + vertex -209.729294 11.187720 -470.000000 + endloop + endfacet + facet normal 0.977309 -0.211818 0.000000 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -209.724609 11.209369 -490.665527 + vertex -209.724609 11.209369 -470.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -202.481354 0.122748 -470.000000 + vertex -202.481354 0.122748 -530.000000 + vertex -203.158600 0.294249 -530.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -203.245056 0.316143 -470.000000 + vertex -202.481354 0.122748 -470.000000 + vertex -203.158600 0.294249 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.614203 0.789148 + outer loop + vertex -209.723984 11.209196 -509.332001 + vertex -230.000000 11.709126 -508.942902 + vertex -230.000000 11.219432 -509.324036 + endloop + endfacet + facet normal 0.000000 -0.614201 0.789149 + outer loop + vertex -209.723984 11.209196 -509.332001 + vertex -209.582581 11.709126 -508.942902 + vertex -230.000000 11.709126 -508.942902 + endloop + endfacet + facet normal 0.986377 -0.164503 -0.000002 + outer loop + vertex -209.734314 11.147446 -530.000000 + vertex -209.724014 11.209204 -530.000000 + vertex -209.723984 11.209196 -509.332001 + endloop + endfacet + facet normal -0.000002 -0.478835 -0.877905 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -230.000000 10.618603 -490.343292 + vertex -230.000000 11.186790 -490.653198 + endloop + endfacet + facet normal -0.000002 -0.478838 -0.877903 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -209.855408 10.606782 -490.336884 + vertex -230.000000 11.186790 -490.653198 + endloop + endfacet + facet normal 0.977241 -0.212134 0.000000 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -209.729294 11.187720 -470.000000 + vertex -209.849976 10.631775 -470.000000 + endloop + endfacet + facet normal 0.977241 -0.212134 0.000000 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -209.729507 11.186769 -490.653229 + vertex -209.729294 11.187720 -470.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -203.245056 0.316143 -470.000000 + vertex -203.158600 0.294249 -530.000000 + vertex -203.922302 0.487644 -530.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -203.922302 0.487644 -470.000000 + vertex -203.245056 0.316143 -470.000000 + vertex -203.922302 0.487644 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.613867 0.789409 + outer loop + vertex -209.723984 11.209196 -509.332001 + vertex -230.000000 11.219432 -509.324036 + vertex -230.000000 11.208757 -509.332336 + endloop + endfacet + facet normal 0.962139 -0.272560 0.000333 + outer loop + vertex -209.734314 11.147446 -530.000000 + vertex -209.723984 11.209196 -509.332001 + vertex -209.730042 11.187792 -509.348694 + endloop + endfacet + facet normal 0.962094 -0.272718 0.000334 + outer loop + vertex -209.740112 11.126990 -530.000000 + vertex -209.734314 11.147446 -530.000000 + vertex -209.730042 11.187792 -509.348694 + endloop + endfacet + facet normal 0.000000 -0.476614 -0.879112 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -230.000000 10.606782 -490.336884 + vertex -230.000000 10.618603 -490.343292 + endloop + endfacet + facet normal 0.989587 -0.143938 -0.000087 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -209.855408 10.606782 -490.336884 + vertex -209.849976 10.631775 -470.000000 + endloop + endfacet + facet normal 0.989583 -0.143960 -0.000087 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -209.849976 10.631775 -470.000000 + vertex -209.937180 10.032334 -470.000000 + endloop + endfacet + facet normal 0.401700 0.915771 0.000000 + outer loop + vertex -203.922302 0.487644 -470.000000 + vertex -203.922302 0.487644 -530.000000 + vertex -204.562073 0.768277 -530.000000 + endloop + endfacet + facet normal 0.401696 0.915773 0.000000 + outer loop + vertex -204.643753 0.804103 -470.000000 + vertex -203.922302 0.487644 -470.000000 + vertex -204.562073 0.768277 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.615132 0.788424 + outer loop + vertex -209.730042 11.187792 -509.348694 + vertex -230.000000 11.208757 -509.332336 + vertex -230.000000 11.187792 -509.348694 + endloop + endfacet + facet normal 0.000000 -0.614981 0.788542 + outer loop + vertex -209.730042 11.187792 -509.348694 + vertex -209.723984 11.209196 -509.332001 + vertex -230.000000 11.208757 -509.332336 + endloop + endfacet + facet normal 0.977487 -0.210994 0.000145 + outer loop + vertex -209.740112 11.126990 -530.000000 + vertex -209.730042 11.187792 -509.348694 + vertex -209.855408 10.606782 -509.663116 + endloop + endfacet + facet normal 0.977491 -0.210978 0.000145 + outer loop + vertex -209.860123 10.570965 -530.000000 + vertex -209.740112 11.126990 -530.000000 + vertex -209.855408 10.606782 -509.663116 + endloop + endfacet + facet normal -0.000001 -0.324673 -0.945826 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 9.994597 -490.126740 + vertex -230.000000 10.606782 -490.336884 + endloop + endfacet + facet normal 0.000000 -0.324658 -0.945831 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 10.606782 -490.336884 + endloop + endfacet + facet normal 0.995394 -0.095874 -0.000210 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.937180 10.032334 -470.000000 + vertex -209.959244 9.803257 -470.000000 + endloop + endfacet + facet normal 0.995389 -0.095925 -0.000210 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.946274 9.981941 -490.122406 + vertex -209.937180 10.032334 -470.000000 + endloop + endfacet + facet normal 0.401696 0.915773 0.000000 + outer loop + vertex -204.643753 0.804103 -470.000000 + vertex -204.562073 0.768277 -530.000000 + vertex -205.283524 1.084736 -530.000000 + endloop + endfacet + facet normal 0.401700 0.915771 0.000000 + outer loop + vertex -205.283524 1.084736 -470.000000 + vertex -204.643753 0.804103 -470.000000 + vertex -205.283524 1.084736 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.476142 0.879368 + outer loop + vertex -209.730042 11.187792 -509.348694 + vertex -230.000000 11.187792 -509.348694 + vertex -230.000000 11.175900 -509.355133 + endloop + endfacet + facet normal 0.989590 -0.143917 0.000024 + outer loop + vertex -209.860123 10.570965 -530.000000 + vertex -209.855408 10.606782 -509.663116 + vertex -209.946274 9.981941 -509.877625 + endloop + endfacet + facet normal 0.989588 -0.143932 0.000024 + outer loop + vertex -209.947220 9.972140 -530.000000 + vertex -209.860123 10.570965 -530.000000 + vertex -209.946274 9.981941 -509.877625 + endloop + endfacet + facet normal 0.000000 -0.475938 0.879479 + outer loop + vertex -209.855408 10.606782 -509.663116 + vertex -230.000000 11.175900 -509.355133 + vertex -230.000000 10.606782 -509.663116 + endloop + endfacet + facet normal 0.000000 -0.475942 0.879476 + outer loop + vertex -209.855408 10.606782 -509.663116 + vertex -209.730042 11.187792 -509.348694 + vertex -230.000000 11.175900 -509.355133 + endloop + endfacet + facet normal 0.000000 -0.323938 -0.946078 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 9.981941 -490.122406 + vertex -230.000000 9.994597 -490.126740 + endloop + endfacet + facet normal 0.000035 -0.215706 -0.976458 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -230.000000 9.734859 -490.068542 + vertex -230.000000 9.968742 -490.120209 + endloop + endfacet + facet normal 0.000035 -0.215701 -0.976459 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -209.969269 9.743214 -490.069672 + vertex -230.000000 9.968742 -490.120209 + endloop + endfacet + facet normal 0.986346 -0.164684 0.000000 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.959244 9.803257 -470.000000 + vertex -209.969269 9.743214 -470.000000 + endloop + endfacet + facet normal 0.546944 0.837169 0.000000 + outer loop + vertex -205.283524 1.084736 -470.000000 + vertex -205.283524 1.084736 -530.000000 + vertex -205.868393 1.466845 -530.000000 + endloop + endfacet + facet normal 0.546945 0.837168 0.000000 + outer loop + vertex -205.943054 1.515625 -470.000000 + vertex -205.283524 1.084736 -470.000000 + vertex -205.868393 1.466845 -530.000000 + endloop + endfacet + facet normal 0.995393 -0.095879 0.000000 + outer loop + vertex -209.947220 9.972140 -530.000000 + vertex -209.946274 9.981941 -509.877625 + vertex -209.969269 9.743214 -509.930359 + endloop + endfacet + facet normal 0.995394 -0.095871 0.000000 + outer loop + vertex -209.969269 9.743214 -530.000000 + vertex -209.947220 9.972140 -530.000000 + vertex -209.969269 9.743214 -509.930359 + endloop + endfacet + facet normal 0.000000 -0.324700 0.945817 + outer loop + vertex -209.946274 9.981941 -509.877625 + vertex -230.000000 10.594069 -509.667480 + vertex -230.000000 9.981941 -509.877625 + endloop + endfacet + facet normal 0.000000 -0.324699 0.945817 + outer loop + vertex -209.946274 9.981941 -509.877625 + vertex -209.855408 10.606782 -509.663116 + vertex -230.000000 10.594069 -509.667480 + endloop + endfacet + facet normal 0.000000 -0.324687 0.945821 + outer loop + vertex -209.855408 10.606782 -509.663116 + vertex -230.000000 10.606782 -509.663116 + vertex -230.000000 10.594069 -509.667480 + endloop + endfacet + facet normal 0.000000 -0.164214 -0.986425 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 9.968742 -490.120209 + vertex -230.000000 9.981941 -490.122406 + endloop + endfacet + facet normal 0.000000 -0.134406 -0.990926 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -230.000000 9.330317 -490.013672 + vertex -230.000000 9.734859 -490.068542 + endloop + endfacet + facet normal 0.000000 -0.134396 -0.990928 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.993942 9.330317 -490.013672 + vertex -230.000000 9.734859 -490.068542 + endloop + endfacet + facet normal 0.998219 -0.059652 0.000000 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -209.969269 9.743214 -470.000000 + vertex -209.992935 9.347181 -470.000000 + endloop + endfacet + facet normal 0.998219 -0.059651 0.000000 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -209.969269 9.743214 -490.069672 + vertex -209.969269 9.743214 -470.000000 + endloop + endfacet + facet normal 0.546945 0.837168 0.000000 + outer loop + vertex -205.943054 1.515625 -470.000000 + vertex -205.868393 1.466845 -530.000000 + vertex -206.527924 1.897735 -530.000000 + endloop + endfacet + facet normal 0.546944 0.837169 0.000000 + outer loop + vertex -206.527924 1.897735 -470.000000 + vertex -205.943054 1.515625 -470.000000 + vertex -206.527924 1.897735 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.215698 0.976460 + outer loop + vertex -209.969269 9.743214 -509.930359 + vertex -209.946274 9.981941 -509.877625 + vertex -230.000000 9.981941 -509.877625 + endloop + endfacet + facet normal 0.000000 -0.215693 0.976461 + outer loop + vertex -209.969269 9.743214 -509.930359 + vertex -230.000000 9.981941 -509.877625 + vertex -230.000000 9.748044 -509.929291 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -209.969269 9.743214 -509.930359 + vertex -209.969269 9.682341 -530.000000 + vertex -209.969269 9.743214 -530.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -230.000000 9.316967 -490.013672 + vertex -230.000000 9.330317 -490.013672 + endloop + endfacet + facet normal 0.999832 -0.018309 -0.000035 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.992935 9.347181 -470.000000 + vertex -209.998764 9.028878 -470.000000 + endloop + endfacet + facet normal 0.999833 -0.018300 -0.000035 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.993942 9.330317 -490.013672 + vertex -209.992935 9.347181 -470.000000 + endloop + endfacet + facet normal 0.677282 0.735724 0.000000 + outer loop + vertex -206.527924 1.897735 -470.000000 + vertex -206.527924 1.897735 -530.000000 + vertex -207.041916 2.370898 -530.000000 + endloop + endfacet + facet normal 0.677284 0.735722 0.000000 + outer loop + vertex -207.107529 2.431302 -470.000000 + vertex -206.527924 1.897735 -470.000000 + vertex -207.041916 2.370898 -530.000000 + endloop + endfacet + facet normal 0.000020 -0.134327 0.990937 + outer loop + vertex -209.993942 9.330317 -509.986328 + vertex -230.000000 9.748044 -509.929291 + vertex -230.000000 9.343486 -509.984131 + endloop + endfacet + facet normal 0.000020 -0.134326 0.990937 + outer loop + vertex -209.993942 9.330317 -509.986328 + vertex -209.969269 9.743214 -509.930359 + vertex -230.000000 9.748044 -509.929291 + endloop + endfacet + facet normal 0.998218 -0.059675 0.000181 + outer loop + vertex -209.969269 9.682341 -530.000000 + vertex -209.969269 9.743214 -509.930359 + vertex -209.993942 9.330317 -509.986328 + endloop + endfacet + facet normal 0.998218 -0.059677 0.000181 + outer loop + vertex -209.992935 9.286471 -530.000000 + vertex -209.969269 9.682341 -530.000000 + vertex -209.993942 9.330317 -509.986328 + endloop + endfacet + facet normal 0.000027 -0.041171 -0.999152 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -230.000000 8.991838 -490.000275 + vertex -230.000000 9.316967 -490.013672 + endloop + endfacet + facet normal 0.000027 -0.041166 -0.999152 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -210.000015 8.998481 -490.000000 + vertex -230.000000 9.316967 -490.013672 + endloop + endfacet + facet normal 0.999829 0.018481 -0.000091 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.998764 9.028878 -470.000000 + vertex -209.992935 8.713528 -470.000000 + endloop + endfacet + facet normal 0.999829 0.018471 -0.000091 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -210.000015 8.998481 -490.000000 + vertex -209.992935 8.713528 -470.000000 + endloop + endfacet + facet normal 0.677284 0.735722 0.000000 + outer loop + vertex -207.107529 2.431302 -470.000000 + vertex -207.041916 2.370898 -530.000000 + vertex -207.621521 2.904465 -530.000000 + endloop + endfacet + facet normal 0.677282 0.735724 0.000000 + outer loop + vertex -207.621521 2.904465 -470.000000 + vertex -207.107529 2.431302 -470.000000 + vertex -207.621521 2.904465 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.164584 0.986363 + outer loop + vertex -209.993942 9.330317 -509.986328 + vertex -230.000000 9.343486 -509.984131 + vertex -230.000000 9.330317 -509.986328 + endloop + endfacet + facet normal 0.999829 -0.018471 0.000091 + outer loop + vertex -209.992935 9.286471 -530.000000 + vertex -209.993942 9.330317 -509.986328 + vertex -210.000015 9.001518 -510.000000 + endloop + endfacet + facet normal 0.999829 -0.018481 0.000091 + outer loop + vertex -209.998764 8.971121 -530.000000 + vertex -209.992935 9.286471 -530.000000 + vertex -210.000015 9.001518 -510.000000 + endloop + endfacet + facet normal 0.000000 0.041545 -0.999137 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.993942 8.669682 -490.013672 + vertex -230.000000 8.669682 -490.013672 + endloop + endfacet + facet normal 0.000000 0.041550 -0.999136 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -230.000000 8.669682 -490.013672 + vertex -230.000000 8.991838 -490.000275 + endloop + endfacet + facet normal 0.998218 0.059677 -0.000181 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -209.992935 8.713528 -470.000000 + vertex -209.969269 8.317658 -470.000000 + endloop + endfacet + facet normal 0.998218 0.059675 -0.000181 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.993942 8.669682 -490.013672 + vertex -209.969269 8.317658 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614217 0.000000 + outer loop + vertex -208.050629 3.455776 -530.000000 + vertex -208.105408 3.526156 -470.000000 + vertex -207.621521 2.904465 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614218 0.000000 + outer loop + vertex -207.621521 2.904465 -530.000000 + vertex -208.050629 3.455776 -530.000000 + vertex -207.621521 2.904465 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.041545 0.999137 + outer loop + vertex -210.000015 9.001518 -510.000000 + vertex -209.993942 9.330317 -509.986328 + vertex -230.000000 9.330317 -509.986328 + endloop + endfacet + facet normal 0.000000 -0.041550 0.999136 + outer loop + vertex -210.000015 9.001518 -510.000000 + vertex -230.000000 9.330317 -509.986328 + vertex -230.000000 9.008161 -509.999725 + endloop + endfacet + facet normal 0.999833 0.018300 0.000035 + outer loop + vertex -209.992935 8.652818 -530.000000 + vertex -210.000015 9.001518 -510.000000 + vertex -209.993942 8.669682 -509.986328 + endloop + endfacet + facet normal 0.999832 0.018309 0.000035 + outer loop + vertex -209.992935 8.652818 -530.000000 + vertex -209.998764 8.971121 -530.000000 + vertex -210.000015 9.001518 -510.000000 + endloop + endfacet + facet normal 0.000000 0.164584 -0.986363 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -230.000000 8.656513 -490.015869 + vertex -230.000000 8.669682 -490.013672 + endloop + endfacet + facet normal 0.000020 0.134400 -0.990927 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -230.000000 8.251955 -490.070740 + vertex -230.000000 8.656513 -490.015869 + endloop + endfacet + facet normal 0.000020 0.134397 -0.990927 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -209.969269 8.256785 -490.069672 + vertex -230.000000 8.251955 -490.070740 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.969269 8.317658 -470.000000 + vertex -209.969269 8.256785 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614218 0.000000 + outer loop + vertex -208.534515 4.077466 -530.000000 + vertex -208.534515 4.077466 -470.000000 + vertex -208.105408 3.526156 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614217 0.000000 + outer loop + vertex -208.050629 3.455776 -530.000000 + vertex -208.534515 4.077466 -530.000000 + vertex -208.105408 3.526156 -470.000000 + endloop + endfacet + facet normal 0.000027 0.041171 0.999152 + outer loop + vertex -210.000015 9.001518 -510.000000 + vertex -230.000000 9.008161 -509.999725 + vertex -230.000000 8.683032 -509.986328 + endloop + endfacet + facet normal 0.000027 0.041166 0.999152 + outer loop + vertex -209.993942 8.669682 -509.986328 + vertex -210.000015 9.001518 -510.000000 + vertex -230.000000 8.683032 -509.986328 + endloop + endfacet + facet normal 0.998219 0.059651 0.000000 + outer loop + vertex -209.969269 8.256785 -530.000000 + vertex -209.993942 8.669682 -509.986328 + vertex -209.969269 8.256785 -509.930359 + endloop + endfacet + facet normal 0.998219 0.059652 0.000000 + outer loop + vertex -209.969269 8.256785 -530.000000 + vertex -209.992935 8.652818 -530.000000 + vertex -209.993942 8.669682 -509.986328 + endloop + endfacet + facet normal 0.000000 0.215698 -0.976460 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.946274 8.018058 -490.122406 + vertex -230.000000 8.018058 -490.122406 + endloop + endfacet + facet normal 0.000000 0.215693 -0.976461 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -230.000000 8.018058 -490.122406 + vertex -230.000000 8.251955 -490.070740 + endloop + endfacet + facet normal 0.995394 0.095871 0.000000 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.969269 8.256785 -470.000000 + vertex -209.947220 8.027859 -470.000000 + endloop + endfacet + facet normal 0.995393 0.095879 0.000000 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -209.969269 8.256785 -490.069672 + vertex -209.947220 8.027859 -470.000000 + endloop + endfacet + facet normal 0.868007 0.496552 0.000000 + outer loop + vertex -209.062256 5.000000 -494.000000 + vertex -209.036621 4.955180 -470.000000 + vertex -208.534515 4.077466 -470.000000 + endloop + endfacet + facet normal 0.868011 0.496545 0.000000 + outer loop + vertex -208.534515 4.077466 -530.000000 + vertex -209.024704 4.934365 -530.000000 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.868009 0.496549 0.000000 + outer loop + vertex -208.534515 4.077466 -470.000000 + vertex -208.534515 4.077466 -530.000000 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -209.993942 8.669682 -509.986328 + vertex -230.000000 8.683032 -509.986328 + vertex -230.000000 8.669682 -509.986328 + endloop + endfacet + facet normal 0.000000 0.134332 0.990936 + outer loop + vertex -209.993942 8.669682 -509.986328 + vertex -230.000000 8.669682 -509.986328 + vertex -230.000000 8.265140 -509.931488 + endloop + endfacet + facet normal 0.000000 0.134324 0.990937 + outer loop + vertex -209.969269 8.256785 -509.930359 + vertex -209.993942 8.669682 -509.986328 + vertex -230.000000 8.265140 -509.931488 + endloop + endfacet + facet normal 0.986346 0.164684 0.000000 + outer loop + vertex -209.959244 8.196742 -530.000000 + vertex -209.969269 8.256785 -530.000000 + vertex -209.969269 8.256785 -509.930359 + endloop + endfacet + facet normal 0.000000 0.324658 -0.945832 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -230.000000 7.405930 -490.332520 + vertex -230.000000 8.018058 -490.122406 + endloop + endfacet + facet normal 0.000000 0.324658 -0.945831 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -209.855408 7.393218 -490.336884 + vertex -230.000000 7.405930 -490.332520 + endloop + endfacet + facet normal 0.989588 0.143932 -0.000024 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -209.947220 8.027859 -470.000000 + vertex -209.860123 7.429034 -470.000000 + endloop + endfacet + facet normal 0.989590 0.143917 -0.000024 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -209.946274 8.018058 -490.122406 + vertex -209.860123 7.429034 -470.000000 + endloop + endfacet + facet normal 0.879519 0.475863 -0.000051 + outer loop + vertex -209.062256 5.000000 -494.000000 + vertex -209.070984 5.018692 -470.000000 + vertex -209.036621 4.955180 -470.000000 + endloop + endfacet + facet normal 0.867837 0.496850 -0.000001 + outer loop + vertex -209.024704 4.934365 -530.000000 + vertex -209.036621 4.955180 -530.000000 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.867979 0.496601 0.000000 + outer loop + vertex -209.062256 5.000000 -494.000000 + vertex -209.024704 4.934365 -530.000000 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.000035 0.215706 0.976458 + outer loop + vertex -209.969269 8.256785 -509.930359 + vertex -230.000000 8.265140 -509.931488 + vertex -230.000000 8.031257 -509.879822 + endloop + endfacet + facet normal 0.000035 0.215701 0.976459 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -209.969269 8.256785 -509.930359 + vertex -230.000000 8.031257 -509.879822 + endloop + endfacet + facet normal 0.995389 0.095925 0.000210 + outer loop + vertex -209.937180 7.967665 -530.000000 + vertex -209.969269 8.256785 -509.930359 + vertex -209.946274 8.018058 -509.877625 + endloop + endfacet + facet normal 0.995393 0.095874 0.000210 + outer loop + vertex -209.937180 7.967665 -530.000000 + vertex -209.959244 8.196742 -530.000000 + vertex -209.969269 8.256785 -509.930359 + endloop + endfacet + facet normal 0.000000 0.324687 -0.945821 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -230.000000 7.393218 -490.336884 + vertex -230.000000 7.405930 -490.332520 + endloop + endfacet + facet normal 0.977491 0.210978 -0.000145 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -209.860123 7.429034 -470.000000 + vertex -209.740112 6.873009 -470.000000 + endloop + endfacet + facet normal 0.977488 0.210993 -0.000145 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -209.855408 7.393218 -490.336884 + vertex -209.740112 6.873009 -470.000000 + endloop + endfacet + facet normal 0.895750 0.444559 -0.000020 + outer loop + vertex -209.069092 5.013789 -493.668152 + vertex -209.077377 5.031574 -470.000000 + vertex -209.070984 5.018692 -470.000000 + endloop + endfacet + facet normal 0.895756 0.444545 -0.000020 + outer loop + vertex -209.070984 5.018692 -470.000000 + vertex -209.062256 5.000000 -494.000000 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -230.000000 5.000000 -505.746429 + vertex -230.000000 5.000000 -494.000000 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -230.000000 5.000000 -505.746429 + vertex -209.062256 5.000000 -494.000000 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.895196 0.445673 0.000124 + outer loop + vertex -209.036621 4.955180 -530.000000 + vertex -209.043411 4.968819 -530.000000 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.894912 0.446242 0.000123 + outer loop + vertex -209.062256 5.000000 -505.999969 + vertex -209.036621 4.955180 -530.000000 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.000000 0.164214 0.986425 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 8.031257 -509.879822 + vertex -230.000000 8.018058 -509.877625 + endloop + endfacet + facet normal 0.989587 0.143939 0.000087 + outer loop + vertex -209.849976 7.368225 -530.000000 + vertex -209.946274 8.018058 -509.877625 + vertex -209.855408 7.393218 -509.663116 + endloop + endfacet + facet normal 0.989583 0.143960 0.000087 + outer loop + vertex -209.849976 7.368225 -530.000000 + vertex -209.937180 7.967665 -530.000000 + vertex -209.946274 8.018058 -509.877625 + endloop + endfacet + facet normal 0.000000 0.475975 -0.879459 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -230.000000 6.824100 -490.644897 + vertex -230.000000 7.393218 -490.336884 + endloop + endfacet + facet normal 0.000000 0.475978 -0.879457 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -209.730042 6.812207 -490.651337 + vertex -230.000000 6.824100 -490.644897 + endloop + endfacet + facet normal 0.962094 0.272718 -0.000334 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -209.740112 6.873009 -470.000000 + vertex -209.734314 6.852553 -470.000000 + endloop + endfacet + facet normal 0.962137 0.272565 -0.000333 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.730042 6.812207 -490.651337 + vertex -209.734314 6.852553 -470.000000 + endloop + endfacet + facet normal 0.000000 0.999138 -0.041519 + outer loop + vertex -230.000000 5.000000 -494.000000 + vertex -230.000000 5.013498 -493.675171 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.000000 0.999138 -0.041518 + outer loop + vertex -230.000000 5.000000 -494.000000 + vertex -209.069092 5.013789 -493.668152 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.897659 0.440691 -0.000017 + outer loop + vertex -209.089096 5.054554 -493.341614 + vertex -209.096329 5.070177 -470.000000 + vertex -209.077377 5.031574 -470.000000 + endloop + endfacet + facet normal 0.897682 0.440644 -0.000017 + outer loop + vertex -209.077377 5.031574 -470.000000 + vertex -209.069092 5.013789 -493.668152 + vertex -209.089096 5.054554 -493.341614 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -230.000000 5.000000 -505.999969 + vertex -230.000000 5.000000 -505.746429 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.000000 0.999143 0.041395 + outer loop + vertex -230.000000 5.000000 -505.999969 + vertex -209.062256 5.000000 -505.999969 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.000000 0.999143 0.041395 + outer loop + vertex -230.000000 5.013418 -506.323853 + vertex -230.000000 5.000000 -505.999969 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.897255 0.441512 0.000134 + outer loop + vertex -209.043411 4.968819 -530.000000 + vertex -209.062851 5.008325 -530.000000 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.897258 0.441506 0.000134 + outer loop + vertex -209.069046 5.013708 -506.330841 + vertex -209.043411 4.968819 -530.000000 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.000000 0.323938 0.946078 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 8.018058 -509.877625 + vertex -230.000000 8.005402 -509.873291 + endloop + endfacet + facet normal 0.977241 0.212134 0.000000 + outer loop + vertex -209.729294 6.812279 -530.000000 + vertex -209.855408 7.393218 -509.663116 + vertex -209.729507 6.813230 -509.346771 + endloop + endfacet + facet normal 0.977241 0.212134 0.000000 + outer loop + vertex -209.729294 6.812279 -530.000000 + vertex -209.849976 7.368225 -530.000000 + vertex -209.855408 7.393218 -509.663116 + endloop + endfacet + facet normal -0.000001 0.324715 0.945812 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 8.005402 -509.873291 + vertex -230.000000 7.393218 -509.663116 + endloop + endfacet + facet normal 0.000000 0.324700 0.945817 + outer loop + vertex -209.855408 7.393218 -509.663116 + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 7.393218 -509.663116 + endloop + endfacet + facet normal 0.000000 0.476128 -0.879376 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -230.000000 6.812207 -490.651337 + vertex -230.000000 6.824100 -490.644897 + endloop + endfacet + facet normal 0.000000 0.614417 -0.788981 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -230.000000 6.791241 -490.667664 + vertex -230.000000 6.812207 -490.651337 + endloop + endfacet + facet normal 0.000000 0.614290 -0.789080 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -209.723984 6.790803 -490.667999 + vertex -230.000000 6.791241 -490.667664 + endloop + endfacet + facet normal 0.986376 0.164504 0.000002 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.734314 6.852553 -470.000000 + vertex -209.724014 6.790796 -470.000000 + endloop + endfacet + facet normal 0.000014 0.996588 -0.082537 + outer loop + vertex -230.000000 5.013498 -493.675171 + vertex -230.000000 5.014650 -493.661255 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.000000 0.992297 -0.123879 + outer loop + vertex -230.000000 5.014650 -493.661255 + vertex -230.000000 5.054554 -493.341614 + vertex -209.089096 5.054554 -493.341614 + endloop + endfacet + facet normal 0.000000 0.992297 -0.123879 + outer loop + vertex -230.000000 5.014650 -493.661255 + vertex -209.089096 5.054554 -493.341614 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.900589 0.434671 -0.000012 + outer loop + vertex -209.121750 5.122224 -493.018738 + vertex -209.127365 5.134480 -470.000000 + vertex -209.096329 5.070177 -470.000000 + endloop + endfacet + facet normal 0.900603 0.434642 -0.000012 + outer loop + vertex -209.096329 5.070177 -470.000000 + vertex -209.089096 5.054554 -493.341614 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.000014 0.996591 0.082503 + outer loop + vertex -230.000000 5.014570 -506.337769 + vertex -230.000000 5.013418 -506.323853 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.000000 0.992314 0.123747 + outer loop + vertex -230.000000 5.014570 -506.337769 + vertex -209.069046 5.013708 -506.330841 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.000000 0.992313 0.123751 + outer loop + vertex -230.000000 5.054554 -506.658386 + vertex -230.000000 5.014570 -506.337769 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.900351 0.435165 0.000150 + outer loop + vertex -209.062851 5.008325 -530.000000 + vertex -209.094666 5.074149 -530.000000 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.900359 0.435148 0.000151 + outer loop + vertex -209.089096 5.054554 -506.658386 + vertex -209.062851 5.008325 -530.000000 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.977310 0.211814 0.000000 + outer loop + vertex -209.724609 6.790630 -530.000000 + vertex -209.729507 6.813230 -509.346771 + vertex -209.724609 6.790630 -509.334442 + endloop + endfacet + facet normal 0.977380 0.211493 0.000000 + outer loop + vertex -209.724609 6.790630 -530.000000 + vertex -209.729294 6.812279 -530.000000 + vertex -209.729507 6.813230 -509.346771 + endloop + endfacet + facet normal -0.000002 0.478835 0.877905 + outer loop + vertex -209.855408 7.393218 -509.663116 + vertex -230.000000 7.381397 -509.656708 + vertex -230.000000 6.813209 -509.346802 + endloop + endfacet + facet normal -0.000002 0.478838 0.877903 + outer loop + vertex -209.729507 6.813230 -509.346771 + vertex -209.855408 7.393218 -509.663116 + vertex -230.000000 6.813209 -509.346802 + endloop + endfacet + facet normal 0.000000 0.476614 0.879112 + outer loop + vertex -209.855408 7.393218 -509.663116 + vertex -230.000000 7.393218 -509.663116 + vertex -230.000000 7.381397 -509.656708 + endloop + endfacet + facet normal 0.000000 0.613867 -0.789409 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -230.000000 6.780567 -490.675964 + vertex -230.000000 6.791241 -490.667664 + endloop + endfacet + facet normal 0.962247 0.272179 0.000002 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.724014 6.790796 -470.000000 + vertex -209.588669 6.312304 -470.000000 + endloop + endfacet + facet normal 0.962250 0.272168 0.000001 + outer loop + vertex -209.582581 6.290874 -491.057098 + vertex -209.723984 6.790803 -490.667999 + vertex -209.588669 6.312304 -470.000000 + endloop + endfacet + facet normal 0.000000 0.978735 -0.205128 + outer loop + vertex -230.000000 5.054554 -493.341614 + vertex -230.000000 5.120798 -493.025543 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.000000 0.978735 -0.205127 + outer loop + vertex -230.000000 5.054554 -493.341614 + vertex -209.121750 5.122224 -493.018738 + vertex -209.089096 5.054554 -493.341614 + endloop + endfacet + facet normal 0.904900 0.425625 -0.000006 + outer loop + vertex -209.166199 5.216731 -492.701202 + vertex -209.169693 5.224472 -470.000000 + vertex -209.127365 5.134480 -470.000000 + endloop + endfacet + facet normal 0.904903 0.425618 -0.000006 + outer loop + vertex -209.127365 5.134480 -470.000000 + vertex -209.121750 5.122224 -493.018738 + vertex -209.166199 5.216731 -492.701202 + endloop + endfacet + facet normal 0.000000 0.978652 0.205524 + outer loop + vertex -230.000000 5.054554 -506.658386 + vertex -209.089096 5.054554 -506.658386 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.000000 0.978652 0.205525 + outer loop + vertex -230.000000 5.121515 -506.977234 + vertex -230.000000 5.054554 -506.658386 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.904666 0.426122 0.000174 + outer loop + vertex -209.094666 5.074149 -530.000000 + vertex -209.137100 5.164239 -530.000000 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.904707 0.426033 0.000175 + outer loop + vertex -209.122101 5.122957 -506.984100 + vertex -209.094666 5.074149 -530.000000 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal -0.000002 0.478229 0.878235 + outer loop + vertex -209.729507 6.813230 -509.346771 + vertex -230.000000 6.813209 -509.346802 + vertex -230.000000 6.791072 -509.334747 + endloop + endfacet + facet normal -0.000003 0.478911 0.877863 + outer loop + vertex -209.724609 6.790630 -509.334442 + vertex -209.729507 6.813230 -509.346771 + vertex -230.000000 6.791072 -509.334747 + endloop + endfacet + facet normal 0.945831 0.324658 0.000000 + outer loop + vertex -209.704285 6.731418 -530.000000 + vertex -209.724609 6.790630 -530.000000 + vertex -209.724609 6.790630 -509.334442 + endloop + endfacet + facet normal 0.000000 0.614203 -0.789148 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -230.000000 6.290874 -491.057098 + vertex -230.000000 6.780567 -490.675964 + endloop + endfacet + facet normal 0.000000 0.614201 -0.789149 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.582581 6.290874 -491.057098 + vertex -230.000000 6.290874 -491.057098 + endloop + endfacet + facet normal 0.945358 0.326033 -0.000058 + outer loop + vertex -209.582581 6.290874 -491.057098 + vertex -209.588669 6.312304 -470.000000 + vertex -209.441284 5.884950 -470.000000 + endloop + endfacet + facet normal 0.945358 0.326035 -0.000058 + outer loop + vertex -209.428299 5.843437 -491.543152 + vertex -209.582581 6.290874 -491.057098 + vertex -209.441284 5.884950 -470.000000 + endloop + endfacet + facet normal 0.000014 0.969380 -0.245566 + outer loop + vertex -230.000000 5.120798 -493.025543 + vertex -230.000000 5.124215 -493.012054 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.000000 0.958452 -0.285254 + outer loop + vertex -230.000000 5.124215 -493.012054 + vertex -230.000000 5.216731 -492.701202 + vertex -209.166199 5.216731 -492.701202 + endloop + endfacet + facet normal 0.000000 0.958450 -0.285260 + outer loop + vertex -230.000000 5.124215 -493.012054 + vertex -209.166199 5.216731 -492.701202 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.914017 0.405675 0.000002 + outer loop + vertex -209.240967 5.385180 -492.317169 + vertex -209.241013 5.385160 -470.000000 + vertex -209.169693 5.224472 -470.000000 + endloop + endfacet + facet normal 0.914011 0.405688 0.000002 + outer loop + vertex -209.169693 5.224472 -470.000000 + vertex -209.166199 5.216731 -492.701202 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000014 0.969372 0.245598 + outer loop + vertex -230.000000 5.124933 -506.990723 + vertex -230.000000 5.121515 -506.977234 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.000000 0.958365 0.285547 + outer loop + vertex -230.000000 5.124933 -506.990723 + vertex -209.122101 5.122957 -506.984100 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.000000 0.958367 0.285539 + outer loop + vertex -230.000000 5.216731 -507.298828 + vertex -230.000000 5.124933 -506.990723 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.913835 0.406086 0.000233 + outer loop + vertex -209.137100 5.164239 -530.000000 + vertex -209.208939 5.325900 -530.000000 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.913813 0.406135 0.000232 + outer loop + vertex -209.166199 5.216731 -507.298828 + vertex -209.137100 5.164239 -530.000000 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.000002 0.616742 0.787165 + outer loop + vertex -209.724609 6.790630 -509.334442 + vertex -230.000000 6.791072 -509.334747 + vertex -230.000000 6.301621 -508.951263 + endloop + endfacet + facet normal 0.000002 0.616725 0.787179 + outer loop + vertex -209.582581 6.290874 -508.942902 + vertex -209.724609 6.790630 -509.334442 + vertex -230.000000 6.301621 -508.951263 + endloop + endfacet + facet normal 0.961875 0.273488 0.000162 + outer loop + vertex -209.567978 6.252017 -530.000000 + vertex -209.724609 6.790630 -509.334442 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.961875 0.273488 0.000162 + outer loop + vertex -209.567978 6.252017 -530.000000 + vertex -209.704285 6.731418 -530.000000 + vertex -209.724609 6.790630 -509.334442 + endloop + endfacet + facet normal 0.000000 0.735724 -0.677281 + outer loop + vertex -230.000000 5.852729 -491.533051 + vertex -230.000000 6.290874 -491.057098 + vertex -209.582581 6.290874 -491.057098 + endloop + endfacet + facet normal 0.000000 0.735729 -0.677276 + outer loop + vertex -230.000000 5.852729 -491.533051 + vertex -209.582581 6.290874 -491.057098 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.928606 0.371068 -0.000155 + outer loop + vertex -209.428299 5.843437 -491.543152 + vertex -209.441284 5.884950 -470.000000 + vertex -209.303787 5.540861 -470.000000 + endloop + endfacet + facet normal 0.928599 0.371084 -0.000155 + outer loop + vertex -209.303787 5.540861 -470.000000 + vertex -209.283997 5.482105 -492.096222 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.000000 0.915772 -0.401698 + outer loop + vertex -230.000000 5.216731 -492.701202 + vertex -230.000000 5.381650 -492.325226 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000000 0.915776 -0.401689 + outer loop + vertex -230.000000 5.216731 -492.701202 + vertex -209.240967 5.385180 -492.317169 + vertex -209.166199 5.216731 -492.701202 + endloop + endfacet + facet normal 0.945806 0.324732 0.000002 + outer loop + vertex -209.240967 5.385180 -492.317169 + vertex -209.262894 5.448890 -470.000000 + vertex -209.241013 5.385160 -470.000000 + endloop + endfacet + facet normal 0.000000 0.915829 0.401568 + outer loop + vertex -230.000000 5.222311 -507.311554 + vertex -230.000000 5.216731 -507.298828 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.000000 0.915753 0.401743 + outer loop + vertex -230.000000 5.222311 -507.311554 + vertex -209.166199 5.216731 -507.298828 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.000000 0.915754 0.401740 + outer loop + vertex -230.000000 5.387211 -507.687439 + vertex -230.000000 5.222311 -507.311554 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.879448 0.475995 -0.000002 + outer loop + vertex -209.208939 5.325900 -530.000000 + vertex -209.241013 5.385160 -530.000000 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.000000 0.614064 0.789256 + outer loop + vertex -209.582581 6.290874 -508.942902 + vertex -230.000000 6.301621 -508.951263 + vertex -230.000000 6.290874 -508.942902 + endloop + endfacet + facet normal 0.945359 0.326030 0.000054 + outer loop + vertex -209.420135 5.823334 -530.000000 + vertex -209.582581 6.290874 -508.942902 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.945359 0.326031 0.000054 + outer loop + vertex -209.420135 5.823334 -530.000000 + vertex -209.567978 6.252017 -530.000000 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.000000 0.735970 -0.677014 + outer loop + vertex -230.000000 5.843437 -491.543152 + vertex -230.000000 5.852729 -491.533051 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.000000 0.837170 -0.546943 + outer loop + vertex -230.000000 5.489660 -492.084656 + vertex -230.000000 5.843437 -491.543152 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.000000 0.837171 -0.546942 + outer loop + vertex -230.000000 5.489660 -492.084656 + vertex -209.428299 5.843437 -491.543152 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.913746 0.406286 -0.000262 + outer loop + vertex -209.283997 5.482105 -492.096222 + vertex -209.303787 5.540861 -470.000000 + vertex -209.262894 5.448890 -470.000000 + endloop + endfacet + facet normal 0.913757 0.406260 -0.000262 + outer loop + vertex -209.262894 5.448890 -470.000000 + vertex -209.240967 5.385180 -492.317169 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.000000 0.915993 -0.401194 + outer loop + vertex -230.000000 5.381650 -492.325226 + vertex -230.000000 5.387211 -492.312531 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000000 0.915801 0.401631 + outer loop + vertex -230.000000 5.387211 -507.687439 + vertex -209.240967 5.385180 -507.682800 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.000000 0.915796 0.401644 + outer loop + vertex -230.000000 5.482105 -507.903809 + vertex -230.000000 5.387211 -507.687439 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.914001 0.405712 -0.000002 + outer loop + vertex -209.241013 5.385160 -530.000000 + vertex -209.282104 5.477733 -530.000000 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.913981 0.405757 -0.000002 + outer loop + vertex -209.240967 5.385180 -507.682800 + vertex -209.241013 5.385160 -530.000000 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.000000 0.735383 0.677651 + outer loop + vertex -230.000000 6.290874 -508.942902 + vertex -230.000000 6.281650 -508.932892 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.928670 0.370906 0.000006 + outer loop + vertex -209.282104 5.477733 -530.000000 + vertex -209.420135 5.823334 -530.000000 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.928678 0.370888 0.000006 + outer loop + vertex -209.283997 5.482105 -507.903809 + vertex -209.282104 5.477733 -530.000000 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.000000 0.735751 0.677253 + outer loop + vertex -230.000000 5.843437 -508.456818 + vertex -209.428299 5.843437 -508.456818 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.000000 0.735758 0.677244 + outer loop + vertex -230.000000 6.281650 -508.932892 + vertex -230.000000 5.843437 -508.456818 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.000000 0.837202 -0.546894 + outer loop + vertex -230.000000 5.482105 -492.096222 + vertex -230.000000 5.489660 -492.084656 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.000000 0.915754 -0.401739 + outer loop + vertex -230.000000 5.387211 -492.312531 + vertex -230.000000 5.482105 -492.096222 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.000000 0.915761 -0.401724 + outer loop + vertex -230.000000 5.387211 -492.312531 + vertex -209.283997 5.482105 -492.096222 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000000 0.837143 0.546984 + outer loop + vertex -230.000000 5.482105 -507.903809 + vertex -209.283997 5.482105 -507.903809 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.000000 0.837148 0.546977 + outer loop + vertex -230.000000 5.835933 -508.445343 + vertex -230.000000 5.482105 -507.903809 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.000000 0.836924 0.547319 + outer loop + vertex -230.000000 5.843437 -508.456818 + vertex -230.000000 5.835933 -508.445343 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/Final.stl b/apps/cpu/Multiphase/backup/Final.stl new file mode 100644 index 0000000000000000000000000000000000000000..a164dcafa1f68e70277d5d2c41d853c7416e4cff GIT binary patch literal 36084 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 R;_0nd3la!vQHoX({|D4BevkkF literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..80e088eaddb292386f6349b11f0cbefa75824501 GIT binary patch literal 25943 zcmZ6SWlSVY@aB=h-5myZclTv*XK{CTU)&bk!JS1HcV}^TcXxM}1@66Ea=H5_-CwGc zPIu*(r@AXuD)P_(YzPPlc!<>CZUw}t#C#1H2nZTh2ngi=tWr*99u5|c?kwI8_LsVP zZWTP}0n;@qKC*($=`oiB3fY_@ZH*Z&gvU$EoY5FO!ua^)d#&AF<BLJkre=ww<~K>J zDKoa;|GrnHCONSp5eZ|R=~Z(IX;8hQV_2OLrg9RI!cJiSLhH^U&HhIb4R?}=>B=J@ zb9}|6jUM?C>@P8s&8~dyo;qG^-WNpAlX@WQdWxLEB8`-WY0iJ+6--b`E;|=Y*GDv; zmiK;|&2%IB6JFxG7}nVoouN6Ej#~T`b`>q!OiiHf1uvw5F3;#nw6kx}ju+IukVJ;G zzxxp^DiNX_@9yC%<G~IL0ix9v#YTA0%2?=d!ttr^UG$=GVP5dY!3hjIj<A_v5P}4) zA+M>&Tn4|coNmpriPfXaxoQXjdspC1wDEzPcFPlwrVc;uVRh*kT6FpITl><NftH8P zmge^NZw>^W2DY)kqYV6-<kt-hLzG{46V`84;_9ZWdkqxNC7E-Knj!6;r4)Ts-URSF z)~l>8>$s`ojlNdm?1@zEc&tPU2528L@CDZ?aCdJV_222JdXxF)=H6_425O!0<pg)t z;iUdy#Jm(%M=kGUEcE?r@Qv$q9e~En9IDe`xfkf!V1_cpifAkMc}^i?x^{wpYr3pI zSM_du={>%^J?p3(9`50o%XYO#jqM6iRMqm+zSuKUBu0)R&pa}=C8gIsEj!@WsTTss zvW-UbDt{%?XP;3~<8qiz$YbsR)c>4YF|NBJON4XTSxmo<H1<pBXaO|*s^5+_&U-AE zEYRBnvX^&75Ay7{WNBx`#L3VbZ|oRkffCKHF?g_DDA$jXeb6YN)hN4w2w^!%igYjv z<B9(Oe(n^fVS56H&!xTHN`fK-hq8cOupBX}+?;no>dg2^#;X6<PyVbvX`+aY2p!+{ zrY@$@Hlt6f?ua4|L!Cb$r!WzSp!Kb$h8CP%{YnQ358>IroDIYUIlPqSQCv<6^R)gQ z{B^g<Qr3+UzfPwbg01hM*xO2#xO7~szZ~WqEl?GAXEab1q4f=Py&Cy1A}F^|WIBk@ zYaZJ5YfIf2SPX?gzw&DgrDzUvW8=hed|7{0j79kTVq%%TUz;?|Ka2X3?hBjV>`Uk4 z<k=p(C4Blzvg;V$Z;@fC><8@)0nj(Ggk#Vo)Xde4Zg<7cz{ngbmB>&%ehKEonm7V0 zk`qC$?X9sO#^_~KuSOyCZ6?%iz`2iC_;vrSHlWrTk#90LCBnSQjnIP=&ZXm)H09?C zCwB>LCUBccL;dNsQVSKhO;_+hG`aQc)}ge{{xVTdEHrpg?hX$PMraX}B+n*@OUW&5 zxlZUn6Phl@xm|J%*n(3w8?SlTxb+=b|4G5?{Z3qmaI=42g1>(>RtLz(bFmK_)T3LM zSmmm_bz(6ZUT02Dfmx7P9rL?>4zG`1Vxq9c9gl$YRMuGNTfM9(#GR7R11LgF*;>RB z?XMbsHp6UwqYn6qoAN?UnEYb#-z=v>YhTMN87b$P0mA;bc6|b`>t-96hg{#PT_DYi z4zrdkGKZY|vEi&`b9;g7je8ZTC$zq|iaQ<gbEmm8^N@={^m)<#*{xrvDZJr)rG9nR zcFEg_Y${qeZN7eQbGkW*=QGoxNiysBMSXj^oH?%w&^XGA<kWojuIGN%t?|{6ah@U7 z>8F)*Jy#PFq|MaTACaP6-PMn26qZ$^mh+ji{^B)IX}c9@omPL!ld=TDM<z1FK@mO? z?_4ZIe6<OUe!f+P&FCl9T)S6%f5h?1u9@1+AK}H_rI>DA#gW5t%wKKRS(8E%MF~Y) z5In^@D}nohR{8(bcl!9z;{_4|f)@n>;=ci*V&dwqZf)Xh!D8y_ys4$9%)pKw@Y{&} z*O>17s$8%P^xFY*@Qzz3DHVC;uIXO4mo7SMPF&~!@$@QnR=pr+&UIGJrPy=hw(w=n zZk})DpT!q~NcS+fLdg!~aUZtMT4d#<!J^DwX>LS$Ql?q}lt42XYhyHT8{UCq=1jR* z=8QxhX2J}*?n(8L^7G*)l<>{=^h>2QYv+VSeZDzd@r&<o@V9dX5t)Ac50_QX1xJDP z0<DtOr($XLKc2aSTLBb*c!~oHuw{La+y$+r7774b^2u7mrtFJy*bNDb^gnshO3qJ~ zQ&OWz#_}xm1s_=}`V_f;kbdV}-oJF=?8-$sN@63b`IB|uD-p>3h4oDk@kP{1Nkn|1 zBs!HumNigWlKZ_IH+JbNEqH1P8u<-vH(?o?AAifqkJQ&8KS)>NdEwRB=Yc?BX9}t( zk@`~{dg{t}UEMy^jTbA6Ale~r=I24A$hD^(S$@g5K$x}uT@~k+`FLwSaM+PXn8>fT zo|T@v%xVrg^5mw-Pjgt|>K65q&`LacCP0<8#5}3Y=}L`u8lp?JB)wtPJV4NAF$+dA z;co~Z6)s6YI+uNqkFiO#ghFhsw%Nz}=+loL3Yg00<C^o;r0(f|iV6i=IlbL&SxM&W zf!_V<jTB%@0H)90FB~yB9;FtgIE(SvZixRM5su?}qksP)!uKB^sQ)h_?Ei<6btNcq z<R91HA5?WB6}*gfNKtl@S^y!_SSnQHO#d;my-rXqu*qi~O9!6hSoc&`o_0s98h1Re z-|RJHXQUZC!FhKNwhDFYs2gw7bokrIx<A;O-sizyE8nGKj0k8i-wtHc&+nnp4|YDa z%ZHI-&yRzkm!{GPBh;;U9XAuuH-`Q9Y$l*fN#LScn|uMp2@RkviuRb2h|M<BQgoB_ z**t;e&U_S-=Z+>fGg9wcS00EBf52nd4Q~;1i<OX~mm3|z#IZ-g?Koh><<yN*8{lvW zIN^__^+s7FoXuiLjiM|^ANRVbP_BS|9z5{SP*BYB+dukrT+8}(>E4)WuLOs(x%h7s zH9q<Ji$+OAcuzT5+mov8Uv8LOW}rPsohNOodo5Ys@{eZDEj07IuT~-r>-EW?F!~}4 zWaWGeXHnRhqMv~(!Bgm-olbZ;Rs_6bU?SVFPZHACjmssGJ`mmn+!WuTQ}!(^Gc76t zfv5VXE`2_A-VPinAs@+&1Yat&X~_YBJ8@jR>s$eg;`cRe3P*xJ$LpgRLy8NmQE762 zCC>=iklvt;%E5|!l%(n0LCjqXPHR1rqH1(5Mrwt+*p&ksG>wRHo2aPp%`{Ztp;+=? zw>v*C&HLuf;~ydjzfjW`3@GAh1GFK$Yf-NV36atW0{@4U5Dw2vfBeS@_y6RC<NtEP zj{f6!O}dN)^Qpbb>JP3w<t<Ej5#A_}gm(Yn!2i~g*{PxG2=7&};^~ya@kDkrTzkpK zmCZFW+@TpiBkeR_5ta}k$$qf`bLH7;%8yKzl0#yau>^x#<Dc~CCw~IIjQJ#k<2b5} zQ6(B`VDMa{5ga5aK^O=)`4LyXw_Hlssp*hkAL$)SD~U9rV0*gNTZy>`FNt#PV<A94 zdV^&q(b)PouTu5Kd!|LYh**O^1@@6q1X*)NCt=5%n2IP7Q40T1J56<%o;Wfi)gm}} z!&kvs8s@Wp45@6~ndo}gE5(7|(HzHC?~AgtNPow!-#+@+rmwx43$JgX626@ec9JZb zUw^S=`+G@k)7A|ptlYUFm-D@u^$x6kaLn|228n<5irjeuq5E%@if1YULYQWxq}j~e z8@!**dlI3<l4$;qo_O6{nl{9`FhpeMVo-s+H=T-<QTDNQ`r-Fj(J^Z$Q%xi#A~ur) zc@GLeYPS#;2}x)*YHU%kdYcu|Yw)Cg-n<|zieJx3N*N=*t|e<80x9f4tnOonmCYI3 zN=5`F;t3T762zEEAx2|pM9z*GnG`rbq|>Y8A=_Fu(b8Xn7C--aO#gOzMf)71R=u3s z+1}6`Uw<Oox}hS0E4mD76}TP7?4doM+bkLyIE?<Ef>M$0<?Emb0Wr7wKLmyIe}i(F zvsz8P?DFS&T0MK*QR{bKZlrvutI;C>R9k~ouSWv}N6-=6tUo`0V6-V)R#UafQ)gA> z+s_|VYcnpRGal_8o_D_=E(boxbO(McdVRfZI(5HKc6WdFe|C3%rWt)LFMqwBK6k%A zJjEz?e?2&D`+rS(ZFl|qbsg|=`uuPFxuzxUWBha9@%7l_d4P3ze)!&YWt{ISqix%B zdg5VX!)Z9K?1^aH*RtN_H1I&yLE&NIStfmdNFj20`Qv>3^KnPiGw{LTb9CutL2BCm zOXjKFFT?XkrsoIpP&{W>@POUM*Vk)eP19!0*UjI+_v3!iA78$FE|~pGUVkUIBQC!n zh^JjVXdoO>x?-JKnVjsnuJ79TTXxbP?rxn0ubhteuiCq}rd!5Mp4;1|th(=^kv{7A zYihFpou5BGI{OHBcjby0K1c3fdUjvNx6B`UcDu$CMdFU!f4B-~dzSQH`L|yyi{*-L zoln0yZyHT4GcH3MICzO{)f~_7dW%B)I*rVKwu){mACKR93iBL{Cbef@m3$of3h*3U zw*K9$e&6))5+Zp<@ew6PO*_BxY&Af8pD#Y@&}a4E4-mbWe(x^^UJviz)^-!K{_|bg zZi6LPZn=N;6wGmY?mu<68#&+gY_I>fdD|*@`2^$Bs_&Whe(Tyvs{B0R^V#}0_vP#} zKqS}eSv~N>bGHDkrT@dzqz(8B{J#I{?Dg-;v-4&-<Gxvx1oeGAAW-<4HSGd^M3D0N z`F!_6&a0{Ld~jO->iGP_mESz)_*dloW$nJ`Q}*zor!d|@{NlCp`#MVF`g8X1=BKyd zZ@$g`c!wntgQ>skIWQNV!{-SNli4iy0Ug^;k(|RGl^(g*GE>>bwc8&}-2r>!!<(;D zyCi67>XW0%JuY5?&uebEQx|t*Xn)@yT}5K#kAD&K#B^k9Kdmy3Eh{f0d3$x&8loS& zGJ?K71J+=2UaElC&*zU5`8jQq>s{n%8^~Y7YhHNh)ZpX(ge1W$W#9q{@<{d`d0=mu z;gifSAh=}QX1e@kD4a6I6T;_kU@DCy{Xzi-A;4w$c{5melf}3S3|xF{-zM`UhFzx{ zVKkNzg<3g<LPTiWCYkc8wH%JS5kkE4#Nt;b#&qTv08$I9q2M-I^}>uEUaZU{_^mfk zdjWi}op!!<2Z(l<0ir&&z&TkVKGNx(oRR@fb8bB6q`!cShQe`~Z`Wd`H?i;L6)*^} zLGBP+{KeV-aQWB6{8y<;cmp=cYV--UePR1qjStVmjdbR4qy(<pB<KdZ0$}8;4L?pt zG|7I^o}AK%cXw9Ot>AJCBQwpDK(-w#hDyuKgen^TaxVFKLRP~&f&@|l56{PuNwt6M zI=AOSwTZepB*O6=5Fs7-OuKI!IH2|JpFsPBC<KK^QU=1!GJr~HmnSPkp%KM^PI#Yo zwEUf<NRmMvB=J42g&QIR{O5oM*PI#Tt_(joOhkAHHxQAI9<Vp-V^ld9UFAV6nt&<i z*i(c|{2>P{Q~TsDbo1@%Vkr_xMU@3N@pm<tNeF`c6@oPaZdmUigPTfYR=7bo9SX!s zWq$73o=q;`hboXhk<D~CQ4MTqVVtISbKMa<<z&4%T7n+6${YO9M-{qTmh6ltp=3or z-Ou*|2pa#IAsXSmesM)lbTah(ZfRC!pMQJ+^ubjzFXQ{pdT`nvO74uULR8&GF0C1m z60|k-7upNZwv!=Ily8)OheH3+cIilq4%dqGpEZc6*XV$DM`t^saUV)Ks5zTe=w<?8 zTR>c?NGW>`Fxnp!eZ##%5H(CM&cdgNN<!g>W>=;TwSMqtgQF7vjfSeVr#~d1PDZ61 zm>+q=K7w9@#NiKncb8xwk!jo_==~J-d$^GI^!tvi;L6$gF5-S@lK}zzo$RcgQZrQG zQNzU^a2tTBi~8Yq08_otdf*pQ;@s}XN4WCf+xlZ7?w$Z2n(G46=h(dmi=YG_NcArX zM&dvWXT&lvhtsO!yA!JF-c;vy{yi}b;Cet-vOfUcRej_=gKp(=5#=(W?}?0G2VdkO z<$1&{)z4ne<oy>Lu}|<wAoO4~nUWg51T7q?JrpL7=OMTAt1~gU9ysmnI*X2wZzu!? z|AszhVLUe1tCyS#;gD*SXl5Ka503N?skr56yUfLE49%C|nS!_J#Q?4XmXU@+nv(n> z3n-JLXu#;2ZsZAeJwu!YKRXgz^zR5=xdsv#!&MJOg3Wo2VQb=l1Q#>c1j}0e_iE1d zSqKI=<ps^rkWRxa{KAG!i1_@CUlz0i{=S06`fs9cGhqYi&UqEO1Q6kztuEkykRp%e z<W<BMFtz!k!?n?rXW<Ce%3<U@j;M_xLLw@UGWekPerttRSxe>k0G51srjBwiwO;C= ziOsPHdDLr`2v{?NvGs;B1Q>J#{UWbC0f>*pqpGNoRtkO7-CLD5Oqve!rEClGf<efa zR1tJ};dL%r8fBNrZxgnzw;}<NQlZ@<rrii(e8|=Rm5?aXnlW<D2cqTD2;D;vz)B*i z?LmBq+}?HWha7yTMhDPH*`8<uXHj~fm!csMVX>(i+{X42``kvgFoMwU#DzVDs^*<Q z)y8_pS5(kf*yPeyH~bn0HyCU*;R}>Vy+=rrJBuAiBXmg8BKDve{HpM(5JdP}m@<fn zHCHujhONQu8M4n9hh9Ib*5Hladtj$^#G?@OsIu2mc^KfhQaxnfIemu|%1qrCn1HEC zXR-<(%>3RzA|8p9Jf(MDGtN=eElAoRAU^ri7)KoKZnArES%*}a8ExIm==jtuvPx`y z8a}Gi3m-XVH$G+B_=5TCj-(k-xF7r+FNO>7VSPKBmQHKMlS=3;;Izv*>d03H65e*R zxpm=!_-Kh_V8iQOUUX>pAnjpO5|Z{|2{ETw@WO3xuKbk3EC+s_U!h}1Hd-iwQ52J( z$JI*ILqx@Jy?btyjgij9)HC>aG3YzGQS<k9{E0hiY;tBmfNE$4<Aq9H+H84>9!X1# zs^^~F8J|2cHmR;fa7!qjKbEX_wzQ<@$)?N-yD|oMSy`MEQU=Oc8Oy5Ee3Kabg7Cn0 zCKf-ed61I?fdAK;Akw!IEj9}SM-i~!0T(Hq8hU6JOP$aOvatwL0OJVswNyY&7aV0N ze*(n<EAUul7a=h`??w!})m<th<UsRYh*H<(S(vs4*+mN$a4nHY-x>K8lE<L#iVX9! zz+Zr!(JN$RFs<M@%0wT|YJ&WMUc9*)-IoQkJV2ZXnW_}|+T^Rew^NA?GC7!0JRu(~ zfCM4=<7TaB*EasqBiWy{2f=ofGmIOTs!!;P1mi-ZeL=NOV~`YmL{bMPNaJD8MB)ZD zoro}zGI9o(<D6w`ZDU}pc$1S<t!}DRo3rRflgHw{2zL8mdJd3Uuy`d#Co?<E_pno} zCSMFxMQ!zs!qgpmc(m5dE(wvCM36z>K^D4?;Ao}%^WFDo!D2BOu<cz5&wPO#LA^ae z{}X2RS?n$X8<8M>GtUzs>UL+0Qwq_PHu2vtf8sPm83_2Qxq|2Djc#x)Rk<Pov89Wn zv*C{2@<xm}y|CGL@n76hrXOndAQc0(OA*h-mi3a=1FqEfgx?)#wBiGdIq(bDdPn@{ zYbe=n^fO|!x+MzVJRnZa!^_5^kub}#D<TsSYAS&kQIsie3(>MLKcSA~#oTw=j)i^< z5)$q-z$=ww!2EQ^2n&uLWkSN#je-x&juc}zA$h=x2x%X*ELKo-Fcs((02DL)JbY2@ z2qOtvIU`|Swu$Kt7&c9BIiLo<qChla8X`=$o|H(D;X)633`I<+cvnQzM=mGh{&)+@ zNeB$-L>Y}4V#C?TC2n6TBUii)QKlqT0NbvLuiYbHsuJVMhalsTN5gS%VoVbTAZ}{t zf#I;z66{^)@P$;c&d(XZ6ewJZZSDLazG(fXwoHEH;L1p0+hquXEE>r;aV8~_rf+p+ zz}IPf22CgO{#RemSdGybI2K|^kRcA<Sm*7s^H7Mn9kEEVGK^g&CoY0g=DiGt!zb!t zh}6A48w8G`2!*O-3b0_O;i)YmOiWVM+}c!5(v^Lq9aj_Zk_u?mX7_|Mk=i;*>b^C6 zg{pyQjtEQfD0c{H=&*YTuK&FAsHAhIAGD7Wwxb)BGl7;&*EKu+D<%g(j|Sqd6`pwj zoeNi;f9$}U*8<61*0`ilUnM4e)+k9g7FC-1o&-#MC@AkbO||WWvytz99~mu9bxr>L zh7V6i3-R543<6Lx+9|mvp86?ZsdtLp+Vj_Mg?ms^+PtS0uppqr!?%xg{F~X}1|}{R zUa)??Il&FH=jOLRLS@x`7-@7<y0?lERq9%UID<DZBoV$wSO{!;=(hk|aMJM-4{@-j zoqat(4VL0kTLKuEc`|__Tyw4Y^Dq?tkhd952IcJ|P-;q++h21hFv@Ui9_SPT?o{|+ zIZOm-iDNA6c2O&;YGhUqDC+iIzoGo}!RLf&FDBH~OEv-D*bmqeOuNhFr42+M2j3kH zWhePip$bV>hG&}p6L41=XAC?*WQGa8^ViGA4liW`fSRPQi0<i;E?delm?em>)z-*B zN_t5cLh_cgEeO>%yCDyhG0BFNSs8dy{wUALWzz!uyeCjb5jD5@5gMOCZl-x^O}Rp( zc(*FIF({2>l$doQct^YYm$!79Mu<JLPg}nqcJ0^suh<pO#>EUxJ24w5Q7K|Qqui|R zM5tzvcLlm7l2dlYAf}M&JdC<sMV%cqFg4J_!~PN8=JFDSpz)XaG|h-#QpaCF>acga zChjpQfP#%UE^2&2t^3(JPWGE%Su$J5z5&RkV8&~{vxjuM($8$W^)k><lIJy?h3>)} zeWx06)lYfy>RhNHG%+Sviy$9=XY6)t!?{kvdE1O=uwWH+TyqZ6Pz%}|Ai?^v`%=4G z3hK8D{Vo>m2^M*f#vPPLqLRa*tMVp-(gw?zlY-HRU}<2RaL5l)SGa2<O0&4BEVWCg zf{Ato<(4H(UB4SI{h@MP&hDVJrl&2n9YqWqNGYn*p&Am}=z`kR7U=MvR#84=CvUpS zU$j;lI#PEt?GbaB9x|C!GXU1)uj!+?rg7+t*Lytzez-F%1&4***6?$sTt`SnM-qc( z(1C}PViG{$yFSI;D~x#=KY2uX0d3{a9i1F2E_QS>{XNjz!L0<j_nlxPSpkv&6u~;I zJFlsq&eCJ&faw`-LPwFGm}?>f3vEtuuBZ4JtwwB0sANEpMvZERs{I`lZD4$bN$Vdo zm06PAphXx&QcBPA`^W5y+5MoHJHy3<INx2L9(?Z{%<9u~;$qv%AymHRV}ze(MQ8lF zBr@~IKb;xVmj0ljr7lAwR4gG+y)~_d9W_vvMl{o|#3eTPiOM30p{Ll;8Of$gK$XY# z*YSG+Z#7Co?H09k96=Z4{;=h6-QO&jKtd!c`qeu0O}9y9yT>E+nIVS`5)AOCy890l z@^>C&cpXF->4zs`K|&-LqV9z~z#eY`J4si)4ni<OvR9o1g`4vbT|fuVZN<^TW{qOp zGXAS1$ed^;QX&^%o2f2(gJQpkQyMM^1_E)>Nj6vP{&*DlB!lw>2V<b`Cg#7X%@&5( z&gRN)w{7n}s3xUU2S4x>$9Axm$~$s8LRJNP8yQy+=7t^U*y;=_;T^h!g!MMaIkrwI zffN|<zr6z1ppuKpF%nc{RZRDW9zF8FcWYc;rkCJ8W$+$XqoE8dhcA#Hnak=x1>et} zQ-`+TSG*}*9$LxL&r?_zOiCy;^~omkUK)Ti-A7!^y+>ZN+d0KwCzAK?k_@18fjukX z(O?bH<Yl{}`A<zZTQ&$cY9G1zV2x{2HGBbo|2s|@w#b0KnO1LVULeLv0$$zUz4B!b z12>5-4QXn3T`#DzO~MI@4Xx#zCsatu6G?y?%qTtNs6zvtH@U53=OntVc1Z$^5Z`GH zcm~0mwHe1z*-cfF;;q(>l)^k+7@+3z3nBL9=8~uA51EBqm<-)_pb5N?mNoQprd4*0 zoz6lmG`YDBw^bO|Niz$9qg}|s84!^vOHc&}<ch@upv<sUi#qtqoOyx8u1PV^wp?Vb zwU@)f8g~(vmV@U@f{$V$73`?M+2q=2q+;*l^9X8`ROy57ra61Zq>N-#5iLQz^2Jsm zVeXJUb~4saGX7E=G)jn+P=V@+S+Qts`i0&b*Se-Chx0_0)VfBduNz@fnv#4_SVb@} zWm9G2EJJto!A|0P<98MnaT3{Fu3dp7hZw{#w}oAh2#(GhBj3O>AI?AIfFVzoVU|<T zozMuR)`J?-nyY@I)cufrKyyXWuxUm4G~doKRR711gSfHTDgr1*Djsu5KE4*V!H9v^ zG%M=4fk{ZJEtFFNQb^K?{R1CKE7aeioalu|8h4R?w?b0gr{{SUOqklaxp$bKL-;?D zImJ)7Xl(k-tGLIA?F-0PBPCk<M4+U9m;B+}#!0t^j~Cgk_=D5Lb?KG&0F5~~j&!@a z>;pB*eX|v+;?VHuKscMXJmz*A9SnHpt{OU8d+Jev1qOes53XFyE)ck@xKe%SIgO9* z9y<iLE#QSo?FF%!xXupT<Qd<2ZpmCwJ7bgc<N5Qr0{C7-=R!KcHcQNjAkpB1CI*Ba z`xObDgQC$praX;fO~*Z~|Kj$%X|3wy4;3d_XiTc_QB-BWb%MVo#7OpeJ?@ZXwo%J& z<PFt{F*x>b&HmoS#o`Sce@RW>hY(}{8Mbqw{QK6!5F?|(%!6_&gE(i51-hIAV?#Ut z+X9r0LMTFh5jWscB}-HUi!zLGQ(c3Hqhq0lB2LfwBa2{@;vTZ-pbH4Csl*Ri-N_LU zE+s(AzyS+U=iFcSoLJ)_2ZLfEN$7&D!AH0CXS7el=mPQds^3w{s&bB5U&Z}%fhKe+ zPzI@M=$uvx4|Pvs0C$xp?4sY&ni~*7YkvbIn(3c+HE7B(bxnfQbgmDxhVaDXF@}8X zqd{mO5mP`YUJg9H8E&g%|4NZZoJRr#3L|7Uo5+9{Q&B2>E-ac7blo|2qThTp!cZaR z(y~tx6ZXHIj8Y10su$FlR48Y5x$<u&##t%~gFIu8%83jEQR@BcV=M)T1gj=uzq-#j z82q^1`b@YBjR%8a*}4j(8}$dJ(ni8VG?+u*D&i`pVdnBg23et9V^QcqhFMqW%rlwm zNQuW|_sMt?5G6IkxllMgnE5T_;0-3eFl=aFB1Ubux0zxNP|?hxfU+=6w8mL#s|O88 z!G*4wUq!)CjF9Fhd>J=Rb*WvU2Z4h*)IF*9doZ>R@KqlR$=4WOmzR@poIZ^e6dF;G zZhKmxjf0L{01+9bhyly6l%F5wf0z1*ofeJ-a)!Zx$9RrF#ApwTfa-^oZMBJoM*E>2 z344wAW+Nma?s_LTtRmOUbxAT;La(wov0mOOiG^P@k62saAw=NLP!))7d??H=)k$d* zA*5tI;+|#8E`(BehFpjxIxDEc8hg0MeV<HYpeHHp9#5GH>nrmsiW4`?&QbRmU#Np% z@QIgbDliBo@)(3YWvTyUX<vlloBoDe6=F*#U;_6B2?~{_(ow;?!8^<ovX!gSHD~h_ zDd<LiN;2+0)hM=AnsCY_!uh#&Zu2k2&>F_F7%xisRpznFraY7}EnZHWdO^vLLpi5p zj%NT&T`1oOOf~-nMEU{n!3qS#^*`W{A;&6vC0Jg~(Xw~l`W`@afJo`xIZ2V442`jO zRxQK{Ekm~o=pwwz3a#*RgA#{=l3&HVcYdq2?c3Y{G^h~4zVWpO^60zixyNHzDgrp* zbis6_ImBsIT(pA?EEP|;xL_AAKM+C#AHekrA&P;eNHw`u&YHAjj31UGQN;(U@h^7K zl~gG}7wm!x)Aj&(Sk?(Q$%Oxv-H=*aOxu(GyyaJrd2nyoLGd+)1%ZY7eT%+@zzeM; zRHyKREG-veB0$}};Ey-8=p`S>yyXXwEEhuZr+^%C+k`XG=Jnmion(g}6g(9x2~KEP zQ9HI#>P#Isnlgl1dG7@b!to+;1P5va<)OgwUs^FZ-{F8@QfHP9lMeV&Kk+GHNTHHU z^%OKgxW6($1RosNBLuJ$EGADGGKn2ti(&IiIBg!AxiY$PGQoi?ZkS%h#XG06n4Vq` z7mISjmNN@XToY}c8<~o}xS6I+|6yDR1E|{b4$z}=cCH3k<!_-dIf;$<Z;$EwQNBL1 zBMSIGf6T<HquPRz>>!Uv{qnVW2h5T`oBJxHto4H{Pmax@MQxaW(^a|HjN?yDjws~7 z=z-x0V6R>MVV${Af+c!(_!SifMsfxQGGlSYC9wcA7J_C<$OmhI==N-d1I>2ue~xHn zA=1?9ezr4UR$3b~wS@l^^NVC43*q;Q4fZY|7ka`}X^cCOiGqn7jVn=XG+BMfP|rm0 zG==On`mg3h5U<q2JL|JR3Pa<f+J!6j068%jgXlM12uCR#s{D6x8e3#VROnEQhMPid zi8z2%id5Iqv<}!B9sc5*H76l5%X#_m&zN7&A5p|hrSKW^#bz5qO624yCu7^`Ui0Tt z?VP)CJmD!wwr;<0@Gs>H6TcxlP(FG{`mDyfSQ7TuPo+<D<Am;fqr@%x!{!;n4p~8) zdaPa1NnqaxRDS3UIk4SL7l4g|VC&OCYE6(Fv0@+*03u=<Fa#KczQ?h}YHrebecMgk zxh_$kYq!KF-k!ntW_kZRDnXjpVe%&MMm{j8t$x6d%TzRkXDI3&npIFh9BcpmdRGYF zr21RsVg%ZmrOa<rvia<G;BAAL8H!@i)V}Ht@uA-dB4Gki68RJ{Ngws}9K8OMqYyy3 z7ebWl)w>=mxaLp}N4=rAj^@_tgg9KoEk(RE#Jtq^_m#!LzHkZP7v}*Kr1-(yybhQF z!9_P{iVo$1gcNRb`Q%SvdlL+>zZ#urCRcKB?@`<#Zj=L3GmgAKP$KjXssXS`X(cM( zist18-}m~g?~Zt){pj5L+BP@S+*HbRu+wWb$F_!s7*`D2*Wb(-X&S$A_C{M!&4sH2 z)s8c*uXjqw4Hi^eZZkE|Hu2fv===WJK!5pLo^<c`w7}OwTZO2Vz=f7tFIrKCVXmV3 zrb6TgfqDS%^NOq){I1NLuJ@U@y~4$Od4bamKEvce4rum^_22~(VOnBQo&mZKabfU; zPBGyPh6po>XOD_l#@2=b8eB?V8?ef<cYzHNUx^kjzO@vahAkz9Uc^|Wx37E~par5a zifl%xaHT$mH#dzkaX{w`+k|J7u&uTbRRJ+w9pZ8x%g_IU%*(L`P)Pt(N!d6msijPk zk>mqY{UO!~0$1G#-$Q$l_SyYP^+Td3U`dSyB${$0YU?bh;M9IniYEvt#j&Z7p-^7k zxTzB;#z-zXS6nt*P^*|pN>6f?*HGG?jSmEwWm^Ea0Z5JLt+f%V8Qzj-Lt*s&ympTm zcsKQhA$Ost;+>T0=`bw3!3=QVt96i&JM}=4jnYyur+QLOgvxd49P4Y>6FtopiA&2{ zD;rOy9PW2#D0~ds$Cy#`x8xq|4~TT9eWwaAB83vBJ3T4EiHaW_>&&A9)d2YxBs>CN zA8%r73%zh(ATN)Rs6y<bNtkacH%lHXl_YuaVniywUuG*SPA;275@RDbMQXZ|3i%3X zc<p3zU5W*2?gSzEIvsh!`GkbM6DkU^OO+<K1A}E~4_`J^NiUylB0~eDuEa(;^nhB# zBA^Ms6$P1%GHQZ9Jt<BP_PtBLpKPR(kQ@&*h;-|_Nzi|Ex|i5%AIQkVM;+V$6=e48 zbH=ngPmH)n>j#Bd5-GS49SybbH<|4}_af*nGQV}_q0h2Lh~hYp!C~Us=Ni{F^H2by zquMJSk{`665A;=vkMl5<nF-9R22e>pcGEJcM^YLs?=xH0Q&iRCjD$9fqw|22UEdd| zp=@ZXVCP+Xe6qfWZtLXmLm65`BD)FN8$nJF?1u$FjJBts_Woe0g~s;?WiT&m%bVk) zRpK9VwQl#(q&Yh`7VJ}*5dIe3ssx;!>D2}(OypUxL8-}C5bXq+7HCh|wAw_**UQ~V z#Kj;n$o<u};uzp8fviCML0B_;N$A@AEEC1Znpi_L|BHH=m7f;hj2c2Hj#w?jBLk}s zu$AYLeo_?NpTs*f^ADAdvD`(H@HK)008Ge7DBIy_<HAmQQB)~L<cKaGrH2)x$|D6m zkRZVRp>VEDrUS-F%9GZb1h=n+aoNsq=v{>Q)*z`#V+_pkJ7F7|<os2Tg>Y|jHG%vY zKej5*(5U^&voDkkMVM1nTtlAX3AtZlYy_+;A{s+j<}C1BOF*)en=tzJ*Y~c2FO~qo zk2j)DU(&ifFRvVyk*j0m{s8BkWR^S3Ye+0IMB@=vhD$EI0Sgn;bO?qB-1s06cWvJK ztxD)`0eJ`Ryp>q(82Wg2dx;N1HXNabb<V9jkZ~;7GO#H$WFR4mU~GjHAM{l172b`P zmZ3qW1{7yN`OyK(nS$KOOBF{nw#>by7~C`YEtZNSuMv9kA^uIfu}KN?aRXXcXuxP3 z@g$jFS{Xitb%-kavt9KFEPDvwrQwe?hL(VBq1b-bNkoE2taenIN7P0>jZgG#iq4#Q z6o82q3v0jeUv?K1>2F*L$#Tze1Z7hWr#?o_jtegfpK|KPl&y`Dp&~v8&z)hM{nX~! zlfYv`$Cr#;)yhubN=L@VZg`!ajO!W<1AANvY4JAWtJKivenik+6~jX=iiy+}AE&?V zB5CSyc$wMsi<;3y>WDKqG}CnUw}D^P{D8bVHMc?EJhY9%uX-GRwW}?#KCy2F0+eM6 zE)_Pzk~Z}I#AGSIi_*DJX!VV30xk&0!~i0qJ4;0a3=4V2%*)ke9c99b%W1Mb)T_h= z5V6+c=5sufIl<%+A8icKhPIVMbXEFDZT|z#0Hy|q@wl~X$MCJ7qC#;HxG|{)kL!nm z%3lZ@wL{@H{<-Ips@3Pma`XDYgUlf7l8KHBu$PR!D{xH1gbZ){$l-eK1bRyuyVRfB z=47^|kF%v5$We>YtaaF2<JXNfb;0~hM%6PHj;QOQk!!}71AL?Mf``a%=`(CpzVV>{ zmrQ&?AH3n~s8d5OFSf<zLdcC8KU8(cr;KX`NR5?MqbqtqLW;zIr#Vr4M$KY#$FB>X zzedN|)=+!%-<jWHRt}Yi?=t1H6erA#3|BV8o2aLEFoh>zYO))q-$h$%=Ta3DsbZLM zQcs=ipCg6e@`4Xi1&@s!**s>~rCCD-Z|Fi65x-|QE6Ky7{xdEhKcn6%a0x`<s;GzY zt@JQB4L+%Hg9ZZ%%?EEXv9jmY^9W#x?F7)Y=p~@08stsMzz7qbf=8<g9HIHba>#@s z-Xu6sJ)?w%G#HRJZ#a}eps&t_fUNe)IK}}er@1H@?UJIO+Y{O`Tu})wtei>V`0is~ zLHX`mOvr{&pN#xQ(H3-Q8Lnd%0v5NZje>4l;ua2B|4Qfa-xAWbSQ^y<K?j=JThc!L z3P+xVZX<uf@$ERMsp>d3HHjMlT=`rox(`A*-lMG*#+p9a)qw{vZkLQZBTUpk;E!~^ zdn<}l9NnSjGv4~NddUi0fJ_W?`F7PPY80TpadE5ifa?^?>5TgtLKI~2mWpQnMLBIa zpNZK{%<t!Hq@FquCJltU_K!B>Va^&rd(SOTYGoW@!xeoX_K@R=nGQ?Cm>^`LGa9SY zM|mG%ldu6<ca>C}46w_Vf=7R}Q*xpy(3nEyhD;FweSX+tz=y*>;*eGYMoPRxRrMDV z!ZfxQQtd@j%x%a6%SUgAIuuEuW4R4C?_{u0GR$>V6jF8151i}fu~tp_Ca9*BUF)M` zQgVZ+%rVsp5uK`l(rrx_4uEVUxH*jgY$~1_wQaCrL_*Bx?~qelrTz~j*Ex)Xb*(;~ z8qP9(m{s4%bSL{c-|IiR+(o@WeVRQ^tIF!ht%RT+8z}_!t3L|@=UN1!#Q=+f?>QY! zmhKIb_2~orCU5%W4-klB@72zjK6Qhd6FQvbkNIx&Tp%&UrBi<O4vAy2iJhuTLJAb+ zgm;~bvMbP33WwMjhk8L9Mi}h=STjWe+&R-lA?;7z^5McI`r$=3DSuSI()$TKpb}<< zQacRCVtUUxv1%Ym@C*a}n>?~nHUEBk%TNTSMfg8w5?oj|l_lq5hAbHKv%1%GzSgzB za_V6&+E5`s!bx6``2m`N2W&AlfW!tx&+r0IYsb^;4&*RMyq<a1_GC4-h%eWah*rEJ zi#`8_KbthY((UE}7-#W9U7@6nAPw@GWIQoKWGY+g<s=3v-4$CUq{W_*gm;u9C2&rg z{taFC)QZwLEJyejmC;>y*o(<-a4seE-I4!AQXI^jNyOg(izQ8P0j+J)TLtOuXFG<1 zKO%IRqt5mpakQbw8~vTm_6OS>npPTfOm-@UZ>|67t*U0XdC9qr^FEzgA0&TKNR_+B zJ!<7hZ@7q@MY=J`eMYYyJ&x5*u6Q*e#N(4fDjg`im%5hEnMN*&JjuFUrCp%7z_<=F zbIlZ#F_povX9nM}r_AwA`XqqXXRfiU0IB%G>?iY?;G|5QF{V{kX=cLb!wVjhPsApz zx|)@7fuVL;pqCskhnF(1Ws{8Ilmb_JMC16DflU>zpw!ypoAg9b6E_IA`;>?(;i>8= zN{VJ>DW$gGlbW~55Sl|k8T^i=PT{N6CQ8#RP%*DfmL!igM`6~ML#QL-*$j}A3Z#9X z8Z<jyLR)W(6KpUa8Wieca(&rK^4ORxJw*xhZAw2S(CRQ*YO3ZonPLjYBIOtzHyPUE zizxTmCpy)*&%^lH#GuKZSR|!&e5m)t``llKg(EfmYS1B6CC|%E{348(YAm^aMlOjb z1Zj-rTv>C@Y4R_!2x6d3L_`+c<)OM%q_{?g&{cv;Q5w2nsUa&+>KPgLn7bK>E7)(u zsK@_W&E2nUb?eZ?YhzT7I2uI;*tMs+H&{k=DYxNbOXaSDZ{(}gFI8asupP?6XjVA~ z#}qh0uCa4Q64E`UDwI0Xz?R$YKZi)CW|E!~+X*xtBf&n@5zqvcKe0`ES%6hVqY2tK zh>-P18a<kAv;OuUa>7I)$S7q)Tq?~NF`zmGvZX^G3Lf>xPV8hl`(XU}+@3lZD0}ze z9>ocF{t&P5X=&ILRo0rCkCsW$n4X~yu8~w=SIZnK41LGYjo^hkg*3tFG8usc!xo0j zw&P0my|phUc&mUxIY_$AVGE83!C~An{{?FXg(bL{;k}{J&_kCAMw>Ui-<W4YS{fq= zcSVmR^_2Hh3DC$#;pff!dJ5dHy^I_fQECCi9P+c=%27xQh12RWZ4cl;??D;Frq==& zO>d`f^~x5{OpS#E2$rRadior`U^_M;L4+E0cw+ZuD(*t*ytpuXgtD8$mC<+a<c0>+ zyj)n$Yi@chwuoanEI3PX{1#Pj4>=*5{y*N4mas3$;n>XTr^ElUJ^$MEEHRjQA}_os z;je7s^CS(#&L|=4PTEvy+q4YQd!!*DT-iBme%7w3h*MykZp^Jj8UsF1%_XWP?81Z> zw<c@3A(TB!HboDM^EPyuaC$X-5R>ALRhPLK+p8QT_9oRNEqU}YER1el*te2FNQw+- zaB~WXxfrn^e>xC9j{S11IJCIJU`bv!{PZc+ye;CuoPKytFTV6s%_Qu|fZb?NU9L6M zNVa7RqrTMeNGOcjZFohDa$yYI?t}VQqh;x#EN~U3>`{gXm9#~1Hi%u5k7^d%U6CJ+ zFaJ!Ri>^%aH|7Y7;*wNYa>a)-2nH+8eS>CxK_J1XkwL;LT`T3&BT#ZciL?`YV0jhX zfa&o~3a1ET5m#p)aM+rGCDa^UUXz8S$ewVRZ2%B=OIw0<$X^@MpR>(jrd3m7c?{+z zXq&`F(z_DQP@xyHDq|{E?{w-o3TZq5<DfzIt!aVJbgawi1MN+9a{RT~Dkma^a2k>b z@wM&f^|u|x2`g<WeiIlL53`l<Us`(I45{%kfTLMbR~Pv-wXEb9G7Ml4W_RJsaab}) zOmrZj*BR)sL3VMq5-}g{F5iJal4*=zqsQZ`>r0tz$EsH)=o!dq?xC=zLWG261I5@0 zO3NC!nw5<ri^X();ix4hSNyZc?p!pJU(yi0ad=xmSxrIKLKKM3*;00xr~g+(N?C-g zPt@YyeIbV1puX{pqw5iIOkOnARSF$(s4NgEQ7VnErocU+L1?-Jmz{xaTZt!3+XCHe znl2LtsNV7$_yIkW=(nt!Y~qILOxfVR1T$yKoEeh;@snd*fPG767OLP+K2>JM9%L(! zUkfVtAJ{U|TGmzF8FZ*aS;ka$>bc;j`=p@H9$?!r`~VG5`~I7MrbD~|{_NbJRxPv( z<(3ir<}hJ8>urNj9I~KnuH>zTQ7Ao%@?!|t25GMj$pHiLpVLZd;;|#Sn^59p_}9mb ztH_*p<#?BLY87N({>~291J0e4VBoO$hs5>PmUeE%2-}N~wSNq9FclMJ_@I`}>Q0}Q zVG)%W$QHON(`$(T>B%9U9bmZz@elY)-OlRVSwv&(z)^)(s>{oW6F!javEq4K7t`|< zJIJoP{4faYS`}azAmRC?Wvj~A@IG^(7S9hJLpn0kfwZ5aQk$RQXk6N1R}=)7|6U{0 zi9qHPgnCZEjwAk#9A$w-bBLnj!=d0-PfS(302Y(vEO3IP51<+3SJR%h!BGTo+m#p2 z@fI!Sb2SdV@#>f^!1i(sirK|jC?Tz#wBe1DQTN1Z)@@X_LD*LwEo37kW<Z-`#~Sg* ztY?)G^Pj)r77cD<d}}pv3rDJtk(0h*W&QXoWl;ZofFV&KHv{x4(QLWUM56x@G7w;i zNVPz3@;BFid~2z_iO*!z*jH<iKZe)$Uqqp(xl@e59|$!`U1F@av=G<IJfQs3Q`6Z4 z6G%I>i?*3SO^0v0zU3-{URCZdtFyBVCv2Q=&iK{{1^V*nw3!-wNJ)9&nu(d~=oXuZ z9ka3_4HnYl9`#X+(Xhgk(t+gCsO0y;1Ak`7+<X1eEwtaUIuyhP8;0x|HRetg^p;cB zY54ADwxvl%V_Pa`5exB!3Cz9db=WKxPMm?9CH(IbR{Z3bT91!y7dbXiWitH~hF6<m z*G(5y!|Y%tJO?-)2mcz{`ozuzg!KZOo{%m#yAiFjjg*V3@7+hqgz5ejCZaqMO&7vG z<%&BRBl9bkM-t*w7T5L6)Jj=06XCY8;lkLWnd4j1Nt5iM!n&hFTwPR~Rp!@E#@bwn zNvf@FK34S0P2f%(YuhR8OeljxOWiKK`W6B0$XOaYR0O>C7%J?4x#L@JHJKq81r~W# zs!P5H3K0K!h)|Kq@^=m6Gws-VNWyK>wE1;w^4S*q<7n#QGBUhah4$E%rHs-gZLG4G zOOG=>LkaTv-;12mJm10gfi?mp2f|awx|FtyIGY&WbugcN!si3xeacN?#=i`v&9a`P zS*RoOvsjrJ!;!6@o7c^#Wyy~I-5x3){=Ro;{2BBfs*m)Oh(gk++2dOv{q~;sWMqKk zMk8s6&I;1%IzNfN-|}!=h?9FP3T=ePSS(TEa8mZNcN#5y=VSbW8w<)>wi**3{aFGO zna3UHDiKEGw0epHV$CI9BYTb&xu4y<vyvTm=BIsn8cYwNq-A}JoV{cwiFpBU_J(f& z<0_GT_S~Q%0w@dhevp~8HnFpATEVRxSMQP{pd0(@zcUH&yWK5;xqoa35kzUH{L32O z(v@!TA_`2mvcS-TUP(&kP3lxl`L9<4b95k6&KHi!X#w+5@+rP(1^lh}<fER+E1I6k z-0A$!Q?{0ULX=LR<no2w(>H_c=#rJsfeT$mijtWHi6^D}u^DQ+Cu;IoR($wGuIjc6 zlwXWS#6AFe1*>zc3qj2xUm8C>KVOC#Gj92$LM*X#@6x6V16<RFR;)*xpLp00FVwj8 zEqAiw^&2nkinU5<LE=v=Ki81?3X>lQbW5iS_5Nc=w947)z^2?*GJma^C#jQ?0B#QP znBJhk@OPhE=*6ZHZxJk1#g!9_)_>?ZC6#fOh~TMfs-YP|lFvCUsG>ELYrxFK`a5)5 zW+wj?8%fUk&Z)_9>cPOQt*%}nsL?cqrIol=r&VITonUhr!DENPtxQAuI3ll=UkBp2 z;Kw&TvCe+h-CS@TYoVXokvdRl^gD=mx5F<_9U-kkJX~*t$X#r}jxtgIuS9ApM$WOk z-B&)yVpdv8Wf#d{jbXAmmBH-$zpT!$>BX(D7Wc##G}1r?3*E2PO7m8jXLm2|y&ubg z<+tn4HShh$2W|E=fdR66lX%>Te!gFNj2l;cEt>GIFUWUWN1Z=L#VgmTFMpnqphKT^ z{R{o&de+|1!|*qei;8NS0l&^(Z#_DY{ai;`R&K_9p42bClUHl(rZG6iYO@kHay-7# z8y~^8M+SxLFEf9KZ+|{Id4crBLVVU-58)N^VPzsc5pz1RA<BN`HuH4?0wHDkm<_%G zGtrh2**gb+NBfA46uTE+f5mB>c)&l?Zy?0x*vU-dE^FrR{i^p05VglK5lhw29G=dm zFZJ8mF~jvCRjO#jvno7_<-0@<Im9AP5_oo0LkJCV_V5;Iq)5gz+9nr|12@uE?a_<W z>3Vo*y_TN;rO~1k!4a@3sK1*kDnelC%De|_503aI8K-XIs#TDGjhmgB;88Xcn$#<4 zCM7CP-2_;TYpEg|aW%)#r(l~%l7QJC+$sM0UZ>KMyvgwU&t59A%Nh)~()?JqH`>;Z z7Ku|V#_zHY#;Z~1wyvcq>h05Y<nS+?PwvP2aofR%K9Ox?uw%1dsAW!2QTOqmb@EQg z2Pq@7HX9W`Gn>oXyI)e7A%a!#WN{e>w@z6H(#S3>ipdu>uKd3XR^a^(867wY9!*k5 zzb4ct+N{7Ad0K0r%OEv0D0r&8fM1JC)j}pCx~ZdxXZmr~m>&$uMEZ^AsqIXv@44E4 zOVG<)p31GK>Uwn3>gC%#V+=oX)!Rg154$<Lf!)F2rVM!On+y}9>csnV_!>w8`MGW@ z&w?_f(N<S7izyOK@q={WuZ{Pd<-;plXG1Po*Pu<{XN0b@3qR+23&gSh6ucoc_~Ls- z#@H8Itt=(d=<YA9oHPg2H2ExM&C-Ve7d|K0<Mu;^xcZ@{<lTGSsp7YY@v=6ZP)ZLE zPJL0#G5m>nc(0Ce0ufwqPjBvnded_00nUvLB)5?Z+sN4r6`aUln!o$0F6Y7xVr3kE zr#{qiXU~krDuCqWhn*HeP}3BytHGAc5(G}D!4^OdoZ<QGTeI+!+EE{wn$NDq&%Poo z2>2n|4C_iF5|Os6`$yQ+Og-B&OM{<B|ELG8D`_rY^560H9Sly|2tDM2!fniFLh6PZ zD;>A6nDX&smC4WxnV7LnKI8Uz8I%PBw&<Be%!i2VZ7rE&TI5vXwo7H0YqB5FVj4~! z71Js(3jb`Kgo6m{4qQsrE?<1U*A=O=8}g=U@>JTGvwsxPJ1kVE>P`8@4dPFGheF4$ znhNN-WVBjrUgsAy?c<S*xPBeIIe!;Oy2MSm5~rDp_o(i7wE8jHcd@NdG2rg_jl~if z3B&5&w@16->Axw|mvOhv((DTJh6<_MV=r-;EAd7TY~yb~I~8FpejG&<yC+_KE4CkI z709x&bQQWEXtergWQ&twDzr3>I-L6`81tI_zdAb$s5Z8L-vb4Tmg2637BB9_-Mu)J z-~`eZDaC?I3D83EQlPjKw73TdP~2UL7I)2~=f3|tr#<VOckkU<v$EE#`Rx6f$?RWd zMZR;8vjW>uWXHeFrjgJebHDzAoh+{c+qUeG$aW&fR(USGkXN;HE(hZ4!CS%gT$#te z_kr|Lk>L~TqL#ZI?5g}itAyI70okJpw94f%0=>-ZE$-vm%M^&L8LQBm4+&nBNgZwq zb(o7XcYVHnB}mUVm;UnFuugP)A#drf-+`(o@QP<YPt62_bTo@bSUSKO)HNUqWhx80 zq3p?Y(pMrxF<r0G+7sm&X^=2pXf|Ax-<OuNmS{3}ti#i5Ax>U1ooTz8cV%WO6ErK= zJ<?#kHK3e5s4#Q>PV%AwnGT)U5nkP_4Fl=oyt)3;ZhTsr0<Z3Y&2P)%A)sEnnhLWA z5lx^*UtKj7CIcyC28!#6BLQ8~yKN~=N*8eCbiVd;pP-NrWJCD7sGB$NCl;P-m2c2O z%#Tm5_pPJiy2+b=P?28t>XDniQ1|2J)lX7+8w?e%T_L?$l}0o;JgVB^1Tegqh*-!o z+C6`pP%C6dUizHLvLKubDsG(QTV#E=cCXeG3=w3QBa(i^xkL9nZYLCL{qBHerNAnH zli5{%2hpz77m;;$>yGnv<_@pwTKG99cYT$W=kh{!&*jeQ<|PiaLo}v_y2(n65b}|( zT?1azOsnC0?e4{t!AjGpn^{`Yqh0XL0$iC~Q5fYm<5byTP&v~|KR5YSelF)+9fEoV z|4}~&G`?~7f}&Z=+O!9}@vh5bGofcvOv;6^5gZ(laq4*-?^Y@XD+JEewdubn7O}Vd zVenz@K<56lt`si74{Ha0HET^0w`mnm{R6|ZF_#AJXAQoArzdd-J~$eHlT)c9%-d&0 zhP;G@`Beb5vjH+tS8~R%S21`jsdO9!wwUEIk(yO~JP~!W;NrXO>m%G;=^k+0q7X9; zJC7{bcLNu4`nrKlB(VI@Krtnd<ytMarhVJ7nWyJ~Q_BL(JiU+0by`y5=k>eiq}NrY z!EMbMq}->AX4Kp8^_!wAq_vwx24zUeRA=LDq{GqM=Ivd-Ci9gtrjSXN)F%!IdECpv z=(htcInA#@I%K$ggB6B0flwZwjftYzbk345=K6MOJvx@f(+*IrQt@M#d2`Ke$Vz0o zDowf`n&m-80K%YC{Mc*W?d6v=mK|GU&2E(`JCJeJPP>FnBSt%Go5ZnQ8!AxY<NJqK zC=lYk_U3VFtoCLC(vLwR+l8a&&<DQf>vf<P=e9;A3;~ZtGfrt!tqiFpuD#~_UoJ1~ zQY~hU7*0IRR|E84cjHyigktKfUX4SlYvSJuKL*5)*%xKeURcjxlnvlz^gr&iNr%gH z&?;v_PEJ&OjZS1B*I7OAf^f3WMS`CX0An}Zpd-%ke(;9{BI+uVlm&ey3(Bf<V_)yR z)XDSA;sIBNZ|~O=vTS0yVOTdz&EG^=)ek}0Vg_R^(-iX(OwVC;H%t-(m+b0?rP-n{ zc^UWP-0lh!Ke!8Tj`Tw_J|+Lxd>MQs@`|)Z>JSP<6s;!@&wQV6FWfjsz*IlRSy2D> zZjR{y=1ZmC1nFl<N{sK0_A1rQ590Y9^xj53n;+J+C?rRf9XY;na>aakJvhdFNr^nO zA&IW@s4cAdqXvc7eIehCle}9yCcO&A4`2>C^4J4;1?0QxAqkr*y@hZ2fZuDX%+!N- zG-T3{VNb85PjC6#l9=&GBR1<{(R25yBwQnO5dwj8CE+0x3Wy0y@l(dTfn>C={3F9H zp1s@c`3h<E{h_;fZurdJ-f-$EJLd=BK_aT#u>}kH6)Bgmp>^GkAkD`hCKdyog$TLl zfvlfa&fk*4gI-<P*_?ZI9^%`g93udOI2>q_S;<eK*wdZ|*1C34}HgI3nG>;P+5g z5~$f^z&`?``WWu<h>TY!9E?MJ@Tnw@p;ls+Bf1)KgYd5fUs#IjneKMhxyK_#g3QdO z2oEpa#I%<N3sdFQ^_O+)^H6)D@udpCN>A5%OhFMgF5e-{5fXeTBKtU+AISIgaVyf* zRKtSw6Mw%k8L%qM>ovt9*R8yF&v_&#j(4-8wQ&)K72ZvyezngUMBm-Ju9~c$|JdfG zx2Ju%PKxhicdV;Yk>EISzSbmUrPrpO)<vQMTuoaJ?K5MQ%M3ORZZ`Z0Mm~w#k2ci= zw<o(=4>s$Q9CS;*!ZMF1*JfjME^L~bhvr%j@>^5gS?lD;OSAg&jT<LsS#(sF0W`+q zLJhZxk1V-NLNpLBQeIy%eBUls>AR8?`~JC0ykX}v!q_DYQMUF_L%5@kZ-mT3%V@J9 zv|iV3Cu)0%va>&PwBJa+Bd;*C(@LX|$KdXVjUJq=pPz?Wxt1H!hBMwj|Hh#MICat^ zicoH14m9J=%+~HtRvCTyk<mDFhIMFG-?t*_!hkaM33NjUe>t;Ij69L#jElS+S2{Xi zQ^f0WNTr<&{?v2&p`umS5C+Ct>;#U2Jc;w6FM@Iey+9^gWVZHt9pT3Qe1QFl)TdW_ z51VTF0Ed?Esv}RvCx%s}ZzB^@F?oC5sPztJU|bm`Dv=}*$J&&uPQ4}**S9h6<)N3? zoJ(R3R4-)<qwRXV<EZsGjt|$>H^EAEhFzoEpxuY5N7pY`*5z@xK~*t40xx(@5RJUh zrSE&<Zfd>Ojt_m;q)g@)0UAq4B$kfa7pxDZDlJbt$sT3%UYox27bZW}H7m;Cyq10k zz5c3@ORylV>c9mHv&PudWcQ`-NEBWj%4k>T!BHK9vywMyN%_*Z8_a(5s(I-g!4+bz z=OhxhlTmbS5~NfSB~llPy5dYr(*Yg7mJaYQV-%A};$><fJATi~Ai~v!a*Xwm7g?S# zwcYj*yOvsKsSC<_qwLEK9ba-e=zLh>?USi{Bkld6q(hrG!OXkf&6V<GJ7HMm$=jJD z7XmZYF1&2F1R1TX?EQdvWAn5gPMhhIedzFwvU}^|T?Jgpa#?kla-NIvxww?SxKf)6 zu5{tOERtWkivGU&?8gf;La>fId7F&vba8qF;#&IRFq@v}H3qz6_9Pb%o>kX2aCY!? zW*`AI^VVCd*0}4292uU{xsM1?w`7h+RBQN%%Mjwetn{YH3Nk6_Oyiub)#3vS%x|H3 zP{%R$JG0Fx_N#Mnnk7bRUy_3q2q&p{oVU_!#pHp8uijxB4fC4@ccENGX&5sV_8Dfj zNkmOxTRVS^?_m69)a_>G-b@h3Gk@rs=btml$|OuP1D%^Ms<oZWTd0|yY9Is0G|Zod zwULbL@l<yJ`<R7r*n4o%1bK&n@a{fJrb}v&0*@mS%aRd&?*W-Q1YSPaoMFtw2O`=X z@K9lybWCK%&2L(9qc(hl_Jk@onVCqn9Uu(u>cR?1bmA}^4TT6=#SF|y3Nt9eKtvaB z8gLu?P<TwTjrJ{Gj$b+1Qq4jqUD&X~2+b322Rwx0domxV>xBrQ17_fhm}Mncbt;(A zl(@)Ldxrk?lf%#%S)_IgprCHZBg{>!4d!&Hn%|1>Gm~lo0a$u07pG%=uBeXkq_HdC z!h#*mqQ~BJdhuv)&xN7f=aGuw5AuqSY#+5oa-i|do2bj^^_yx`C!K5+p9M_8rxi|F z)QBb~?OG1P3}x&6)&*)I<O)gc6!>CfN8^QDu3u6ncJA|-HOe<s6v@q!g}mr8@((2- zHGAuiE4ubHK@D@>PI04n3SGGPGef|a<AYNjN@3)X18Ij~Y9nH+hJpD*YR?CN*)~3) zNhYx)`}DFgtCo$O#iGY241xJEOREkUSZ*<|KD8I&LB-X&W>+<O)RR2g@8bfw)k-I~ z!zdF4Y$QGc${ARjAU@G<k23abYmTwhcf|rchf_u+)5*A6*OCQqv4g^I)7i6pGdeq4 z(?;iYk1Eo`^xpk&9I~Dkq<D1h;}lG>UHskwdX8Fb+}1Kpgt@9pgd6=DnDGAKp~V#| zCAX$i)*zT&FLcqtGR=*WJem{;{Iclrky8h`s9gFJm_<@#p@oXs2L6Eco%Bc8I9626 zT0<2XlnUmSPBw5bqcrAOYQ5xgE#HpTm7;0!RXWBe7A>E&t&UFLbTB1`nKiH`Q~-w@ zM3tx2kZ-f@5fPo^%dtApX3uRTIoh>`6D6oR5zk_8MH`Eaj3<&oFsUNuDCghy5f+b2 z9!;K#q~ti`q7`QcSd1NGs8XjOHCgGBe*l^U0&zf%gr&9nwEDd<{NgJJ{YS46Bq0>j zqE-zr677?0M&B(Mb%R3u!w?YK6!D_wv_pYusgZ)IFJH>s0zbqrfGYzG_L^C-Ejl|d z9Y_jpMv9}Q5nnrRbJ6j)k4oQFVgh_kB;kaF=#342yObX=e=ypm2pca3`|%<_ezVPV zznB}vG#nt$PBx>28mQ=@mhv{-14jd$Vf$GJ*^?`%txCq=q%{L!){-VG%hpISCc767 zA=f4vCs2#wl?PD#119i&|HM}xC3iIo+~-F{MJrBT394m7u?*3J+Di?R5sZ{>iI^T< z@jSeQt(QF~Sb|1+Rw&_-Of=cc`N^5Q?ExGf&^}4bBsedPr~wf<=FqC>{xc!<29_VF zv*Y+S{!^<wOcWM#lMJqXtn?vN%AlBtV$lc$EeTKxj-?=1M}B20<X>yu9cHzewd|lq zr+gk28*MYura277m494DB^Z<UsbQLJOOuZw7+Zb!qjk`*lhu!?B~*b}X_OH4jIQUh z$cK?W1TSA2FvkP(F$I!sf=KCA->V|ARrq;mNK&b}HB~u#AFf%;1D-}&hUnwyKHxde zs%arVf1sVE^Vw|nB@l}5j6*YZ$b4aQU`|PtL4`pdlS}8I_vT~dH%fd3A!$dwHj(61 za$+k{m%uGUeD>_jOIuuFVEOQ&5K;S~gMOi(ue$;6Vb=GIor!zKV;qhKx0AV#P?Guy z`XvXEsY4V^5_g=6*+TWYJr$U=oGSOiWbMJI&~El1EOtS3>JW6A92phXB?oP)de4uF zY}3X;?Qn&+*gZ87<|Oo`Y_SfS)G0o)In_d;Z;?!7>S4=9gZU648^U!GxS*$>EK8YK zkT$WZapQYpyZIV#!F$COjvXM&`mS+0bqg(|U0Sq`*D}Jgk7)Xoq$c_HnTR`Z)M-RR ztWa)pt65jTSzAdh1n#G6d>QIKY=l5Qf^ajdNKG>47%M@rEsCgUHd6x4p%Qd@<7o`$ zqIm-qs-w)S0L7euEXe?TXO`A3td>ORjv}9o$~zZ~x@UQaVZw(hjy;lIi;0v8m;!Yl ztWd@XWR!$dY8CY@3>_S&47_r-e91FJK-$`!Kpy`&t{>_)Dz!v`7AVeRgJlj4o7nkg zAep@w=B{P>7^fItwl2o-pMNEU#bA1>T0l07vX$Z>y{N<Y9z>vkLK4qV^##?n^hH-} zusv?qQ`HN0<?_!$+Oj*V(B>Rat|TY5<$dlAH9j`rlgy_ooFrx6F=mlcj(sLoV7YCs zzZv}o#hrgI;;;!#57{w6X?irm5lx7=NWmrn$iJgnW|yGdUs8@@+HvZ;)cu24pU|R; z3qJg<RFf5iT<bJ07o02?jk)$X`QvmqYJ>#wX5Em9b=kpnH>#pDU?48^1NtqcHU0fv zEF7fqwfDYFb38Vg#J%-#utRQw!N<%_IUl->B&!0{5~z)6LMLq~TrtK{&7@}RflmvI zbh29nDQfzD@aZ25*q1CwlRFI7E4m-?GtIjESm)s#mGmr%8Utl;@Q)p}xiOi&0v_>H zjM9y7cW?39=|mnDbhhArrCW6Vaa+zaX3$@fe^_4(d(9^gX-Op(idTDqZmhN?-fBPs zqgV~WnxgRPEQ;hGYfr*l8>i?PRER(D!cM}BOBko<O(k~p5}Yt-%?rqhPqj{_VejYH zD_30;shFU1)Jr~=Z%?XflplYOxrUyyMPffWI2mf=RF;oUrOH(^IT^$5|A=zOUY~@L ztK^=-`eRB_Z2iUl$toMC^877?y!Zf6V9O`TA~UJqqJm{S=laUI@<7feAd*Hfa42WL z<(u%HKBc3F`+ncxrA_6uYHO)WMI>vW4~2lpa#6p4-j~rI`AKsyv$?x2w7$We1Cz(f z5BpvQ;>7QpvSHxdxG?P2EWxm}1tPk!reDVfK$DMoTIG#XYrn&Mi}a8UgEQ3xtIZi= zOmt!L0`4<ODbCCq@dll$gVmILWMMA+^)2Z<0!v9V&IDXZF(6h`>jtQp$Sf!QtXMr% zaG=d26Iw%t9o1buPiC%n>qr>};qY1;r|eF`MRE)fSjc*q`?mYeEOublJ5Uvf>GGuP zo6-+Kfzh^lWiFfPFA!YcwbOe<#sGK6fNI*wE1c{Ygv$MR=-xn|-wPT3dxA+8JQj&k zNV)V>A0@e-p~(oQCn0w}sEpt2J?BZMtF(|SQx()(mW#|#80_-{yp`*g-#YE560#H1 zU+6oBx(sezO$PKL>7p}sva@CyD!QNC<fjcfAeagya17!J^@;a(wJUBkOhd*=H6!h5 z(fPj7LiOIhaJ$vn%ZR%{M>i-resiRjOa|9G`G`XuuD?c^jRd0%5j6y{lhJ<0K#BBu zr$0`4Rc&)!e*p8`-n9AhUflJm5e10-8JWF@O}$oxGMT8++~kOzb-h$~@ri`0prV|C zo&$n1H7Y)blA5vV_DwJDeB3eS31;+7bbLIemz)=P8h`pFAiP>AIEx<eJS%t!UB|YQ zM|SCHJ?@vpDK7HnAvSyanh!H$XS6ny?8^qy9p-r(lT!Bf)ll=a6|J);g^~P<qc<|J zt|n!b!bq(dVy_dfX+=UdoH<T;nVRh2A$b}1{panHGeFn*q``;ce5V#h)4-1^Y?oVe zR<Ww*(+GLnoZuexd-cHPwq3X-V1sVC`n)|O>LwXILXE0rD{&8<vXC}`i^u)d>+3#? zz~W*mNf$5N;Amx%sf``JNyoOp_h8#K3S;)WPY1ekTTKY((2pkji~z)*Fc)S3ZC+f} zUAWn8*+4&ppH8wTws%)E-%yCmaoS(FV$48369zhl7|l2w>vj5z@{So`#2g5<z|^&~ z<I^!yI4lvJilZX$wKn!ore<;W46>oX;{=Dsu$l352vyoy?!B1@^hOS&u*z$B4vISU zDoYaEP?BDUg_3*J(tQOG=1weAdn?MuylMY5Ai!0TAr0>D#BWnia(K!msDPuxO(mim z=THz1NB6QRnK--Yzod*0{%+@REx%AO9$CC;UHHOFd(@+T&jHjPZ=Ydc$NGv9AXq4e z6dbn-Sp9roa|11GNwn^wu4{}G{pEEr!CD%KsV}ksqFhoqn0obHgLeFMg3Pd5@7@u@ z`)mgMGo^_Jd{F1L2}Ud|+-|*D@V-111fTEZE`X2bY8H+Jo3GpVZufG{b=ZzB%fXkN zVMq(?i$d}|;>O6w>)7xs2vS4yCpFO6{ToMb!4&+Yf#$$ws-Sa77lM>1<nsB&X^lsx zITIYOVgLK{=IaCv1lCird9&N4H1nJZr>_dP4HhpM(wz>vj6M~b=Y^HK`ZikddcB1b z-bY*=j`c1eM(VAu60hT4dbgZf)ivhmF7Hz}ZhK&J8yeysqa2PW+WJEY#4%?J-Fj)G zWCdS{oTiyKUats_h+k9Qt8VtZ*h`yS0N@_oSW)<pp*-3|Zg^GHmB1TJPWm=Hp<l-| z^~m;fftLo?h#2zWVI4iZfoc<a<av1s{@(DJszQioxt2yjV1awr{ZXXzQ`_Y<Uld2q zOQ$AaZ&&{|jVuR#cvJqadrO_#Vno*w(f+dT1MlyVMN3Cmcw4#;>etn+JwOug?)xnB z-Fz}5#RfZUQeio1r%4decGJFMPHYz<ie7uN*>-Uew;*Br{c;VFnC%q{n*3&R8N;=R z=W!z`F+H~(+WrjDa4=Al+1xzkbE?pdu3*OZ*lI<S&nA{a;v|eumEC;Wb{KavzE#)p zwO9jj4|>U`8|1d7UN7gt<zNfrj!w6=H1qQBf{sQ$L!V>Ad4YzMCk{q6-a)db@o5yi z3kORZQBvSH*MvYVBF}gZf}tz&K~g9pzqYH&_P#`|J8f%)W3%u0G)Sy@ea)=Mlq!YG z>A;=E{?#&QYmDan439|ZloWBp0lF+UbCFpdn1qdwVDC6Vcs^ALOq^coc<=EpJQ>}# z4`^zZP}`(KBnCg-Ja6*7dZhCyjYCc@J>p{h9p^6C#3BG=fSK0uJJu<aK!52*B=!Y& zEw+ho8af`FtM$IXDS*&V^T>@E^#)0p!fu=J%<F3QYA*g|*SONKdDI%+&B>@h*ib?E z`p$m&BumbY$?Q%p?eVRlmXTPDtk{`+uz0wOhE_ymXMHen9qP9DY|=@4B)H)MB*9)4 zcu>*%G|1E<4TJ~{<y|!00LSwAoE-Lolh|;TlW8B&bcZ&Aqod_m@2#(<-CnODb8Xc_ z-p!v#Ioyu*PFxeYF~msudS0YkoFRTodd!vVRqjAVLUI#BLc+UCdQ@<;|0Rvtc+O>6 z;30UuRP!b#!SWhSfV>;mzgHC$W54z_Cz=`!)edGrV<<VRjyNlU;KI0ZM;~ui9b!Wm zOD77e+`(5vSI6bYL&^JL<>_GSEf_IFYmk~f*PeNCN71IKPo4d-ublwpMie0r6=X0> zO<#o|j8;n)!w3W4ti~v%Up}oh0Q0kRcg44Js(vyB6&U6h<ZDw)<bgrA#vvd|Cj^5+ zgTyL4O`C*Ir{13KtEa|CAdRr`2+PtVb}ou?J-W-}SWb^B3^Wg=%jr4grihSkm9RjT zq|-Ny->G{{B?TBwGzqL_i+@0;lCSH8vc)jg*l3UNlP;_n%;jYm9xQzb<Z5VA4~Lb( zp9s_7G0$J%U{}I!v79T!8dqGGwi3-|1S-c*`|+IZtgTem%JV-q8o!U8tua2;hEH+; zZn>LQO<?0VSNQqxzOW+u@}=w|MoY4CIs&Q@$xn<NGBuDLYqv&t8^zERkoW`r5&2VV z?xfn>A+0rc>_Nz7S;~DPHs|kQ@)^-9_XU`;`+OcO-di=kXwrwsz5!#QCJ}yia&Ys1 z)j%FWrdzMNDdCslC1Q@Dd6s<6UFdNA40m2T7vL4=(;cpCExKlqvs5j$?g#+32uE#e zozC?-+w1GTQQASqZeuxBxtLL-(K=Q2n-U317$9QTWf*K)t7>$faL3V*8JT^9S8eqK zKoo4npmBCgau26FMjqc3Bv@72s#uwhTt*>hp>ur9rR?ix9~H>lK?SkJam2HAd^k|* z%1Tm|nyp`a{ftMbeL+Y`LjL6J(^%e>+!x|Eg7mqS;Pn%$dBZg~rbF_Pg<jkNi37&1 zv0LsB^K`!AmgE{Ib*Scg?se5gemeW5JfkaU4;-r?)qtA%k~wH`LCBLAJ2Fj;v!b6I zJ+Y$p<<tghJ{huAiAM)%v<x;SkY36@x>WUHh2JEq_y8MmLXfRy>**TxX)@PfN9`;^ zlrV8LJ}d)3v`S>aC=sU*8km@qBjhe6bQn&jfIL#O!iALxUo`T5m#*DmlIh}$p~|*h zFP#&*)Gghu^-h6)#MI;hVzJ{zHv*q7O}D3~FxLd5snvvkB>d)ycK5~4E##iG)QBZ( z(f+}WLdNFQRLx~s{)<Gc&rR_4&lEaBUMq0zKEz(7{dbSg0lB&9oN<EBdaPMig?fkQ zZSMmf*z1qKLDL`>YgFuS@oM=w$YOp#?n9dANh6lijL%odXh(_i`|O*7G_BRo^a@F3 zgx%V7R9bb=G!P}ySLJ$*?qjbBe|B&a1^2vD56H#(>|3*6S$@jqQSh@XkSmbcqi&By zE4VQZ+iO6*E%kv0UZIb*g2Qy4NKmy-R0gSjw>#ekuJnd2CkgP|tFP&?u9tX1I1_`z z6g&^+XkK8b3|Sn1PdKPq2nh@wFu%`5TOI~K^jV#(vv#kGk4%m)o+)vB%gNJU;+&EL zXj6t+d+7`#g(VL<jXKv?F9{ujXEt1M>qp`djZrV)=sH2GUsviL3`#N64R&G`M+zlA zTs5kjJ26pF?|Z%SSoJG);YzDe{G8Tup*KxTbQ%=%^bJv6i{JOj9yr<ur?=fa)Qvj^ zpMwX}6x(vl*c{Ir?XS^(jkbMvK{AAOSLo>OmOrxR?QLw_T&!h4K+tP|Em8ol?YG6Y z--_g*Jdqs6-S$71pK-XV_RjwWNWFgj;w``m2}Mas>0g+ig;f(|@9g@=DE|Us<)n9D z{@;P_B2|%O|02hIH_lJHyRLqTbN;K`&w+lG`$_$O>>mEz?jNXs)8qMH>HVbs=X(D@ z{hJ=||4Q#C^*`793x$kAg!Iq%J-9pYf3!;fpHF{%-_=z4mHa)k`@c9Oq)LC^yZb2o zlHmP2`g@l1pJ>MYzo364JO9r9p6~l7+jDoC{=Z@WNc;Vr{XO#aPxcV|FYF%yu)njv zUzPmHMi~C>8s&HR_Zj{t>}~ezl=_|g>s0zV&;QdZ{mbsiUnkbTu|KEbe_Eyg>K*&r z?EfA9{mlInCO7|8nfrJ2ug<@Yt9FO}>in<p&oc0zR_Pyb2mdDhH~OEgzy4;;^WV4r z@i*&#g@3iCxA>d&-{^m~ett*)wc_&r_pKxD&|i=Bzrw#-xBT7ujz&XAx@!b?57E2p W^V7R+9wN!Vwzig$lBN4ksrWzgmeIuk literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..9d5186df8e258a78afc0f27af756cf28d259af14 GIT binary patch literal 25938 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 Xn<KCL+`*7{wYHX#lD+qzQt^KPJ*mg7 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.ast b/apps/cpu/Multiphase/backup/FlowFocusing.ast new file mode 100644 index 000000000..062fb6d03 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusing.ast @@ -0,0 +1,3194 @@ +solid Mesh + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -5.500000 0.500000 + vertex 165.500000 -5.325651 -0.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -5.325651 -0.935894 + vertex 165.500000 -4.812736 -2.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -4.812736 -2.288339 + vertex 165.500000 -3.991065 -3.478736 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -3.991065 -3.478736 + vertex 165.500000 -2.908388 -4.437903 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -2.908388 -4.437903 + vertex 165.500000 -1.627629 -5.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 1.223220 -5.456253 + vertex 165.500000 2.627629 -5.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -2.908388 5.437903 + vertex 165.500000 -3.991065 4.478736 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -3.991065 4.478736 + vertex 165.500000 -4.812736 3.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -4.812736 3.288339 + vertex 165.500000 -5.325651 1.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 4.991065 -3.478736 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 4.991065 -3.478736 + vertex 165.500000 5.812736 -2.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 6.325651 1.935894 + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 6.500000 0.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 1.223220 6.456253 + vertex 165.500000 -0.223220 6.456253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -0.223220 6.456253 + vertex 165.500000 -1.627629 6.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -1.627629 -5.110097 + vertex 165.500000 -0.223220 -5.456253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -0.223220 -5.456253 + vertex 165.500000 1.223220 -5.456253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 1.223220 -5.456253 + vertex 165.500000 3.908388 -4.437903 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -1.627629 -5.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 6.325651 -0.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -5.325651 1.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 6.325651 1.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 6.325651 1.935894 + vertex 165.500000 5.812736 3.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 3.908388 5.437903 + vertex 165.500000 2.627629 6.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 6.325651 1.935894 + endloop + endfacet + facet normal -0.000107 -0.772860 -0.634577 + outer loop + vertex 165.500000 -3.991065 -3.478736 + vertex 50.729084 -4.406632 -2.953253 + vertex 50.899483 -3.842341 -3.640540 + endloop + endfacet + facet normal 0.000185 -0.667672 -0.744456 + outer loop + vertex 165.500000 -3.991065 -3.478736 + vertex 50.899483 -3.842341 -3.640540 + vertex 51.079292 -3.144950 -4.265956 + endloop + endfacet + facet normal 0.000379 -0.822984 -0.568065 + outer loop + vertex 165.500000 -3.991065 -3.478736 + vertex 165.500000 -4.812736 -2.288339 + vertex 50.729084 -4.406632 -2.953253 + endloop + endfacet + facet normal -0.000154 -0.538308 -0.842748 + outer loop + vertex 165.500000 -2.908388 -4.437903 + vertex 51.079292 -3.144950 -4.265956 + vertex 51.254513 -2.292002 -4.810812 + endloop + endfacet + facet normal 0.000000 0.993822 0.110987 + outer loop + vertex 165.500000 6.500000 0.500000 + vertex 50.332397 6.500000 0.500000 + vertex 50.391338 6.352184 1.823611 + endloop + endfacet + facet normal 0.000246 -0.663123 -0.748511 + outer loop + vertex 165.500000 -2.908388 -4.437903 + vertex 165.500000 -3.991065 -3.478736 + vertex 51.079292 -3.144950 -4.265956 + endloop + endfacet + facet normal -0.000102 0.944707 0.327915 + outer loop + vertex 165.500000 6.325651 1.935894 + vertex 50.391338 6.352184 1.823611 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal -0.000216 -0.379672 -0.925121 + outer loop + vertex 165.500000 -1.627629 -5.110097 + vertex 51.254513 -2.292002 -4.810812 + vertex 51.404663 -1.244035 -5.240935 + endloop + endfacet + facet normal 0.000111 0.992709 0.120537 + outer loop + vertex 165.500000 6.325651 1.935894 + vertex 165.500000 6.500000 0.500000 + vertex 50.391338 6.352184 1.823611 + endloop + endfacet + facet normal 0.000383 -0.464723 -0.885456 + outer loop + vertex 165.500000 -1.627629 -5.110097 + vertex 165.500000 -2.908388 -4.437903 + vertex 51.254513 -2.292002 -4.810812 + endloop + endfacet + facet normal -0.000188 0.847029 0.531547 + outer loop + vertex 165.500000 5.812736 3.288339 + vertex 50.556267 5.913767 3.086720 + vertex 50.799007 5.184052 4.249620 + endloop + endfacet + facet normal 0.000200 0.935016 0.354605 + outer loop + vertex 165.500000 5.812736 3.288339 + vertex 165.500000 6.325651 1.935894 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal 0.000158 -0.223303 -0.974749 + outer loop + vertex 165.500000 -0.223220 -5.456253 + vertex 51.404663 -1.244035 -5.240935 + vertex 51.473011 -0.428928 -5.427655 + endloop + endfacet + facet normal -0.000110 -0.077642 -0.996981 + outer loop + vertex 165.500000 -0.223220 -5.456253 + vertex 51.473011 -0.428928 -5.427655 + vertex 51.500000 0.500000 -5.500000 + endloop + endfacet + facet normal 0.000309 -0.239316 -0.970942 + outer loop + vertex 165.500000 -0.223220 -5.456253 + vertex 165.500000 -1.627629 -5.110097 + vertex 51.404663 -1.244035 -5.240935 + endloop + endfacet + facet normal -0.000252 0.699064 0.715059 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 50.799007 5.184052 4.249620 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal 0.000250 0.822984 0.568065 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 5.812736 3.288339 + vertex 50.799007 5.184052 4.249620 + endloop + endfacet + facet normal -0.000351 0.115384 -0.993321 + outer loop + vertex 165.500000 1.223220 -5.456253 + vertex 51.500000 0.500000 -5.500000 + vertex 51.440762 1.875535 -5.340197 + endloop + endfacet + facet normal -0.000250 0.505199 0.863003 + outer loop + vertex 165.500000 3.908388 5.437903 + vertex 51.079708 4.143171 5.267316 + vertex 51.322906 2.873937 6.010392 + endloop + endfacet + facet normal 0.000384 0.000000 -1.000000 + outer loop + vertex 165.500000 1.223220 -5.456253 + vertex 165.500000 -0.223220 -5.456253 + vertex 51.500000 0.500000 -5.500000 + endloop + endfacet + facet normal 0.000245 0.663123 0.748511 + outer loop + vertex 165.500000 3.908388 5.437903 + vertex 165.500000 4.991065 4.478736 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal -0.000226 0.323714 -0.946155 + outer loop + vertex 165.500000 2.627629 -5.110097 + vertex 51.440762 1.875535 -5.340197 + vertex 51.304974 2.990543 -4.958681 + endloop + endfacet + facet normal -0.000167 0.307643 0.951502 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 51.322906 2.873937 6.010392 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.000229 0.464723 0.885456 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 3.908388 5.437903 + vertex 51.322906 2.873937 6.010392 + endloop + endfacet + facet normal 0.000381 0.239316 -0.970942 + outer loop + vertex 165.500000 2.627629 -5.110097 + vertex 165.500000 1.223220 -5.456253 + vertex 51.440762 1.875535 -5.340197 + endloop + endfacet + facet normal 0.000011 0.492470 -0.870329 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 51.304974 2.990543 -4.958681 + vertex 51.135273 3.896791 -4.445888 + endloop + endfacet + facet normal -0.000010 0.629979 -0.776612 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 51.135273 3.896791 -4.445888 + vertex 50.955387 4.638966 -3.843842 + endloop + endfacet + facet normal -0.000311 0.109112 0.994029 + outer loop + vertex 165.500000 1.223220 6.456253 + vertex 51.446964 1.801675 6.357102 + vertex 51.500000 0.500000 6.500000 + endloop + endfacet + facet normal 0.000370 0.239316 0.970942 + outer loop + vertex 165.500000 1.223220 6.456253 + vertex 165.500000 2.627629 6.110097 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.000303 0.464723 -0.885456 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 2.627629 -5.110097 + vertex 51.304974 2.990543 -4.958681 + endloop + endfacet + facet normal -0.000351 -0.115384 0.993321 + outer loop + vertex 165.500000 -0.223220 6.456253 + vertex 51.500000 0.500000 6.500000 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal -0.000146 0.742297 -0.670071 + outer loop + vertex 165.500000 4.991065 -3.478736 + vertex 50.955387 4.638966 -3.843842 + vertex 50.780647 5.243602 -3.173995 + endloop + endfacet + facet normal 0.000384 -0.000000 1.000000 + outer loop + vertex 165.500000 -0.223220 6.456253 + vertex 165.500000 1.223220 6.456253 + vertex 51.500000 0.500000 6.500000 + endloop + endfacet + facet normal 0.000347 0.663123 -0.748511 + outer loop + vertex 165.500000 4.991065 -3.478736 + vertex 165.500000 3.908388 -4.437903 + vertex 50.955387 4.638966 -3.843842 + endloop + endfacet + facet normal 0.000381 -0.239316 0.970942 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -0.223220 6.456253 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal -0.000226 -0.323713 0.946155 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 51.440762 -0.875535 6.340197 + vertex 51.304974 -1.990543 5.958681 + endloop + endfacet + facet normal 0.000138 0.833077 -0.553157 + outer loop + vertex 165.500000 5.812736 -2.288339 + vertex 50.780647 5.243602 -3.173995 + vertex 50.622238 5.726650 -2.446545 + endloop + endfacet + facet normal -0.000088 0.903881 -0.427784 + outer loop + vertex 165.500000 5.812736 -2.288339 + vertex 50.622238 5.726650 -2.446545 + vertex 50.490826 6.092421 -1.673668 + endloop + endfacet + facet normal 0.000303 0.822984 -0.568065 + outer loop + vertex 165.500000 5.812736 -2.288339 + vertex 165.500000 4.991065 -3.478736 + vertex 50.780647 5.243602 -3.173995 + endloop + endfacet + facet normal -0.000040 0.955261 -0.295765 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 50.490826 6.092421 -1.673668 + vertex 50.395226 6.342282 -0.866653 + endloop + endfacet + facet normal 0.000039 0.985167 -0.171597 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 50.395226 6.342282 -0.866653 + vertex 50.348400 6.460290 -0.189163 + endloop + endfacet + facet normal 0.000303 -0.464723 0.885456 + outer loop + vertex 165.500000 -2.908388 5.437903 + vertex 165.500000 -1.627629 6.110097 + vertex 51.304974 -1.990543 5.958681 + endloop + endfacet + facet normal 0.000011 -0.492470 0.870329 + outer loop + vertex 165.500000 -2.908388 5.437903 + vertex 51.304974 -1.990543 5.958681 + vertex 51.135273 -2.896791 5.445888 + endloop + endfacet + facet normal 0.000379 0.935016 -0.354605 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 5.812736 -2.288339 + vertex 50.490826 6.092421 -1.673668 + endloop + endfacet + facet normal -0.000010 -0.629979 0.776612 + outer loop + vertex 165.500000 -2.908388 5.437903 + vertex 51.135273 -2.896791 5.445888 + vertex 50.955387 -3.638966 4.843842 + endloop + endfacet + facet normal 0.000000 0.998344 -0.057525 + outer loop + vertex 165.500000 6.500000 0.500000 + vertex 50.348400 6.460290 -0.189163 + vertex 50.332397 6.500000 0.500000 + endloop + endfacet + facet normal 0.000379 0.992709 -0.120537 + outer loop + vertex 165.500000 6.500000 0.500000 + vertex 165.500000 6.325651 -0.935894 + vertex 50.348400 6.460290 -0.189163 + endloop + endfacet + facet normal 0.000347 -0.663123 0.748511 + outer loop + vertex 165.500000 -3.991065 4.478736 + vertex 165.500000 -2.908388 5.437903 + vertex 50.955387 -3.638966 4.843842 + endloop + endfacet + facet normal -0.000146 -0.742263 0.670108 + outer loop + vertex 165.500000 -3.991065 4.478736 + vertex 50.955387 -3.638966 4.843842 + vertex 50.780762 -4.243235 4.174469 + endloop + endfacet + facet normal 0.000302 -0.822984 0.568065 + outer loop + vertex 165.500000 -4.812736 3.288339 + vertex 165.500000 -3.991065 4.478736 + vertex 50.780762 -4.243235 4.174469 + endloop + endfacet + facet normal 0.000142 -0.832783 0.553599 + outer loop + vertex 165.500000 -4.812736 3.288339 + vertex 50.780762 -4.243235 4.174469 + vertex 50.623219 -4.723814 3.451571 + endloop + endfacet + facet normal -0.000089 -0.903265 0.429084 + outer loop + vertex 165.500000 -4.812736 3.288339 + vertex 50.623219 -4.723814 3.451571 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal -0.000032 -0.954624 0.297812 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 50.492382 -5.088249 2.684370 + vertex 50.396503 -5.339019 1.880529 + endloop + endfacet + facet normal 0.000037 -0.986889 0.161399 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 50.396503 -5.339019 1.880529 + vertex 50.342648 -5.474597 1.051531 + endloop + endfacet + facet normal 0.000378 -0.935016 0.354605 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -4.812736 3.288339 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal -0.000115 -0.999759 0.021950 + outer loop + vertex 165.500000 -5.500000 0.500000 + vertex 50.342648 -5.474597 1.051531 + vertex 50.335209 -5.493046 0.211204 + endloop + endfacet + facet normal 0.000236 -0.993023 -0.117918 + outer loop + vertex 165.500000 -5.500000 0.500000 + vertex 50.335209 -5.493046 0.211204 + vertex 50.374840 -5.393991 -0.622882 + endloop + endfacet + facet normal 0.000358 -0.992709 0.120537 + outer loop + vertex 165.500000 -5.500000 0.500000 + vertex 165.500000 -5.325651 1.935894 + vertex 50.342648 -5.474597 1.051531 + endloop + endfacet + facet normal -0.000121 -0.966795 -0.255552 + outer loop + vertex 165.500000 -5.325651 -0.935894 + vertex 50.374840 -5.393991 -0.622882 + vertex 50.458221 -5.179053 -1.436066 + endloop + endfacet + facet normal 0.000262 -0.992709 -0.120537 + outer loop + vertex 165.500000 -5.325651 -0.935894 + vertex 165.500000 -5.500000 0.500000 + vertex 50.374840 -5.393991 -0.622882 + endloop + endfacet + facet normal 0.000055 -0.921408 -0.388597 + outer loop + vertex 165.500000 -4.812736 -2.288339 + vertex 50.458221 -5.179053 -1.436066 + vertex 50.578938 -4.850290 -2.215583 + endloop + endfacet + facet normal -0.000046 -0.856947 -0.515404 + outer loop + vertex 165.500000 -4.812736 -2.288339 + vertex 50.578938 -4.850290 -2.215583 + vertex 50.729084 -4.406632 -2.953253 + endloop + endfacet + facet normal 0.000350 -0.935016 -0.354605 + outer loop + vertex 165.500000 -4.812736 -2.288339 + vertex 165.500000 -5.325651 -0.935894 + vertex 50.458221 -5.179053 -1.436066 + endloop + endfacet + facet normal 0.997451 0.071339 -0.001616 + outer loop + vertex 51.440762 1.875535 -5.340197 + vertex 51.500000 0.500000 -29.500000 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.999074 0.043026 0.000000 + outer loop + vertex 51.440762 1.875535 -5.340197 + vertex 51.500000 0.500000 -5.500000 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.999171 0.040710 0.000000 + outer loop + vertex 51.500000 0.500000 30.500000 + vertex 51.500000 0.500000 6.500000 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.992676 0.120805 0.000250 + outer loop + vertex 51.304974 2.990543 -4.958681 + vertex 51.440762 1.875535 -5.340197 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.977146 0.212565 -0.001627 + outer loop + vertex 51.135273 3.896791 -4.445888 + vertex 51.337143 2.777037 -29.500000 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.982883 0.184229 -0.000314 + outer loop + vertex 51.135273 3.896791 -4.445888 + vertex 51.304974 2.990543 -4.958681 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.971762 0.235962 -0.000529 + outer loop + vertex 50.955387 4.638966 -3.843842 + vertex 51.135273 3.896791 -4.445888 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.982114 0.188285 0.000174 + outer loop + vertex 51.337143 2.777037 30.500000 + vertex 51.322906 2.873937 6.010392 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal 0.993378 0.114891 -0.000123 + outer loop + vertex 51.337143 2.777037 30.500000 + vertex 51.446964 1.801675 6.357102 + vertex 51.322906 2.873937 6.010392 + endloop + endfacet + facet normal 0.997451 0.071339 0.001655 + outer loop + vertex 51.337143 2.777037 30.500000 + vertex 51.500000 0.500000 30.500000 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.960719 0.277522 0.000113 + outer loop + vertex 50.780647 5.243602 -3.173995 + vertex 50.955387 4.638966 -3.843842 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.950111 0.311913 -0.000224 + outer loop + vertex 50.622238 5.726650 -2.446545 + vertex 50.780647 5.243602 -3.173995 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.940392 0.340090 -0.001055 + outer loop + vertex 50.490826 6.092421 -1.673668 + vertex 50.622238 5.726650 -2.446545 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.936949 0.349464 -0.001465 + outer loop + vertex 50.490826 6.092421 -1.673668 + vertex 50.851887 5.007721 -29.500000 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.932892 0.360154 -0.000996 + outer loop + vertex 50.395226 6.342282 -0.866653 + vertex 50.490826 6.092421 -1.673668 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.928288 0.371862 -0.000613 + outer loop + vertex 50.348400 6.460290 -0.189163 + vertex 50.395226 6.342282 -0.866653 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.925109 0.379701 -0.000397 + outer loop + vertex 50.332397 6.500000 0.500000 + vertex 50.348400 6.460290 -0.189163 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.948776 0.315948 0.000211 + outer loop + vertex 50.851887 5.007721 30.500000 + vertex 50.799007 5.184052 4.249620 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal 0.965556 0.260195 -0.000197 + outer loop + vertex 50.851887 5.007721 30.500000 + vertex 51.079708 4.143171 5.267316 + vertex 50.799007 5.184052 4.249620 + endloop + endfacet + facet normal 0.977146 0.212565 0.001539 + outer loop + vertex 50.851887 5.007721 30.500000 + vertex 51.337143 2.777037 30.500000 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal 0.877677 0.479248 0.002189 + outer loop + vertex 48.960056 9.150253 -29.500000 + vertex 50.332397 6.500000 0.500000 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.936949 0.349464 0.001446 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 50.851887 5.007721 30.500000 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal 0.927238 0.374473 0.000530 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 50.391338 6.352184 1.823611 + vertex 50.332397 6.500000 0.500000 + endloop + endfacet + facet normal 0.934857 0.355022 0.001158 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 50.556267 5.913767 3.086720 + vertex 50.391338 6.352184 1.823611 + endloop + endfacet + facet normal 0.888010 0.459825 0.000000 + outer loop + vertex 48.960056 9.150253 30.500000 + vertex 50.332397 6.500000 0.500000 + vertex 48.960056 9.150253 -29.500000 + endloop + endfacet + facet normal 0.877677 0.479248 -0.002189 + outer loop + vertex 48.960056 9.150253 30.500000 + vertex 50.054111 7.146640 30.500000 + vertex 50.332397 6.500000 0.500000 + endloop + endfacet + facet normal 0.800541 0.599278 0.000000 + outer loop + vertex 47.591991 10.977772 30.500000 + vertex 48.960056 9.150253 30.500000 + vertex 48.960056 9.150253 -29.500000 + endloop + endfacet + facet normal 0.800541 0.599278 0.000000 + outer loop + vertex 47.591991 10.977772 30.500000 + vertex 48.960056 9.150253 -29.500000 + vertex 47.591991 10.977772 -29.500000 + endloop + endfacet + facet normal 0.707107 0.707106 0.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 45.977772 12.591993 -29.500000 + endloop + endfacet + facet normal 0.707107 0.707106 0.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 47.591991 10.977772 30.500000 + vertex 47.591991 10.977772 -29.500000 + endloop + endfacet + facet normal 0.599278 0.800541 0.000000 + outer loop + vertex 44.150253 13.960056 30.500000 + vertex 45.977772 12.591993 30.500000 + vertex 45.977772 12.591993 -29.500000 + endloop + endfacet + facet normal 0.599278 0.800541 0.000000 + outer loop + vertex 44.150253 13.960056 30.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 44.150253 13.960056 -29.500000 + endloop + endfacet + facet normal 0.479249 0.877679 0.000000 + outer loop + vertex 42.146641 15.054111 30.500000 + vertex 44.150253 13.960056 -29.500000 + vertex 42.146641 15.054111 -29.500000 + endloop + endfacet + facet normal 0.479249 0.877679 0.000000 + outer loop + vertex 42.146641 15.054111 30.500000 + vertex 44.150253 13.960056 30.500000 + vertex 44.150253 13.960056 -29.500000 + endloop + endfacet + facet normal 0.349464 0.936950 0.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 42.146641 15.054111 -29.500000 + vertex 40.007721 15.851888 -29.500000 + endloop + endfacet + facet normal 0.349464 0.936950 0.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 42.146641 15.054111 30.500000 + vertex 42.146641 15.054111 -29.500000 + endloop + endfacet + facet normal 0.212565 0.977147 0.000000 + outer loop + vertex 37.777039 16.337143 30.500000 + vertex 40.007721 15.851888 -29.500000 + vertex 37.777039 16.337143 -29.500000 + endloop + endfacet + facet normal 0.212565 0.977147 0.000000 + outer loop + vertex 37.777039 16.337143 30.500000 + vertex 40.007721 15.851888 30.500000 + vertex 40.007721 15.851888 -29.500000 + endloop + endfacet + facet normal 0.071339 0.997452 0.000000 + outer loop + vertex 35.500000 16.500000 30.500000 + vertex 37.777039 16.337143 -29.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal 0.071339 0.997452 0.000000 + outer loop + vertex 35.500000 16.500000 30.500000 + vertex 37.777039 16.337143 30.500000 + vertex 37.777039 16.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 0.997452 0.000000 + outer loop + vertex 33.222961 16.337143 30.500000 + vertex 35.500000 16.500000 -29.500000 + vertex 33.222961 16.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 0.997452 0.000000 + outer loop + vertex 33.222961 16.337143 30.500000 + vertex 35.500000 16.500000 30.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal -0.212565 0.977147 0.000000 + outer loop + vertex 30.992279 15.851888 30.500000 + vertex 33.222961 16.337143 -29.500000 + vertex 30.992279 15.851888 -29.500000 + endloop + endfacet + facet normal -0.212565 0.977147 0.000000 + outer loop + vertex 30.992279 15.851888 30.500000 + vertex 33.222961 16.337143 30.500000 + vertex 33.222961 16.337143 -29.500000 + endloop + endfacet + facet normal -0.349464 0.936950 0.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 30.992279 15.851888 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal -0.479249 0.877679 0.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 28.853359 15.054111 -29.500000 + vertex 26.849747 13.960056 -29.500000 + endloop + endfacet + facet normal -0.349464 0.936950 0.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 30.992279 15.851888 30.500000 + vertex 30.992279 15.851888 -29.500000 + endloop + endfacet + facet normal -0.479249 0.877679 0.000000 + outer loop + vertex 26.849747 13.960056 30.500000 + vertex 28.853359 15.054111 30.500000 + vertex 26.849747 13.960056 -29.500000 + endloop + endfacet + facet normal -0.599278 0.800541 0.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 26.849747 13.960056 -29.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal -0.599278 0.800541 0.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 26.849747 13.960056 30.500000 + vertex 26.849747 13.960056 -29.500000 + endloop + endfacet + facet normal -0.707107 0.707107 0.000000 + outer loop + vertex 23.408007 10.977772 30.500000 + vertex 25.022228 12.591993 -29.500000 + vertex 23.408007 10.977772 -29.500000 + endloop + endfacet + facet normal -0.707107 0.707107 0.000000 + outer loop + vertex 23.408007 10.977772 30.500000 + vertex 25.022228 12.591993 30.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal -0.800539 0.599276 0.002413 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 23.408007 10.977772 -29.500000 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal -0.814576 0.580057 0.000000 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 23.408007 10.977772 30.500000 + vertex 23.408007 10.977772 -29.500000 + endloop + endfacet + facet normal -0.864717 0.502259 -0.000538 + outer loop + vertex 21.589144 8.404941 -0.729599 + vertex 21.643593 8.500000 0.500000 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal -0.877678 0.479248 -0.001475 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 22.039944 9.150253 -29.500000 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.872464 0.488677 -0.001011 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 21.589144 8.404941 -0.729599 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal -0.886204 0.463295 -0.000757 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 21.434671 8.126698 -1.915257 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.866438 0.499284 0.000625 + outer loop + vertex 22.039944 9.150253 30.500000 + vertex 21.643593 8.500000 0.500000 + vertex 21.547388 8.331002 2.135666 + endloop + endfacet + facet normal -0.878497 0.477746 0.001457 + outer loop + vertex 22.039944 9.150253 30.500000 + vertex 21.547388 8.331002 2.135666 + vertex 21.283375 7.840816 3.680002 + endloop + endfacet + facet normal -0.800539 0.599276 -0.002413 + outer loop + vertex 22.039944 9.150253 30.500000 + vertex 23.408007 10.977772 30.500000 + vertex 21.643593 8.500000 0.500000 + endloop + endfacet + facet normal -0.904627 0.426204 0.000117 + outer loop + vertex 20.875492 6.990284 -4.177202 + vertex 21.186325 7.649735 -3.089051 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.936949 0.349464 -0.001673 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 20.945889 7.146640 -29.500000 + vertex 20.148113 5.007721 -29.500000 + endloop + endfacet + facet normal -0.925255 0.379346 -0.000230 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 20.875492 6.990284 -4.177202 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.897180 0.441664 0.000142 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 21.283375 7.840816 3.680002 + vertex 21.008848 7.282812 4.741870 + endloop + endfacet + facet normal -0.916945 0.399014 -0.000132 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 21.008848 7.282812 4.741870 + vertex 20.661827 6.485701 5.807673 + endloop + endfacet + facet normal -0.877678 0.479248 0.001360 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 22.039944 9.150253 30.500000 + vertex 21.283375 7.840816 3.680002 + endloop + endfacet + facet normal -0.947762 0.318978 -0.000091 + outer loop + vertex 20.164255 5.062339 -6.071534 + vertex 20.525652 6.136390 -5.177245 + vertex 20.148113 5.007721 -29.500000 + endloop + endfacet + facet normal -0.968710 0.248196 0.000089 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 20.164255 5.062339 -6.071534 + vertex 20.148113 5.007721 -29.500000 + endloop + endfacet + facet normal -0.977145 0.212565 -0.001791 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 20.148113 5.007721 -29.500000 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal -0.936949 0.349464 0.001425 + outer loop + vertex 20.148113 5.007721 30.500000 + vertex 20.945889 7.146640 30.500000 + vertex 20.661827 6.485701 5.807673 + endloop + endfacet + facet normal -0.939211 0.343340 0.001011 + outer loop + vertex 20.148113 5.007721 30.500000 + vertex 20.661827 6.485701 5.807673 + vertex 20.290781 5.467865 6.770592 + endloop + endfacet + facet normal -0.962769 0.270325 -0.000546 + outer loop + vertex 20.148113 5.007721 30.500000 + vertex 20.290781 5.467865 6.770592 + vertex 19.930262 4.185544 7.600476 + endloop + endfacet + facet normal -0.984117 0.177521 -0.000038 + outer loop + vertex 19.666361 2.801282 -7.161860 + vertex 19.860142 3.875627 -6.752940 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal -0.994642 0.103380 0.000044 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 19.666361 2.801282 -7.161860 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal -0.997450 0.071339 -0.001821 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 19.662857 2.777037 -29.500000 + vertex 19.500000 0.500000 -29.500000 + endloop + endfacet + facet normal -0.977145 0.212565 0.001664 + outer loop + vertex 19.662857 2.777037 30.500000 + vertex 20.148113 5.007721 30.500000 + vertex 19.930262 4.185544 7.600476 + endloop + endfacet + facet normal -0.982769 0.184837 -0.000107 + outer loop + vertex 19.662857 2.777037 30.500000 + vertex 19.930262 4.185544 7.600476 + vertex 19.655348 2.724181 8.184596 + endloop + endfacet + facet normal -0.995239 0.097467 0.000104 + outer loop + vertex 19.524847 1.391352 8.450188 + vertex 19.662857 2.777037 30.500000 + vertex 19.655348 2.724181 8.184596 + endloop + endfacet + facet normal -0.999889 0.014895 0.000752 + outer loop + vertex 19.508701 -0.027632 -7.482581 + vertex 19.531559 1.504439 -7.436693 + vertex 19.500000 0.500000 -29.500000 + endloop + endfacet + facet normal -0.997451 -0.071339 -0.001315 + outer loop + vertex 19.662857 -1.777037 -29.500000 + vertex 19.508701 -0.027632 -7.482581 + vertex 19.500000 0.500000 -29.500000 + endloop + endfacet + facet normal -0.997029 -0.077021 -0.000861 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 19.508701 -0.027632 -7.482581 + vertex 19.662857 -1.777037 -29.500000 + endloop + endfacet + facet normal -0.997451 0.071339 0.001760 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 19.662857 2.777037 30.500000 + vertex 19.524847 1.391352 8.450188 + endloop + endfacet + facet normal -0.999940 0.010913 -0.000686 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 19.524847 1.391352 8.450188 + vertex 19.509182 -0.041983 8.481620 + endloop + endfacet + facet normal -0.985730 -0.168334 0.000586 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 19.616875 -1.430375 -7.263611 + vertex 19.662857 -1.777037 -29.500000 + endloop + endfacet + facet normal -0.977145 -0.212565 -0.001785 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 19.662857 -1.777037 -29.500000 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal -0.997198 -0.074802 0.001065 + outer loop + vertex 19.662857 -1.777037 30.500000 + vertex 19.509182 -0.041983 8.481620 + vertex 19.606678 -1.344529 8.284453 + endloop + endfacet + facet normal -0.988853 -0.148894 -0.000398 + outer loop + vertex 19.662857 -1.777037 30.500000 + vertex 19.606678 -1.344529 8.284453 + vertex 19.768930 -2.421203 7.947588 + endloop + endfacet + facet normal -0.997451 -0.071339 0.001340 + outer loop + vertex 19.662857 -1.777037 30.500000 + vertex 19.500000 0.500000 30.500000 + vertex 19.509182 -0.041983 8.481620 + endloop + endfacet + facet normal -0.967217 -0.253952 0.000242 + outer loop + vertex 20.196081 -4.167983 -5.996918 + vertex 19.877827 -2.956544 -6.714728 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal -0.946432 -0.322902 -0.000270 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 20.196081 -4.167983 -5.996918 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal -0.936948 -0.349464 -0.001669 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 20.148113 -4.007721 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.925574 -0.378566 -0.000288 + outer loop + vertex 20.856667 -5.947697 -4.235737 + vertex 20.531864 -5.152869 -5.160837 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.975386 -0.220501 0.000888 + outer loop + vertex 20.148113 -4.007721 30.500000 + vertex 19.768930 -2.421203 7.947588 + vertex 20.038578 -3.616358 7.359708 + endloop + endfacet + facet normal -0.956607 -0.291382 -0.000400 + outer loop + vertex 20.148113 -4.007721 30.500000 + vertex 20.038578 -3.616358 7.359708 + vertex 20.372141 -4.710361 6.570597 + endloop + endfacet + facet normal -0.977146 -0.212565 0.001476 + outer loop + vertex 20.148113 -4.007721 30.500000 + vertex 19.662857 -1.777037 30.500000 + vertex 19.768930 -2.421203 7.947588 + endloop + endfacet + facet normal -0.906353 -0.422522 0.000126 + outer loop + vertex 21.149296 -6.575117 -3.233994 + vertex 20.856667 -5.947697 -4.235737 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.877678 -0.479248 -0.001469 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 20.945889 -6.146640 -29.500000 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.888948 -0.458008 -0.000587 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 21.149296 -6.575117 -3.233994 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.874730 -0.484610 -0.001182 + outer loop + vertex 21.560614 -7.354522 -1.018713 + vertex 21.390741 -7.045117 -2.159174 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.866417 -0.499321 -0.000631 + outer loop + vertex 21.639618 -7.493109 0.168034 + vertex 21.560614 -7.354522 -1.018713 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.935060 -0.354488 0.001143 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 20.372141 -4.710361 6.570597 + vertex 20.706879 -5.596193 5.680389 + endloop + endfacet + facet normal -0.915154 -0.403104 -0.000127 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 20.706879 -5.596193 5.680389 + vertex 21.018789 -6.304007 4.707789 + endloop + endfacet + facet normal -0.896713 -0.442613 0.000166 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 21.018789 -6.304007 4.707789 + vertex 21.287531 -6.848857 3.661376 + endloop + endfacet + facet normal -0.936949 -0.349464 0.001490 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 20.148113 -4.007721 30.500000 + vertex 20.372141 -4.710361 6.570597 + endloop + endfacet + facet normal -0.800539 -0.599276 0.002472 + outer loop + vertex 23.408007 -9.977772 -29.500000 + vertex 21.639618 -7.493109 0.168034 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.879958 -0.475049 0.001634 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 21.287531 -6.848857 3.661376 + vertex 21.493242 -7.233742 2.546763 + endloop + endfacet + facet normal -0.869705 -0.493571 0.000827 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 21.493242 -7.233742 2.546763 + vertex 21.616100 -7.452191 1.373303 + endloop + endfacet + facet normal -0.861961 -0.506974 0.000393 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 21.616100 -7.452191 1.373303 + vertex 21.639618 -7.493109 0.168034 + endloop + endfacet + facet normal -0.877678 -0.479248 0.001367 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 21.287531 -6.848857 3.661376 + endloop + endfacet + facet normal -0.707107 -0.707107 -0.000000 + outer loop + vertex 23.408007 -9.977772 30.500000 + vertex 23.408007 -9.977772 -29.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal -0.814720 -0.579854 -0.000000 + outer loop + vertex 23.408007 -9.977772 30.500000 + vertex 21.639618 -7.493109 0.168034 + vertex 23.408007 -9.977772 -29.500000 + endloop + endfacet + facet normal -0.800539 -0.599276 -0.002418 + outer loop + vertex 23.408007 -9.977772 30.500000 + vertex 22.039944 -8.150253 30.500000 + vertex 21.639618 -7.493109 0.168034 + endloop + endfacet + facet normal -0.707107 -0.707107 -0.000000 + outer loop + vertex 25.022228 -11.591993 30.500000 + vertex 23.408007 -9.977772 30.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal -0.599278 -0.800541 -0.000000 + outer loop + vertex 26.849747 -12.960056 30.500000 + vertex 25.022228 -11.591993 -29.500000 + vertex 26.849747 -12.960056 -29.500000 + endloop + endfacet + facet normal -0.479249 -0.877679 -0.000000 + outer loop + vertex 26.849747 -12.960056 30.500000 + vertex 26.849747 -12.960056 -29.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal -0.599278 -0.800541 0.000000 + outer loop + vertex 26.849747 -12.960056 30.500000 + vertex 25.022228 -11.591993 30.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal -0.479249 -0.877679 -0.000000 + outer loop + vertex 28.853359 -14.054111 30.500000 + vertex 26.849747 -12.960056 30.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal -0.349464 -0.936950 0.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 28.853359 -14.054111 30.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal -0.349464 -0.936950 -0.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 28.853359 -14.054111 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + endloop + endfacet + facet normal -0.212565 -0.977147 -0.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 30.992279 -14.851888 -29.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal -0.212565 -0.977147 -0.000000 + outer loop + vertex 33.222961 -15.337143 30.500000 + vertex 30.992279 -14.851888 30.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 -0.997452 0.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 33.222961 -15.337143 30.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 -0.997452 -0.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 33.222961 -15.337143 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + endloop + endfacet + facet normal 0.071339 -0.997452 0.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 35.500000 -15.500000 -29.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.071339 -0.997452 0.000000 + outer loop + vertex 37.777039 -15.337143 30.500000 + vertex 35.500000 -15.500000 30.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.212565 -0.977147 0.000000 + outer loop + vertex 40.007721 -14.851888 30.500000 + vertex 37.777039 -15.337143 30.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.212565 -0.977147 0.000000 + outer loop + vertex 40.007721 -14.851888 30.500000 + vertex 37.777039 -15.337143 -29.500000 + vertex 40.007721 -14.851888 -29.500000 + endloop + endfacet + facet normal 0.349464 -0.936950 0.000000 + outer loop + vertex 40.007721 -14.851888 30.500000 + vertex 40.007721 -14.851888 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.349464 -0.936950 0.000000 + outer loop + vertex 42.146641 -14.054111 30.500000 + vertex 40.007721 -14.851888 30.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.479249 -0.877679 0.000000 + outer loop + vertex 44.150253 -12.960056 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.479249 -0.877679 0.000000 + outer loop + vertex 44.150253 -12.960056 30.500000 + vertex 42.146641 -14.054111 -29.500000 + vertex 44.150253 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.599278 -0.800541 0.000000 + outer loop + vertex 44.150253 -12.960056 30.500000 + vertex 44.150253 -12.960056 -29.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.599278 -0.800541 0.000000 + outer loop + vertex 45.977772 -11.591993 30.500000 + vertex 44.150253 -12.960056 30.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.707107 -0.707106 0.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 45.977772 -11.591993 30.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.707107 -0.707106 0.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 45.977772 -11.591993 -29.500000 + vertex 47.591991 -9.977772 -29.500000 + endloop + endfacet + facet normal 0.800541 -0.599278 0.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 47.591991 -9.977772 -29.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.800541 -0.599278 0.000000 + outer loop + vertex 48.960056 -8.150253 30.500000 + vertex 47.591991 -9.977772 30.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.888117 -0.459617 0.000000 + outer loop + vertex 50.335209 -5.493046 0.211204 + vertex 48.960056 -8.150253 30.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.877677 -0.479248 0.002239 + outer loop + vertex 50.335209 -5.493046 0.211204 + vertex 48.960056 -8.150253 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.926941 -0.375206 -0.000516 + outer loop + vertex 50.374840 -5.393991 -0.622882 + vertex 50.335209 -5.493046 0.211204 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.931224 -0.364446 -0.000844 + outer loop + vertex 50.458221 -5.179053 -1.436066 + vertex 50.374840 -5.393991 -0.622882 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.937556 -0.347830 -0.001508 + outer loop + vertex 50.578938 -4.850290 -2.215583 + vertex 50.458221 -5.179053 -1.436066 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.936949 -0.349464 -0.001419 + outer loop + vertex 50.578938 -4.850290 -2.215583 + vertex 50.054111 -6.146640 -29.500000 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.947000 -0.321234 -0.000446 + outer loop + vertex 50.729084 -4.406632 -2.953253 + vertex 50.578938 -4.850290 -2.215583 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.932978 -0.359933 0.001005 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 50.396503 -5.339019 1.880529 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal 0.928104 -0.372320 0.000597 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 50.342648 -5.474597 1.051531 + vertex 50.396503 -5.339019 1.880529 + endloop + endfacet + facet normal 0.923121 -0.384509 0.000270 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 50.335209 -5.493046 0.211204 + vertex 50.342648 -5.474597 1.051531 + endloop + endfacet + facet normal 0.877677 -0.479248 -0.002196 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 48.960056 -8.150253 30.500000 + vertex 50.335209 -5.493046 0.211204 + endloop + endfacet + facet normal 0.957335 -0.288981 0.000086 + outer loop + vertex 50.899483 -3.842341 -3.640540 + vertex 50.729084 -4.406632 -2.953253 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.968292 -0.249822 -0.000185 + outer loop + vertex 51.079292 -3.144950 -4.265956 + vertex 50.899483 -3.842341 -3.640540 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.977146 -0.212565 -0.001538 + outer loop + vertex 51.079292 -3.144950 -4.265956 + vertex 50.851887 -4.007721 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.979427 -0.201798 -0.000931 + outer loop + vertex 51.254513 -2.292002 -4.810812 + vertex 51.079292 -3.144950 -4.265956 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.971762 -0.235962 0.000529 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.955387 -3.638966 4.843842 + vertex 51.135273 -2.896791 5.445888 + endloop + endfacet + facet normal 0.960723 -0.277510 -0.000113 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.780762 -4.243235 4.174469 + vertex 50.955387 -3.638966 4.843842 + endloop + endfacet + facet normal 0.950144 -0.311811 0.000222 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.623219 -4.723814 3.451571 + vertex 50.780762 -4.243235 4.174469 + endloop + endfacet + facet normal 0.940481 -0.339846 0.001046 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.492382 -5.088249 2.684370 + vertex 50.623219 -4.723814 3.451571 + endloop + endfacet + facet normal 0.936949 -0.349464 0.001466 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.054111 -6.146640 30.500000 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal 0.989912 -0.141685 0.000358 + outer loop + vertex 51.404663 -1.244035 -5.240935 + vertex 51.254513 -2.292002 -4.810812 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.997451 -0.071339 -0.001635 + outer loop + vertex 51.473011 -0.428928 -5.427655 + vertex 51.337143 -1.777037 -29.500000 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.996485 -0.083770 -0.000933 + outer loop + vertex 51.473011 -0.428928 -5.427655 + vertex 51.404663 -1.244035 -5.240935 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.992676 -0.120805 -0.000250 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 51.304974 -1.990543 5.958681 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal 0.982883 -0.184229 0.000314 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 51.135273 -2.896791 5.445888 + vertex 51.304974 -1.990543 5.958681 + endloop + endfacet + facet normal 0.977146 -0.212565 0.001627 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 50.851887 -4.007721 30.500000 + vertex 51.135273 -2.896791 5.445888 + endloop + endfacet + facet normal 0.999578 -0.029042 0.000000 + outer loop + vertex 51.500000 0.500000 -5.500000 + vertex 51.473011 -0.428928 -5.427655 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.999074 -0.043026 0.000000 + outer loop + vertex 51.500000 0.500000 30.500000 + vertex 51.440762 -0.875535 6.340197 + vertex 51.500000 0.500000 6.500000 + endloop + endfacet + facet normal 0.997451 -0.071339 0.001616 + outer loop + vertex 51.500000 0.500000 30.500000 + vertex 51.337143 -1.777037 30.500000 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 37.777039 16.337143 -29.500000 + vertex 40.007721 15.851888 -29.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.500000 0.500000 -29.500000 + vertex 50.054111 7.146640 -29.500000 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.337143 2.777037 -29.500000 + vertex 50.054111 7.146640 -29.500000 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 22.039944 -8.150253 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + vertex 23.408007 -9.977772 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 23.408007 -9.977772 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.022228 -11.591993 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + vertex 26.849747 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 26.849747 -12.960056 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + vertex 26.849747 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 50.054111 7.146640 -29.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 48.960056 9.150253 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.500000 0.500000 -29.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.337143 -1.777037 -29.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 28.853359 15.054111 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 35.500000 16.500000 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 44.150253 13.960056 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 42.146641 15.054111 -29.500000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 42.146641 15.054111 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 40.007721 15.851888 -29.500000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 40.007721 15.851888 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.337143 -1.777037 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 47.591991 10.977772 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 30.992279 -14.851888 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 19.662857 -1.777037 -29.500000 + vertex 19.500000 0.500000 -29.500000 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.148113 -4.007721 -29.500000 + vertex 19.500000 0.500000 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 37.777039 -15.337143 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 19.500000 0.500000 -29.500000 + vertex 19.662857 2.777037 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 37.777039 -15.337143 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + vertex 40.007721 -14.851888 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 20.148113 5.007721 -29.500000 + vertex 20.945889 7.146640 -29.500000 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 42.146641 -14.054111 -29.500000 + vertex 45.977772 -11.591993 -29.500000 + vertex 44.150253 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 42.146641 -14.054111 -29.500000 + vertex 47.591991 -9.977772 -29.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 23.408007 10.977772 -29.500000 + vertex 25.022228 12.591993 -29.500000 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 22.039944 9.150253 -29.500000 + vertex 25.022228 12.591993 -29.500000 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 47.591991 -9.977772 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 19.662857 2.777037 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 20.945889 7.146640 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 25.022228 12.591993 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 42.146641 -14.054111 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 47.591991 -9.977772 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 26.849747 13.960056 -29.500000 + vertex 28.853359 15.054111 -29.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 50.054111 -6.146640 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 28.853359 15.054111 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.022228 12.591993 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 30.992279 15.851888 -29.500000 + vertex 33.222961 16.337143 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 33.222961 16.337143 -29.500000 + vertex 35.500000 16.500000 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 35.500000 16.500000 30.500000 + vertex 28.853359 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 37.777039 16.337143 30.500000 + vertex 35.500000 16.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 51.337143 -1.777037 30.500000 + vertex 51.500000 0.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 51.337143 2.777037 30.500000 + vertex 50.851887 5.007721 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 22.039944 -8.150253 30.500000 + vertex 23.408007 -9.977772 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 23.408007 -9.977772 30.500000 + vertex 25.022228 -11.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 25.022228 -11.591993 30.500000 + vertex 26.849747 -12.960056 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.591991 10.977772 30.500000 + vertex 50.054111 7.146640 30.500000 + vertex 48.960056 9.150253 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 26.849747 -12.960056 30.500000 + vertex 28.853359 -14.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 51.500000 0.500000 30.500000 + vertex 51.337143 2.777037 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 26.849747 -12.960056 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 44.150253 13.960056 30.500000 + vertex 42.146641 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 42.146641 15.054111 30.500000 + vertex 40.007721 15.851888 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 40.007721 15.851888 30.500000 + vertex 51.500000 0.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 51.337143 2.777037 30.500000 + vertex 50.054111 7.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 50.054111 7.146640 30.500000 + vertex 47.591991 10.977772 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 30.992279 -14.851888 30.500000 + vertex 33.222961 -15.337143 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 30.992279 -14.851888 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 19.662857 -1.777037 30.500000 + vertex 20.148113 -4.007721 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 20.148113 -4.007721 30.500000 + vertex 20.945889 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 37.777039 -15.337143 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 35.500000 -15.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 19.662857 2.777037 30.500000 + vertex 19.500000 0.500000 30.500000 + vertex 20.945889 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 42.146641 -14.054111 30.500000 + vertex 37.777039 -15.337143 30.500000 + vertex 40.007721 -14.851888 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 42.146641 -14.054111 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 37.777039 -15.337143 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 20.148113 5.007721 30.500000 + vertex 19.662857 2.777037 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 -11.591993 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 44.150253 -12.960056 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 45.977772 -11.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 23.408007 10.977772 30.500000 + vertex 22.039944 9.150253 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 22.039944 9.150253 30.500000 + vertex 20.945889 7.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 47.591991 -9.977772 30.500000 + vertex 48.960056 -8.150253 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 19.662857 2.777037 30.500000 + vertex 20.945889 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 20.945889 7.146640 30.500000 + vertex 19.662857 2.777037 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 42.146641 -14.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 25.022228 12.591993 30.500000 + vertex 20.945889 7.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 47.591991 -9.977772 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 26.849747 13.960056 30.500000 + vertex 25.022228 12.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 50.054111 -6.146640 30.500000 + vertex 50.851887 -4.007721 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 28.853359 15.054111 30.500000 + vertex 25.022228 12.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 25.022228 12.591993 30.500000 + vertex 50.054111 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 33.222961 16.337143 30.500000 + vertex 30.992279 15.851888 30.500000 + vertex 28.853359 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 35.500000 16.500000 30.500000 + vertex 33.222961 16.337143 30.500000 + vertex 28.853359 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 28.853359 15.054111 30.500000 + vertex 51.337143 -1.777037 30.500000 + endloop + endfacet + facet normal 0.000661 -0.983098 0.183081 + outer loop + vertex 21.616100 -7.452191 1.373303 + vertex 21.493242 -7.233742 2.546763 + vertex 0.500000 -7.289563 2.322828 + endloop + endfacet + facet normal -0.000747 -0.988280 0.152649 + outer loop + vertex 21.616100 -7.452191 1.373303 + vertex 0.500000 -7.289563 2.322828 + vertex 0.500000 -7.476526 1.112394 + endloop + endfacet + facet normal -0.000784 -1.000000 0.000000 + outer loop + vertex 21.639618 -7.493109 0.168034 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -7.476526 -0.112394 + endloop + endfacet + facet normal 0.000732 -0.999423 0.033944 + outer loop + vertex 21.639618 -7.493109 0.168034 + vertex 21.616100 -7.452191 1.373303 + vertex 0.500000 -7.476526 1.112394 + endloop + endfacet + facet normal 0.000000 0.997066 0.076549 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 0.500000 8.500000 0.500000 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -0.000844 -0.988280 -0.152649 + outer loop + vertex 21.560614 -7.354522 -1.018713 + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -7.289563 -1.322828 + endloop + endfacet + facet normal 0.000760 -0.993244 -0.116041 + outer loop + vertex 21.560614 -7.354522 -1.018713 + vertex 21.639618 -7.493109 0.168034 + vertex 0.500000 -7.476526 -0.112394 + endloop + endfacet + facet normal -0.001006 0.973695 0.227853 + outer loop + vertex 21.547388 8.331002 2.135666 + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 8.127172 2.913765 + endloop + endfacet + facet normal 0.001530 0.994694 0.102862 + outer loop + vertex 21.547388 8.331002 2.135666 + vertex 21.643593 8.500000 0.500000 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -0.000923 -0.953396 -0.301720 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 0.500000 -7.289563 -1.322828 + vertex 0.500000 -6.920020 -2.490537 + endloop + endfacet + facet normal 0.000806 -0.965082 -0.261945 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 21.560614 -7.354522 -1.018713 + vertex 0.500000 -7.289563 -1.322828 + endloop + endfacet + facet normal -0.001003 0.927502 0.373817 + outer loop + vertex 21.283375 7.840816 3.680002 + vertex 0.500000 8.127172 2.913765 + vertex 0.500000 7.669324 4.049759 + endloop + endfacet + facet normal 0.001966 0.953040 0.302839 + outer loop + vertex 21.283375 7.840816 3.680002 + vertex 21.547388 8.331002 2.135666 + vertex 0.500000 8.127172 2.913765 + endloop + endfacet + facet normal -0.001007 -0.896165 -0.443720 + outer loop + vertex 21.149296 -6.575117 -3.233994 + vertex 0.500000 -6.920020 -2.490537 + vertex 0.500000 -6.376557 -3.588150 + endloop + endfacet + facet normal 0.000871 -0.916158 -0.400816 + outer loop + vertex 21.149296 -6.575117 -3.233994 + vertex 21.390741 -7.045117 -2.159174 + vertex 0.500000 -6.920020 -2.490537 + endloop + endfacet + facet normal -0.001046 0.859569 0.511018 + outer loop + vertex 21.008848 7.282812 4.741870 + vertex 0.500000 7.669324 4.049759 + vertex 0.500000 7.043435 5.102549 + endloop + endfacet + facet normal 0.000976 0.885114 0.465374 + outer loop + vertex 21.008848 7.282812 4.741870 + vertex 21.283375 7.840816 3.680002 + vertex 0.500000 7.669324 4.049759 + endloop + endfacet + facet normal -0.001071 -0.817929 -0.575318 + outer loop + vertex 20.856667 -5.947697 -4.235737 + vertex 0.500000 -6.376557 -3.588150 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal 0.000959 -0.847365 -0.531009 + outer loop + vertex 20.856667 -5.947697 -4.235737 + vertex 21.149296 -6.575117 -3.233994 + vertex 0.500000 -6.376557 -3.588150 + endloop + endfacet + facet normal 0.001193 0.800620 0.599171 + outer loop + vertex 20.661827 6.485701 5.807673 + vertex 21.008848 7.282812 4.741870 + vertex 0.500000 7.043435 5.102549 + endloop + endfacet + facet normal -0.000910 0.771489 0.636242 + outer loop + vertex 20.661827 6.485701 5.807673 + vertex 0.500000 7.043435 5.102549 + vertex 0.500000 6.264173 6.047460 + endloop + endfacet + facet normal -0.001093 -0.720521 -0.693432 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -4.822606 -5.472426 + endloop + endfacet + facet normal 0.001070 -0.758306 -0.651898 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 20.856667 -5.947697 -4.235737 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal 0.001093 0.687027 0.726631 + outer loop + vertex 20.290781 5.467865 6.770592 + vertex 20.661827 6.485701 5.807673 + vertex 0.500000 6.264173 6.047460 + endloop + endfacet + facet normal -0.000508 0.665326 0.746553 + outer loop + vertex 20.290781 5.467865 6.770592 + vertex 0.500000 6.264173 6.047460 + vertex 0.500000 5.349803 6.862343 + endloop + endfacet + facet normal -0.001029 -0.606225 -0.795292 + outer loop + vertex 20.196081 -4.167983 -5.996918 + vertex 0.500000 -4.822606 -5.472426 + vertex 0.500000 -3.848540 -6.214923 + endloop + endfacet + facet normal 0.001195 -0.646929 -0.762549 + outer loop + vertex 20.196081 -4.167983 -5.996918 + vertex 20.531864 -5.152869 -5.160837 + vertex 0.500000 -4.822606 -5.472426 + endloop + endfacet + facet normal 0.000652 0.543190 0.839610 + outer loop + vertex 19.930262 4.185544 7.600476 + vertex 20.290781 5.467865 6.770592 + vertex 0.500000 5.349803 6.862343 + endloop + endfacet + facet normal -0.000669 -0.477720 -0.878512 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 0.500000 -3.848540 -6.214923 + vertex 0.500000 -2.772549 -6.800029 + endloop + endfacet + facet normal 0.000684 0.543568 0.839365 + outer loop + vertex 19.930262 4.185544 7.600476 + vertex 0.500000 5.349803 6.862343 + vertex 0.500000 4.321759 7.528098 + endloop + endfacet + facet normal -0.000531 0.409068 0.912504 + outer loop + vertex 19.930262 4.185544 7.600476 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 3.204135 8.029120 + endloop + endfacet + facet normal 0.001260 -0.509515 -0.860461 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 20.196081 -4.167983 -5.996918 + vertex 0.500000 -3.848540 -6.214923 + endloop + endfacet + facet normal 0.001755 0.370872 0.928682 + outer loop + vertex 19.655348 2.724181 8.184596 + vertex 19.930262 4.185544 7.600476 + vertex 0.500000 3.204135 8.029120 + endloop + endfacet + facet normal -0.001187 0.264981 0.964253 + outer loop + vertex 19.655348 2.724181 8.184596 + vertex 0.500000 3.204135 8.029120 + vertex 0.500000 2.023129 8.353666 + endloop + endfacet + facet normal 0.000909 -0.338017 -0.941140 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 0.500000 -2.772549 -6.800029 + vertex 0.500000 -1.619852 -7.214028 + endloop + endfacet + facet normal -0.000659 -0.190391 -0.981708 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 0.500000 -1.619852 -7.214028 + vertex 0.500000 -0.417467 -7.447217 + endloop + endfacet + facet normal 0.000930 -0.338285 -0.941043 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 19.877827 -2.956544 -6.714728 + vertex 0.500000 -2.772549 -6.800029 + endloop + endfacet + facet normal 0.001509 0.195285 0.980745 + outer loop + vertex 19.524847 1.391352 8.450188 + vertex 19.655348 2.724181 8.184596 + vertex 0.500000 2.023129 8.353666 + endloop + endfacet + facet normal -0.001232 0.114683 0.993401 + outer loop + vertex 19.524847 1.391352 8.450188 + vertex 0.500000 2.023129 8.353666 + vertex 0.500000 0.806422 8.494129 + endloop + endfacet + facet normal -0.001074 -0.038303 -0.999266 + outer loop + vertex 19.508701 -0.027632 -7.482581 + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal 0.001323 -0.154134 -0.988049 + outer loop + vertex 19.508701 -0.027632 -7.482581 + vertex 19.616875 -1.430375 -7.263611 + vertex 0.500000 -0.417467 -7.447217 + endloop + endfacet + facet normal 0.001636 0.021906 0.999759 + outer loop + vertex 19.509182 -0.041983 8.481620 + vertex 19.524847 1.391352 8.450188 + vertex 0.500000 0.806422 8.494129 + endloop + endfacet + facet normal -0.001052 -0.038302 0.999266 + outer loop + vertex 19.509182 -0.041983 8.481620 + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 -0.417467 8.447217 + endloop + endfacet + facet normal 0.001920 0.029909 -0.999551 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 19.508701 -0.027632 -7.482581 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -0.001208 0.114683 -0.993401 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 2.023129 -7.353667 + endloop + endfacet + facet normal 0.001165 -0.149580 0.988749 + outer loop + vertex 19.606678 -1.344529 8.284453 + vertex 19.509182 -0.041983 8.481620 + vertex 0.500000 -0.417467 8.447217 + endloop + endfacet + facet normal -0.000875 -0.190391 0.981708 + outer loop + vertex 19.606678 -1.344529 8.284453 + vertex 0.500000 -0.417467 8.447217 + vertex 0.500000 -1.619852 8.214028 + endloop + endfacet + facet normal 0.001379 0.207183 -0.978301 + outer loop + vertex 19.666361 2.801282 -7.161860 + vertex 19.531559 1.504439 -7.436693 + vertex 0.500000 2.023129 -7.353667 + endloop + endfacet + facet normal -0.001109 0.264982 -0.964253 + outer loop + vertex 19.666361 2.801282 -7.161860 + vertex 0.500000 2.023129 -7.353667 + vertex 0.500000 3.204135 -7.029120 + endloop + endfacet + facet normal 0.000783 -0.298494 0.954411 + outer loop + vertex 19.768930 -2.421203 7.947588 + vertex 19.606678 -1.344529 8.284453 + vertex 0.500000 -1.619852 8.214028 + endloop + endfacet + facet normal -0.001044 -0.338017 0.941139 + outer loop + vertex 19.768930 -2.421203 7.947588 + vertex 0.500000 -1.619852 8.214028 + vertex 0.500000 -2.772549 7.800029 + endloop + endfacet + facet normal 0.001001 0.355568 -0.934650 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 19.666361 2.801282 -7.161860 + vertex 0.500000 3.204135 -7.029120 + endloop + endfacet + facet normal -0.001171 0.409068 -0.912503 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 0.500000 3.204135 -7.029120 + vertex 0.500000 4.321759 -6.528098 + endloop + endfacet + facet normal 0.001172 -0.441166 0.897425 + outer loop + vertex 20.038578 -3.616358 7.359708 + vertex 19.768930 -2.421203 7.947588 + vertex 0.500000 -2.772549 7.800029 + endloop + endfacet + facet normal -0.000833 -0.477720 0.878512 + outer loop + vertex 20.038578 -3.616358 7.359708 + vertex 0.500000 -2.772549 7.800029 + vertex 0.500000 -3.848540 7.214923 + endloop + endfacet + facet normal 0.001395 0.497678 -0.867361 + outer loop + vertex 20.164255 5.062339 -6.071534 + vertex 19.860142 3.875627 -6.752940 + vertex 0.500000 4.321759 -6.528098 + endloop + endfacet + facet normal -0.000983 0.543567 -0.839365 + outer loop + vertex 20.164255 5.062339 -6.071534 + vertex 0.500000 4.321759 -6.528098 + vertex 0.500000 5.349803 -5.862343 + endloop + endfacet + facet normal 0.000939 -0.584814 0.811167 + outer loop + vertex 20.372141 -4.710361 6.570597 + vertex 20.038578 -3.616358 7.359708 + vertex 0.500000 -3.848540 7.214923 + endloop + endfacet + facet normal -0.000505 -0.606225 0.795293 + outer loop + vertex 20.372141 -4.710361 6.570597 + vertex 0.500000 -3.848540 7.214923 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal 0.001173 0.639633 -0.768680 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 20.164255 5.062339 -6.071534 + vertex 0.500000 5.349803 -5.862343 + endloop + endfacet + facet normal -0.000593 0.665326 -0.746553 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 6.264173 -5.047460 + endloop + endfacet + facet normal 0.000518 -0.708749 0.705460 + outer loop + vertex 20.706879 -5.596193 5.680389 + vertex 20.372141 -4.710361 6.570597 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -0.000404 -0.720521 0.693432 + outer loop + vertex 20.706879 -5.596193 5.680389 + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 -5.671914 5.589940 + endloop + endfacet + facet normal 0.000643 0.760379 -0.649480 + outer loop + vertex 20.875492 6.990284 -4.177202 + vertex 20.525652 6.136390 -5.177245 + vertex 0.500000 6.264173 -5.047460 + endloop + endfacet + facet normal -0.000319 0.771489 -0.636243 + outer loop + vertex 20.875492 6.990284 -4.177202 + vertex 0.500000 6.264173 -5.047460 + vertex 0.500000 7.043435 -4.102549 + endloop + endfacet + facet normal 0.000395 -0.808490 0.588510 + outer loop + vertex 21.018789 -6.304007 4.707789 + vertex 20.706879 -5.596193 5.680389 + vertex 0.500000 -5.671914 5.589940 + endloop + endfacet + facet normal -0.000463 -0.817929 0.575319 + outer loop + vertex 21.018789 -6.304007 4.707789 + vertex 0.500000 -5.671914 5.589940 + vertex 0.500000 -6.376557 4.588150 + endloop + endfacet + facet normal 0.000332 0.855168 -0.518351 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 20.875492 6.990284 -4.177202 + vertex 0.500000 7.043435 -4.102549 + endloop + endfacet + facet normal -0.000157 0.859570 -0.511019 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 0.500000 7.043435 -4.102549 + vertex 0.500000 7.669324 -3.049759 + endloop + endfacet + facet normal 0.000168 0.927502 -0.373817 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 8.127172 -1.913765 + endloop + endfacet + facet normal 0.000443 -0.886922 0.461919 + outer loop + vertex 21.287531 -6.848857 3.661376 + vertex 21.018789 -6.304007 4.707789 + vertex 0.500000 -6.376557 4.588150 + endloop + endfacet + facet normal -0.000579 -0.896165 0.443720 + outer loop + vertex 21.287531 -6.848857 3.661376 + vertex 0.500000 -6.376557 4.588150 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -0.000006 0.926437 -0.376450 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 21.186325 7.649735 -3.089051 + vertex 0.500000 8.127172 -1.913765 + endloop + endfacet + facet normal 0.000006 0.973696 -0.227853 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 0.500000 8.127172 -1.913765 + vertex 0.500000 8.406243 -0.721194 + endloop + endfacet + facet normal -0.000683 -0.953396 0.301720 + outer loop + vertex 21.493242 -7.233742 2.546763 + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 -7.289563 2.322828 + endloop + endfacet + facet normal 0.000553 -0.945201 0.326487 + outer loop + vertex 21.493242 -7.233742 2.546763 + vertex 21.287531 -6.848857 3.661376 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -0.000031 0.973553 -0.228463 + outer loop + vertex 21.589144 8.404941 -0.729599 + vertex 21.434671 8.126698 -1.915257 + vertex 0.500000 8.406243 -0.721194 + endloop + endfacet + facet normal 0.000031 0.997066 -0.076549 + outer loop + vertex 21.589144 8.404941 -0.729599 + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 8.500000 0.500000 + endloop + endfacet + facet normal 0.000000 0.997025 -0.077079 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 21.589144 8.404941 -0.729599 + vertex 0.500000 8.500000 0.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 7.669324 4.049759 + vertex 0.500000 8.127172 2.913765 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.500000 3.204135 8.029120 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 2.023129 8.353666 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -3.848540 -6.214923 + vertex 0.500000 -4.822606 -5.472426 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.500000 2.023129 8.353666 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 0.806422 8.494129 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 5.349803 -5.862343 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 7.669324 -3.049759 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 8.406243 -0.721194 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 7.043435 5.102549 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 7.043435 5.102549 + vertex 0.500000 7.669324 4.049759 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -2.772549 -6.800029 + vertex 0.500000 -3.848540 -6.214923 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -6.376557 -3.588150 + vertex 0.500000 -6.920020 -2.490537 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.500000 5.349803 6.862343 + vertex 0.500000 6.264173 6.047460 + vertex 0.500000 4.321759 7.528098 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 6.264173 6.047460 + vertex 0.500000 7.043435 5.102549 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -2.772549 -6.800029 + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 -1.619852 -7.214028 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 -2.772549 -6.800029 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -7.289563 -1.322828 + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -6.920020 -2.490537 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -6.920020 -2.490537 + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -0.417467 -7.447217 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -7.289563 2.322828 + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 -7.476526 1.112394 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 4.321759 -6.528098 + vertex 0.500000 2.023129 -7.353667 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 2.023129 -7.353667 + vertex 0.500000 4.321759 -6.528098 + vertex 0.500000 3.204135 -7.029120 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 4.321759 -6.528098 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -6.376557 4.588150 + vertex 0.500000 -5.671914 5.589940 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -5.671914 5.589940 + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 6.264173 -5.047460 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 6.264173 -5.047460 + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 7.043435 -4.102549 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -3.848540 7.214923 + vertex 0.500000 -2.772549 7.800029 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -2.772549 7.800029 + vertex 0.500000 -1.619852 8.214028 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 8.127172 -1.913765 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -0.417467 8.447217 + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 -1.619852 8.214028 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -1.619852 8.214028 + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 8.500000 0.500000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.stl b/apps/cpu/Multiphase/backup/FlowFocusing.stl new file mode 100644 index 0000000000000000000000000000000000000000..da02cc8b14f6358e7878ab6d19bd66f9fdf408ef GIT binary patch literal 22884 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 ZpjY6EvciE(OAX5_=n4DIPl4fj{(mg>B7pz^ literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.ast b/apps/cpu/Multiphase/backup/FlowFocusingS.ast new file mode 100644 index 000000000..147c1ff7a --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingS.ast @@ -0,0 +1,3082 @@ +solid Mesh + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -0.000919 0.936949 -0.349464 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -34.000000 10.096320 26.845850 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000773 -0.936950 0.349464 + outer loop + vertex -6.375164 -8.466096 34.223824 + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.001442 -0.913852 0.406044 + outer loop + vertex -6.375164 -8.466096 34.223824 + vertex -7.218598 -7.743835 35.852356 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.000657 0.958118 -0.286375 + outer loop + vertex -6.012733 10.737638 28.724386 + vertex -6.470624 10.390941 27.563398 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000868 0.977146 -0.212565 + outer loop + vertex -6.012733 10.737638 28.724386 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000896 -0.977146 0.212565 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000612 -0.964490 0.264120 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -6.375164 -8.466096 34.223824 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.000376 0.984892 -0.173172 + outer loop + vertex -5.737499 10.930061 29.819368 + vertex -6.012733 10.737638 28.724386 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000512 0.997452 -0.071339 + outer loop + vertex -5.737499 10.930061 29.819368 + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal 0.000000 0.998250 -0.059135 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -5.737499 10.930061 29.819368 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000873 -0.997452 0.071339 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000307 0.997452 0.071339 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 11.000000 31.000000 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal 0.000936 -0.991207 0.132320 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000000 0.997908 0.064646 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -5.633250 11.000000 31.000000 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000887 -0.997452 -0.071339 + outer loop + vertex -5.681127 -8.968077 30.201591 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000834 -0.999946 -0.010400 + outer loop + vertex -5.681127 -8.968077 30.201591 + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000681 0.977147 0.212565 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal 0.000255 0.982033 0.188708 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -0.000863 -0.977147 -0.212565 + outer loop + vertex -5.919753 -8.803929 29.029472 + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000619 -0.990318 -0.138813 + outer loop + vertex -5.919753 -8.803929 29.029472 + vertex -5.681127 -8.968077 30.201591 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000499 0.953166 0.302446 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -0.000919 0.936949 0.349463 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.594930 33.817326 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000511 -0.936950 -0.349464 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.000374 -0.967912 -0.251290 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -5.919753 -8.803929 29.029472 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000978 0.905646 0.424035 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000929 0.877678 0.479250 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000508 -0.877679 -0.479249 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal 0.000502 -0.928437 -0.371490 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.001581 0.818925 0.573899 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000109 0.800542 0.599277 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 9.412536 36.406406 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal 0.000116 0.707107 0.707107 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal -0.000754 -0.800541 -0.599278 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal 0.000853 -0.862528 -0.506009 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -0.000997 -0.707106 -0.707106 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal 0.001184 0.693748 0.720217 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal 0.001614 -0.763715 -0.645552 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -7.758467 -7.203003 25.280670 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal -0.000834 0.599278 0.800540 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal 0.001572 -0.631668 -0.775238 + outer loop + vertex -9.627810 -4.572220 22.696363 + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -0.000500 -0.599278 -0.800541 + outer loop + vertex -9.627810 -4.572220 22.696363 + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal 0.001037 0.562496 0.826800 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal -0.000955 0.479249 0.877679 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000575 -0.488490 -0.872569 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -9.627810 -4.572220 22.696363 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -0.000051 -0.479249 -0.877679 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal 0.001741 0.417216 0.908806 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000052 -0.349465 -0.936949 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001023 0.349463 0.936950 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal -0.000469 -0.212565 -0.977147 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -1.817326 21.405069 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal 0.001080 0.262953 0.964808 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal 0.000540 -0.341944 -0.939720 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001001 0.212567 0.977146 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal 0.000954 -0.186630 -0.982430 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -0.000821 -0.071339 -0.997452 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal 0.001328 0.105907 0.994375 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -0.000528 0.071338 0.997452 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.001303 -0.025876 -0.999664 + outer loop + vertex -10.987032 1.557723 21.015564 + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -0.001054 0.071339 -0.997451 + outer loop + vertex -10.987032 1.557723 21.015564 + vertex -34.000000 1.000000 21.000000 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal 0.000652 -0.066086 0.997814 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.000305 -0.071338 0.997452 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal 0.001446 0.137151 -0.990549 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.987032 1.557723 21.015564 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -0.001092 0.212565 -0.977146 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.000259 -0.210447 0.977605 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -0.000379 -0.212567 0.977146 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal 0.001252 0.292401 -0.956295 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.001017 0.349465 -0.936949 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal 0.000342 -0.330589 0.943775 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal -0.000646 -0.349463 0.936950 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal 0.000892 0.426229 -0.904615 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -0.001050 0.479249 -0.877679 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 5.154150 21.903681 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal 0.000565 -0.449518 0.893271 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -0.000858 -0.479249 0.877679 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal 0.001231 0.552229 -0.833691 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -0.000936 0.599277 -0.800541 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000947 -0.570730 0.821137 + outer loop + vertex -9.197071 -5.326117 38.744690 + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal -0.000666 -0.599279 0.800540 + outer loop + vertex -9.197071 -5.326117 38.744690 + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal 0.001325 0.685290 -0.728269 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -9.295414 7.164775 23.126274 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000902 -0.700754 0.713403 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -9.197071 -5.326117 38.744690 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -0.000252 0.707107 -0.707107 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal 0.000364 -0.707107 0.707107 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -6.557496 37.548607 + endloop + endfacet + facet normal 0.000289 0.800541 -0.599278 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -34.000000 8.557496 24.451393 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000307 -0.800542 0.599277 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001198 0.809614 -0.586961 + outer loop + vertex -7.338007 9.630043 25.948034 + vertex -8.372675 8.493528 24.378290 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000789 0.877679 -0.479249 + outer loop + vertex -7.338007 9.630043 25.948034 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -0.000943 -0.877678 0.479250 + outer loop + vertex -7.218598 -7.743835 35.852356 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.001594 -0.822439 0.568851 + outer loop + vertex -7.218598 -7.743835 35.852356 + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001445 0.904362 -0.426764 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -7.338007 9.630043 25.948034 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal 0.995973 0.089639 -0.001845 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 1.000000 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.998046 0.062478 0.000000 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 23.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.998997 0.044772 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.984363 0.176153 0.000732 + outer loop + vertex 12.685336 3.730003 23.480221 + vertex 12.906315 2.496555 23.141226 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.963961 0.266036 -0.001727 + outer loop + vertex 12.234818 5.216498 1.000000 + vertex 12.685336 3.730003 23.480221 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.962709 0.270535 -0.001404 + outer loop + vertex 12.401385 4.742783 23.929527 + vertex 12.685336 3.730003 23.480221 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.995972 0.089639 0.002189 + outer loop + vertex 12.807155 3.142683 61.000000 + vertex 13.000000 1.000000 61.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.991662 0.128868 0.000260 + outer loop + vertex 12.807155 3.142683 61.000000 + vertex 12.951891 2.073451 38.927654 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.973905 0.226955 -0.000317 + outer loop + vertex 12.501177 4.423876 38.230289 + vertex 12.807155 3.142683 61.000000 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.933649 0.358189 0.000618 + outer loop + vertex 11.975570 5.851481 24.638937 + vertex 12.401385 4.742783 23.929527 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.900968 0.433883 -0.001774 + outer loop + vertex 11.301386 7.154791 1.000000 + vertex 11.975570 5.851481 24.638937 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.894453 0.447161 -0.000856 + outer loop + vertex 11.475355 6.853796 25.547195 + vertex 11.975570 5.851481 24.638937 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.938377 0.345613 -0.001054 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.501177 4.423876 38.230289 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.963961 0.266036 0.002016 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.807155 3.142683 61.000000 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.853562 0.520991 0.000339 + outer loop + vertex 10.990158 7.648063 26.549915 + vertex 11.475355 6.853796 25.547195 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.809016 0.587785 -0.001708 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 11.301386 7.154791 1.000000 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.813608 0.581412 -0.001314 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 10.990158 7.648063 26.549915 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.845588 0.533836 -0.000276 + outer loop + vertex 11.301386 7.154791 61.000000 + vertex 11.405221 6.977572 36.316826 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.891587 0.452849 0.000499 + outer loop + vertex 11.301386 7.154791 61.000000 + vertex 11.968547 5.867337 37.348938 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.900967 0.433883 0.001796 + outer loop + vertex 11.301386 7.154791 61.000000 + vertex 12.234818 5.216498 61.000000 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.781345 0.624100 -0.000308 + outer loop + vertex 10.203491 8.700374 28.831072 + vertex 10.553408 8.261708 27.643276 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.759111 0.650961 0.000013 + outer loop + vertex 10.013048 8.922435 29.888680 + vertex 10.203491 8.700374 28.831072 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.748174 0.663503 -0.000007 + outer loop + vertex 9.944272 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.691063 0.722795 -0.000391 + outer loop + vertex 8.481877 10.381978 1.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.750689 0.660656 -0.000010 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 10.070409 8.856697 32.507420 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.769816 0.638266 0.000043 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 10.402563 8.455991 33.899689 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal 0.802209 0.597042 0.001148 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 10.866963 7.829570 35.166172 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.809016 0.587785 0.001748 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 11.301386 7.154791 61.000000 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.691063 0.722795 0.000391 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 10.036858 8.895265 61.000000 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 8.481877 10.381978 1.000000 + vertex 6.686424 11.567146 1.000000 + endloop + endfacet + facet normal 0.686841 0.726808 0.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 9.944272 9.000000 31.000000 + vertex 8.481877 10.381978 1.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 6.686424 11.567146 61.000000 + vertex 8.481877 10.381978 61.000000 + vertex 6.686424 11.567146 1.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 6.686424 11.567146 61.000000 + vertex 6.686424 11.567146 1.000000 + vertex 4.708204 12.412678 1.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 4.708204 12.412678 61.000000 + vertex 6.686424 11.567146 61.000000 + vertex 4.708204 12.412678 1.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 4.708204 12.412678 61.000000 + vertex 4.708204 12.412678 1.000000 + vertex 2.610799 12.891397 1.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 2.610799 12.891397 61.000000 + vertex 4.708204 12.412678 61.000000 + vertex 2.610799 12.891397 1.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 2.610799 12.891397 61.000000 + vertex 2.610799 12.891397 1.000000 + vertex 0.461622 12.987917 1.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex 0.461622 12.987917 1.000000 + vertex -1.670251 12.699135 1.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex 2.610799 12.891397 61.000000 + vertex 0.461622 12.987917 1.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -1.670251 12.699135 61.000000 + vertex -1.670251 12.699135 1.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex -1.670251 12.699135 61.000000 + vertex 0.461622 12.987917 61.000000 + vertex -1.670251 12.699135 1.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -3.716300 12.034333 61.000000 + vertex -1.670251 12.699135 61.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal -0.473869 0.880596 0.000082 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 1.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.474858 0.880063 0.000000 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 61.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal -0.557076 0.830461 -0.000006 + outer loop + vertex -5.737499 10.930061 29.819368 + vertex -5.633250 11.000000 31.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.572700 0.819765 -0.000106 + outer loop + vertex -6.012733 10.737638 28.724386 + vertex -5.737499 10.930061 29.819368 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.623489 0.781830 -0.001818 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -5.610764 11.014879 1.000000 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal -0.602432 0.798170 -0.000753 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -6.012733 10.737638 28.724386 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.557913 0.829899 0.000007 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -5.633250 11.000000 31.000000 + vertex -5.757563 10.916418 32.290215 + endloop + endfacet + facet normal -0.576298 0.817240 0.000144 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -5.757563 10.916418 32.290215 + vertex -6.080200 10.688693 33.475727 + endloop + endfacet + facet normal -0.607404 0.794393 0.000945 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -6.080200 10.688693 33.475727 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.473869 0.880596 -0.000082 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -3.716300 12.034333 61.000000 + vertex -5.633250 11.000000 31.000000 + endloop + endfacet + facet normal -0.659575 0.751638 0.000114 + outer loop + vertex -7.338007 9.630043 25.948034 + vertex -6.470624 10.390941 27.563398 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal -0.753070 0.657938 -0.001578 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -7.292752 9.673538 1.000000 + vertex -8.708204 8.053423 1.000000 + endloop + endfacet + facet normal -0.739348 0.673324 -0.000167 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -7.338007 9.630043 25.948034 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal -0.657409 0.753534 0.000122 + outer loop + vertex -7.292752 9.673538 61.000000 + vertex -6.528029 10.344987 34.559666 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.623489 0.781830 0.001822 + outer loop + vertex -7.292752 9.673538 61.000000 + vertex -5.610764 11.014879 61.000000 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.732509 0.680757 -0.000178 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.292752 9.673538 61.000000 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.858447 0.512898 -0.002183 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -8.708204 8.053423 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal -0.821844 0.569712 0.001070 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -8.372675 8.493528 24.378290 + vertex -8.708204 8.053423 1.000000 + endloop + endfacet + facet normal -0.817061 0.576550 -0.001190 + outer loop + vertex -8.708204 8.053423 61.000000 + vertex -8.299619 8.584002 37.517891 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.753070 0.657938 0.001763 + outer loop + vertex -8.708204 8.053423 61.000000 + vertex -7.292752 9.673538 61.000000 + vertex -8.299619 8.584002 37.517891 + endloop + endfacet + facet normal -0.888137 0.459578 0.000819 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -9.295414 7.164775 23.126274 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal -0.936234 0.351374 -0.001628 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.811626 6.206605 1.000000 + vertex -10.567554 4.192442 1.000000 + endloop + endfacet + facet normal -0.934612 0.355666 -0.001258 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.974246 5.854475 22.257341 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal -0.883604 0.468235 -0.000555 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -9.250660 7.238907 38.815117 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.858447 0.512898 0.002159 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -8.708204 8.053423 61.000000 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.969932 0.243376 0.001022 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.429211 4.656930 21.692644 + vertex -10.567554 4.192442 1.000000 + endloop + endfacet + facet normal -0.983927 0.178556 -0.002384 + outer loop + vertex -10.951692 2.075672 1.000000 + vertex -10.800443 3.179347 21.240366 + vertex -10.567554 4.192442 1.000000 + endloop + endfacet + facet normal -0.937549 0.347852 0.000571 + outer loop + vertex -10.567554 4.192442 61.000000 + vertex -9.915038 5.986175 39.668221 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.936235 0.351375 0.000908 + outer loop + vertex -10.567554 4.192442 61.000000 + vertex -9.811626 6.206605 61.000000 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.975719 0.219024 -0.000391 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.567554 4.192442 61.000000 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.993463 0.114145 0.001200 + outer loop + vertex -10.987032 1.557723 21.015564 + vertex -10.800443 3.179347 21.240366 + vertex -10.951692 2.075672 1.000000 + endloop + endfacet + facet normal -0.999999 0.000000 -0.001766 + outer loop + vertex -10.951692 -0.075672 1.000000 + vertex -10.987032 1.557723 21.015564 + vertex -10.951692 2.075672 1.000000 + endloop + endfacet + facet normal -0.996112 0.088087 -0.001543 + outer loop + vertex -10.951692 2.075672 61.000000 + vertex -10.846192 2.915130 40.814899 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.983927 0.178556 0.002283 + outer loop + vertex -10.951692 2.075672 61.000000 + vertex -10.567554 4.192442 61.000000 + vertex -10.846192 2.915130 40.814899 + endloop + endfacet + facet normal -0.999767 -0.021564 -0.000005 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.987032 1.557723 21.015564 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal -0.987838 -0.155488 0.000005 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951837 -0.074060 21.057848 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal -0.983928 -0.178557 -0.001826 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951692 -0.075672 1.000000 + vertex -10.567554 -2.192442 1.000000 + endloop + endfacet + facet normal -0.999997 0.000000 0.002334 + outer loop + vertex -10.951692 -0.075672 61.000000 + vertex -10.951692 2.075672 61.000000 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.998488 -0.054961 -0.001168 + outer loop + vertex -10.951692 -0.075672 61.000000 + vertex -10.998376 1.197410 40.998051 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.984469 -0.175549 0.001499 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.951692 -0.075672 61.000000 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.958714 -0.284370 0.001166 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -10.703868 -1.649430 21.357359 + vertex -10.567554 -2.192442 1.000000 + endloop + endfacet + facet normal -0.936232 -0.351374 -0.002305 + outer loop + vertex -9.811626 -4.206605 1.000000 + vertex -10.252209 -3.169867 21.910873 + vertex -10.567554 -2.192442 1.000000 + endloop + endfacet + facet normal -0.983928 -0.178557 0.001743 + outer loop + vertex -10.567554 -2.192442 61.000000 + vertex -10.951692 -0.075672 61.000000 + vertex -10.695628 -1.685570 40.632637 + endloop + endfacet + facet normal -0.961412 -0.275111 -0.000801 + outer loop + vertex -10.567554 -2.192442 61.000000 + vertex -10.695628 -1.685570 40.632637 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.913724 -0.406335 0.000894 + outer loop + vertex -9.627810 -4.572220 22.696363 + vertex -10.252209 -3.169867 21.910873 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal -0.858448 -0.512899 -0.001370 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex -9.627810 -4.572220 22.696363 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal -0.927161 -0.374662 0.000436 + outer loop + vertex -9.811626 -4.206605 61.000000 + vertex -10.343766 -2.913946 40.202229 + vertex -9.880333 -4.061458 39.624477 + endloop + endfacet + facet normal -0.936233 -0.351374 0.002116 + outer loop + vertex -9.811626 -4.206605 61.000000 + vertex -10.567554 -2.192442 61.000000 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.879920 -0.475121 -0.000398 + outer loop + vertex -9.197071 -5.326117 38.744690 + vertex -9.811626 -4.206605 61.000000 + vertex -9.880333 -4.061458 39.624477 + endloop + endfacet + facet normal -0.850496 -0.525982 -0.000140 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -9.627810 -4.572220 22.696363 + vertex -8.708204 -6.053423 1.000000 + endloop + endfacet + facet normal -0.772173 -0.635412 0.000120 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -8.734071 -6.017682 23.875946 + vertex -8.708204 -6.053423 1.000000 + endloop + endfacet + facet normal -0.753070 -0.657938 -0.001694 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -8.708204 -6.053423 1.000000 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal -0.812957 -0.582322 -0.001173 + outer loop + vertex -8.708204 -6.053423 61.000000 + vertex -9.197071 -5.326117 38.744690 + vertex -8.256754 -6.636262 37.456585 + endloop + endfacet + facet normal -0.858447 -0.512898 0.002095 + outer loop + vertex -8.708204 -6.053423 61.000000 + vertex -9.811626 -4.206605 61.000000 + vertex -9.197071 -5.326117 38.744690 + endloop + endfacet + facet normal -0.696962 -0.717107 0.000529 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -7.758467 -7.203003 25.280670 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal -0.623489 -0.781830 -0.001709 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -7.292752 -7.673538 1.000000 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.633988 -0.773343 -0.001053 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -6.938873 -7.998572 26.638153 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal -0.729775 -0.683688 -0.000241 + outer loop + vertex -7.292752 -7.673538 61.000000 + vertex -8.256754 -6.636262 37.456585 + vertex -7.218598 -7.743835 35.852356 + endloop + endfacet + facet normal -0.650207 -0.759757 0.000207 + outer loop + vertex -7.292752 -7.673538 61.000000 + vertex -7.218598 -7.743835 35.852356 + vertex -6.375164 -8.466096 34.223824 + endloop + endfacet + facet normal -0.753070 -0.657938 0.001848 + outer loop + vertex -7.292752 -7.673538 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex -8.256754 -6.636262 37.456585 + endloop + endfacet + facet normal -0.591715 -0.806147 -0.000456 + outer loop + vertex -5.919753 -8.803929 29.029472 + vertex -6.298790 -8.525107 27.954950 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.566597 -0.823995 -0.000045 + outer loop + vertex -5.681127 -8.968077 30.201591 + vertex -5.919753 -8.803929 29.029472 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.492774 -0.870156 -0.001384 + outer loop + vertex -3.716300 -10.034333 1.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -5.681127 -8.968077 30.201591 + endloop + endfacet + facet normal -0.473869 -0.880595 0.000270 + outer loop + vertex -3.716300 -10.034333 1.000000 + vertex -5.681127 -8.968077 30.201591 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.595712 -0.803198 0.000545 + outer loop + vertex -5.610764 -9.014879 61.000000 + vertex -6.375164 -8.466096 34.223824 + vertex -5.941191 -8.788762 33.044537 + endloop + endfacet + facet normal -0.566640 -0.823965 0.000033 + outer loop + vertex -5.610764 -9.014879 61.000000 + vertex -5.941191 -8.788762 33.044537 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.623489 -0.781830 0.001775 + outer loop + vertex -5.610764 -9.014879 61.000000 + vertex -7.292752 -7.673538 61.000000 + vertex -6.375164 -8.466096 34.223824 + endloop + endfacet + facet normal -0.476015 -0.879437 -0.000000 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -3.716300 -10.034333 1.000000 + endloop + endfacet + facet normal -0.473869 -0.880596 -0.000183 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -5.610764 -9.014879 61.000000 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.309017 -0.951057 -0.000000 + outer loop + vertex -1.670251 -10.699135 61.000000 + vertex -3.716300 -10.034333 1.000000 + vertex -1.670251 -10.699135 1.000000 + endloop + endfacet + facet normal -0.309017 -0.951057 0.000000 + outer loop + vertex -1.670251 -10.699135 61.000000 + vertex -3.716300 -10.034333 61.000000 + vertex -3.716300 -10.034333 1.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 -0.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -1.670251 -10.699135 1.000000 + vertex 0.461622 -10.987917 1.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 0.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -1.670251 -10.699135 61.000000 + vertex -1.670251 -10.699135 1.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 61.000000 + vertex 0.461622 -10.987917 1.000000 + vertex 2.610799 -10.891397 1.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 61.000000 + vertex 0.461622 -10.987917 61.000000 + vertex 0.461622 -10.987917 1.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 61.000000 + vertex 2.610799 -10.891397 1.000000 + vertex 4.708204 -10.412678 1.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 61.000000 + vertex 2.610799 -10.891397 61.000000 + vertex 2.610799 -10.891397 1.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 61.000000 + vertex 4.708204 -10.412678 1.000000 + vertex 6.686424 -9.567146 1.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 61.000000 + vertex 4.708204 -10.412678 61.000000 + vertex 4.708204 -10.412678 1.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 61.000000 + vertex 6.686424 -9.567146 1.000000 + vertex 8.481877 -8.381978 1.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 61.000000 + vertex 6.686424 -9.567146 61.000000 + vertex 6.686424 -9.567146 1.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 -0.000345 + outer loop + vertex 9.957149 -6.985579 30.519876 + vertex 8.481877 -8.381978 1.000000 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.687426 -0.726254 0.000000 + outer loop + vertex 9.957149 -6.985579 30.519876 + vertex 8.481877 -8.381978 61.000000 + vertex 8.481877 -8.381978 1.000000 + endloop + endfacet + facet normal 0.708120 -0.706089 0.001925 + outer loop + vertex 9.987243 -6.951696 31.877798 + vertex 8.481877 -8.381978 61.000000 + vertex 9.957149 -6.985579 30.519876 + endloop + endfacet + facet normal 0.753489 -0.657461 0.000023 + outer loop + vertex 10.123698 -6.794750 29.199480 + vertex 9.957149 -6.985579 30.519876 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.773520 -0.633772 -0.000123 + outer loop + vertex 10.441307 -6.406870 27.977043 + vertex 10.123698 -6.794750 29.199480 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.803340 -0.595519 -0.001263 + outer loop + vertex 10.859378 -5.840517 26.851828 + vertex 10.441307 -6.406870 27.977043 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.809016 -0.587784 -0.001759 + outer loop + vertex 10.859378 -5.840517 26.851828 + vertex 10.036858 -6.895265 1.000000 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 0.000223 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 8.481877 -8.381978 61.000000 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.781345 -0.624099 0.000308 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 10.203491 -6.700374 33.168926 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.758090 -0.652150 -0.000028 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.842107 -0.539311 0.000093 + outer loop + vertex 11.336069 -5.096366 25.819815 + vertex 10.859378 -5.840517 26.851828 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.883041 -0.469295 -0.000129 + outer loop + vertex 11.837209 -4.153146 24.880760 + vertex 11.336069 -5.096366 25.819815 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.900967 -0.433883 -0.002017 + outer loop + vertex 11.837209 -4.153146 24.880760 + vertex 11.301386 -5.154791 1.000000 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.853562 -0.520991 -0.000339 + outer loop + vertex 11.301386 -5.154791 61.000000 + vertex 10.990158 -5.648063 35.450085 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.813608 -0.581412 0.001314 + outer loop + vertex 11.301386 -5.154791 61.000000 + vertex 10.553408 -6.261708 34.356724 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal 0.809016 -0.587785 0.001708 + outer loop + vertex 11.301386 -5.154791 61.000000 + vertex 10.036858 -6.895265 61.000000 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.894453 -0.447161 0.000856 + outer loop + vertex 11.975570 -3.851482 37.361065 + vertex 11.301386 -5.154791 61.000000 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.920709 -0.390251 0.000023 + outer loop + vertex 12.239279 -3.204594 24.194017 + vertex 11.837209 -4.153146 24.880760 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.951728 -0.306942 -0.000025 + outer loop + vertex 12.578117 -2.153920 23.647940 + vertex 12.239279 -3.204594 24.194017 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.963961 -0.266036 -0.002130 + outer loop + vertex 12.578117 -2.153920 23.647940 + vertex 12.234818 -3.216498 1.000000 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.933649 -0.358189 -0.000618 + outer loop + vertex 12.234818 -3.216498 61.000000 + vertex 11.975570 -3.851482 37.361065 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.900968 -0.433883 0.001774 + outer loop + vertex 12.234818 -3.216498 61.000000 + vertex 11.301386 -5.154791 61.000000 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal 0.962709 -0.270535 0.001404 + outer loop + vertex 12.685336 -1.730003 38.519779 + vertex 12.234818 -3.216498 61.000000 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.977880 -0.209164 0.000550 + outer loop + vertex 12.854566 -0.862602 23.219851 + vertex 12.578117 -2.153920 23.647940 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.992916 -0.118816 -0.000621 + outer loop + vertex 12.959556 0.015602 23.060797 + vertex 12.854566 -0.862602 23.219851 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.995972 -0.089639 -0.002174 + outer loop + vertex 12.959556 0.015602 23.060797 + vertex 12.807155 -1.142683 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.984363 -0.176153 -0.000732 + outer loop + vertex 12.807155 -1.142683 61.000000 + vertex 12.685336 -1.730003 38.519779 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.963961 -0.266036 0.001727 + outer loop + vertex 12.807155 -1.142683 61.000000 + vertex 12.234818 -3.216498 61.000000 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.999157 -0.041051 0.000000 + outer loop + vertex 13.000000 1.000000 23.000000 + vertex 12.959556 0.015602 23.060797 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.998046 -0.062478 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.906315 -0.496555 38.858772 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal 0.995973 -0.089639 0.001845 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.807155 -1.142683 61.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal -0.000014 -0.989717 -0.143040 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 9.957149 -6.985579 30.519876 + vertex 10.123698 -6.794750 29.199480 + endloop + endfacet + facet normal 0.000014 -0.953169 -0.302437 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 10.123698 -6.794750 29.199480 + vertex 10.441307 -6.406870 27.977043 + endloop + endfacet + facet normal 0.000326 -0.993712 -0.111965 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -7.000000 31.000000 + vertex 9.957149 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000000 0.995512 0.094638 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000196 -0.893205 -0.449649 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 10.441307 -6.406870 27.977043 + vertex 10.859378 -5.840517 26.851828 + endloop + endfacet + facet normal -0.000169 0.960980 0.276618 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 10.070409 8.856697 32.507420 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000331 -0.943883 -0.330279 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -6.799423 29.219833 + vertex 10.441307 -6.406870 27.977043 + endloop + endfacet + facet normal 0.000218 0.993712 0.111965 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000133 -0.811094 -0.584915 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 10.859378 -5.840517 26.851828 + vertex 11.336069 -5.096366 25.819815 + endloop + endfacet + facet normal 0.000410 -0.846724 -0.532032 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 10.859378 -5.840517 26.851828 + endloop + endfacet + facet normal -0.000256 0.896312 0.443423 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 10.402563 8.455991 33.899689 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.000378 0.943883 0.330279 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.799423 32.780167 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000173 -0.705586 -0.708624 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.336069 -5.096366 25.819815 + vertex 11.837209 -4.153146 24.880760 + endloop + endfacet + facet normal -0.000107 -0.586402 -0.810021 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.837209 -4.153146 24.880760 + vertex 12.239279 -3.204594 24.194017 + endloop + endfacet + facet normal -0.000225 0.803620 0.595143 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 10.866963 7.829570 35.166172 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.000201 -0.707107 -0.707107 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 11.336069 -5.096366 25.819815 + endloop + endfacet + facet normal 0.000413 0.846724 0.532032 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 131.000000 8.207751 34.471069 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal -0.000154 -0.461132 -0.887331 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 12.239279 -3.204594 24.194017 + vertex 12.578117 -2.153920 23.647940 + endloop + endfacet + facet normal -0.000110 0.680839 0.732433 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 11.405221 6.977572 36.316826 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000422 -0.532032 -0.846724 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -3.987918 24.745348 + vertex 12.239279 -3.204594 24.194017 + endloop + endfacet + facet normal 0.000306 0.707106 0.707107 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 7.254652 35.987919 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal -0.000045 0.521109 0.853490 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 11.968547 5.867337 37.348938 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.000043 0.341486 0.939887 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 12.501177 4.423876 38.230289 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000132 0.532033 0.846723 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 5.987918 37.254650 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000065 -0.314685 -0.949196 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.578117 -2.153920 23.647940 + vertex 12.854566 -0.862602 23.219851 + endloop + endfacet + facet normal -0.000036 -0.178209 -0.983993 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.854566 -0.862602 23.219851 + vertex 12.959556 0.015602 23.060797 + endloop + endfacet + facet normal 0.000266 -0.330279 -0.943883 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 12.578117 -2.153920 23.647940 + endloop + endfacet + facet normal -0.000092 0.193413 0.981117 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 12.829484 3.015767 38.741879 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000199 0.330278 0.943884 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 4.471070 38.207752 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000000 0.093950 -0.995577 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 13.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000000 -0.061643 -0.998098 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 12.959556 0.015602 23.060797 + vertex 13.000000 1.000000 23.000000 + endloop + endfacet + facet normal 0.000422 -0.111965 -0.993712 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -0.780167 23.200577 + vertex 12.959556 0.015602 23.060797 + endloop + endfacet + facet normal 0.000409 0.111965 0.993712 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 2.780168 38.799423 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000000 -0.093951 0.995577 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000000 0.067243 0.997737 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal -0.000152 0.264984 -0.964253 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 12.906315 2.496555 23.141226 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal 0.000231 0.111965 -0.993712 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000152 -0.264982 0.964253 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 12.906315 -0.496555 38.858772 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal -0.000129 0.405492 -0.914099 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 12.685336 3.730003 23.480221 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal 0.000231 -0.111965 0.993712 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000421 0.330279 -0.943883 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal -0.000129 -0.405492 0.914099 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 12.685336 -1.730003 38.519779 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000421 -0.330278 0.943883 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -0.780167 38.799423 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.000135 0.539006 -0.842302 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 12.401385 4.742783 23.929527 + vertex 11.975570 5.851481 24.638937 + endloop + endfacet + facet normal -0.000107 0.671454 -0.741046 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 11.975570 5.851481 24.638937 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal 0.000239 0.532032 -0.846724 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 4.471070 23.792250 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal -0.000213 0.783825 -0.620981 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 11.475355 6.853796 25.547195 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal 0.000239 -0.532033 0.846723 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000135 -0.539005 0.842303 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 12.401385 -2.742783 38.070473 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal -0.000107 -0.671455 0.741046 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 11.975570 -3.851482 37.361065 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000379 0.707107 -0.707107 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal -0.000213 -0.783825 0.620981 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 11.475355 -4.853796 36.452805 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000074 0.872030 -0.489453 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.990158 7.648063 26.549915 + vertex 10.553408 8.261708 27.643276 + endloop + endfacet + facet normal 0.000091 0.938081 -0.346416 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.553408 8.261708 27.643276 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000379 -0.707106 0.707107 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -3.987918 37.254650 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000391 0.846724 -0.532032 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 7.254652 26.012081 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal -0.000074 -0.872030 0.489453 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.990158 -5.648063 35.450085 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.000091 -0.938081 0.346416 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.553408 -6.261708 34.356724 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.000391 -0.846724 0.532032 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -5.254652 35.987919 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000141 0.978655 -0.205509 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 10.203491 8.700374 28.831072 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000289 0.943883 -0.330279 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 8.207751 27.528931 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000391 0.993712 -0.111965 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 131.000000 8.799423 29.219833 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000000 0.997573 -0.069626 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.000190 -0.981571 0.191098 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 10.203491 -6.700374 33.168926 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000289 -0.943883 0.330279 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -6.207751 34.471069 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal -0.000218 -0.999689 0.024950 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 9.957149 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000416 -0.993712 0.111965 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 32.780167 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 5.216498 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 6.686424 11.567146 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 4.708204 12.412678 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 4.708204 12.412678 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 2.610799 12.891397 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 -0.075672 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex -3.716300 -10.034333 1.000000 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -9.811626 6.206605 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -7.292752 -7.673538 1.000000 + vertex -3.716300 -10.034333 1.000000 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 2.610799 12.891397 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.481877 10.381978 1.000000 + vertex 10.036858 8.895265 1.000000 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.567554 -2.192442 1.000000 + vertex -10.951692 -0.075672 1.000000 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -3.716300 -10.034333 1.000000 + vertex 0.461622 -10.987917 1.000000 + vertex -1.670251 -10.699135 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex 0.461622 -10.987917 1.000000 + vertex -3.716300 -10.034333 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 1.000000 + vertex 4.708204 -10.412678 1.000000 + vertex 2.610799 -10.891397 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -10.567554 4.192442 1.000000 + vertex -9.811626 6.206605 1.000000 + vertex -10.951692 2.075672 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 2.075672 1.000000 + vertex -9.811626 6.206605 1.000000 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -8.708204 8.053423 1.000000 + vertex -7.292752 9.673538 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex -8.708204 -6.053423 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 4.708204 -10.412678 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 6.686424 -9.567146 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 6.686424 -9.567146 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 8.481877 -8.381978 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 0.461622 -10.987917 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 4.708204 -10.412678 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 1.000000 + vertex 12.234818 -3.216498 1.000000 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -1.670251 12.699135 1.000000 + vertex 0.461622 12.987917 1.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -3.716300 12.034333 1.000000 + vertex 0.461622 12.987917 1.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -5.610764 11.014879 1.000000 + vertex 2.610799 12.891397 1.000000 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -7.292752 9.673538 1.000000 + vertex 2.610799 12.891397 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 0.461622 12.987917 1.000000 + vertex 2.610799 12.891397 1.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 1.000000 + vertex 12.807155 3.142683 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 -3.216498 1.000000 + vertex 12.234818 5.216498 1.000000 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 1.000000 + vertex 12.234818 5.216498 1.000000 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 1.000000 + vertex 12.234818 5.216498 1.000000 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 12.234818 5.216498 61.000000 + vertex 11.301386 7.154791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 6.686424 11.567146 61.000000 + vertex 4.708204 12.412678 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 4.708204 12.412678 61.000000 + vertex 2.610799 12.891397 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 2.610799 12.891397 61.000000 + vertex -5.610764 11.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex -5.610764 11.014879 61.000000 + vertex 12.234818 5.216498 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex -7.292752 -7.673538 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 8.481877 10.381978 61.000000 + vertex 11.301386 7.154791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -7.292752 -7.673538 61.000000 + vertex -5.610764 -9.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.951692 -0.075672 61.000000 + vertex -10.567554 -2.192442 61.000000 + vertex -9.811626 -4.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -3.716300 -10.034333 61.000000 + vertex -1.670251 -10.699135 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex -3.716300 -10.034333 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 4.708204 -10.412678 61.000000 + vertex 0.461622 -10.987917 61.000000 + vertex 2.610799 -10.891397 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -10.567554 4.192442 61.000000 + vertex -10.951692 2.075672 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -10.951692 2.075672 61.000000 + vertex -10.951692 -0.075672 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -7.292752 9.673538 61.000000 + vertex -8.708204 8.053423 61.000000 + vertex -9.811626 6.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex -9.811626 -4.206605 61.000000 + vertex -8.708204 -6.053423 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 4.708204 -10.412678 61.000000 + vertex 6.686424 -9.567146 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 6.686424 -9.567146 61.000000 + vertex 8.481877 -8.381978 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex 0.461622 -10.987917 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 0.461622 -10.987917 61.000000 + vertex 4.708204 -10.412678 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 -3.216498 61.000000 + vertex 10.036858 -6.895265 61.000000 + vertex 11.301386 -5.154791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex -1.670251 12.699135 61.000000 + vertex -3.716300 12.034333 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex -3.716300 12.034333 61.000000 + vertex -5.610764 11.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 2.610799 12.891397 61.000000 + vertex 0.461622 12.987917 61.000000 + vertex -5.610764 11.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.807155 3.142683 61.000000 + vertex 12.807155 -1.142683 61.000000 + vertex 13.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -5.610764 11.014879 61.000000 + vertex -7.292752 9.673538 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.234818 -3.216498 61.000000 + vertex 12.807155 -1.142683 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -10.951692 -0.075672 61.000000 + vertex -9.811626 -4.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -7.292752 9.673538 61.000000 + vertex -9.811626 6.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -9.811626 6.206605 61.000000 + vertex -10.951692 -0.075672 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -9.811626 -4.206605 61.000000 + vertex 10.036858 -6.895265 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 10.036858 -6.895265 61.000000 + vertex 12.234818 -3.216498 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.807155 -1.142683 61.000000 + vertex 12.807155 3.142683 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -3.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -0.780167 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 1.000000 23.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 4.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -2.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -6.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -5.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -5.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -7.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 7.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 9.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 7.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 2.780168 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 -2.471070 38.207752 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 34.471069 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.stl b/apps/cpu/Multiphase/backup/FlowFocusingS.stl new file mode 100644 index 0000000000000000000000000000000000000000..b84a5e8ff64c351fb616a33ae55c5f4477705f4a GIT binary patch literal 22084 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2.ast new file mode 100644 index 000000000..1b3561121 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingS2.ast @@ -0,0 +1,422 @@ +solid Mesh + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 16.000000 1.000000 + vertex 51.000000 1.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 16.000000 1.000000 + vertex 51.000000 16.000000 1.000000 + vertex 51.000000 1.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 16.000000 26.000000 + vertex 1.000000 16.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 11.000000 16.000000 26.000000 + vertex 1.000000 16.000000 1.000000 + vertex 1.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 16.000000 16.000000 26.000000 + vertex 1.000000 16.000000 1.000000 + vertex 11.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 1.000000 + vertex 1.000000 16.000000 1.000000 + vertex 16.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 51.000000 16.000000 1.000000 + vertex 16.000000 16.000000 26.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 51.000000 16.000000 1.000000 + vertex 51.000000 16.000000 26.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 51.000000 1.000000 1.000000 + vertex 51.000000 16.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 11.000000 1.000000 26.000000 + vertex 1.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 16.000000 1.000000 26.000000 + vertex 11.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 51.000000 1.000000 1.000000 + vertex 16.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 1.000000 + vertex 51.000000 1.000000 26.000000 + vertex 16.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 1.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + vertex 1.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 16.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + vertex -24.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 16.000000 16.000000 76.000000 + vertex 51.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 16.000000 16.000000 26.000000 + vertex 16.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 16.000000 16.000000 26.000000 + vertex 11.000000 16.000000 76.000000 + vertex 16.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 16.000000 16.000000 26.000000 + vertex 11.000000 16.000000 26.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 26.000000 + vertex 1.000000 16.000000 76.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 11.000000 16.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 181.000000 16.000000 26.000000 + vertex 181.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 181.000000 16.000000 26.000000 + vertex 51.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 76.000000 + vertex 51.000000 1.000000 26.000000 + vertex 51.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 26.000000 + vertex 51.000000 1.000000 26.000000 + vertex 16.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 11.000000 1.000000 76.000000 + vertex 16.000000 1.000000 26.000000 + vertex 16.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 11.000000 1.000000 26.000000 + vertex 16.000000 1.000000 26.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 76.000000 + vertex 1.000000 1.000000 26.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 26.000000 + vertex 11.000000 1.000000 26.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 16.000000 26.000000 + vertex -24.000000 16.000000 76.000000 + vertex 1.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 26.000000 + vertex -24.000000 16.000000 26.000000 + vertex -24.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 1.000000 76.000000 + vertex 1.000000 1.000000 26.000000 + vertex 1.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 1.000000 26.000000 + vertex 1.000000 1.000000 26.000000 + vertex -24.000000 1.000000 76.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 1.000000 26.000000 + vertex -24.000000 1.000000 76.000000 + vertex -24.000000 16.000000 26.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 1.000000 76.000000 + vertex -24.000000 16.000000 76.000000 + vertex -24.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 181.000000 16.000000 26.000000 + vertex 51.000000 16.000000 76.000000 + vertex 181.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 181.000000 16.000000 26.000000 + vertex 51.000000 16.000000 26.000000 + vertex 51.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 101.000000 + vertex 11.000000 16.000000 76.000000 + vertex 1.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 101.000000 + vertex 16.000000 16.000000 76.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 101.000000 + vertex 51.000000 16.000000 76.000000 + vertex 16.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 101.000000 + vertex 16.000000 16.000000 76.000000 + vertex 1.000000 16.000000 101.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 1.000000 76.000000 + vertex 181.000000 1.000000 26.000000 + vertex 181.000000 16.000000 26.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 16.000000 76.000000 + vertex 181.000000 1.000000 76.000000 + vertex 181.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 76.000000 + vertex 181.000000 1.000000 26.000000 + vertex 181.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 181.000000 1.000000 26.000000 + vertex 51.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 11.000000 1.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 1.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 76.000000 + vertex 51.000000 1.000000 101.000000 + vertex 16.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 76.000000 + vertex 51.000000 1.000000 101.000000 + vertex 1.000000 1.000000 101.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 16.000000 76.000000 + vertex -24.000000 1.000000 76.000000 + vertex 1.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 16.000000 76.000000 + vertex -24.000000 16.000000 76.000000 + vertex -24.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 16.000000 76.000000 + vertex 51.000000 1.000000 76.000000 + vertex 181.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 16.000000 76.000000 + vertex 51.000000 16.000000 76.000000 + vertex 51.000000 1.000000 76.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 101.000000 + vertex 51.000000 16.000000 76.000000 + vertex 51.000000 16.000000 101.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 101.000000 + vertex 51.000000 1.000000 76.000000 + vertex 51.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.000000 1.000000 101.000000 + vertex 1.000000 16.000000 101.000000 + vertex 1.000000 1.000000 101.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.000000 16.000000 101.000000 + vertex 1.000000 16.000000 101.000000 + vertex 51.000000 1.000000 101.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 16.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 1.000000 16.000000 101.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 1.000000 16.000000 76.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.stl b/apps/cpu/Multiphase/backup/FlowFocusingS2.stl new file mode 100644 index 0000000000000000000000000000000000000000..f44acdfeb1595248f244f916f71c95cc1290a5b2 GIT binary patch literal 3084 zcmb`HF;4725JVkw7bGWSNC*%T0UL24AA{R0q(mHvs_w3Fjc2q=z)1Vu%=D}3?y>*r z<^A>c^l$&%+%LYi^RjFY_&w(H?Wz9ep8a-aN=#_*(AIJ-`TZ0n?<)kVae{F!>T#{q z!_TvtZ|!HMh;W_|uGAATANpuEiuo+1Il-zrx+9{ZElJ(Mkr2)OtRVACx8@_7iXzl6 zsB<!{eq=?rMQcAj!e>J0#+c=FX-^2R%ITi)EXDK~303y_m6M1p^q@N!`{)R09tl^f zs-U-Q`xILxpg-`PXu6DZY0f%v!s7!0kLa+fTJhxH%+mgWfSpdLE5hRmahy+ih&~Xg zN+;BfiQ+l;VE=r#{MPQCvq};X!=LfK8d17VxKa}B-9<L5VZENE*!n<4TrsP1S61|7 zN|jl}Y9~%B9z8_3E@SPFgx*n}DE=GaSst4Qy5+m;w-#?WDr$ZeSLY<KW&}N)uFRU1 zzMQ5DB@*h%syYy!)jU8aq5GzrJdRnaiu-UZeJ7};ERT~23XYuB@b=Ywv~PWoz|sk| z;=RJt<B`yGzfskSY`#y-(*9*4-o7H7&T6Q^rAp|bI6TZRGiQW*s46ODjmhobGj(GM z@Mh;ekqJ??i)b|VN$1in>Pu}|?tz&5bD~vJge&z#OtG}0Tg2>E@#x|I11PKA=EbV0 zrAopB9aG`5M@Jx=MBYd1zIOF4>06<$D%?FtX}2TlZk(1w61rROgR$S{6{0-UQ&z=l z`2BI|gdIlg1mf&Ghy+FgYOTVeD-{ot?h%tH-H35MPFI!i#0giz$+`E@bY0i!2~oAr H2=?>~WcCHr literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast new file mode 100644 index 000000000..0bbb5c2ea --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast @@ -0,0 +1,366 @@ +solid Mesh + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.500000 9.500000 0.500000 + vertex 15.500000 0.500000 0.500000 + vertex 0.500000 0.500000 0.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.500000 9.500000 0.500000 + vertex 15.500000 9.500000 0.500000 + vertex 15.500000 0.500000 0.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.500000 0.500000 + vertex 0.500000 9.500000 25.500000 + vertex 0.500000 9.500000 0.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.500000 0.500000 + vertex 0.500000 0.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 10.500000 9.500000 25.500000 + vertex 0.500000 9.500000 0.500000 + vertex 0.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 10.500000 9.500000 25.500000 + vertex 15.500000 9.500000 0.500000 + vertex 0.500000 9.500000 0.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 15.500000 9.500000 0.500000 + vertex 10.500000 9.500000 25.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 15.500000 0.500000 0.500000 + vertex 15.500000 9.500000 0.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 15.500000 0.500000 0.500000 + vertex 15.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.500000 0.500000 0.500000 + vertex 10.500000 0.500000 25.500000 + vertex 0.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 0.500000 + vertex 10.500000 0.500000 25.500000 + vertex 0.500000 0.500000 0.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 0.500000 + vertex 15.500000 0.500000 25.500000 + vertex 10.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + vertex 0.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.500000 9.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + vertex -24.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 10.500000 9.500000 40.500000 + vertex 15.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 10.500000 9.500000 25.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 25.500000 + vertex 0.500000 9.500000 40.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 10.500000 9.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 180.500000 9.500000 25.500000 + vertex 180.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 180.500000 9.500000 25.500000 + vertex 15.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 40.500000 + vertex 15.500000 0.500000 25.500000 + vertex 15.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 25.500000 + vertex 15.500000 0.500000 25.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.500000 0.500000 40.500000 + vertex 0.500000 0.500000 25.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.500000 0.500000 25.500000 + vertex 10.500000 0.500000 25.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex -24.500000 9.500000 25.500000 + vertex -24.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 25.500000 + vertex -24.500000 9.500000 25.500000 + vertex 0.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex 0.500000 0.500000 40.500000 + vertex -24.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex 0.500000 0.500000 25.500000 + vertex 0.500000 0.500000 40.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex -24.500000 0.500000 40.500000 + vertex -24.500000 9.500000 25.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.500000 0.500000 40.500000 + vertex -24.500000 9.500000 40.500000 + vertex -24.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 15.500000 9.500000 25.500000 + vertex 15.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 180.500000 9.500000 25.500000 + vertex 15.500000 9.500000 25.500000 + vertex 180.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 65.500000 + vertex 10.500000 9.500000 40.500000 + vertex 0.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 65.500000 + vertex 15.500000 9.500000 40.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 65.500000 + vertex 10.500000 9.500000 40.500000 + vertex 0.500000 9.500000 65.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.500000 0.500000 40.500000 + vertex 180.500000 0.500000 25.500000 + vertex 180.500000 9.500000 25.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 180.500000 0.500000 40.500000 + vertex 180.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 180.500000 0.500000 40.500000 + vertex 15.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 180.500000 0.500000 25.500000 + vertex 180.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 40.500000 + vertex 0.500000 0.500000 65.500000 + vertex 0.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 40.500000 + vertex 15.500000 0.500000 65.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 40.500000 + vertex 15.500000 0.500000 65.500000 + vertex 0.500000 0.500000 65.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex -24.500000 0.500000 40.500000 + vertex 0.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex -24.500000 9.500000 40.500000 + vertex -24.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 15.500000 0.500000 40.500000 + vertex 180.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 15.500000 9.500000 40.500000 + vertex 15.500000 0.500000 40.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 0.500000 65.500000 + vertex 15.500000 9.500000 40.500000 + vertex 15.500000 9.500000 65.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 0.500000 65.500000 + vertex 15.500000 0.500000 40.500000 + vertex 15.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 15.500000 0.500000 65.500000 + vertex 0.500000 9.500000 65.500000 + vertex 0.500000 0.500000 65.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 15.500000 9.500000 65.500000 + vertex 0.500000 9.500000 65.500000 + vertex 15.500000 0.500000 65.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex 0.500000 0.500000 65.500000 + vertex 0.500000 9.500000 65.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.500000 40.500000 + vertex 0.500000 0.500000 65.500000 + vertex 0.500000 9.500000 40.500000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl new file mode 100644 index 0000000000000000000000000000000000000000..012423f0625912bb76dcae9c5040a1dcad1d2bda GIT binary patch literal 2684 zcmb`HF^&{L3`INU1RE2PkZq1wgha9tmzl664mLvCkVD~T*LVNw?qL&3+UdV8zi+#` zW?sMl{PFqqzkPgo-h7RF{P$(sp1#)eHlM_nzlN@eOM1&paR)z$KeLwT?VkkQIFUNt z2i~zhh2N!b>~}mfuZY{EHTB*VhzMm-T^eGk-Pw@J5+Q%Z^Zz0S`9%<YMA+o_BIL=F zPDCqyCaA96D<b#OTyN0{X?z!Ywo`BN?f2TrQ)Fi+(PejdB0NiaaY|y~G1k-7JNWpr z$I-Qt2ubhq6`?tZp9y*uAx)O(12Og;O)L6L&>JUwi^_NhF`mD5z0@;K>RckGuM_TM z*+{D6MZZ?BwapP7u|zP36N;Y+{8d9*r`z%L*1fvQdO+aKiYJp(otrUFp|y1dF?Ir9 zC)_ErVyUa;#@S4YTa9~>+M$NeBwd93VVsaY&a`*rglD<V+9c{1sBZ>Yyg{9nH1S%a z&Z-H#loh(;2Ld=qe1C=4a>Hl*Ovo2PnyiJ+wz8{G%6e3Tcu$>@ZxNk^Z}yJ%IqIzB z53KK<6Vl9AM4I3EtghU5*2`|CD^u^CIgW(7x+a$ITFgLJPCGT{R_j=U9o5shy<fu# zvb&zj)ZL05&V(9%cSY=7fsN_oglni1;qRm8h^&5_?-QzVo2Onxb~9=m?QlM5C(x&R w)t!h??@pIDpVVT9tn`X!`-bi~$+<*$mh|G(zg3A%-<;5Wz21qS`Xhq)Uq5t5*8l(j literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.ast b/apps/cpu/Multiphase/backup/FlowFocusingSL.ast new file mode 100644 index 000000000..0ee1706e4 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSL.ast @@ -0,0 +1,3082 @@ +solid Mesh + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 5.216498 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 6.686424 11.567146 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 4.708204 12.412678 -29.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 4.708204 12.412678 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 2.610799 12.891397 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 -0.075672 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex -3.716300 -10.034333 -29.000000 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -9.811626 6.206605 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -7.292752 -7.673538 -29.000000 + vertex -3.716300 -10.034333 -29.000000 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 2.610799 12.891397 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.481877 10.381978 -29.000000 + vertex 10.036858 8.895265 -29.000000 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.567554 -2.192442 -29.000000 + vertex -10.951692 -0.075672 -29.000000 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -3.716300 -10.034333 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + vertex -1.670251 -10.699135 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + vertex -3.716300 -10.034333 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 -29.000000 + vertex 4.708204 -10.412678 -29.000000 + vertex 2.610799 -10.891397 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -10.567554 4.192442 -29.000000 + vertex -9.811626 6.206605 -29.000000 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 2.075672 -29.000000 + vertex -9.811626 6.206605 -29.000000 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -8.708204 8.053423 -29.000000 + vertex -7.292752 9.673538 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex -8.708204 -6.053423 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 4.708204 -10.412678 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 6.686424 -9.567146 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 6.686424 -9.567146 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 8.481877 -8.381978 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 4.708204 -10.412678 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 -29.000000 + vertex 12.234818 -3.216498 -29.000000 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -1.670251 12.699135 -29.000000 + vertex 0.461622 12.987917 -29.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -3.716300 12.034333 -29.000000 + vertex 0.461622 12.987917 -29.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -5.610764 11.014879 -29.000000 + vertex 2.610799 12.891397 -29.000000 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -7.292752 9.673538 -29.000000 + vertex 2.610799 12.891397 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 0.461622 12.987917 -29.000000 + vertex 2.610799 12.891397 -29.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 -29.000000 + vertex 12.807155 3.142683 -29.000000 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 -3.216498 -29.000000 + vertex 12.234818 5.216498 -29.000000 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 -29.000000 + vertex 12.234818 5.216498 -29.000000 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 -29.000000 + vertex 12.234818 5.216498 -29.000000 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.995974 0.089639 -0.000783 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 -29.000000 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.998046 0.062478 0.000000 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 23.000000 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.998997 0.044772 0.000000 + outer loop + vertex 13.000000 1.000000 91.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.984343 0.176264 0.000312 + outer loop + vertex 12.685336 3.730003 23.480221 + vertex 12.906315 2.496555 23.141226 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.963963 0.266037 -0.000740 + outer loop + vertex 12.234818 5.216498 -29.000000 + vertex 12.685336 3.730003 23.480221 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.962801 0.270210 -0.000612 + outer loop + vertex 12.401385 4.742783 23.929527 + vertex 12.685336 3.730003 23.480221 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.995974 0.089639 0.000928 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 13.000000 1.000000 91.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.973891 0.227018 -0.000135 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 12.829484 3.015767 38.741879 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.991665 0.128839 0.000111 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 12.951891 2.073451 38.927654 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.933574 0.358383 0.000270 + outer loop + vertex 11.975570 5.851481 24.638937 + vertex 12.401385 4.742783 23.929527 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.900969 0.433883 -0.000782 + outer loop + vertex 11.301386 7.154791 -29.000000 + vertex 11.975570 5.851481 24.638937 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.963963 0.266037 0.000870 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.807155 3.142683 91.000000 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.938259 0.345932 -0.000460 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.501177 4.423876 38.230289 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.894623 0.446821 -0.000388 + outer loop + vertex 11.475355 6.853796 25.547195 + vertex 11.975570 5.851481 24.638937 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.853458 0.521161 0.000154 + outer loop + vertex 10.990158 7.648063 26.549915 + vertex 11.475355 6.853796 25.547195 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.809017 0.587785 -0.000803 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 11.301386 7.154791 -29.000000 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.814217 0.580561 -0.000593 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 10.990158 7.648063 26.549915 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.845496 0.533982 -0.000125 + outer loop + vertex 11.301386 7.154791 91.000000 + vertex 11.405221 6.977572 36.316826 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.891689 0.452648 0.000226 + outer loop + vertex 11.301386 7.154791 91.000000 + vertex 11.968547 5.867337 37.348938 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.900969 0.433883 0.000792 + outer loop + vertex 11.301386 7.154791 91.000000 + vertex 12.234818 5.216498 91.000000 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.781554 0.623838 -0.000150 + outer loop + vertex 10.203491 8.700374 28.831072 + vertex 10.553408 8.261708 27.643276 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.759095 0.650980 0.000007 + outer loop + vertex 10.013048 8.922435 29.888680 + vertex 10.203491 8.700374 28.831072 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.748201 0.663472 -0.000004 + outer loop + vertex 9.944272 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.691063 0.722795 -0.000195 + outer loop + vertex 8.481877 10.381978 -29.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.809017 0.587785 0.000809 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 11.301386 7.154791 91.000000 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.750661 0.660687 -0.000005 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 10.070409 8.856697 32.507420 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.769853 0.638221 0.000021 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 10.402563 8.455991 33.899689 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal 0.802784 0.596269 0.000554 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 10.866963 7.829570 35.166172 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.691063 0.722795 0.000195 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 10.036858 8.895265 91.000000 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.686841 0.726808 0.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 9.944272 9.000000 31.000000 + vertex 8.481877 10.381978 -29.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 6.686424 11.567146 -29.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 6.686424 11.567146 91.000000 + vertex 8.481877 10.381978 91.000000 + vertex 6.686424 11.567146 -29.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 6.686424 11.567146 91.000000 + vertex 6.686424 11.567146 -29.000000 + vertex 4.708204 12.412678 -29.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 4.708204 12.412678 91.000000 + vertex 6.686424 11.567146 91.000000 + vertex 4.708204 12.412678 -29.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 4.708204 12.412678 91.000000 + vertex 4.708204 12.412678 -29.000000 + vertex 2.610799 12.891397 -29.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 2.610799 12.891397 91.000000 + vertex 4.708204 12.412678 91.000000 + vertex 2.610799 12.891397 -29.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 2.610799 12.891397 91.000000 + vertex 2.610799 12.891397 -29.000000 + vertex 0.461622 12.987917 -29.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex 0.461622 12.987917 -29.000000 + vertex -1.670251 12.699135 -29.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex 2.610799 12.891397 91.000000 + vertex 0.461622 12.987917 -29.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -1.670251 12.699135 91.000000 + vertex -1.670251 12.699135 -29.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex -1.670251 12.699135 91.000000 + vertex 0.461622 12.987917 91.000000 + vertex -1.670251 12.699135 -29.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -3.716300 12.034333 91.000000 + vertex -1.670251 12.699135 91.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal -0.473869 0.880596 0.000041 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 -29.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.474858 0.880063 0.000000 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 91.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal -0.557098 0.830446 -0.000003 + outer loop + vertex -5.737499 10.930061 29.819370 + vertex -5.633250 11.000000 31.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.572844 0.819664 -0.000052 + outer loop + vertex -6.012732 10.737638 28.724388 + vertex -5.737499 10.930061 29.819370 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.623490 0.781831 -0.000854 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -5.610764 11.014879 -29.000000 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal -0.603052 0.797702 -0.000368 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -6.012732 10.737638 28.724388 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.557937 0.829883 0.000003 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -5.633250 11.000000 31.000000 + vertex -5.757563 10.916418 32.290215 + endloop + endfacet + facet normal -0.576477 0.817113 0.000071 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -5.757563 10.916418 32.290215 + vertex -6.080200 10.688693 33.475727 + endloop + endfacet + facet normal -0.608142 0.793828 0.000462 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -6.080200 10.688693 33.475727 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.473869 0.880596 -0.000041 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -3.716300 12.034333 91.000000 + vertex -5.633250 11.000000 31.000000 + endloop + endfacet + facet normal -0.659510 0.751695 0.000052 + outer loop + vertex -7.338006 9.630043 25.948034 + vertex -6.470624 10.390942 27.563400 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal -0.753071 0.657939 -0.000691 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -7.292752 9.673538 -29.000000 + vertex -8.708204 8.053423 -29.000000 + endloop + endfacet + facet normal -0.739411 0.673255 -0.000076 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -7.338006 9.630043 25.948034 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal -0.657479 0.753473 0.000055 + outer loop + vertex -7.292752 9.673538 91.000000 + vertex -6.528029 10.344987 34.559666 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.623490 0.781831 0.000853 + outer loop + vertex -7.292752 9.673538 91.000000 + vertex -5.610764 11.014879 91.000000 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.732440 0.680831 -0.000081 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.292752 9.673538 91.000000 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.858449 0.512899 -0.000927 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -8.708204 8.053423 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal -0.821576 0.570099 0.000464 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -8.372674 8.493528 24.378292 + vertex -8.708204 8.053423 -29.000000 + endloop + endfacet + facet normal -0.816755 0.576984 -0.000516 + outer loop + vertex -8.708204 8.053423 91.000000 + vertex -8.299619 8.584002 37.517891 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.753071 0.657939 0.000774 + outer loop + vertex -8.708204 8.053423 91.000000 + vertex -7.292752 9.673538 91.000000 + vertex -8.299619 8.584002 37.517891 + endloop + endfacet + facet normal -0.888008 0.459827 0.000342 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -9.295414 7.164775 23.126276 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal -0.936235 0.351375 -0.000665 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.811626 6.206605 -29.000000 + vertex -10.567554 4.192442 -29.000000 + endloop + endfacet + facet normal -0.934728 0.355364 -0.000524 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.974246 5.854475 22.257341 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal -0.883513 0.468407 -0.000232 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -9.250660 7.238907 38.815117 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.858448 0.512899 0.000918 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -8.708204 8.053423 91.000000 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.983929 0.178557 -0.000960 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.567554 4.192442 -29.000000 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal -0.969888 0.243550 0.000415 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.429211 4.656930 21.692644 + vertex -10.567554 4.192442 -29.000000 + endloop + endfacet + facet normal -0.937600 0.347714 0.000232 + outer loop + vertex -10.567554 4.192442 91.000000 + vertex -9.915038 5.986175 39.668221 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.936235 0.351375 0.000377 + outer loop + vertex -10.567554 4.192442 91.000000 + vertex -9.811626 6.206605 91.000000 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.975706 0.219084 -0.000159 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.567554 4.192442 91.000000 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.993453 0.114243 0.000481 + outer loop + vertex -10.987032 1.557722 21.015564 + vertex -10.800443 3.179347 21.240366 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000707 + outer loop + vertex -10.951692 -0.075672 -29.000000 + vertex -10.987032 1.557722 21.015564 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal -0.996104 0.088185 -0.000619 + outer loop + vertex -10.951692 2.075672 91.000000 + vertex -10.846192 2.915130 40.814899 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.983929 0.178557 0.000918 + outer loop + vertex -10.951692 2.075672 91.000000 + vertex -10.567554 4.192442 91.000000 + vertex -10.846192 2.915130 40.814899 + endloop + endfacet + facet normal -0.999767 -0.021564 -0.000002 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.987032 1.557722 21.015564 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal -0.987838 -0.155489 0.000002 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951837 -0.074060 21.057848 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal -0.983929 -0.178557 -0.000738 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951692 -0.075672 -29.000000 + vertex -10.567554 -2.192442 -29.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000934 + outer loop + vertex -10.951692 -0.075672 91.000000 + vertex -10.951692 2.075672 91.000000 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.998486 -0.055007 -0.000468 + outer loop + vertex -10.951692 -0.075672 91.000000 + vertex -10.998376 1.197410 40.998051 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.984504 -0.175362 0.000600 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.951692 -0.075672 91.000000 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.958646 -0.284602 0.000474 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -10.703868 -1.649430 21.357359 + vertex -10.567554 -2.192442 -29.000000 + endloop + endfacet + facet normal -0.936234 -0.351375 -0.000947 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -10.567554 -2.192442 -29.000000 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal -0.983929 -0.178557 0.000705 + outer loop + vertex -10.567554 -2.192442 91.000000 + vertex -10.951692 -0.075672 91.000000 + vertex -10.695628 -1.685570 40.632637 + endloop + endfacet + facet normal -0.961368 -0.275265 -0.000326 + outer loop + vertex -10.567554 -2.192442 91.000000 + vertex -10.695628 -1.685570 40.632637 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.913616 -0.406579 0.000373 + outer loop + vertex -9.627810 -4.572220 22.696365 + vertex -10.252209 -3.169867 21.910873 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal -0.858449 -0.512899 -0.000575 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex -9.627810 -4.572220 22.696365 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal -0.927206 -0.374552 0.000182 + outer loop + vertex -9.811626 -4.206605 91.000000 + vertex -10.343766 -2.913946 40.202229 + vertex -9.880333 -4.061458 39.624477 + endloop + endfacet + facet normal -0.879853 -0.475247 -0.000166 + outer loop + vertex -9.811626 -4.206605 91.000000 + vertex -9.880333 -4.061458 39.624477 + vertex -9.197070 -5.326117 38.744690 + endloop + endfacet + facet normal -0.936234 -0.351375 0.000866 + outer loop + vertex -9.811626 -4.206605 91.000000 + vertex -10.567554 -2.192442 91.000000 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.753071 -0.657939 -0.000758 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -8.708204 -6.053423 -29.000000 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal -0.858449 -0.512899 0.000892 + outer loop + vertex -8.708204 -6.053423 91.000000 + vertex -9.811626 -4.206605 91.000000 + vertex -9.197070 -5.326117 38.744690 + endloop + endfacet + facet normal -0.696717 -0.717346 0.000241 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -7.758466 -7.203003 25.280670 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal -0.623490 -0.781831 -0.000809 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -7.292752 -7.673538 -29.000000 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.634695 -0.772762 -0.000478 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -6.938873 -7.998572 26.638153 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal -0.650332 -0.759650 0.000094 + outer loop + vertex -7.292752 -7.673538 91.000000 + vertex -7.218597 -7.743835 35.852356 + vertex -6.375163 -8.466096 34.223824 + endloop + endfacet + facet normal -0.753071 -0.657939 0.000812 + outer loop + vertex -7.292752 -7.673538 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex -8.256754 -6.636262 37.456585 + endloop + endfacet + facet normal -0.592141 -0.805834 -0.000224 + outer loop + vertex -5.919753 -8.803928 29.029472 + vertex -6.298790 -8.525107 27.954950 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.566671 -0.823944 -0.000022 + outer loop + vertex -5.681127 -8.968076 30.201591 + vertex -5.919753 -8.803928 29.029472 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.555733 -0.831361 -0.000003 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -5.681127 -8.968076 30.201591 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.473869 -0.880596 0.000089 + outer loop + vertex -3.716300 -10.034333 -29.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.596199 -0.802837 0.000267 + outer loop + vertex -5.610764 -9.014879 91.000000 + vertex -6.375163 -8.466096 34.223824 + vertex -5.941191 -8.788762 33.044537 + endloop + endfacet + facet normal -0.566698 -0.823926 0.000016 + outer loop + vertex -5.610764 -9.014879 91.000000 + vertex -5.941191 -8.788762 33.044537 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.623490 -0.781831 0.000837 + outer loop + vertex -5.610764 -9.014879 91.000000 + vertex -7.292752 -7.673538 91.000000 + vertex -6.375163 -8.466096 34.223824 + endloop + endfacet + facet normal -0.473869 -0.880596 -0.000091 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -5.610764 -9.014879 91.000000 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.476015 -0.879437 -0.000000 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -3.716300 -10.034333 -29.000000 + endloop + endfacet + facet normal -0.309017 -0.951057 -0.000000 + outer loop + vertex -1.670251 -10.699135 91.000000 + vertex -3.716300 -10.034333 -29.000000 + vertex -1.670251 -10.699135 -29.000000 + endloop + endfacet + facet normal -0.309017 -0.951057 0.000000 + outer loop + vertex -1.670251 -10.699135 91.000000 + vertex -3.716300 -10.034333 91.000000 + vertex -3.716300 -10.034333 -29.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 -0.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -1.670251 -10.699135 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 0.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -1.670251 -10.699135 91.000000 + vertex -1.670251 -10.699135 -29.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 91.000000 + vertex 0.461622 -10.987917 -29.000000 + vertex 2.610799 -10.891397 -29.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 91.000000 + vertex 0.461622 -10.987917 91.000000 + vertex 0.461622 -10.987917 -29.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 91.000000 + vertex 2.610799 -10.891397 -29.000000 + vertex 4.708204 -10.412678 -29.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 91.000000 + vertex 2.610799 -10.891397 91.000000 + vertex 2.610799 -10.891397 -29.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 91.000000 + vertex 4.708204 -10.412678 -29.000000 + vertex 6.686424 -9.567146 -29.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 91.000000 + vertex 4.708204 -10.412678 91.000000 + vertex 4.708204 -10.412678 -29.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 91.000000 + vertex 6.686424 -9.567146 -29.000000 + vertex 8.481877 -8.381978 -29.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 91.000000 + vertex 6.686424 -9.567146 91.000000 + vertex 6.686424 -9.567146 -29.000000 + endloop + endfacet + facet normal 0.687426 -0.726254 0.000000 + outer loop + vertex 9.957150 -6.985579 30.519876 + vertex 8.481877 -8.381978 91.000000 + vertex 8.481877 -8.381978 -29.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 -0.000171 + outer loop + vertex 9.957150 -6.985579 30.519876 + vertex 8.481877 -8.381978 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.753451 -0.657504 0.000011 + outer loop + vertex 10.123698 -6.794750 29.199480 + vertex 9.957150 -6.985579 30.519876 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.773617 -0.633653 -0.000060 + outer loop + vertex 10.441307 -6.406870 27.977041 + vertex 10.123698 -6.794750 29.199480 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.803962 -0.594680 -0.000609 + outer loop + vertex 10.859378 -5.840517 26.851830 + vertex 10.441307 -6.406870 27.977041 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.809017 -0.587785 -0.000814 + outer loop + vertex 10.859378 -5.840517 26.851830 + vertex 10.036858 -6.895265 -29.000000 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 0.000169 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 8.481877 -8.381978 91.000000 + vertex 9.957150 -6.985579 30.519876 + endloop + endfacet + facet normal 0.781554 -0.623838 0.000150 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 10.203491 -6.700374 33.168926 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.758054 -0.652192 -0.000014 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.747557 -0.664197 0.000007 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 9.957150 -6.985579 30.519876 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.842075 -0.539361 0.000042 + outer loop + vertex 11.336068 -5.096367 25.819815 + vertex 10.859378 -5.840517 26.851830 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.883071 -0.469240 -0.000059 + outer loop + vertex 11.837208 -4.153147 24.880762 + vertex 11.336068 -5.096367 25.819815 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.900969 -0.433883 -0.000894 + outer loop + vertex 11.837208 -4.153147 24.880762 + vertex 11.301386 -5.154791 -29.000000 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.853458 -0.521161 -0.000154 + outer loop + vertex 11.301386 -5.154791 91.000000 + vertex 10.990158 -5.648063 35.450085 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.814216 -0.580561 0.000593 + outer loop + vertex 11.301386 -5.154791 91.000000 + vertex 10.553408 -6.261708 34.356724 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal 0.809017 -0.587785 0.000803 + outer loop + vertex 11.301386 -5.154791 91.000000 + vertex 10.036858 -6.895265 91.000000 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.894623 -0.446821 0.000388 + outer loop + vertex 11.975570 -3.851482 37.361065 + vertex 11.301386 -5.154791 91.000000 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.920705 -0.390260 0.000010 + outer loop + vertex 12.239279 -3.204595 24.194019 + vertex 11.837208 -4.153147 24.880762 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.951731 -0.306935 -0.000011 + outer loop + vertex 12.578116 -2.153921 23.647940 + vertex 12.239279 -3.204595 24.194019 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.963963 -0.266037 -0.000916 + outer loop + vertex 12.578116 -2.153921 23.647940 + vertex 12.234818 -3.216498 -29.000000 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.933574 -0.358383 -0.000270 + outer loop + vertex 12.234818 -3.216498 91.000000 + vertex 11.975570 -3.851482 37.361065 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.900969 -0.433883 0.000782 + outer loop + vertex 12.234818 -3.216498 91.000000 + vertex 11.301386 -5.154791 91.000000 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal 0.962801 -0.270210 0.000612 + outer loop + vertex 12.685336 -1.730003 38.519779 + vertex 12.234818 -3.216498 91.000000 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.977859 -0.209265 0.000235 + outer loop + vertex 12.854565 -0.862604 23.219852 + vertex 12.578116 -2.153921 23.647940 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.992924 -0.118753 -0.000265 + outer loop + vertex 12.959555 0.015601 23.060797 + vertex 12.854565 -0.862604 23.219852 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.995974 -0.089639 -0.000921 + outer loop + vertex 12.959555 0.015601 23.060797 + vertex 12.807155 -1.142683 -29.000000 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.984343 -0.176264 -0.000312 + outer loop + vertex 12.807155 -1.142683 91.000000 + vertex 12.685336 -1.730003 38.519779 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.963963 -0.266037 0.000740 + outer loop + vertex 12.807155 -1.142683 91.000000 + vertex 12.234818 -3.216498 91.000000 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.999157 -0.041052 0.000000 + outer loop + vertex 13.000000 1.000000 23.000000 + vertex 12.959555 0.015601 23.060797 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.998046 -0.062478 0.000000 + outer loop + vertex 13.000000 1.000000 91.000000 + vertex 12.906315 -0.496555 38.858772 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal 0.995974 -0.089639 0.000783 + outer loop + vertex 13.000000 1.000000 91.000000 + vertex 12.807155 -1.142683 91.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal -0.812649 -0.582753 -0.000508 + outer loop + vertex -9.197070 -5.326117 38.744690 + vertex -8.256754 -6.636262 37.456585 + vertex -8.708204 -6.053423 91.000000 + endloop + endfacet + facet normal -0.729680 -0.683789 -0.000110 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -7.218597 -7.743835 35.852356 + vertex -7.292752 -7.673538 91.000000 + endloop + endfacet + facet normal -0.772134 -0.635460 0.000052 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -8.734071 -6.017682 23.875946 + vertex -8.708204 -6.053423 -29.000000 + endloop + endfacet + facet normal -0.850525 -0.525935 -0.000061 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -9.627810 -4.572220 22.696365 + vertex -8.708204 -6.053423 -29.000000 + endloop + endfacet + facet normal -0.000014 -0.989717 -0.143040 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 9.957150 -6.985579 30.519876 + vertex 10.123698 -6.794750 29.199480 + endloop + endfacet + facet normal 0.000014 -0.953169 -0.302437 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 10.123698 -6.794750 29.199480 + vertex 10.441307 -6.406870 27.977041 + endloop + endfacet + facet normal 0.000326 -0.993712 -0.111965 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -7.000000 31.000000 + vertex 9.957150 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000000 0.995512 0.094638 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000196 -0.893205 -0.449650 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 10.441307 -6.406870 27.977041 + vertex 10.859378 -5.840517 26.851830 + endloop + endfacet + facet normal -0.000169 0.960980 0.276618 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 10.070409 8.856697 32.507420 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000331 -0.943883 -0.330279 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -6.799423 29.219833 + vertex 10.441307 -6.406870 27.977041 + endloop + endfacet + facet normal 0.000218 0.993712 0.111965 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000133 -0.811095 -0.584914 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 10.859378 -5.840517 26.851830 + vertex 11.336068 -5.096367 25.819815 + endloop + endfacet + facet normal 0.000410 -0.846724 -0.532032 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 10.859378 -5.840517 26.851830 + endloop + endfacet + facet normal -0.000256 0.896312 0.443423 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 10.402563 8.455991 33.899689 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.000378 0.943883 0.330279 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.799423 32.780167 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000173 -0.705586 -0.708625 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.336068 -5.096367 25.819815 + vertex 11.837208 -4.153147 24.880762 + endloop + endfacet + facet normal -0.000107 -0.586402 -0.810020 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.837208 -4.153147 24.880762 + vertex 12.239279 -3.204595 24.194019 + endloop + endfacet + facet normal -0.000225 0.803620 0.595143 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 10.866963 7.829570 35.166172 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.000201 -0.707107 -0.707107 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 11.336068 -5.096367 25.819815 + endloop + endfacet + facet normal 0.000413 0.846724 0.532032 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 131.000000 8.207751 34.471069 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal -0.000154 -0.461134 -0.887331 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 12.239279 -3.204595 24.194019 + vertex 12.578116 -2.153921 23.647940 + endloop + endfacet + facet normal -0.000110 0.680839 0.732433 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 11.405221 6.977572 36.316826 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000422 -0.532032 -0.846724 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -3.987918 24.745348 + vertex 12.239279 -3.204595 24.194019 + endloop + endfacet + facet normal 0.000306 0.707106 0.707107 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 7.254652 35.987919 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal -0.000045 0.521109 0.853490 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 11.968547 5.867337 37.348938 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.000043 0.341486 0.939887 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 12.501177 4.423876 38.230289 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000132 0.532033 0.846723 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 5.987918 37.254650 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000065 -0.314684 -0.949197 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.578116 -2.153921 23.647940 + vertex 12.854565 -0.862604 23.219852 + endloop + endfacet + facet normal -0.000036 -0.178211 -0.983992 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.854565 -0.862604 23.219852 + vertex 12.959555 0.015601 23.060797 + endloop + endfacet + facet normal 0.000266 -0.330279 -0.943883 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 12.578116 -2.153921 23.647940 + endloop + endfacet + facet normal -0.000092 0.193413 0.981117 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 12.829484 3.015767 38.741879 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000199 0.330278 0.943884 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 4.471070 38.207752 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000000 0.093950 -0.995577 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 13.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000000 -0.061643 -0.998098 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 12.959555 0.015601 23.060797 + vertex 13.000000 1.000000 23.000000 + endloop + endfacet + facet normal 0.000422 -0.111965 -0.993712 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -0.780167 23.200577 + vertex 12.959555 0.015601 23.060797 + endloop + endfacet + facet normal 0.000409 0.111965 0.993712 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 2.780168 38.799423 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000000 -0.093951 0.995577 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000000 0.067243 0.997737 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal -0.000152 0.264984 -0.964253 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 12.906315 2.496555 23.141226 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal 0.000231 0.111965 -0.993712 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000152 -0.264982 0.964253 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 12.906315 -0.496555 38.858772 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal -0.000129 0.405492 -0.914099 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 12.685336 3.730003 23.480221 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal 0.000231 -0.111965 0.993712 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000421 0.330279 -0.943883 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal -0.000129 -0.405492 0.914099 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 12.685336 -1.730003 38.519779 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000421 -0.330278 0.943883 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -0.780167 38.799423 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.000135 0.539006 -0.842302 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 12.401385 4.742783 23.929527 + vertex 11.975570 5.851481 24.638937 + endloop + endfacet + facet normal -0.000107 0.671454 -0.741046 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 11.975570 5.851481 24.638937 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal 0.000239 0.532032 -0.846724 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 4.471070 23.792250 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal -0.000213 0.783825 -0.620981 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 11.475355 6.853796 25.547195 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal 0.000239 -0.532033 0.846723 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000135 -0.539005 0.842303 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 12.401385 -2.742783 38.070473 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal -0.000107 -0.671455 0.741046 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 11.975570 -3.851482 37.361065 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000379 0.707107 -0.707107 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal -0.000213 -0.783825 0.620981 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 11.475355 -4.853796 36.452805 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000074 0.872030 -0.489453 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.990158 7.648063 26.549915 + vertex 10.553408 8.261708 27.643276 + endloop + endfacet + facet normal 0.000091 0.938081 -0.346416 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.553408 8.261708 27.643276 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000379 -0.707106 0.707107 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -3.987918 37.254650 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000391 0.846724 -0.532032 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 7.254652 26.012081 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal -0.000074 -0.872030 0.489453 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.990158 -5.648063 35.450085 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.000091 -0.938081 0.346416 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.553408 -6.261708 34.356724 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.000391 -0.846724 0.532032 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -5.254652 35.987919 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000141 0.978655 -0.205509 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 10.203491 8.700374 28.831072 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000289 0.943883 -0.330279 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 8.207751 27.528931 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000391 0.993712 -0.111965 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 131.000000 8.799423 29.219833 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000000 0.997573 -0.069626 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.000190 -0.981571 0.191098 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 10.203491 -6.700374 33.168926 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000289 -0.943883 0.330279 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -6.207751 34.471069 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal -0.000218 -0.999689 0.024950 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 9.957150 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000416 -0.993712 0.111965 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 32.780167 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 12.234818 5.216498 91.000000 + vertex 11.301386 7.154791 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 6.686424 11.567146 91.000000 + vertex 4.708204 12.412678 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 4.708204 12.412678 91.000000 + vertex 2.610799 12.891397 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 2.610799 12.891397 91.000000 + vertex -5.610764 11.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex -5.610764 11.014879 91.000000 + vertex 12.234818 5.216498 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex -7.292752 -7.673538 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 8.481877 10.381978 91.000000 + vertex 11.301386 7.154791 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -7.292752 -7.673538 91.000000 + vertex -5.610764 -9.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.951692 -0.075672 91.000000 + vertex -10.567554 -2.192442 91.000000 + vertex -9.811626 -4.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -3.716300 -10.034333 91.000000 + vertex -1.670251 -10.699135 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex -3.716300 -10.034333 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 4.708204 -10.412678 91.000000 + vertex 0.461622 -10.987917 91.000000 + vertex 2.610799 -10.891397 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -10.567554 4.192442 91.000000 + vertex -10.951692 2.075672 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -10.951692 2.075672 91.000000 + vertex -10.951692 -0.075672 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -7.292752 9.673538 91.000000 + vertex -8.708204 8.053423 91.000000 + vertex -9.811626 6.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex -9.811626 -4.206605 91.000000 + vertex -8.708204 -6.053423 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 4.708204 -10.412678 91.000000 + vertex 6.686424 -9.567146 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 6.686424 -9.567146 91.000000 + vertex 8.481877 -8.381978 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex 0.461622 -10.987917 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 0.461622 -10.987917 91.000000 + vertex 4.708204 -10.412678 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 -3.216498 91.000000 + vertex 10.036858 -6.895265 91.000000 + vertex 11.301386 -5.154791 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex -1.670251 12.699135 91.000000 + vertex -3.716300 12.034333 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex -3.716300 12.034333 91.000000 + vertex -5.610764 11.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 2.610799 12.891397 91.000000 + vertex 0.461622 12.987917 91.000000 + vertex -5.610764 11.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 12.807155 -1.142683 91.000000 + vertex 13.000000 1.000000 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -5.610764 11.014879 91.000000 + vertex -7.292752 9.673538 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.234818 -3.216498 91.000000 + vertex 12.807155 -1.142683 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -10.951692 -0.075672 91.000000 + vertex -9.811626 -4.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -7.292752 9.673538 91.000000 + vertex -9.811626 6.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -9.811626 6.206605 91.000000 + vertex -10.951692 -0.075672 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -9.811626 -4.206605 91.000000 + vertex 10.036858 -6.895265 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 10.036858 -6.895265 91.000000 + vertex 12.234818 -3.216498 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.807155 -1.142683 91.000000 + vertex 12.807155 3.142683 91.000000 + endloop + endfacet + facet normal -0.000919 0.936949 -0.349464 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -34.000000 10.096320 26.845850 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000773 -0.936950 0.349464 + outer loop + vertex -6.375163 -8.466096 34.223824 + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.001442 -0.913852 0.406044 + outer loop + vertex -6.375163 -8.466096 34.223824 + vertex -7.218597 -7.743835 35.852356 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.000658 0.958118 -0.286374 + outer loop + vertex -6.012732 10.737638 28.724388 + vertex -6.470624 10.390942 27.563400 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000868 0.977146 -0.212565 + outer loop + vertex -6.012732 10.737638 28.724388 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000896 -0.977146 0.212565 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000612 -0.964490 0.264120 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -6.375163 -8.466096 34.223824 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.000376 0.984892 -0.173172 + outer loop + vertex -5.737499 10.930061 29.819370 + vertex -6.012732 10.737638 28.724388 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000512 0.997452 -0.071339 + outer loop + vertex -5.737499 10.930061 29.819370 + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal 0.000000 0.998250 -0.059135 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -5.737499 10.930061 29.819370 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000873 -0.997452 0.071339 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000307 0.997452 0.071339 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 11.000000 31.000000 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal 0.000936 -0.991207 0.132320 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000000 0.997908 0.064646 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -5.633250 11.000000 31.000000 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000887 -0.997452 -0.071339 + outer loop + vertex -5.681127 -8.968076 30.201591 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000834 -0.999946 -0.010400 + outer loop + vertex -5.681127 -8.968076 30.201591 + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000681 0.977147 0.212565 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal 0.000255 0.982033 0.188708 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -0.000863 -0.977147 -0.212565 + outer loop + vertex -5.919753 -8.803928 29.029472 + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000619 -0.990318 -0.138813 + outer loop + vertex -5.919753 -8.803928 29.029472 + vertex -5.681127 -8.968076 30.201591 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000499 0.953166 0.302446 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -0.000919 0.936949 0.349463 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.594930 33.817326 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000511 -0.936950 -0.349464 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.000374 -0.967912 -0.251289 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -5.919753 -8.803928 29.029472 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000978 0.905646 0.424035 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000929 0.877678 0.479250 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000508 -0.877679 -0.479249 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal 0.000502 -0.928437 -0.371490 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.001581 0.818925 0.573899 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000109 0.800542 0.599277 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 9.412536 36.406406 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal 0.000116 0.707107 0.707107 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal -0.000754 -0.800541 -0.599278 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal 0.000853 -0.862528 -0.506009 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -0.000997 -0.707106 -0.707106 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal 0.001184 0.693748 0.720217 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal 0.001614 -0.763715 -0.645552 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -7.758466 -7.203003 25.280670 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal -0.000834 0.599278 0.800540 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal 0.001572 -0.631667 -0.775238 + outer loop + vertex -9.627810 -4.572220 22.696365 + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -0.000500 -0.599278 -0.800541 + outer loop + vertex -9.627810 -4.572220 22.696365 + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal 0.001037 0.562496 0.826800 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal -0.000955 0.479249 0.877679 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000575 -0.488491 -0.872569 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -9.627810 -4.572220 22.696365 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -0.000051 -0.479249 -0.877679 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal 0.001741 0.417216 0.908806 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000052 -0.349465 -0.936949 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001023 0.349463 0.936950 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal -0.000469 -0.212565 -0.977147 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -1.817326 21.405069 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal 0.001080 0.262953 0.964808 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal 0.000540 -0.341944 -0.939720 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001001 0.212567 0.977146 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal 0.000954 -0.186630 -0.982430 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -0.000821 -0.071339 -0.997452 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal 0.001328 0.105907 0.994375 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -0.000528 0.071338 0.997452 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.001303 -0.025876 -0.999664 + outer loop + vertex -10.987032 1.557722 21.015564 + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -0.001054 0.071339 -0.997451 + outer loop + vertex -10.987032 1.557722 21.015564 + vertex -34.000000 1.000000 21.000000 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal 0.000652 -0.066086 0.997814 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.000305 -0.071338 0.997452 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal 0.001446 0.137151 -0.990549 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.987032 1.557722 21.015564 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -0.001092 0.212565 -0.977146 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.000259 -0.210447 0.977605 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -0.000379 -0.212567 0.977146 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal 0.001252 0.292401 -0.956295 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.001017 0.349465 -0.936949 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal 0.000342 -0.330589 0.943775 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal -0.000646 -0.349463 0.936950 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal 0.000892 0.426229 -0.904615 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -0.001050 0.479249 -0.877679 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 5.154150 21.903681 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal 0.000565 -0.449518 0.893271 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -0.000858 -0.479249 0.877679 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal 0.001231 0.552230 -0.833691 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -0.000936 0.599277 -0.800541 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000947 -0.570730 0.821137 + outer loop + vertex -9.197070 -5.326117 38.744690 + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal -0.000666 -0.599279 0.800540 + outer loop + vertex -9.197070 -5.326117 38.744690 + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal 0.001325 0.685290 -0.728269 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -9.295414 7.164775 23.126276 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000902 -0.700754 0.713403 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -9.197070 -5.326117 38.744690 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -0.000252 0.707107 -0.707107 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal 0.000364 -0.707107 0.707107 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -6.557496 37.548607 + endloop + endfacet + facet normal 0.000289 0.800541 -0.599278 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -34.000000 8.557496 24.451393 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000307 -0.800542 0.599277 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001198 0.809614 -0.586961 + outer loop + vertex -7.338006 9.630043 25.948034 + vertex -8.372674 8.493528 24.378292 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000789 0.877679 -0.479249 + outer loop + vertex -7.338006 9.630043 25.948034 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -0.000943 -0.877678 0.479250 + outer loop + vertex -7.218597 -7.743835 35.852356 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.001594 -0.822439 0.568851 + outer loop + vertex -7.218597 -7.743835 35.852356 + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001445 0.904362 -0.426764 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -7.338006 9.630043 25.948034 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -3.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -0.780167 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 1.000000 23.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 4.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -2.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -6.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -5.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -5.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -7.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 7.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 9.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 7.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 2.780168 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 -2.471070 38.207752 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 34.471069 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.stl b/apps/cpu/Multiphase/backup/FlowFocusingSL.stl new file mode 100644 index 0000000000000000000000000000000000000000..c7285063b119d316bc79153c093d3564d1245d41 GIT binary patch literal 22084 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.ast b/apps/cpu/Multiphase/backup/FlowFocusingSS.ast new file mode 100644 index 000000000..83ef2d561 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSS.ast @@ -0,0 +1,3096 @@ +solid Mesh + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -5.000000 31.000000 + vertex 131.000000 -4.825651 29.564106 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -4.825651 29.564106 + vertex 131.000000 -4.312736 28.211660 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -4.312736 28.211660 + vertex 131.000000 -3.491065 27.021263 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -3.491065 27.021263 + vertex 131.000000 -2.408388 26.062098 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -2.408388 26.062098 + vertex 131.000000 -1.127629 25.389902 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 1.723220 25.043747 + vertex 131.000000 3.127629 25.389902 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -2.408388 35.937904 + vertex 131.000000 -3.491065 34.978737 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -3.491065 34.978737 + vertex 131.000000 -4.312736 33.788338 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -4.312736 33.788338 + vertex 131.000000 -4.825651 32.435894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 5.491065 27.021263 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 5.491065 27.021263 + vertex 131.000000 6.312736 28.211660 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 6.825651 32.435894 + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 7.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 1.723220 36.956253 + vertex 131.000000 0.276780 36.956253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 0.276780 36.956253 + vertex 131.000000 -1.127629 36.610096 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 -1.127629 25.389902 + vertex 131.000000 0.276780 25.043747 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 0.276780 25.043747 + vertex 131.000000 1.723220 25.043747 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 1.723220 25.043747 + vertex 131.000000 4.408389 26.062098 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -1.127629 25.389902 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 6.825651 29.564106 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -4.825651 32.435894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 6.825651 32.435894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 6.825651 32.435894 + vertex 131.000000 6.312736 33.788338 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 4.408389 35.937904 + vertex 131.000000 3.127629 36.610096 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 6.825651 32.435894 + endloop + endfacet + facet normal -0.000144 -0.728741 -0.684789 + outer loop + vertex 131.000000 -3.491065 27.021263 + vertex 12.045211 -3.690770 27.258787 + vertex 12.304571 -3.025752 26.551031 + endloop + endfacet + facet normal 0.000247 -0.822984 -0.568065 + outer loop + vertex 131.000000 -3.491065 27.021263 + vertex 131.000000 -4.312736 28.211660 + vertex 12.045211 -3.690770 27.258787 + endloop + endfacet + facet normal 0.000000 0.994252 0.107061 + outer loop + vertex 131.000000 7.000000 31.000000 + vertex 11.392304 7.000000 31.000000 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal -0.000139 -0.604250 -0.796794 + outer loop + vertex 131.000000 -2.408388 26.062098 + vertex 12.304571 -3.025752 26.551031 + vertex 12.565912 -2.198387 25.923552 + endloop + endfacet + facet normal 0.000366 -0.663122 -0.748511 + outer loop + vertex 131.000000 -2.408388 26.062098 + vertex 131.000000 -3.491065 27.021263 + vertex 12.304571 -3.025752 26.551031 + endloop + endfacet + facet normal 0.000037 -0.449324 -0.893369 + outer loop + vertex 131.000000 -1.127629 25.389902 + vertex 12.565912 -2.198387 25.923552 + vertex 12.802445 -1.168476 25.405563 + endloop + endfacet + facet normal -0.000126 0.949009 0.315249 + outer loop + vertex 131.000000 6.825651 32.435894 + vertex 11.470512 6.862455 32.277348 + vertex 11.685072 6.461616 33.484100 + endloop + endfacet + facet normal -0.000030 -0.280319 -0.959907 + outer loop + vertex 131.000000 -1.127629 25.389902 + vertex 12.802445 -1.168476 25.405563 + vertex 12.941537 -0.183087 25.117798 + endloop + endfacet + facet normal 0.000212 -0.464724 -0.885456 + outer loop + vertex 131.000000 -1.127629 25.389902 + vertex 131.000000 -2.408388 26.062098 + vertex 12.565912 -2.198387 25.923552 + endloop + endfacet + facet normal 0.000146 0.992709 0.120537 + outer loop + vertex 131.000000 6.825651 32.435894 + vertex 131.000000 7.000000 31.000000 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal -0.000134 0.876441 0.481510 + outer loop + vertex 131.000000 6.312736 33.788338 + vertex 11.685072 6.461616 33.484100 + vertex 11.896806 6.025896 34.277252 + endloop + endfacet + facet normal 0.000263 0.935016 0.354605 + outer loop + vertex 131.000000 6.312736 33.788338 + vertex 131.000000 6.825651 32.435894 + vertex 11.685072 6.461616 33.484100 + endloop + endfacet + facet normal -0.000238 -0.099067 -0.995081 + outer loop + vertex 131.000000 0.276780 25.043747 + vertex 12.941537 -0.183087 25.117798 + vertex 13.000000 1.000000 25.000000 + endloop + endfacet + facet normal 0.000323 -0.239315 -0.970942 + outer loop + vertex 131.000000 0.276780 25.043747 + vertex 131.000000 -1.127629 25.389902 + vertex 12.941537 -0.183087 25.117798 + endloop + endfacet + facet normal -0.000060 0.790299 0.612722 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 11.896806 6.025896 34.277252 + vertex 12.153856 5.426228 35.050739 + endloop + endfacet + facet normal 0.000077 0.676962 0.736018 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 12.153856 5.426228 35.050739 + vertex 12.425965 4.667058 35.748966 + endloop + endfacet + facet normal 0.000350 0.822984 0.568064 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 6.312736 33.788338 + vertex 11.896806 6.025896 34.277252 + endloop + endfacet + facet normal -0.000320 0.112279 -0.993677 + outer loop + vertex 131.000000 1.723220 25.043747 + vertex 13.000000 1.000000 25.000000 + vertex 12.925056 2.339040 25.151327 + endloop + endfacet + facet normal 0.000371 0.000000 -1.000000 + outer loop + vertex 131.000000 1.723220 25.043747 + vertex 131.000000 0.276780 25.043747 + vertex 13.000000 1.000000 25.000000 + endloop + endfacet + facet normal -0.000189 0.315324 -0.948984 + outer loop + vertex 131.000000 3.127629 25.389902 + vertex 12.925056 2.339040 25.151327 + vertex 12.751836 3.427831 25.513140 + endloop + endfacet + facet normal -0.000181 0.534250 0.845326 + outer loop + vertex 131.000000 4.408389 35.937904 + vertex 12.425965 4.667058 35.748966 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal 0.000364 0.239315 -0.970942 + outer loop + vertex 131.000000 3.127629 25.389902 + vertex 131.000000 1.723220 25.043747 + vertex 12.925056 2.339040 25.151327 + endloop + endfacet + facet normal 0.000254 0.663123 0.748511 + outer loop + vertex 131.000000 4.408389 35.937904 + vertex 131.000000 5.491065 34.978737 + vertex 12.425965 4.667058 35.748966 + endloop + endfacet + facet normal -0.000294 0.354136 0.935194 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 12.688570 3.716124 36.350018 + vertex 12.904691 2.509416 36.807037 + endloop + endfacet + facet normal 0.000097 0.479567 -0.877505 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 12.751836 3.427831 25.513140 + vertex 12.535419 4.306674 25.993414 + endloop + endfacet + facet normal 0.000365 0.464722 0.885457 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 4.408389 35.937904 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal -0.000068 0.613054 -0.790041 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 12.535419 4.306674 25.993414 + vertex 12.303495 5.028771 26.553764 + endloop + endfacet + facet normal 0.000257 0.464724 -0.885456 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 3.127629 25.389902 + vertex 12.751836 3.427831 25.513140 + endloop + endfacet + facet normal -0.000094 0.722932 -0.690919 + outer loop + vertex 131.000000 5.491065 27.021263 + vertex 12.303495 5.028771 26.553764 + vertex 12.073238 5.624218 27.176832 + endloop + endfacet + facet normal 0.000365 0.663122 -0.748511 + outer loop + vertex 131.000000 5.491065 27.021263 + vertex 131.000000 4.408389 26.062098 + vertex 12.303495 5.028771 26.553764 + endloop + endfacet + facet normal 0.000041 0.192387 0.981319 + outer loop + vertex 131.000000 1.723220 36.956253 + vertex 12.904691 2.509416 36.807037 + vertex 12.973638 1.794989 36.947098 + endloop + endfacet + facet normal -0.000037 0.066396 0.997793 + outer loop + vertex 131.000000 1.723220 36.956253 + vertex 12.973638 1.794989 36.947098 + vertex 13.000000 1.000000 37.000000 + endloop + endfacet + facet normal 0.000366 0.239317 0.970942 + outer loop + vertex 131.000000 1.723220 36.956253 + vertex 131.000000 3.127629 36.610096 + vertex 12.904691 2.509416 36.807037 + endloop + endfacet + facet normal 0.000123 0.825977 -0.563703 + outer loop + vertex 131.000000 6.312736 28.211660 + vertex 12.073238 5.624218 27.176832 + vertex 11.792848 6.245421 28.087002 + endloop + endfacet + facet normal -0.000107 0.919104 -0.394015 + outer loop + vertex 131.000000 6.312736 28.211660 + vertex 11.792848 6.245421 28.087002 + vertex 11.545403 6.726647 29.209606 + endloop + endfacet + facet normal -0.000320 -0.112281 0.993676 + outer loop + vertex 131.000000 0.276780 36.956253 + vertex 13.000000 1.000000 37.000000 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal 0.000178 0.822984 -0.568065 + outer loop + vertex 131.000000 6.312736 28.211660 + vertex 131.000000 5.491065 27.021263 + vertex 12.073238 5.624218 27.176832 + endloop + endfacet + facet normal 0.000371 -0.000000 1.000000 + outer loop + vertex 131.000000 0.276780 36.956253 + vertex 131.000000 1.723220 36.956253 + vertex 13.000000 1.000000 37.000000 + endloop + endfacet + facet normal -0.000138 0.974208 -0.225651 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 11.545403 6.726647 29.209606 + vertex 11.432029 6.930664 30.090483 + endloop + endfacet + facet normal 0.000277 0.935016 -0.354605 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 6.312736 28.211660 + vertex 11.545403 6.726647 29.209606 + endloop + endfacet + facet normal 0.000363 -0.239317 0.970942 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 0.276780 36.956253 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal -0.000188 -0.315321 0.948985 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 12.925056 -0.339040 36.848671 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.000000 0.997107 -0.076013 + outer loop + vertex 131.000000 7.000000 31.000000 + vertex 11.432029 6.930664 30.090483 + vertex 11.392304 7.000000 31.000000 + endloop + endfacet + facet normal 0.000341 0.992709 -0.120537 + outer loop + vertex 131.000000 7.000000 31.000000 + vertex 131.000000 6.825651 29.564106 + vertex 11.432029 6.930664 30.090483 + endloop + endfacet + facet normal 0.000257 -0.464722 0.885457 + outer loop + vertex 131.000000 -2.408388 35.937904 + vertex 131.000000 -1.127629 36.610096 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.000097 -0.479567 0.877505 + outer loop + vertex 131.000000 -2.408388 35.937904 + vertex 12.751836 -1.427831 36.486862 + vertex 12.535419 -2.306674 36.006588 + endloop + endfacet + facet normal -0.000068 -0.613055 0.790040 + outer loop + vertex 131.000000 -2.408388 35.937904 + vertex 12.535419 -2.306674 36.006588 + vertex 12.303495 -3.028771 35.446236 + endloop + endfacet + facet normal -0.000094 -0.722931 0.690920 + outer loop + vertex 131.000000 -3.491065 34.978737 + vertex 12.303495 -3.028771 35.446236 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal 0.000365 -0.663123 0.748511 + outer loop + vertex 131.000000 -3.491065 34.978737 + vertex 131.000000 -2.408388 35.937904 + vertex 12.303495 -3.028771 35.446236 + endloop + endfacet + facet normal 0.000123 -0.825978 0.563703 + outer loop + vertex 131.000000 -4.312736 33.788338 + vertex 12.073238 -3.624218 34.823170 + vertex 11.792848 -4.245421 33.912998 + endloop + endfacet + facet normal -0.000107 -0.919104 0.394015 + outer loop + vertex 131.000000 -4.312736 33.788338 + vertex 11.792848 -4.245421 33.912998 + vertex 11.545403 -4.726647 32.790394 + endloop + endfacet + facet normal 0.000178 -0.822984 0.568064 + outer loop + vertex 131.000000 -4.312736 33.788338 + vertex 131.000000 -3.491065 34.978737 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal -0.000222 -0.979996 0.199016 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 11.545403 -4.726647 32.790394 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.000277 -0.935016 0.354605 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -4.312736 33.788338 + vertex 11.545403 -4.726647 32.790394 + endloop + endfacet + facet normal -0.000136 -0.999777 0.021114 + outer loop + vertex 131.000000 -5.000000 31.000000 + vertex 11.408753 -4.971420 31.584927 + vertex 11.397617 -4.990790 30.667681 + endloop + endfacet + facet normal 0.000352 -0.992709 0.120537 + outer loop + vertex 131.000000 -5.000000 31.000000 + vertex 131.000000 -4.825651 32.435894 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.000145 -0.991166 -0.132629 + outer loop + vertex 131.000000 -4.825651 29.564106 + vertex 11.397617 -4.990790 30.667681 + vertex 11.467756 -4.867373 29.745436 + endloop + endfacet + facet normal -0.000095 -0.958956 -0.283556 + outer loop + vertex 131.000000 -4.825651 29.564106 + vertex 11.467756 -4.867373 29.745436 + vertex 11.609928 -4.606196 28.862112 + endloop + endfacet + facet normal 0.000258 -0.992709 -0.120537 + outer loop + vertex 131.000000 -4.825651 29.564106 + vertex 131.000000 -5.000000 31.000000 + vertex 11.397617 -4.990790 30.667681 + endloop + endfacet + facet normal -0.000103 -0.904303 -0.426892 + outer loop + vertex 131.000000 -4.312736 28.211660 + vertex 11.609928 -4.606196 28.862112 + vertex 11.808237 -4.213636 28.030489 + endloop + endfacet + facet normal 0.000164 -0.827892 -0.560887 + outer loop + vertex 131.000000 -4.312736 28.211660 + vertex 11.808237 -4.213636 28.030489 + vertex 12.045211 -3.690770 27.258787 + endloop + endfacet + facet normal 0.000366 -0.935016 -0.354605 + outer loop + vertex 131.000000 -4.312736 28.211660 + vertex 131.000000 -4.825651 29.564106 + vertex 11.609928 -4.606196 28.862112 + endloop + endfacet + facet normal 0.997065 0.076549 -0.001150 + outer loop + vertex 12.925056 2.339040 25.151327 + vertex 13.000000 1.000000 1.000000 + vertex 12.859365 2.831791 1.000000 + endloop + endfacet + facet normal 0.998437 0.055881 0.000000 + outer loop + vertex 12.925056 2.339040 25.151327 + vertex 13.000000 1.000000 25.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.999451 0.033143 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 13.000000 1.000000 37.000000 + vertex 12.973638 1.794989 36.947098 + endloop + endfacet + facet normal 0.973695 0.227853 -0.001269 + outer loop + vertex 12.751836 3.427831 25.513140 + vertex 12.859365 2.831791 1.000000 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.987606 0.156951 0.000516 + outer loop + vertex 12.751836 3.427831 25.513140 + vertex 12.925056 2.339040 25.151327 + vertex 12.859365 2.831791 1.000000 + endloop + endfacet + facet normal 0.970908 0.239453 -0.000669 + outer loop + vertex 12.535419 4.306674 25.993414 + vertex 12.751836 3.427831 25.513140 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.997065 0.076549 0.001437 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 13.000000 1.000000 61.000000 + vertex 12.973638 1.794989 36.947098 + endloop + endfacet + facet normal 0.984370 0.176110 -0.000502 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 12.904691 2.509416 36.807037 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal 0.995364 0.096174 0.000583 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 12.973638 1.794989 36.947098 + vertex 12.904691 2.509416 36.807037 + endloop + endfacet + facet normal 0.952150 0.305632 0.000233 + outer loop + vertex 12.303495 5.028771 26.553764 + vertex 12.535419 4.306674 25.993414 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.927502 0.373817 -0.001309 + outer loop + vertex 12.073238 5.624218 27.176832 + vertex 12.440757 4.620647 1.000000 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.932425 0.361364 -0.000763 + outer loop + vertex 12.073238 5.624218 27.176832 + vertex 12.303495 5.028771 26.553764 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.941337 0.337467 0.000069 + outer loop + vertex 12.440757 4.620647 61.000000 + vertex 12.425965 4.667058 35.748966 + vertex 12.153856 5.426228 35.050739 + endloop + endfacet + facet normal 0.963933 0.266146 -0.000075 + outer loop + vertex 12.440757 4.620647 61.000000 + vertex 12.688570 3.716124 36.350018 + vertex 12.425965 4.667058 35.748966 + endloop + endfacet + facet normal 0.973694 0.227853 0.001428 + outer loop + vertex 12.440757 4.620647 61.000000 + vertex 12.859365 2.831791 61.000000 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal 0.911398 0.411527 -0.000104 + outer loop + vertex 11.792848 6.245421 28.087002 + vertex 12.073238 5.624218 27.176832 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.889378 0.457173 0.000061 + outer loop + vertex 11.545403 6.726647 29.209606 + vertex 11.792848 6.245421 28.087002 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.873203 0.487356 -0.000489 + outer loop + vertex 11.432029 6.930664 30.090483 + vertex 11.545403 6.726647 29.209606 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.859569 0.511018 -0.001133 + outer loop + vertex 11.432029 6.930664 30.090483 + vertex 11.753986 6.324638 1.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.860696 0.509118 -0.001220 + outer loop + vertex 11.392304 7.000000 31.000000 + vertex 11.432029 6.930664 30.090483 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.881462 0.472256 0.000143 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 11.685072 6.461616 33.484100 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal 0.899484 0.436954 -0.000078 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 11.896806 6.025896 34.277252 + vertex 11.685072 6.461616 33.484100 + endloop + endfacet + facet normal 0.918883 0.394529 0.000500 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 12.153856 5.426228 35.050739 + vertex 11.896806 6.025896 34.277252 + endloop + endfacet + facet normal 0.927501 0.373817 0.001350 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 12.440757 4.620647 61.000000 + vertex 12.153856 5.426228 35.050739 + endloop + endfacet + facet normal 0.842819 0.538197 0.000000 + outer loop + vertex 10.815152 7.903824 61.000000 + vertex 11.392304 7.000000 31.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.863566 0.504234 0.001422 + outer loop + vertex 10.815152 7.903824 61.000000 + vertex 11.470512 6.862455 32.277348 + vertex 11.392304 7.000000 31.000000 + endloop + endfacet + facet normal 0.859569 0.511018 0.001085 + outer loop + vertex 10.815152 7.903824 61.000000 + vertex 11.753986 6.324638 61.000000 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal 0.771489 0.636242 0.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 10.815152 7.903824 61.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.771489 0.636242 0.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 10.815152 7.903824 1.000000 + vertex 9.646259 9.321190 1.000000 + endloop + endfacet + facet normal 0.665326 0.746553 0.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 9.646259 9.321190 1.000000 + vertex 8.274705 10.543514 1.000000 + endloop + endfacet + facet normal 0.665326 0.746553 0.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 9.646259 9.321190 61.000000 + vertex 9.646259 9.321190 1.000000 + endloop + endfacet + facet normal 0.543567 0.839365 0.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 8.274705 10.543514 1.000000 + vertex 6.732638 11.542147 1.000000 + endloop + endfacet + facet normal 0.543567 0.839365 0.000000 + outer loop + vertex 6.732638 11.542147 61.000000 + vertex 8.274705 10.543514 61.000000 + vertex 6.732638 11.542147 1.000000 + endloop + endfacet + facet normal 0.409069 0.912504 0.000000 + outer loop + vertex 5.056202 12.293680 61.000000 + vertex 6.732638 11.542147 1.000000 + vertex 5.056202 12.293680 1.000000 + endloop + endfacet + facet normal 0.409069 0.912504 0.000000 + outer loop + vertex 5.056202 12.293680 61.000000 + vertex 6.732638 11.542147 61.000000 + vertex 6.732638 11.542147 1.000000 + endloop + endfacet + facet normal 0.264982 0.964253 0.000000 + outer loop + vertex 3.284693 12.780499 61.000000 + vertex 5.056202 12.293680 1.000000 + vertex 3.284693 12.780499 1.000000 + endloop + endfacet + facet normal 0.264982 0.964253 0.000000 + outer loop + vertex 3.284693 12.780499 61.000000 + vertex 5.056202 12.293680 61.000000 + vertex 5.056202 12.293680 1.000000 + endloop + endfacet + facet normal 0.114683 0.993402 0.000000 + outer loop + vertex 1.459633 12.991194 61.000000 + vertex 3.284693 12.780499 1.000000 + vertex 1.459633 12.991194 1.000000 + endloop + endfacet + facet normal 0.114683 0.993402 0.000000 + outer loop + vertex 1.459633 12.991194 61.000000 + vertex 3.284693 12.780499 61.000000 + vertex 3.284693 12.780499 1.000000 + endloop + endfacet + facet normal -0.038303 0.999266 0.000000 + outer loop + vertex -0.376201 12.920825 61.000000 + vertex 1.459633 12.991194 1.000000 + vertex -0.376201 12.920825 1.000000 + endloop + endfacet + facet normal -0.038303 0.999266 0.000000 + outer loop + vertex -0.376201 12.920825 61.000000 + vertex 1.459633 12.991194 61.000000 + vertex 1.459633 12.991194 1.000000 + endloop + endfacet + facet normal -0.190391 0.981708 0.000000 + outer loop + vertex -2.179778 12.571042 61.000000 + vertex -0.376201 12.920825 1.000000 + vertex -2.179778 12.571042 1.000000 + endloop + endfacet + facet normal -0.190391 0.981708 0.000000 + outer loop + vertex -2.179778 12.571042 61.000000 + vertex -0.376201 12.920825 61.000000 + vertex -0.376201 12.920825 1.000000 + endloop + endfacet + facet normal -0.338017 0.941140 0.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -2.179778 12.571042 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal -0.338017 0.941140 0.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -2.179778 12.571042 61.000000 + vertex -2.179778 12.571042 1.000000 + endloop + endfacet + facet normal -0.477720 0.878512 0.000000 + outer loop + vertex -5.522810 11.072385 61.000000 + vertex -3.908824 11.950044 1.000000 + vertex -5.522810 11.072385 1.000000 + endloop + endfacet + facet normal -0.477720 0.878512 0.000000 + outer loop + vertex -5.522810 11.072385 61.000000 + vertex -3.908824 11.950044 61.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal -0.720521 0.693432 -0.000907 + outer loop + vertex -7.944272 9.000000 31.000000 + vertex -6.983908 9.958638 1.000000 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.746770 0.665082 -0.000288 + outer loop + vertex -8.023660 8.910345 29.805666 + vertex -7.944272 9.000000 31.000000 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.606225 0.795293 0.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -5.522810 11.072385 1.000000 + vertex -6.983908 9.958638 1.000000 + endloop + endfacet + facet normal -0.606225 0.795293 0.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -5.522810 11.072385 61.000000 + vertex -5.522810 11.072385 1.000000 + endloop + endfacet + facet normal -0.706471 0.707742 0.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -6.983908 9.958638 1.000000 + vertex -7.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.761081 0.648657 -0.000014 + outer loop + vertex -8.241260 8.655006 28.676022 + vertex -8.023660 8.910345 29.805666 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.784851 0.619684 0.000021 + outer loop + vertex -8.589377 8.214142 27.542231 + vertex -8.241260 8.655006 28.676022 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.817929 0.575318 -0.001176 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -8.257870 8.634910 1.000000 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal -0.816364 0.577536 -0.001041 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -8.589377 8.214142 27.542231 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.749474 0.662033 0.000222 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -7.944272 9.000000 31.000000 + vertex -8.070408 8.856698 32.507416 + endloop + endfacet + facet normal -0.770060 0.637972 -0.000100 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -8.070408 8.856698 32.507416 + vertex -8.402561 8.455994 33.899681 + endloop + endfacet + facet normal -0.802980 0.596006 0.000352 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -8.402561 8.455994 33.899681 + vertex -8.866960 7.829576 35.166161 + endloop + endfacet + facet normal -0.720521 0.693432 0.000907 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -6.983908 9.958638 61.000000 + vertex -7.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.854805 0.518950 0.000317 + outer loop + vertex -9.482093 6.841722 25.534264 + vertex -9.014555 7.611255 26.495411 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal -0.896165 0.443720 -0.001060 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -9.314836 7.132224 1.000000 + vertex -10.130030 5.485805 1.000000 + endloop + endfacet + facet normal -0.894187 0.447693 -0.000795 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -9.482093 6.841722 25.534264 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal -0.845571 0.533863 -0.000249 + outer loop + vertex -9.314836 7.132224 61.000000 + vertex -8.866960 7.829576 35.166161 + vertex -9.405215 6.977583 36.316814 + endloop + endfacet + facet normal -0.817928 0.575318 0.001350 + outer loop + vertex -9.314836 7.132224 61.000000 + vertex -8.257870 8.634910 61.000000 + vertex -8.866960 7.829576 35.166161 + endloop + endfacet + facet normal -0.891613 0.452798 0.000428 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -9.314836 7.132224 61.000000 + vertex -9.405215 6.977583 36.316814 + endloop + endfacet + facet normal -0.953395 0.301720 -0.001450 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -10.130030 5.485805 1.000000 + vertex -10.684345 3.734242 1.000000 + endloop + endfacet + facet normal -0.931917 0.362671 0.000536 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -9.963696 5.878253 24.659445 + vertex -10.130030 5.485805 1.000000 + endloop + endfacet + facet normal -0.960186 0.279362 -0.000299 + outer loop + vertex -10.651127 3.872498 23.533491 + vertex -10.374597 4.823421 23.972807 + vertex -10.684345 3.734242 1.000000 + endloop + endfacet + facet normal -0.938332 0.345735 -0.000829 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -9.968540 5.867354 37.348927 + vertex -10.501171 4.423895 38.230278 + endloop + endfacet + facet normal -0.896165 0.443720 0.001039 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -9.314836 7.132224 61.000000 + vertex -9.968540 5.867354 37.348927 + endloop + endfacet + facet normal -0.988279 0.152649 -0.001582 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -10.684345 3.734242 1.000000 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal -0.980261 0.197709 0.000232 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -10.651127 3.872498 23.533491 + vertex -10.684345 3.734242 1.000000 + endloop + endfacet + facet normal -0.993789 0.111277 0.000217 + outer loop + vertex -10.973373 1.798958 23.039995 + vertex -10.853421 2.869869 23.221594 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal -0.953395 0.301720 0.001469 + outer loop + vertex -10.684345 3.734242 61.000000 + vertex -10.130030 5.485805 61.000000 + vertex -10.501171 4.423895 38.230278 + endloop + endfacet + facet normal -0.973957 0.226732 -0.000968 + outer loop + vertex -10.684345 3.734242 61.000000 + vertex -10.501171 4.423895 38.230278 + vertex -10.829480 3.015787 38.741875 + endloop + endfacet + facet normal -0.999961 0.008863 -0.000341 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -10.973373 1.798958 23.039995 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000947 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -10.964789 1.918591 1.000000 + vertex -10.964789 0.081409 1.000000 + endloop + endfacet + facet normal -0.988279 0.152649 0.001517 + outer loop + vertex -10.964789 1.918591 61.000000 + vertex -10.684345 3.734242 61.000000 + vertex -10.829480 3.015787 38.741875 + endloop + endfacet + facet normal -0.994316 0.106462 -0.000797 + outer loop + vertex -10.964789 1.918591 61.000000 + vertex -10.829480 3.015787 38.741875 + vertex -10.987958 1.537464 38.981926 + endloop + endfacet + facet normal -0.994792 -0.101926 0.000594 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -10.985648 0.413291 23.021544 + vertex -10.964789 0.081409 1.000000 + endloop + endfacet + facet normal -0.988279 -0.152649 -0.001583 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -10.964789 0.081409 1.000000 + vertex -10.684345 -1.734242 1.000000 + endloop + endfacet + facet normal -0.999999 0.000000 0.001052 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.964789 1.918591 61.000000 + vertex -10.987958 1.537464 38.981926 + endloop + endfacet + facet normal -0.999972 -0.007519 0.000555 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.987958 1.537464 38.981926 + vertex -10.978530 0.282484 38.967758 + endloop + endfacet + facet normal -0.994802 -0.101828 -0.000309 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.978530 0.282484 38.967758 + vertex -10.875323 -0.725314 38.811741 + endloop + endfacet + facet normal -0.977250 -0.212090 0.000845 + outer loop + vertex -10.557199 -2.229729 23.680925 + vertex -10.855250 -0.858236 23.218807 + vertex -10.684345 -1.734242 1.000000 + endloop + endfacet + facet normal -0.953396 -0.301720 -0.001247 + outer loop + vertex -10.130030 -3.485805 1.000000 + vertex -10.557199 -2.229729 23.680925 + vertex -10.684345 -1.734242 1.000000 + endloop + endfacet + facet normal -0.948898 -0.315582 -0.000394 + outer loop + vertex -10.191252 -3.330807 24.273626 + vertex -10.557199 -2.229729 23.680925 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal -0.981512 -0.191401 -0.000255 + outer loop + vertex -10.684345 -1.734242 61.000000 + vertex -10.875323 -0.725314 38.811741 + vertex -10.653047 -1.864698 38.469505 + endloop + endfacet + facet normal -0.988279 -0.152649 0.001565 + outer loop + vertex -10.684345 -1.734242 61.000000 + vertex -10.964789 0.081409 61.000000 + vertex -10.875323 -0.725314 38.811741 + endloop + endfacet + facet normal -0.959093 -0.283090 0.000307 + outer loop + vertex -10.341965 -2.919164 37.974251 + vertex -10.684345 -1.734242 61.000000 + vertex -10.653047 -1.864698 38.469505 + endloop + endfacet + facet normal -0.916637 -0.399720 0.000251 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -10.191252 -3.330807 24.273626 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal -0.896165 -0.443719 -0.001459 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -10.130030 -3.485805 1.000000 + vertex -9.314836 -5.132224 1.000000 + endloop + endfacet + facet normal -0.927306 -0.374303 -0.000676 + outer loop + vertex -10.130030 -3.485805 61.000000 + vertex -10.341965 -2.919164 37.974251 + vertex -9.880194 -4.061757 37.195049 + endloop + endfacet + facet normal -0.953396 -0.301720 0.001350 + outer loop + vertex -10.130030 -3.485805 61.000000 + vertex -10.684345 -1.734242 61.000000 + vertex -10.341965 -2.919164 37.974251 + endloop + endfacet + facet normal -0.877659 -0.479286 0.000203 + outer loop + vertex -9.252076 -5.236581 25.989506 + vertex -9.786845 -4.257754 24.970406 + vertex -9.314836 -5.132224 1.000000 + endloop + endfacet + facet normal -0.817928 -0.575318 -0.001329 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -9.314836 -5.132224 1.000000 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.833934 -0.551865 -0.000210 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -9.252076 -5.236581 25.989506 + vertex -9.314836 -5.132224 1.000000 + endloop + endfacet + facet normal -0.885356 -0.464913 0.000121 + outer loop + vertex -9.314836 -5.132224 61.000000 + vertex -9.880194 -4.061757 37.195049 + vertex -9.345053 -5.081109 36.198086 + endloop + endfacet + facet normal -0.841635 -0.540048 -0.000088 + outer loop + vertex -9.314836 -5.132224 61.000000 + vertex -9.345053 -5.081109 36.198086 + vertex -8.837354 -5.872151 35.095551 + endloop + endfacet + facet normal -0.896165 -0.443719 0.001330 + outer loop + vertex -9.314836 -5.132224 61.000000 + vertex -10.130030 -3.485805 61.000000 + vertex -9.880194 -4.061757 37.195049 + endloop + endfacet + facet normal -0.795211 -0.606333 -0.000138 + outer loop + vertex -8.329084 -6.547727 28.348244 + vertex -8.751478 -5.993474 27.115244 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.765583 -0.643337 0.000057 + outer loop + vertex -8.039007 -6.892804 29.694763 + vertex -8.329084 -6.547727 28.348244 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.720521 -0.693432 -0.000901 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -8.257870 -6.634909 1.000000 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal -0.747545 -0.664211 -0.000268 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -8.039007 -6.892804 29.694763 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.801571 -0.597900 0.000326 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -8.837354 -5.872151 35.095551 + vertex -8.399053 -6.460416 33.888287 + endloop + endfacet + facet normal -0.770308 -0.637672 -0.000093 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -8.399053 -6.460416 33.888287 + vertex -8.080567 -6.844954 32.567387 + endloop + endfacet + facet normal -0.750153 -0.661264 0.000207 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -8.080567 -6.844954 32.567387 + vertex -7.945369 -6.998773 31.140100 + endloop + endfacet + facet normal -0.817928 -0.575318 0.001357 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -9.314836 -5.132224 61.000000 + vertex -8.837354 -5.872151 35.095551 + endloop + endfacet + facet normal -0.720521 -0.693432 0.000909 + outer loop + vertex -6.983908 -7.958639 61.000000 + vertex -8.257870 -6.634909 61.000000 + vertex -7.945369 -6.998773 31.140100 + endloop + endfacet + facet normal -0.706519 -0.707694 -0.000000 + outer loop + vertex -6.983908 -7.958639 61.000000 + vertex -7.945369 -6.998773 31.140100 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal -0.606225 -0.795293 -0.000000 + outer loop + vertex -5.522810 -9.072385 61.000000 + vertex -6.983908 -7.958639 1.000000 + vertex -5.522810 -9.072385 1.000000 + endloop + endfacet + facet normal -0.606225 -0.795293 0.000000 + outer loop + vertex -5.522810 -9.072385 61.000000 + vertex -6.983908 -7.958639 61.000000 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal -0.477720 -0.878512 -0.000000 + outer loop + vertex -3.908824 -9.950044 61.000000 + vertex -5.522810 -9.072385 1.000000 + vertex -3.908824 -9.950044 1.000000 + endloop + endfacet + facet normal -0.477720 -0.878512 0.000000 + outer loop + vertex -3.908824 -9.950044 61.000000 + vertex -5.522810 -9.072385 61.000000 + vertex -5.522810 -9.072385 1.000000 + endloop + endfacet + facet normal -0.338017 -0.941140 -0.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -3.908824 -9.950044 1.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal -0.338017 -0.941140 0.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -3.908824 -9.950044 61.000000 + vertex -3.908824 -9.950044 1.000000 + endloop + endfacet + facet normal -0.190391 -0.981708 -0.000000 + outer loop + vertex -0.376201 -10.920825 61.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -0.376201 -10.920825 1.000000 + endloop + endfacet + facet normal -0.190391 -0.981708 0.000000 + outer loop + vertex -0.376201 -10.920825 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal -0.038303 -0.999266 -0.000000 + outer loop + vertex 1.459633 -10.991194 61.000000 + vertex -0.376201 -10.920825 1.000000 + vertex 1.459633 -10.991194 1.000000 + endloop + endfacet + facet normal -0.038303 -0.999266 0.000000 + outer loop + vertex 1.459633 -10.991194 61.000000 + vertex -0.376201 -10.920825 61.000000 + vertex -0.376201 -10.920825 1.000000 + endloop + endfacet + facet normal 0.114683 -0.993402 0.000000 + outer loop + vertex 3.284693 -10.780499 61.000000 + vertex 1.459633 -10.991194 61.000000 + vertex 1.459633 -10.991194 1.000000 + endloop + endfacet + facet normal 0.114683 -0.993402 0.000000 + outer loop + vertex 3.284693 -10.780499 61.000000 + vertex 1.459633 -10.991194 1.000000 + vertex 3.284693 -10.780499 1.000000 + endloop + endfacet + facet normal 0.264982 -0.964253 0.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex 3.284693 -10.780499 61.000000 + vertex 3.284693 -10.780499 1.000000 + endloop + endfacet + facet normal 0.264982 -0.964253 0.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex 3.284693 -10.780499 1.000000 + vertex 5.056202 -10.293680 1.000000 + endloop + endfacet + facet normal 0.409069 -0.912504 0.000000 + outer loop + vertex 6.732638 -9.542147 61.000000 + vertex 5.056202 -10.293680 61.000000 + vertex 5.056202 -10.293680 1.000000 + endloop + endfacet + facet normal 0.409069 -0.912504 0.000000 + outer loop + vertex 6.732638 -9.542147 61.000000 + vertex 5.056202 -10.293680 1.000000 + vertex 6.732638 -9.542147 1.000000 + endloop + endfacet + facet normal 0.543567 -0.839365 0.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex 6.732638 -9.542147 61.000000 + vertex 6.732638 -9.542147 1.000000 + endloop + endfacet + facet normal 0.543567 -0.839365 0.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex 6.732638 -9.542147 1.000000 + vertex 8.274705 -8.543514 1.000000 + endloop + endfacet + facet normal 0.665326 -0.746553 0.000000 + outer loop + vertex 9.646259 -7.321190 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 8.274705 -8.543514 1.000000 + endloop + endfacet + facet normal 0.665326 -0.746553 0.000000 + outer loop + vertex 9.646259 -7.321190 61.000000 + vertex 8.274705 -8.543514 1.000000 + vertex 9.646259 -7.321190 1.000000 + endloop + endfacet + facet normal 0.864531 -0.502578 -0.001506 + outer loop + vertex 11.467756 -4.867373 29.745436 + vertex 11.397617 -4.990790 30.667681 + vertex 10.815152 -5.903824 1.000000 + endloop + endfacet + facet normal 0.859569 -0.511018 -0.001089 + outer loop + vertex 11.467756 -4.867373 29.745436 + vertex 10.815152 -5.903824 1.000000 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.877876 -0.478887 -0.000300 + outer loop + vertex 11.609928 -4.606196 28.862112 + vertex 11.467756 -4.867373 29.745436 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.852959 -0.521978 0.000667 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 11.397617 -4.990790 30.667681 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.771489 -0.636242 0.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 9.646259 -7.321190 61.000000 + vertex 9.646259 -7.321190 1.000000 + endloop + endfacet + facet normal 0.843057 -0.537824 0.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 10.815152 -5.903824 1.000000 + vertex 11.397617 -4.990790 30.667681 + endloop + endfacet + facet normal 0.771489 -0.636242 0.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 9.646259 -7.321190 1.000000 + vertex 10.815152 -5.903824 1.000000 + endloop + endfacet + facet normal 0.892625 -0.450800 0.000060 + outer loop + vertex 11.808237 -4.213636 28.030489 + vertex 11.609928 -4.606196 28.862112 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.910747 -0.412964 -0.000132 + outer loop + vertex 12.045211 -3.690770 27.258787 + vertex 11.808237 -4.213636 28.030489 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.927502 -0.373817 -0.001263 + outer loop + vertex 12.045211 -3.690770 27.258787 + vertex 11.753986 -4.324638 1.000000 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.931361 -0.364096 -0.000809 + outer loop + vertex 12.304571 -3.025752 26.551031 + vertex 12.045211 -3.690770 27.258787 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.911398 -0.411527 0.000104 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 11.792848 -4.245421 33.912998 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal 0.889378 -0.457173 -0.000061 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 11.545403 -4.726647 32.790394 + vertex 11.792848 -4.245421 33.912998 + endloop + endfacet + facet normal 0.872043 -0.489429 0.000527 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 11.408753 -4.971420 31.584927 + vertex 11.545403 -4.726647 32.790394 + endloop + endfacet + facet normal 0.859569 -0.511018 0.001148 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 10.815152 -5.903824 61.000000 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.953628 -0.300988 0.000311 + outer loop + vertex 12.565912 -2.198387 25.923552 + vertex 12.304571 -3.025752 26.551031 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.973695 -0.227854 -0.001029 + outer loop + vertex 12.859365 -0.831791 1.000000 + vertex 12.565912 -2.198387 25.923552 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.974536 -0.224228 -0.000820 + outer loop + vertex 12.802445 -1.168476 25.405563 + vertex 12.565912 -2.198387 25.923552 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.970908 -0.239453 0.000669 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 12.535419 -2.306674 36.006588 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.952150 -0.305632 -0.000233 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 12.303495 -3.028771 35.446236 + vertex 12.535419 -2.306674 36.006588 + endloop + endfacet + facet normal 0.932425 -0.361363 0.000763 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 12.073238 -3.624218 34.823170 + vertex 12.303495 -3.028771 35.446236 + endloop + endfacet + facet normal 0.927502 -0.373817 0.001309 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 11.753986 -4.324638 61.000000 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal 0.997065 -0.076549 -0.001338 + outer loop + vertex 12.941537 -0.183087 25.117798 + vertex 12.859365 -0.831791 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.990200 -0.139659 0.000383 + outer loop + vertex 12.941537 -0.183087 25.117798 + vertex 12.802445 -1.168476 25.405563 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.998781 -0.049356 0.000000 + outer loop + vertex 13.000000 1.000000 25.000000 + vertex 12.941537 -0.183087 25.117798 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.987606 -0.156951 -0.000516 + outer loop + vertex 12.859365 -0.831791 61.000000 + vertex 12.751836 -1.427831 36.486862 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal 0.973695 -0.227853 0.001269 + outer loop + vertex 12.859365 -0.831791 61.000000 + vertex 12.440757 -2.620647 61.000000 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.998437 -0.055881 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.925056 -0.339040 36.848671 + vertex 13.000000 1.000000 37.000000 + endloop + endfacet + facet normal 0.997065 -0.076549 0.001150 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.859365 -0.831791 61.000000 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 2.831791 1.000000 + vertex 11.753986 6.324638 1.000000 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.257870 -6.634909 1.000000 + vertex -5.522810 -9.072385 1.000000 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.314836 -5.132224 1.000000 + vertex -10.130030 -3.485805 1.000000 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 6.732638 11.542147 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 5.056202 12.293680 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 3.284693 12.780499 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 5.056202 12.293680 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 3.284693 12.780499 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -5.522810 -9.072385 1.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -3.908824 -9.950044 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 8.274705 -8.543514 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.257870 -6.634909 1.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -5.522810 -9.072385 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -3.908824 11.950044 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.130030 -3.485805 1.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 -8.543514 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 11.753986 -4.324638 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 11.753986 6.324638 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 -0.831791 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 12.859365 2.831791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 2.831791 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 10.543514 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.684345 -1.734242 1.000000 + vertex -10.964789 0.081409 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 1.459633 -10.991194 1.000000 + vertex -0.376201 -10.920825 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.459633 -10.991194 1.000000 + vertex 5.056202 -10.293680 1.000000 + vertex 3.284693 -10.780499 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 5.056202 -10.293680 1.000000 + vertex 1.459633 -10.991194 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -10.684345 3.734242 1.000000 + vertex -10.130030 5.485805 1.000000 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.964789 1.918591 1.000000 + vertex -10.130030 5.485805 1.000000 + vertex -10.964789 0.081409 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.964789 0.081409 1.000000 + vertex -10.130030 5.485805 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 5.056202 -10.293680 1.000000 + vertex 8.274705 -8.543514 1.000000 + vertex 6.732638 -9.542147 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 8.274705 -8.543514 1.000000 + vertex 5.056202 -10.293680 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -8.257870 8.634910 1.000000 + vertex -6.983908 9.958638 1.000000 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -9.314836 7.132224 1.000000 + vertex -6.983908 9.958638 1.000000 + vertex -10.130030 5.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.130030 5.485805 1.000000 + vertex -6.983908 9.958638 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 -8.543514 1.000000 + vertex 10.815152 -5.903824 1.000000 + vertex 9.646259 -7.321190 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 -8.543514 1.000000 + vertex 11.753986 -4.324638 1.000000 + vertex 10.815152 -5.903824 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -5.522810 11.072385 1.000000 + vertex -3.908824 11.950044 1.000000 + vertex -6.983908 9.958638 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.130030 -3.485805 1.000000 + vertex -3.908824 11.950044 1.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -6.983908 9.958638 1.000000 + vertex -3.908824 11.950044 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 11.753986 -4.324638 1.000000 + vertex 12.859365 -0.831791 1.000000 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -2.179778 12.571042 1.000000 + vertex -0.376201 12.920825 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -0.376201 12.920825 1.000000 + vertex 1.459633 12.991194 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 -0.831791 1.000000 + vertex 12.859365 2.831791 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 1.459633 12.991194 1.000000 + vertex 3.284693 12.780499 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 12.859365 2.831791 61.000000 + vertex 12.440757 4.620647 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -5.522810 -9.072385 61.000000 + vertex -8.257870 -6.634909 61.000000 + vertex -6.983908 -7.958639 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 -3.485805 61.000000 + vertex -9.314836 -5.132224 61.000000 + vertex -8.257870 -6.634909 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 6.732638 11.542147 61.000000 + vertex 5.056202 12.293680 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 3.284693 12.780499 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 5.056202 12.293680 61.000000 + vertex 3.284693 12.780499 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -5.522810 -9.072385 61.000000 + vertex -3.908824 -9.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex 8.274705 -8.543514 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -8.257870 -6.634909 61.000000 + vertex -5.522810 -9.072385 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex -3.908824 11.950044 61.000000 + vertex -2.179778 -10.571042 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -10.130030 -3.485805 61.000000 + vertex -8.257870 -6.634909 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 11.753986 -4.324638 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 11.753986 -4.324638 61.000000 + vertex 12.859365 -0.831791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 11.753986 6.324638 61.000000 + vertex 10.815152 7.903824 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 12.859365 -0.831791 61.000000 + vertex 12.859365 2.831791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 12.859365 2.831791 61.000000 + vertex 11.753986 6.324638 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 8.274705 10.543514 61.000000 + vertex 12.859365 -0.831791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.684345 -1.734242 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.459633 -10.991194 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex -0.376201 -10.920825 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex 1.459633 -10.991194 61.000000 + vertex 3.284693 -10.780499 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex 1.459633 -10.991194 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -10.684345 3.734242 61.000000 + vertex -10.964789 1.918591 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -10.964789 1.918591 61.000000 + vertex -10.964789 0.081409 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -10.964789 0.081409 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex 5.056202 -10.293680 61.000000 + vertex 6.732638 -9.542147 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex 5.056202 -10.293680 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -8.257870 8.634910 61.000000 + vertex -9.314836 7.132224 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -9.314836 7.132224 61.000000 + vertex -10.130030 5.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -10.130030 5.485805 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 9.646259 -7.321190 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 10.815152 -5.903824 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -5.522810 11.072385 61.000000 + vertex -6.983908 9.958638 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -10.130030 -3.485805 61.000000 + vertex -2.179778 -10.571042 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -6.983908 9.958638 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.859365 -0.831791 61.000000 + vertex 11.753986 -4.324638 61.000000 + vertex 12.440757 -2.620647 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -0.376201 12.920825 61.000000 + vertex -2.179778 12.571042 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.459633 12.991194 61.000000 + vertex -0.376201 12.920825 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 12.859365 -0.831791 61.000000 + vertex 13.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 3.284693 12.780499 61.000000 + vertex 1.459633 12.991194 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal -0.000854 -1.000000 0.000000 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 -6.976526 30.387606 + endloop + endfacet + facet normal 0.001095 -0.994231 0.107252 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -8.080567 -6.844954 32.567387 + vertex -34.000000 -6.976526 31.612394 + endloop + endfacet + facet normal -0.000887 -0.988280 -0.152649 + outer loop + vertex -8.039007 -6.892804 29.694763 + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -6.789563 29.177172 + endloop + endfacet + facet normal 0.000000 0.997066 0.076549 + outer loop + vertex -7.944272 9.000000 31.000000 + vertex -34.000000 9.000000 31.000000 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal 0.001263 -0.997316 -0.073203 + outer loop + vertex -8.039007 -6.892804 29.694763 + vertex -7.945369 -6.998773 31.140100 + vertex -34.000000 -6.976526 30.387606 + endloop + endfacet + facet normal -0.000761 -0.953396 -0.301721 + outer loop + vertex -8.329084 -6.547727 28.348244 + vertex -34.000000 -6.789563 29.177172 + vertex -34.000000 -6.420020 28.009464 + endloop + endfacet + facet normal -0.000655 0.973695 0.227853 + outer loop + vertex -8.070408 8.856698 32.507416 + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 8.627172 33.413765 + endloop + endfacet + facet normal 0.001102 -0.968638 -0.248473 + outer loop + vertex -8.329084 -6.547727 28.348244 + vertex -8.039007 -6.892804 29.694763 + vertex -34.000000 -6.789563 29.177172 + endloop + endfacet + facet normal 0.000857 0.995505 0.094709 + outer loop + vertex -8.070408 8.856698 32.507416 + vertex -7.944272 9.000000 31.000000 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal -0.000575 -0.896166 -0.443719 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -34.000000 -6.420020 28.009464 + vertex -34.000000 -5.876557 26.911850 + endloop + endfacet + facet normal -0.000894 0.927502 0.373817 + outer loop + vertex -8.402561 8.455994 33.899681 + vertex -34.000000 8.627172 33.413765 + vertex -34.000000 8.169325 34.549759 + endloop + endfacet + facet normal 0.000877 -0.911974 -0.410248 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -8.329084 -6.547727 28.348244 + vertex -34.000000 -6.420020 28.009464 + endloop + endfacet + facet normal 0.001171 0.960916 0.276838 + outer loop + vertex -8.402561 8.455994 33.899681 + vertex -8.070408 8.856698 32.507416 + vertex -34.000000 8.627172 33.413765 + endloop + endfacet + facet normal -0.000290 -0.817929 -0.575319 + outer loop + vertex -9.252076 -5.236581 25.989506 + vertex -34.000000 -5.876557 26.911850 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal 0.000654 -0.829731 -0.558163 + outer loop + vertex -9.252076 -5.236581 25.989506 + vertex -8.751478 -5.993474 27.115244 + vertex -34.000000 -5.876557 26.911850 + endloop + endfacet + facet normal -0.000913 0.859569 0.511018 + outer loop + vertex -8.866960 7.829576 35.166161 + vertex -34.000000 8.169325 34.549759 + vertex -34.000000 7.543435 35.602551 + endloop + endfacet + facet normal 0.001232 0.896170 0.443709 + outer loop + vertex -8.866960 7.829576 35.166161 + vertex -8.402561 8.455994 33.899681 + vertex -34.000000 8.169325 34.549759 + endloop + endfacet + facet normal 0.000293 -0.720522 -0.693433 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -4.322606 25.027575 + endloop + endfacet + facet normal -0.000254 -0.606226 -0.795293 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -34.000000 -4.322606 25.027575 + vertex -34.000000 -3.348540 24.285076 + endloop + endfacet + facet normal 0.001192 0.803405 0.595432 + outer loop + vertex -9.405215 6.977583 36.316814 + vertex -8.866960 7.829576 35.166161 + vertex -34.000000 7.543435 35.602551 + endloop + endfacet + facet normal 0.000340 -0.721125 -0.692805 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -9.252076 -5.236581 25.989506 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -0.000728 0.771488 0.636243 + outer loop + vertex -9.405215 6.977583 36.316814 + vertex -34.000000 7.543435 35.602551 + vertex -34.000000 6.764173 36.547459 + endloop + endfacet + facet normal -0.000067 -0.477720 -0.878512 + outer loop + vertex -10.191252 -3.330807 24.273626 + vertex -34.000000 -3.348540 24.285076 + vertex -34.000000 -2.272549 23.699970 + endloop + endfacet + facet normal 0.000063 -0.600848 -0.799363 + outer loop + vertex -10.191252 -3.330807 24.273626 + vertex -9.786845 -4.257754 24.970406 + vertex -34.000000 -3.348540 24.285076 + endloop + endfacet + facet normal 0.000965 0.680608 0.732647 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -9.405215 6.977583 36.316814 + vertex -34.000000 6.764173 36.547459 + endloop + endfacet + facet normal -0.000069 0.665326 0.746553 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -34.000000 6.764173 36.547459 + vertex -34.000000 5.849803 37.362343 + endloop + endfacet + facet normal 0.000072 0.543568 0.839365 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -34.000000 5.849803 37.362343 + vertex -34.000000 4.821759 38.028099 + endloop + endfacet + facet normal -0.000147 -0.338016 -0.941140 + outer loop + vertex -10.557199 -2.229729 23.680925 + vertex -34.000000 -2.272549 23.699970 + vertex -34.000000 -1.119852 23.285973 + endloop + endfacet + facet normal 0.000150 -0.473945 -0.880554 + outer loop + vertex -10.557199 -2.229729 23.680925 + vertex -10.191252 -3.330807 24.273626 + vertex -34.000000 -2.272549 23.699970 + endloop + endfacet + facet normal 0.001471 0.520726 0.853723 + outer loop + vertex -10.501171 4.423895 38.230278 + vertex -9.968540 5.867354 37.348927 + vertex -34.000000 4.821759 38.028099 + endloop + endfacet + facet normal -0.000925 0.409068 0.912503 + outer loop + vertex -10.501171 4.423895 38.230278 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 3.704135 38.529121 + endloop + endfacet + facet normal -0.000697 -0.190391 -0.981708 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -34.000000 -1.119852 23.285973 + vertex -34.000000 0.082533 23.052784 + endloop + endfacet + facet normal 0.000857 -0.319139 -0.947707 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -10.557199 -2.229729 23.680925 + vertex -34.000000 -1.119852 23.285973 + endloop + endfacet + facet normal 0.001504 0.341172 0.940000 + outer loop + vertex -10.829480 3.015787 38.741875 + vertex -10.501171 4.423895 38.230278 + vertex -34.000000 3.704135 38.529121 + endloop + endfacet + facet normal -0.000982 0.264982 0.964253 + outer loop + vertex -10.829480 3.015787 38.741875 + vertex -34.000000 3.704135 38.529121 + vertex -34.000000 2.523129 38.853668 + endloop + endfacet + facet normal -0.000806 -0.038303 -0.999266 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal 0.000861 -0.153219 -0.988192 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -10.855250 -0.858236 23.218807 + vertex -34.000000 0.082533 23.052784 + endloop + endfacet + facet normal 0.001358 0.160139 0.987093 + outer loop + vertex -10.987958 1.537464 38.981926 + vertex -10.829480 3.015787 38.741875 + vertex -34.000000 2.523129 38.853668 + endloop + endfacet + facet normal -0.000625 0.114682 0.993402 + outer loop + vertex -10.987958 1.537464 38.981926 + vertex -34.000000 2.523129 38.853668 + vertex -34.000000 1.306422 38.994129 + endloop + endfacet + facet normal 0.001197 0.013304 -0.999911 + outer loop + vertex -10.973373 1.798958 23.039995 + vertex -10.985648 0.413291 23.021544 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -0.000981 0.114683 -0.993402 + outer loop + vertex -10.973373 1.798958 23.039995 + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 2.523129 23.146334 + endloop + endfacet + facet normal 0.000644 -0.011284 0.999936 + outer loop + vertex -10.978530 0.282484 38.967758 + vertex -10.987958 1.537464 38.981926 + vertex -34.000000 1.306422 38.994129 + endloop + endfacet + facet normal -0.000559 -0.038303 0.999266 + outer loop + vertex -10.978530 0.282484 38.967758 + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 0.082533 38.947216 + endloop + endfacet + facet normal 0.000702 0.167111 -0.985938 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -10.973373 1.798958 23.039995 + vertex -34.000000 2.523129 23.146334 + endloop + endfacet + facet normal -0.000834 0.264982 -0.964253 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -34.000000 2.523129 23.146334 + vertex -34.000000 3.704135 23.470881 + endloop + endfacet + facet normal 0.000447 -0.152943 0.988235 + outer loop + vertex -10.875323 -0.725314 38.811741 + vertex -10.978530 0.282484 38.967758 + vertex -34.000000 0.082533 38.947216 + endloop + endfacet + facet normal -0.000900 -0.190391 0.981708 + outer loop + vertex -10.875323 -0.725314 38.811741 + vertex -34.000000 0.082533 38.947216 + vertex -34.000000 -1.119852 38.714027 + endloop + endfacet + facet normal 0.000419 0.296962 -0.954889 + outer loop + vertex -10.651127 3.872498 23.533491 + vertex -10.853421 2.869869 23.221594 + vertex -34.000000 3.704135 23.470881 + endloop + endfacet + facet normal -0.000503 0.409068 -0.912504 + outer loop + vertex -10.651127 3.872498 23.533491 + vertex -34.000000 3.704135 23.470881 + vertex -34.000000 4.821759 23.971903 + endloop + endfacet + facet normal 0.000005 0.419394 -0.907804 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -10.651127 3.872498 23.533491 + vertex -34.000000 4.821759 23.971903 + endloop + endfacet + facet normal 0.000858 -0.287518 0.957775 + outer loop + vertex -10.653047 -1.864698 38.469505 + vertex -10.875323 -0.725314 38.811741 + vertex -34.000000 -1.119852 38.714027 + endloop + endfacet + facet normal -0.000006 0.543567 -0.839366 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -34.000000 4.821759 23.971903 + vertex -34.000000 5.849803 24.637657 + endloop + endfacet + facet normal -0.000927 -0.338016 0.941140 + outer loop + vertex -10.653047 -1.864698 38.469505 + vertex -34.000000 -1.119852 38.714027 + vertex -34.000000 -2.272549 38.300030 + endloop + endfacet + facet normal 0.000114 0.545514 -0.838102 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -10.374597 4.823421 23.972807 + vertex -34.000000 5.849803 24.637657 + endloop + endfacet + facet normal -0.000111 0.665326 -0.746553 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 6.764173 25.452539 + endloop + endfacet + facet normal 0.000852 -0.424913 0.905234 + outer loop + vertex -10.341965 -2.919164 37.974251 + vertex -10.653047 -1.864698 38.469505 + vertex -34.000000 -2.272549 38.300030 + endloop + endfacet + facet normal -0.000960 -0.477720 0.878512 + outer loop + vertex -10.341965 -2.919164 37.974251 + vertex -34.000000 -2.272549 38.300030 + vertex -34.000000 -3.348540 37.714924 + endloop + endfacet + facet normal 0.000342 0.672132 -0.740431 + outer loop + vertex -9.482093 6.841722 25.534264 + vertex -9.963696 5.878253 24.659445 + vertex -34.000000 6.764173 25.452539 + endloop + endfacet + facet normal 0.001161 -0.563095 0.826391 + outer loop + vertex -9.880194 -4.061757 37.195049 + vertex -10.341965 -2.919164 37.974251 + vertex -34.000000 -3.348540 37.714924 + endloop + endfacet + facet normal -0.000319 0.771489 -0.636242 + outer loop + vertex -9.482093 6.841722 25.534264 + vertex -34.000000 6.764173 25.452539 + vertex -34.000000 7.543435 26.397451 + endloop + endfacet + facet normal -0.000784 -0.606225 0.795293 + outer loop + vertex -9.880194 -4.061757 37.195049 + vertex -34.000000 -3.348540 37.714924 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal 0.000332 0.780546 -0.625098 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -9.482093 6.841722 25.534264 + vertex -34.000000 7.543435 26.397451 + endloop + endfacet + facet normal 0.000958 -0.698955 0.715165 + outer loop + vertex -9.345053 -5.081109 36.198086 + vertex -9.880194 -4.061757 37.195049 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -0.000330 0.859569 -0.511019 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -34.000000 7.543435 26.397451 + vertex -34.000000 8.169325 27.450241 + endloop + endfacet + facet normal -0.000388 -0.720522 0.693432 + outer loop + vertex -9.345053 -5.081109 36.198086 + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 -5.171914 36.089939 + endloop + endfacet + facet normal 0.000279 0.866512 -0.499157 + outer loop + vertex -8.589377 8.214142 27.542231 + vertex -9.014555 7.611255 26.495411 + vertex -34.000000 8.169325 27.450241 + endloop + endfacet + facet normal 0.000434 -0.812411 0.583085 + outer loop + vertex -8.837354 -5.872151 35.095551 + vertex -9.345053 -5.081109 36.198086 + vertex -34.000000 -5.171914 36.089939 + endloop + endfacet + facet normal -0.000283 0.927502 -0.373817 + outer loop + vertex -8.589377 8.214142 27.542231 + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 8.627172 28.586235 + endloop + endfacet + facet normal -0.000026 -0.817929 0.575319 + outer loop + vertex -8.837354 -5.872151 35.095551 + vertex -34.000000 -5.171914 36.089939 + vertex -34.000000 -5.876557 35.088150 + endloop + endfacet + facet normal 0.000026 -0.896166 0.443719 + outer loop + vertex -8.837354 -5.872151 35.095551 + vertex -34.000000 -5.876557 35.088150 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal 0.000256 0.931993 -0.362476 + outer loop + vertex -8.241260 8.655006 28.676022 + vertex -8.589377 8.214142 27.542231 + vertex -34.000000 8.627172 28.586235 + endloop + endfacet + facet normal -0.000258 0.973695 -0.227853 + outer loop + vertex -8.241260 8.655006 28.676022 + vertex -34.000000 8.627172 28.586235 + vertex -34.000000 8.906243 29.778805 + endloop + endfacet + facet normal 0.000074 0.975390 -0.220486 + outer loop + vertex -8.023660 8.910345 29.805666 + vertex -8.241260 8.655006 28.676022 + vertex -34.000000 8.906243 29.778805 + endloop + endfacet + facet normal 0.000331 -0.898910 0.438133 + outer loop + vertex -8.399053 -6.460416 33.888287 + vertex -8.837354 -5.872151 35.095551 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal -0.000078 0.997066 -0.076549 + outer loop + vertex -8.023660 8.910345 29.805666 + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 9.000000 31.000000 + endloop + endfacet + facet normal -0.000299 -0.953396 0.301720 + outer loop + vertex -8.399053 -6.460416 33.888287 + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 -6.789563 32.822826 + endloop + endfacet + facet normal 0.000000 0.997194 -0.074856 + outer loop + vertex -7.944272 9.000000 31.000000 + vertex -8.023660 8.910345 29.805666 + vertex -34.000000 9.000000 31.000000 + endloop + endfacet + facet normal -0.000608 -0.988280 0.152650 + outer loop + vertex -8.080567 -6.844954 32.567387 + vertex -34.000000 -6.789563 32.822826 + vertex -34.000000 -6.976526 31.612394 + endloop + endfacet + facet normal 0.000704 -0.960096 0.279671 + outer loop + vertex -8.080567 -6.844954 32.567387 + vertex -8.399053 -6.460416 33.888287 + vertex -34.000000 -6.789563 32.822826 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 8.169325 34.549759 + vertex -34.000000 8.627172 33.413765 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 3.704135 38.529121 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 2.523129 38.853668 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -3.348540 24.285076 + vertex -34.000000 -4.322606 25.027575 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 2.523129 38.853668 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 1.306422 38.994129 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 5.849803 24.637657 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 8.169325 27.450241 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 8.906243 29.778805 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 7.543435 35.602551 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 7.543435 35.602551 + vertex -34.000000 8.169325 34.549759 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -2.272549 23.699970 + vertex -34.000000 -3.348540 24.285076 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.876557 26.911850 + vertex -34.000000 -6.420020 28.009464 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 5.849803 37.362343 + vertex -34.000000 6.764173 36.547459 + vertex -34.000000 4.821759 38.028099 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 6.764173 36.547459 + vertex -34.000000 7.543435 35.602551 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -2.272549 23.699970 + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 -1.119852 23.285973 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 -2.272549 23.699970 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.789563 29.177172 + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -6.420020 28.009464 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.420020 28.009464 + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 0.082533 23.052784 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -6.789563 32.822826 + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 -6.976526 31.612394 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 4.821759 23.971903 + vertex -34.000000 2.523129 23.146334 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.523129 23.146334 + vertex -34.000000 4.821759 23.971903 + vertex -34.000000 3.704135 23.470881 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 4.821759 23.971903 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.876557 35.088150 + vertex -34.000000 -5.171914 36.089939 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.171914 36.089939 + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 6.764173 25.452539 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 6.764173 25.452539 + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 7.543435 26.397451 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -3.348540 37.714924 + vertex -34.000000 -2.272549 38.300030 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -2.272549 38.300030 + vertex -34.000000 -1.119852 38.714027 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 8.627172 28.586235 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 0.082533 38.947216 + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 -1.119852 38.714027 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -1.119852 38.714027 + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 9.000000 31.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.stl b/apps/cpu/Multiphase/backup/FlowFocusingSS.stl new file mode 100644 index 0000000000000000000000000000000000000000..fcf2ac4f64f6ac56f8aba0db2a8718f99f5958c2 GIT binary patch literal 22184 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 CJl=Hx literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..dbd1808d2a5dac239a7f1b2f22e3621b3059bd79 GIT binary patch literal 10332 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..55f6c7b1690b72985f26a13836e7518c2704c71c GIT binary patch literal 10330 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq.ast new file mode 100644 index 000000000..97ed8f775 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSq.ast @@ -0,0 +1,310 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 25.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 25.000000 1.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 25.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + vertex 25.000000 1.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 21.000000 23.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 5.000000 23.000000 + vertex 1.000000 21.000000 23.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 21.000000 23.000000 + vertex 1.000000 21.000000 39.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 5.000000 39.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 21.000000 39.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 5.000000 23.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 5.000000 23.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + vertex 81.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 5.000000 23.000000 + vertex 1.000000 21.000000 23.000000 + vertex 1.000000 5.000000 23.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 21.000000 23.000000 + vertex 1.000000 21.000000 23.000000 + vertex -24.000000 5.000000 23.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 21.000000 23.000000 + vertex -24.000000 21.000000 39.000000 + vertex 1.000000 21.000000 39.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 21.000000 23.000000 + vertex -24.000000 21.000000 23.000000 + vertex -24.000000 21.000000 39.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex -24.000000 5.000000 39.000000 + vertex 1.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex -24.000000 21.000000 39.000000 + vertex -24.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 5.000000 39.000000 + vertex 1.000000 5.000000 23.000000 + vertex 1.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 5.000000 23.000000 + vertex 1.000000 5.000000 23.000000 + vertex -24.000000 5.000000 39.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 5.000000 39.000000 + vertex -24.000000 21.000000 39.000000 + vertex -24.000000 5.000000 23.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 5.000000 23.000000 + vertex -24.000000 21.000000 39.000000 + vertex -24.000000 21.000000 23.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq.stl new file mode 100644 index 0000000000000000000000000000000000000000..b91794e7e1cd1f01ff3fa373910b5a31e3381a70 GIT binary patch literal 2284 zcmb`GF;2rk5Jg>6r{oB51_BZi4HZ}606s>_h$=@&7wB>fj>101Py1tsq+un;KRf@; zpLLwq=eL*p*MIxCxf@*Lq15ql7{-UX)bCGyk6JAW-Q3R+(0xIr6GAFGEeWehBw2ms zsBEU*=}LMc#$u>^uWOn)VW(vVPEN=j*D5r7*9lx+oN-C8YX%c$26}mpByuWp=yW+F zpEP;r&yg9raH4A}a#%P$A?bcs+o{}t5xVH4ZmPXcE_U<UHRpbEOI;?m>rO~72`glw zZ{tktohQ=e$^V{;NhIhgVczA8B*=hX61eg*!>6z$tVkunw6&<RNH$$9$#;ES>9Vgb zoaj17b+75z{a#n~qfOvH745$MPNYknor?IKZybi~iwk1a`n!(~qDd>bB~o_+jvNUp zIGNoHHQrk12&YPVav$oR74qoIp1M!vze*xqX!koo0@UZ%Fl<}jeRDD8uHDt{<E<r; zE_HUA+^yd*p7zBB;eSOP1W-&O!Bp!0?!w`gpyDKEaE|MQlO#>|*85QRtdQsPQTL2F vF@K`jsb;T))AuTWXZ5i?h3f<^h)ugs#B>JeOh?a8&b0m1Nz8u(Y4(2rtR9(< literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..57b06dc9f17ca420e2bfdda80b16ee9ad21056e3 GIT binary patch literal 10349 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..fa315bacf26389f34692d3eb1c2947d3cb8d06ba GIT binary patch literal 10337 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 A*Z=?k literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast new file mode 100644 index 000000000..7acee4108 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast @@ -0,0 +1,310 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 25.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 25.000000 1.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 25.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + vertex 25.000000 1.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + vertex 81.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 18.000000 18.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl new file mode 100644 index 0000000000000000000000000000000000000000..9f6355c80a4d30dbdcadba4615fa89895a660360 GIT binary patch literal 2284 zcmb`GJ5Iw;5Jg>6XBi-|0|F8fO)9p+0=xuDYBmCNEF(+d9VSQb#?LqnPjYfIbI*KY z`|$YubaVK(kE`p+Gk=u&zMrP~t}gY<LywWGBcYq`H3GUHsB}U|Wu=iYn?#aTSB}iv zsdl=OJ`r;<WRClqW=U9S?17UF`Np*iP3$s(%ZnXHf~Y;1FngfKJ(9?&=tHIL9{Eqx zZ+(yKp$jLvrlJoAryJ7U-)bwB`!7NlmDEkO=gC7fuh-_}A||y>OhHJGgc<6hZ(}E7 z>qNTT{O_rlM1q<U_S^1}1U;Zf0#{!4@Lw1SGg3(~Z5^^4I@?_>$!~pK>9Vdaoaox4 zs@HTxeLLUV1Zv{PeNp;5VI~Q*@gjcbo2MyV_S-eLadZ$(n!zoRx)X5pksu?XW~$4C zE-I<1UR(1`T{F6fse2FKDv5NVjd#L6pI=Qi2hS;c<-1}WZyowTq)VNZPVQEZlZ4uL z1$yx$&gYXz;B>-HP@iaKoWvgNahY(Eq^aI&x2-vuQ9IRnk0p_=)HM~ed-A!;`>f_p d*0x)O_usdx?*QfObVn~Y=l426W=Rm^`T?k~iEjV^ literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..64b20eb26d1d8445571b632f562e563b44467582 GIT binary patch literal 11382 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 PcQ!K<5fUZ(w^jTXB^C-~ literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..c64353de25ddbfcff53ad1ea2865621ef459f537 GIT binary patch literal 11746 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast new file mode 100644 index 000000000..1aa258836 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast @@ -0,0 +1,310 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 25.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 25.000000 1.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 25.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + vertex 25.000000 1.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 181.000000 19.000000 25.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 181.000000 19.000000 25.000000 + vertex 181.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 181.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + vertex 181.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 181.000000 19.000000 25.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + vertex 181.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 37.000000 + vertex 181.000000 7.000000 25.000000 + vertex 181.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 181.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 181.000000 7.000000 37.000000 + vertex 181.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 181.000000 7.000000 25.000000 + vertex 181.000000 19.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 18.000000 18.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl new file mode 100644 index 0000000000000000000000000000000000000000..2c31bb9bd4cf4af9246fc008ba606a3a9a0ba223 GIT binary patch literal 2284 zcmb`GJ5Iw;5Jg>6XBi;TP!m8%G^yAM3-A&s*$vRKj4XwB7$3bG+i@D6<m6`Np83S~ z;raFD=J0PHSJ#7Q{4DkJFbv~;UFx^T9wS#rLO0)Q1av=8>4cEVN=w3Q5=mBFIWiwp z?Q|tQ5o0lAj{BNsPFQK#11B5ujcXU0*kuBj7dtKqqV{0I?15hHkwi{KA1ZD4$bXuC z>w9DmT{zJ-6@553-H`77R$Hmu=LlU?Qa9C}ClArQ-kXz)nAA2g1R=d7%upA78#@tO zC(`BS=ci&432I8%Z@Whl^nhLxxbm`x|H6_mBb5Zx)*;KGv)$E_{MOf%F6-*TiLO1W zdQC^vxAX3)YvRX!QTjV!CJD6hBL3zZhap||+qG?tql0MD3~q_koq(f{1Q`i6Q(Y!> zQAthp+L~|bn$bl}-Fx^}Nu&#Hyc72M`fjQ@cuv_X-xcF{>(B=xUFxhfxm!I>5^CQS z=-HDvo=zfx(+N94eWICh5__=6Wx`34rh2R0w&r9;?Np~d=0v(u*Hp~z$>%EXvzj|u c+inrwf8Vse1C+DV9X;Qi-|GaKIYEr;7h#5h*8l(j literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl new file mode 100644 index 000000000..eff2679cd --- /dev/null +++ b/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl @@ -0,0 +1,1318 @@ +solid Mesh + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 600.000000 0.000000 + vertex 0.000000 0.000000 120.000000 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 0.000000 0.000000 + vertex 0.000000 0.000000 120.000000 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 120.000000 0.000000 0.000000 + vertex 120.000000 0.000000 120.000000 + vertex 0.000000 0.000000 0.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.000000 0.000000 0.000000 + vertex 120.000000 0.000000 120.000000 + vertex 0.000000 0.000000 120.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 0.000000 600.000000 120.000000 + vertex 0.000000 0.000000 120.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 0.000000 0.000000 120.000000 + vertex 120.000000 0.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 57.887005 600.000000 67.196198 + vertex 56.884388 600.000000 66.822243 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.423660 600.000000 58.932640 + vertex 120.000000 600.000000 0.000000 + vertex 67.196198 600.000000 57.887005 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 600.000000 54.331879 + vertex 0.000000 600.000000 0.000000 + vertex 54.331879 600.000000 55.088543 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 600.000000 67.423660 + vertex 57.887005 600.000000 67.196198 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.945194 600.000000 53.690598 + vertex 0.000000 600.000000 0.000000 + vertex 55.088543 600.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 600.000000 55.945194 + vertex 54.331879 600.000000 55.088543 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 600.000000 67.500000 + vertex 58.932640 600.000000 67.423660 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 600.000000 53.177761 + vertex 0.000000 600.000000 0.000000 + vertex 55.945194 600.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.500000 600.000000 60.000000 + vertex 120.000000 600.000000 0.000000 + vertex 67.423660 600.000000 58.932640 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.177761 600.000000 56.884388 + vertex 53.690598 600.000000 55.945194 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 57.887005 600.000000 52.803802 + vertex 0.000000 600.000000 0.000000 + vertex 56.884388 600.000000 53.177761 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.803802 600.000000 57.887005 + vertex 53.177761 600.000000 56.884388 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 600.000000 52.576340 + vertex 0.000000 600.000000 0.000000 + vertex 57.887005 600.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.576340 600.000000 58.932640 + vertex 52.803802 600.000000 57.887005 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 600.000000 52.500000 + vertex 0.000000 600.000000 0.000000 + vertex 58.932640 600.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.500000 600.000000 60.000000 + vertex 52.576340 600.000000 58.932640 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 67.500000 600.000000 60.000000 + vertex 67.423660 600.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 67.423660 600.000000 61.067360 + vertex 67.196198 600.000000 62.112995 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 67.196198 600.000000 62.112995 + vertex 66.822243 600.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 66.822243 600.000000 63.115612 + vertex 66.309402 600.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 66.309402 600.000000 64.054810 + vertex 65.668121 600.000000 64.911453 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 65.668121 600.000000 64.911453 + vertex 64.911453 600.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 64.911453 600.000000 65.668121 + vertex 64.054810 600.000000 66.309402 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 64.054810 600.000000 66.309402 + vertex 63.115612 600.000000 66.822243 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 120.000000 600.000000 0.000000 + vertex 67.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 63.115612 600.000000 66.822243 + vertex 62.112995 600.000000 67.196198 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 62.112995 600.000000 67.196198 + vertex 61.067360 600.000000 67.423660 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 61.067360 600.000000 67.423660 + vertex 60.000000 600.000000 67.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 60.000000 600.000000 67.500000 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 54.331879 600.000000 64.911453 + vertex 53.690598 600.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 53.690598 600.000000 64.054810 + vertex 53.177761 600.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 53.177761 600.000000 63.115612 + vertex 52.803802 600.000000 62.112995 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 52.803802 600.000000 62.112995 + vertex 52.576340 600.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 52.576340 600.000000 61.067360 + vertex 52.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 52.500000 600.000000 60.000000 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 60.000000 600.000000 52.500000 + vertex 61.067360 600.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 61.067360 600.000000 52.576340 + vertex 62.112995 600.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 62.112995 600.000000 52.803802 + vertex 63.115612 600.000000 53.177761 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 63.115612 600.000000 53.177761 + vertex 64.054810 600.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 64.054810 600.000000 53.690598 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 0.000000 600.000000 0.000000 + vertex 60.000000 600.000000 52.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 65.668121 600.000000 55.088543 + vertex 120.000000 600.000000 0.000000 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 600.000000 65.668121 + vertex 54.331879 600.000000 64.911453 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.309402 600.000000 55.945194 + vertex 120.000000 600.000000 0.000000 + vertex 65.668121 600.000000 55.088543 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.945194 600.000000 66.309402 + vertex 55.088543 600.000000 65.668121 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 600.000000 56.884388 + vertex 120.000000 600.000000 0.000000 + vertex 66.309402 600.000000 55.945194 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 600.000000 66.822243 + vertex 55.945194 600.000000 66.309402 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.196198 600.000000 57.887005 + vertex 120.000000 600.000000 0.000000 + vertex 66.822243 600.000000 56.884388 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.000000 600.000000 0.000000 + vertex 120.000000 600.000000 0.000000 + vertex 0.000000 0.000000 0.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.000000 0.000000 0.000000 + vertex 120.000000 600.000000 0.000000 + vertex 120.000000 0.000000 0.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 120.000000 0.000000 120.000000 + vertex 120.000000 600.000000 0.000000 + vertex 120.000000 600.000000 120.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 120.000000 0.000000 120.000000 + vertex 120.000000 0.000000 0.000000 + vertex 120.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.349466 0.000000 -0.936949 + outer loop + vertex 62.112995 630.000000 52.803802 + vertex 63.115612 630.000000 53.177761 + vertex 62.112995 600.000000 52.803802 + endloop + endfacet + facet normal -0.707109 0.000000 0.707105 + outer loop + vertex 55.088543 600.000000 65.668121 + vertex 54.331879 630.000000 64.911453 + vertex 54.331879 600.000000 64.911453 + endloop + endfacet + facet normal 0.349466 0.000000 -0.936949 + outer loop + vertex 62.112995 600.000000 52.803802 + vertex 63.115612 630.000000 53.177761 + vertex 63.115612 600.000000 53.177761 + endloop + endfacet + facet normal -0.707109 0.000000 0.707105 + outer loop + vertex 55.088543 630.000000 65.668121 + vertex 54.331879 630.000000 64.911453 + vertex 55.088543 600.000000 65.668121 + endloop + endfacet + facet normal 0.479246 0.000000 -0.877681 + outer loop + vertex 63.115612 630.000000 53.177761 + vertex 64.054810 630.000000 53.690598 + vertex 63.115612 600.000000 53.177761 + endloop + endfacet + facet normal -0.800539 0.000000 0.599281 + outer loop + vertex 54.331879 600.000000 64.911453 + vertex 53.690598 630.000000 64.054810 + vertex 53.690598 600.000000 64.054810 + endloop + endfacet + facet normal 0.479246 0.000000 -0.877681 + outer loop + vertex 63.115612 600.000000 53.177761 + vertex 64.054810 630.000000 53.690598 + vertex 64.054810 600.000000 53.690598 + endloop + endfacet + facet normal -0.800539 0.000000 0.599281 + outer loop + vertex 54.331879 630.000000 64.911453 + vertex 53.690598 630.000000 64.054810 + vertex 54.331879 600.000000 64.911453 + endloop + endfacet + facet normal 0.599281 0.000000 -0.800539 + outer loop + vertex 64.054810 630.000000 53.690598 + vertex 64.911453 630.000000 54.331879 + vertex 64.054810 600.000000 53.690598 + endloop + endfacet + facet normal -0.877681 0.000000 0.479246 + outer loop + vertex 53.690598 600.000000 64.054810 + vertex 53.177761 630.000000 63.115612 + vertex 53.177761 600.000000 63.115612 + endloop + endfacet + facet normal 0.599281 0.000000 -0.800539 + outer loop + vertex 64.054810 600.000000 53.690598 + vertex 64.911453 630.000000 54.331879 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal 0.997452 0.000000 0.071340 + outer loop + vertex 67.500000 600.000000 60.000000 + vertex 67.423660 630.000000 61.067360 + vertex 67.423660 600.000000 61.067360 + endloop + endfacet + facet normal -0.877681 0.000000 0.479246 + outer loop + vertex 53.690598 630.000000 64.054810 + vertex 53.177761 630.000000 63.115612 + vertex 53.690598 600.000000 64.054810 + endloop + endfacet + facet normal 0.997452 0.000000 0.071340 + outer loop + vertex 67.500000 630.000000 60.000000 + vertex 67.423660 630.000000 61.067360 + vertex 67.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.707105 0.000000 -0.707109 + outer loop + vertex 64.911453 630.000000 54.331879 + vertex 65.668121 630.000000 55.088543 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal -0.936949 0.000000 0.349466 + outer loop + vertex 53.177761 600.000000 63.115612 + vertex 52.803802 630.000000 62.112995 + vertex 52.803802 600.000000 62.112995 + endloop + endfacet + facet normal 0.707105 0.000000 -0.707109 + outer loop + vertex 64.911453 600.000000 54.331879 + vertex 65.668121 630.000000 55.088543 + vertex 65.668121 600.000000 55.088543 + endloop + endfacet + facet normal 0.977147 0.000000 0.212564 + outer loop + vertex 67.423660 600.000000 61.067360 + vertex 67.196198 630.000000 62.112995 + vertex 67.196198 600.000000 62.112995 + endloop + endfacet + facet normal -0.936949 0.000000 0.349466 + outer loop + vertex 53.177761 630.000000 63.115612 + vertex 52.803802 630.000000 62.112995 + vertex 53.177761 600.000000 63.115612 + endloop + endfacet + facet normal 0.977147 0.000000 0.212564 + outer loop + vertex 67.423660 630.000000 61.067360 + vertex 67.196198 630.000000 62.112995 + vertex 67.423660 600.000000 61.067360 + endloop + endfacet + facet normal 0.800541 0.000000 -0.599278 + outer loop + vertex 65.668121 630.000000 55.088543 + vertex 66.309402 630.000000 55.945194 + vertex 65.668121 600.000000 55.088543 + endloop + endfacet + facet normal -0.977147 0.000000 0.212564 + outer loop + vertex 52.803802 600.000000 62.112995 + vertex 52.576340 630.000000 61.067360 + vertex 52.576340 600.000000 61.067360 + endloop + endfacet + facet normal 0.800541 0.000000 -0.599278 + outer loop + vertex 65.668121 600.000000 55.088543 + vertex 66.309402 630.000000 55.945194 + vertex 66.309402 600.000000 55.945194 + endloop + endfacet + facet normal -0.977147 0.000000 0.212564 + outer loop + vertex 52.803802 630.000000 62.112995 + vertex 52.576340 630.000000 61.067360 + vertex 52.803802 600.000000 62.112995 + endloop + endfacet + facet normal 0.936950 0.000000 0.349463 + outer loop + vertex 67.196198 630.000000 62.112995 + vertex 66.822243 630.000000 63.115612 + vertex 67.196198 600.000000 62.112995 + endloop + endfacet + facet normal 0.936950 0.000000 0.349463 + outer loop + vertex 67.196198 600.000000 62.112995 + vertex 66.822243 630.000000 63.115612 + vertex 66.822243 600.000000 63.115612 + endloop + endfacet + facet normal 0.877678 0.000000 -0.479250 + outer loop + vertex 66.309402 630.000000 55.945194 + vertex 66.822243 630.000000 56.884388 + vertex 66.309402 600.000000 55.945194 + endloop + endfacet + facet normal -0.997452 0.000000 0.071340 + outer loop + vertex 52.576340 600.000000 61.067360 + vertex 52.500000 630.000000 60.000000 + vertex 52.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.877678 0.000000 -0.479250 + outer loop + vertex 66.309402 600.000000 55.945194 + vertex 66.822243 630.000000 56.884388 + vertex 66.822243 600.000000 56.884388 + endloop + endfacet + facet normal -0.997452 0.000000 0.071340 + outer loop + vertex 52.576340 630.000000 61.067360 + vertex 52.500000 630.000000 60.000000 + vertex 52.576340 600.000000 61.067360 + endloop + endfacet + facet normal 0.877679 0.000000 0.479249 + outer loop + vertex 66.822243 630.000000 63.115612 + vertex 66.309402 630.000000 64.054810 + vertex 66.822243 600.000000 63.115612 + endloop + endfacet + facet normal 0.877679 0.000000 0.479249 + outer loop + vertex 66.822243 600.000000 63.115612 + vertex 66.309402 630.000000 64.054810 + vertex 66.309402 600.000000 64.054810 + endloop + endfacet + facet normal 0.936950 0.000000 -0.349463 + outer loop + vertex 66.822243 630.000000 56.884388 + vertex 67.196198 630.000000 57.887005 + vertex 66.822243 600.000000 56.884388 + endloop + endfacet + facet normal -0.997452 0.000000 -0.071340 + outer loop + vertex 52.500000 600.000000 60.000000 + vertex 52.576340 630.000000 58.932640 + vertex 52.576340 600.000000 58.932640 + endloop + endfacet + facet normal 0.936950 0.000000 -0.349463 + outer loop + vertex 66.822243 600.000000 56.884388 + vertex 67.196198 630.000000 57.887005 + vertex 67.196198 600.000000 57.887005 + endloop + endfacet + facet normal -0.997452 -0.000000 -0.071340 + outer loop + vertex 52.500000 630.000000 60.000000 + vertex 52.576340 630.000000 58.932640 + vertex 52.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.800539 0.000000 0.599281 + outer loop + vertex 66.309402 630.000000 64.054810 + vertex 65.668121 630.000000 64.911453 + vertex 66.309402 600.000000 64.054810 + endloop + endfacet + facet normal 0.977147 0.000000 -0.212564 + outer loop + vertex 67.196198 630.000000 57.887005 + vertex 67.423660 630.000000 58.932640 + vertex 67.196198 600.000000 57.887005 + endloop + endfacet + facet normal 0.800539 0.000000 0.599281 + outer loop + vertex 66.309402 600.000000 64.054810 + vertex 65.668121 630.000000 64.911453 + vertex 65.668121 600.000000 64.911453 + endloop + endfacet + facet normal 0.977147 0.000000 -0.212564 + outer loop + vertex 67.196198 600.000000 57.887005 + vertex 67.423660 630.000000 58.932640 + vertex 67.423660 600.000000 58.932640 + endloop + endfacet + facet normal -0.977147 0.000000 -0.212564 + outer loop + vertex 52.576340 600.000000 58.932640 + vertex 52.803802 630.000000 57.887005 + vertex 52.803802 600.000000 57.887005 + endloop + endfacet + facet normal -0.977147 -0.000000 -0.212564 + outer loop + vertex 52.576340 630.000000 58.932640 + vertex 52.803802 630.000000 57.887005 + vertex 52.576340 600.000000 58.932640 + endloop + endfacet + facet normal 0.997452 0.000000 -0.071340 + outer loop + vertex 67.423660 630.000000 58.932640 + vertex 67.500000 630.000000 60.000000 + vertex 67.423660 600.000000 58.932640 + endloop + endfacet + facet normal 0.997452 0.000000 -0.071340 + outer loop + vertex 67.423660 600.000000 58.932640 + vertex 67.500000 630.000000 60.000000 + vertex 67.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.707107 0.000000 0.707107 + outer loop + vertex 65.668121 630.000000 64.911453 + vertex 64.911453 630.000000 65.668121 + vertex 65.668121 600.000000 64.911453 + endloop + endfacet + facet normal 0.707107 0.000000 0.707107 + outer loop + vertex 65.668121 600.000000 64.911453 + vertex 64.911453 630.000000 65.668121 + vertex 64.911453 600.000000 65.668121 + endloop + endfacet + facet normal -0.936949 0.000000 -0.349466 + outer loop + vertex 52.803802 600.000000 57.887005 + vertex 53.177761 630.000000 56.884388 + vertex 53.177761 600.000000 56.884388 + endloop + endfacet + facet normal -0.936949 -0.000000 -0.349466 + outer loop + vertex 52.803802 630.000000 57.887005 + vertex 53.177761 630.000000 56.884388 + vertex 52.803802 600.000000 57.887005 + endloop + endfacet + facet normal 0.599281 0.000000 0.800539 + outer loop + vertex 64.911453 630.000000 65.668121 + vertex 64.054810 630.000000 66.309402 + vertex 64.911453 600.000000 65.668121 + endloop + endfacet + facet normal 0.599281 0.000000 0.800539 + outer loop + vertex 64.911453 600.000000 65.668121 + vertex 64.054810 630.000000 66.309402 + vertex 64.054810 600.000000 66.309402 + endloop + endfacet + facet normal -0.877680 0.000000 -0.479247 + outer loop + vertex 53.177761 600.000000 56.884388 + vertex 53.690598 630.000000 55.945194 + vertex 53.690598 600.000000 55.945194 + endloop + endfacet + facet normal -0.877680 -0.000000 -0.479247 + outer loop + vertex 53.177761 630.000000 56.884388 + vertex 53.690598 630.000000 55.945194 + vertex 53.177761 600.000000 56.884388 + endloop + endfacet + facet normal 0.479249 0.000000 0.877679 + outer loop + vertex 64.054810 630.000000 66.309402 + vertex 63.115612 630.000000 66.822243 + vertex 64.054810 600.000000 66.309402 + endloop + endfacet + facet normal -0.800541 0.000000 -0.599278 + outer loop + vertex 53.690598 600.000000 55.945194 + vertex 54.331879 630.000000 55.088543 + vertex 54.331879 600.000000 55.088543 + endloop + endfacet + facet normal 0.479249 0.000000 0.877679 + outer loop + vertex 64.054810 600.000000 66.309402 + vertex 63.115612 630.000000 66.822243 + vertex 63.115612 600.000000 66.822243 + endloop + endfacet + facet normal -0.800541 -0.000000 -0.599278 + outer loop + vertex 53.690598 630.000000 55.945194 + vertex 54.331879 630.000000 55.088543 + vertex 53.690598 600.000000 55.945194 + endloop + endfacet + facet normal -0.707107 -0.000000 -0.707107 + outer loop + vertex 54.331879 630.000000 55.088543 + vertex 55.088543 630.000000 54.331879 + vertex 54.331879 600.000000 55.088543 + endloop + endfacet + facet normal 0.349463 0.000000 0.936950 + outer loop + vertex 63.115612 630.000000 66.822243 + vertex 62.112995 630.000000 67.196198 + vertex 63.115612 600.000000 66.822243 + endloop + endfacet + facet normal -0.707107 0.000000 -0.707107 + outer loop + vertex 54.331879 600.000000 55.088543 + vertex 55.088543 630.000000 54.331879 + vertex 55.088543 600.000000 54.331879 + endloop + endfacet + facet normal 0.349463 0.000000 0.936950 + outer loop + vertex 63.115612 600.000000 66.822243 + vertex 62.112995 630.000000 67.196198 + vertex 62.112995 600.000000 67.196198 + endloop + endfacet + facet normal -0.599278 -0.000000 -0.800541 + outer loop + vertex 55.088543 630.000000 54.331879 + vertex 55.945194 630.000000 53.690598 + vertex 55.088543 600.000000 54.331879 + endloop + endfacet + facet normal 0.212564 0.000000 0.977147 + outer loop + vertex 62.112995 630.000000 67.196198 + vertex 61.067360 630.000000 67.423660 + vertex 62.112995 600.000000 67.196198 + endloop + endfacet + facet normal -0.599278 0.000000 -0.800541 + outer loop + vertex 55.088543 600.000000 54.331879 + vertex 55.945194 630.000000 53.690598 + vertex 55.945194 600.000000 53.690598 + endloop + endfacet + facet normal 0.212564 0.000000 0.977147 + outer loop + vertex 62.112995 600.000000 67.196198 + vertex 61.067360 630.000000 67.423660 + vertex 61.067360 600.000000 67.423660 + endloop + endfacet + facet normal -0.479247 -0.000000 -0.877680 + outer loop + vertex 55.945194 630.000000 53.690598 + vertex 56.884388 630.000000 53.177761 + vertex 55.945194 600.000000 53.690598 + endloop + endfacet + facet normal 0.071340 0.000000 0.997452 + outer loop + vertex 61.067360 630.000000 67.423660 + vertex 60.000000 630.000000 67.500000 + vertex 61.067360 600.000000 67.423660 + endloop + endfacet + facet normal -0.479247 0.000000 -0.877680 + outer loop + vertex 55.945194 600.000000 53.690598 + vertex 56.884388 630.000000 53.177761 + vertex 56.884388 600.000000 53.177761 + endloop + endfacet + facet normal 0.071340 0.000000 0.997452 + outer loop + vertex 61.067360 600.000000 67.423660 + vertex 60.000000 630.000000 67.500000 + vertex 60.000000 600.000000 67.500000 + endloop + endfacet + facet normal -0.349466 -0.000000 -0.936949 + outer loop + vertex 56.884388 630.000000 53.177761 + vertex 57.887005 630.000000 52.803802 + vertex 56.884388 600.000000 53.177761 + endloop + endfacet + facet normal -0.071340 0.000000 0.997452 + outer loop + vertex 60.000000 630.000000 67.500000 + vertex 58.932640 630.000000 67.423660 + vertex 60.000000 600.000000 67.500000 + endloop + endfacet + facet normal -0.349466 0.000000 -0.936949 + outer loop + vertex 56.884388 600.000000 53.177761 + vertex 57.887005 630.000000 52.803802 + vertex 57.887005 600.000000 52.803802 + endloop + endfacet + facet normal -0.071340 0.000000 0.997452 + outer loop + vertex 60.000000 600.000000 67.500000 + vertex 58.932640 630.000000 67.423660 + vertex 58.932640 600.000000 67.423660 + endloop + endfacet + facet normal -0.212564 -0.000000 -0.977147 + outer loop + vertex 57.887005 630.000000 52.803802 + vertex 58.932640 630.000000 52.576340 + vertex 57.887005 600.000000 52.803802 + endloop + endfacet + facet normal -0.212564 0.000000 0.977147 + outer loop + vertex 58.932640 630.000000 67.423660 + vertex 57.887005 630.000000 67.196198 + vertex 58.932640 600.000000 67.423660 + endloop + endfacet + facet normal -0.212564 0.000000 -0.977147 + outer loop + vertex 57.887005 600.000000 52.803802 + vertex 58.932640 630.000000 52.576340 + vertex 58.932640 600.000000 52.576340 + endloop + endfacet + facet normal -0.212564 0.000000 0.977147 + outer loop + vertex 58.932640 600.000000 67.423660 + vertex 57.887005 630.000000 67.196198 + vertex 57.887005 600.000000 67.196198 + endloop + endfacet + facet normal -0.071340 -0.000000 -0.997452 + outer loop + vertex 58.932640 630.000000 52.576340 + vertex 60.000000 630.000000 52.500000 + vertex 58.932640 600.000000 52.576340 + endloop + endfacet + facet normal -0.349463 0.000000 0.936950 + outer loop + vertex 57.887005 630.000000 67.196198 + vertex 56.884388 630.000000 66.822243 + vertex 57.887005 600.000000 67.196198 + endloop + endfacet + facet normal -0.071340 0.000000 -0.997452 + outer loop + vertex 58.932640 600.000000 52.576340 + vertex 60.000000 630.000000 52.500000 + vertex 60.000000 600.000000 52.500000 + endloop + endfacet + facet normal -0.349463 0.000000 0.936950 + outer loop + vertex 57.887005 600.000000 67.196198 + vertex 56.884388 630.000000 66.822243 + vertex 56.884388 600.000000 66.822243 + endloop + endfacet + facet normal 0.071340 0.000000 -0.997452 + outer loop + vertex 60.000000 630.000000 52.500000 + vertex 61.067360 630.000000 52.576340 + vertex 60.000000 600.000000 52.500000 + endloop + endfacet + facet normal -0.479250 0.000000 0.877678 + outer loop + vertex 56.884388 630.000000 66.822243 + vertex 55.945194 630.000000 66.309402 + vertex 56.884388 600.000000 66.822243 + endloop + endfacet + facet normal 0.071340 0.000000 -0.997452 + outer loop + vertex 60.000000 600.000000 52.500000 + vertex 61.067360 630.000000 52.576340 + vertex 61.067360 600.000000 52.576340 + endloop + endfacet + facet normal -0.479250 0.000000 0.877678 + outer loop + vertex 56.884388 600.000000 66.822243 + vertex 55.945194 630.000000 66.309402 + vertex 55.945194 600.000000 66.309402 + endloop + endfacet + facet normal 0.212564 0.000000 -0.977147 + outer loop + vertex 61.067360 630.000000 52.576340 + vertex 62.112995 630.000000 52.803802 + vertex 61.067360 600.000000 52.576340 + endloop + endfacet + facet normal -0.599278 0.000000 0.800541 + outer loop + vertex 55.945194 630.000000 66.309402 + vertex 55.088543 630.000000 65.668121 + vertex 55.945194 600.000000 66.309402 + endloop + endfacet + facet normal 0.212564 0.000000 -0.977147 + outer loop + vertex 61.067360 600.000000 52.576340 + vertex 62.112995 630.000000 52.803802 + vertex 62.112995 600.000000 52.803802 + endloop + endfacet + facet normal -0.599278 0.000000 0.800541 + outer loop + vertex 55.945194 600.000000 66.309402 + vertex 55.088543 630.000000 65.668121 + vertex 55.088543 600.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.423660 630.000000 61.067360 + vertex 67.423660 630.000000 58.932640 + vertex 65.668121 630.000000 64.911453 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.500000 630.000000 60.000000 + vertex 67.423660 630.000000 58.932640 + vertex 67.423660 630.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 65.668121 630.000000 64.911453 + vertex 67.423660 630.000000 58.932640 + vertex 64.911453 630.000000 65.668121 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 55.945194 630.000000 66.309402 + vertex 56.884388 630.000000 66.822243 + vertex 55.088543 630.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.423660 630.000000 58.932640 + vertex 66.822243 630.000000 56.884388 + vertex 64.911453 630.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 54.331879 630.000000 64.911453 + vertex 52.803802 630.000000 62.112995 + vertex 53.690598 630.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 630.000000 64.054810 + vertex 52.803802 630.000000 62.112995 + vertex 53.177761 630.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 67.196198 630.000000 57.887005 + vertex 66.822243 630.000000 56.884388 + vertex 67.423660 630.000000 58.932640 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 630.000000 55.945194 + vertex 66.822243 630.000000 56.884388 + vertex 55.088543 630.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 64.911453 630.000000 65.668121 + vertex 66.822243 630.000000 56.884388 + vertex 53.690598 630.000000 55.945194 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 630.000000 54.331879 + vertex 66.822243 630.000000 56.884388 + vertex 56.884388 630.000000 53.177761 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 57.887005 630.000000 67.196198 + vertex 58.932640 630.000000 67.423660 + vertex 56.884388 630.000000 66.822243 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 53.177761 + vertex 64.911453 630.000000 54.331879 + vertex 58.932640 630.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 630.000000 56.884388 + vertex 64.911453 630.000000 54.331879 + vertex 56.884388 630.000000 53.177761 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 630.000000 52.576340 + vertex 64.911453 630.000000 54.331879 + vertex 60.000000 630.000000 52.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 630.000000 52.500000 + vertex 64.911453 630.000000 54.331879 + vertex 61.067360 630.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.067360 630.000000 52.576340 + vertex 64.911453 630.000000 54.331879 + vertex 62.112995 630.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 62.112995 630.000000 52.803802 + vertex 64.911453 630.000000 54.331879 + vertex 63.115612 630.000000 53.177761 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 63.115612 630.000000 53.177761 + vertex 64.911453 630.000000 54.331879 + vertex 64.054810 630.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 630.000000 56.884388 + vertex 65.668121 630.000000 55.088543 + vertex 64.911453 630.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 66.309402 630.000000 55.945194 + vertex 65.668121 630.000000 55.088543 + vertex 66.822243 630.000000 56.884388 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 630.000000 65.668121 + vertex 52.576340 630.000000 58.932640 + vertex 54.331879 630.000000 64.911453 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.803802 630.000000 62.112995 + vertex 52.576340 630.000000 58.932640 + vertex 52.576340 630.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.576340 630.000000 61.067360 + vertex 52.576340 630.000000 58.932640 + vertex 52.500000 630.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 66.822243 + vertex 52.576340 630.000000 58.932640 + vertex 55.088543 630.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 54.331879 630.000000 64.911453 + vertex 52.576340 630.000000 58.932640 + vertex 52.803802 630.000000 62.112995 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.067360 630.000000 67.423660 + vertex 62.112995 630.000000 67.196198 + vertex 60.000000 630.000000 67.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 630.000000 67.500000 + vertex 62.112995 630.000000 67.196198 + vertex 58.932640 630.000000 67.423660 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 52.576340 630.000000 58.932640 + vertex 62.112995 630.000000 67.196198 + vertex 52.803802 630.000000 57.887005 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 630.000000 67.423660 + vertex 62.112995 630.000000 67.196198 + vertex 56.884388 630.000000 66.822243 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 66.822243 + vertex 62.112995 630.000000 67.196198 + vertex 52.576340 630.000000 58.932640 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 62.112995 630.000000 67.196198 + vertex 53.177761 630.000000 56.884388 + vertex 52.803802 630.000000 57.887005 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 63.115612 630.000000 66.822243 + vertex 64.054810 630.000000 66.309402 + vertex 62.112995 630.000000 67.196198 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 53.177761 630.000000 56.884388 + vertex 64.911453 630.000000 65.668121 + vertex 53.690598 630.000000 55.945194 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 62.112995 630.000000 67.196198 + vertex 64.911453 630.000000 65.668121 + vertex 53.177761 630.000000 56.884388 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 64.054810 630.000000 66.309402 + vertex 64.911453 630.000000 65.668121 + vertex 62.112995 630.000000 67.196198 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 630.000000 55.945194 + vertex 55.088543 630.000000 54.331879 + vertex 54.331879 630.000000 55.088543 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 630.000000 54.331879 + vertex 56.884388 630.000000 53.177761 + vertex 55.945194 630.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 53.177761 + vertex 58.932640 630.000000 52.576340 + vertex 57.887005 630.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.196198 630.000000 62.112995 + vertex 67.423660 630.000000 61.067360 + vertex 66.822243 630.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 630.000000 63.115612 + vertex 67.423660 630.000000 61.067360 + vertex 66.309402 630.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.309402 630.000000 64.054810 + vertex 67.423660 630.000000 61.067360 + vertex 65.668121 630.000000 64.911453 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/JetBreakup.FCStd b/apps/cpu/Multiphase/backup/JetBreakup.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..00f4eb43bb96542b5dc11c9ec84bd8b5a348a6fc GIT binary patch literal 11555 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup.stl b/apps/cpu/Multiphase/backup/JetBreakup.stl new file mode 100644 index 0000000000000000000000000000000000000000..a82398ec6fc375e407ebe8ac42b811318e2fa788 GIT binary patch literal 9484 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 TPaL8CAGex6afGHs#;^PXD|>7U literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl new file mode 100644 index 000000000..d42dbd278 --- /dev/null +++ b/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl @@ -0,0 +1,1584 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -61.000000 -610.000000 -61.000000 + vertex -60.000000 -610.000000 60.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -610.000000 -60.000000 + vertex -60.000000 -610.000000 60.000000 + vertex -61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -61.000000 -610.000000 -61.000000 + vertex 61.000000 -610.000000 -61.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 61.000000 -610.000000 -61.000000 + vertex 60.000000 -610.000000 -60.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -610.000000 60.000000 + vertex 61.000000 -610.000000 61.000000 + vertex -60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -610.000000 60.000000 + vertex 61.000000 -610.000000 61.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 61.000000 -610.000000 -61.000000 + vertex 61.000000 -610.000000 61.000000 + vertex 60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -610.000000 -60.000000 + vertex 61.000000 -610.000000 61.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -3.000000 61.000000 + vertex -61.000000 -610.000000 61.000000 + vertex 61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -3.000000 61.000000 + vertex -61.000000 -3.000000 61.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 61.000000 -3.000000 -61.000000 + vertex 61.000000 -610.000000 61.000000 + vertex 61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex 61.000000 -3.000000 -61.000000 + vertex 61.000000 -3.000000 61.000000 + vertex 61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -3.000000 -61.000000 + vertex 61.000000 -610.000000 -61.000000 + vertex -61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -3.000000 -61.000000 + vertex 61.000000 -3.000000 -61.000000 + vertex 61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 0.000000 + outer loop + vertex -61.000000 -3.000000 61.000000 + vertex -61.000000 -610.000000 -61.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -61.000000 -3.000000 61.000000 + vertex -61.000000 -3.000000 -61.000000 + vertex -61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -60.000000 -610.000000 -60.000000 + vertex -60.000000 -3.000000 -60.000000 + vertex -60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -60.000000 -3.000000 60.000000 + vertex -60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 1.000000 + outer loop + vertex 60.000000 -610.000000 -60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex -60.000000 -3.000000 -60.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 60.000000 -610.000000 60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex 60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 60.000000 -3.000000 60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -60.000000 -610.000000 60.000000 + vertex -60.000000 -3.000000 60.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -60.000000 -3.000000 60.000000 + vertex 60.000000 -3.000000 60.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -3.000000 61.000000 + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -1.000000 61.000000 + vertex -61.000000 -1.000000 61.000000 + vertex 61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 -3.000000 61.000000 + vertex 61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 -1.000000 61.000000 + vertex 61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -1.000000 -61.000000 + vertex 61.000000 -3.000000 -61.000000 + vertex -61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -1.000000 -61.000000 + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 0.000000 + outer loop + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -3.000000 -61.000000 + vertex -61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -1.000000 -61.000000 + vertex -61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -4.489497 -3.000000 -6.621512 + vertex -5.807964 -3.000000 -5.501595 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -5.807964 -3.000000 -5.501595 + vertex -6.854857 -3.000000 -4.124431 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -2.961105 -3.000000 -7.431814 + vertex -4.489497 -3.000000 -6.621512 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -3.000000 -4.124431 + vertex -7.581225 -3.000000 -2.554412 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -1.294256 -3.000000 -7.894612 + vertex -2.961105 -3.000000 -7.431814 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -3.000000 -2.554412 + vertex -7.953104 -3.000000 -0.864952 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex 0.433111 -3.000000 -7.988267 + vertex -1.294256 -3.000000 -7.894612 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.953104 -3.000000 -0.864952 + vertex -7.953104 -3.000000 0.864952 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -5.807964 -3.000000 5.501595 + vertex -60.000000 -3.000000 60.000000 + vertex -6.854857 -3.000000 4.124431 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -3.000000 4.124431 + vertex -60.000000 -3.000000 60.000000 + vertex -7.581225 -3.000000 2.554412 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -3.000000 2.554412 + vertex -60.000000 -3.000000 60.000000 + vertex -7.953104 -3.000000 0.864952 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.953104 -3.000000 0.864952 + vertex -60.000000 -3.000000 60.000000 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -3.000000 -7.988267 + vertex 60.000000 -3.000000 -60.000000 + vertex 2.140227 -3.000000 -7.708400 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 2.140227 -3.000000 -7.708400 + vertex 60.000000 -3.000000 -60.000000 + vertex 3.747267 -3.000000 -7.068096 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 3.747267 -3.000000 -7.068096 + vertex 60.000000 -3.000000 -60.000000 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex 0.433111 -3.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 6.368744 -3.000000 -4.841394 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -5.807964 -3.000000 5.501595 + vertex -4.489497 -3.000000 6.621512 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 7.260603 -3.000000 -3.359113 + vertex 6.368744 -3.000000 -4.841394 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -3.000000 6.621512 + vertex -2.961105 -3.000000 7.431814 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 7.812964 -3.000000 -1.719764 + vertex 7.260603 -3.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -2.961105 -3.000000 7.431814 + vertex -1.294256 -3.000000 7.894612 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 8.000000 -3.000000 0.000000 + vertex 7.812964 -3.000000 -1.719764 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -3.000000 7.894612 + vertex 0.433111 -3.000000 7.988267 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 8.000000 -3.000000 0.000000 + vertex 60.000000 -3.000000 60.000000 + vertex 7.812964 -3.000000 1.719764 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 7.812964 -3.000000 1.719764 + vertex 60.000000 -3.000000 60.000000 + vertex 7.260603 -3.000000 3.359113 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 7.260603 -3.000000 3.359113 + vertex 60.000000 -3.000000 60.000000 + vertex 6.368744 -3.000000 4.841394 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 6.368744 -3.000000 4.841394 + vertex 60.000000 -3.000000 60.000000 + vertex 5.179090 -3.000000 6.097296 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 5.179090 -3.000000 6.097296 + vertex 60.000000 -3.000000 60.000000 + vertex 3.747267 -3.000000 7.068096 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 3.747267 -3.000000 7.068096 + vertex 60.000000 -3.000000 60.000000 + vertex 2.140227 -3.000000 7.708400 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 2.140227 -3.000000 7.708400 + vertex 60.000000 -3.000000 60.000000 + vertex 0.433111 -3.000000 7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 60.000000 -3.000000 60.000000 + vertex 8.000000 -3.000000 0.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -3.000000 7.988267 + vertex 60.000000 -3.000000 60.000000 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -1.000000 61.000000 + vertex -61.000000 0.000000 61.000000 + vertex -61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex -61.000000 0.000000 61.000000 + vertex 61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 0.000000 61.000000 + vertex 61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex 61.000000 -0.000000 -61.000000 + vertex 61.000000 0.000000 61.000000 + vertex 61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -1.000000 -61.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex 61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -0.000000 -61.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex -61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -0.000000 -61.000000 + vertex -61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 0.000000 + outer loop + vertex -61.000000 0.000000 61.000000 + vertex -61.000000 -0.000000 -61.000000 + vertex -61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 0.647386 0.000000 0.762162 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -5.807964 -1.000000 -5.501595 + vertex -5.807964 -3.000000 -5.501595 + endloop + endfacet + facet normal 0.647386 0.000000 0.762162 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -5.807964 -3.000000 -5.501595 + vertex -4.489497 -3.000000 -6.621512 + endloop + endfacet + facet normal 0.468408 0.000000 0.883512 + outer loop + vertex -2.961105 -1.000000 -7.431814 + vertex -4.489497 -1.000000 -6.621512 + vertex -4.489497 -3.000000 -6.621512 + endloop + endfacet + facet normal 0.468408 0.000000 0.883512 + outer loop + vertex -2.961105 -1.000000 -7.431814 + vertex -4.489497 -3.000000 -6.621512 + vertex -2.961105 -3.000000 -7.431814 + endloop + endfacet + facet normal 0.267528 0.000000 0.963550 + outer loop + vertex -1.294256 -1.000000 -7.894612 + vertex -2.961105 -1.000000 -7.431814 + vertex -2.961105 -3.000000 -7.431814 + endloop + endfacet + facet normal -0.994138 -0.000000 -0.108119 + outer loop + vertex 7.812964 -1.000000 1.719764 + vertex 8.000000 -3.000000 0.000000 + vertex 7.812964 -3.000000 1.719764 + endloop + endfacet + facet normal 0.267528 0.000000 0.963550 + outer loop + vertex -1.294256 -1.000000 -7.894612 + vertex -2.961105 -3.000000 -7.431814 + vertex -1.294256 -3.000000 -7.894612 + endloop + endfacet + facet normal -0.994138 0.000000 -0.108119 + outer loop + vertex 7.812964 -1.000000 1.719764 + vertex 8.000000 -1.000000 0.000000 + vertex 8.000000 -3.000000 0.000000 + endloop + endfacet + facet normal 0.054139 0.000000 0.998533 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex -1.294256 -1.000000 -7.894612 + vertex -1.294256 -3.000000 -7.894612 + endloop + endfacet + facet normal -0.947653 -0.000000 -0.319302 + outer loop + vertex 7.260603 -1.000000 3.359113 + vertex 7.812964 -3.000000 1.719764 + vertex 7.260603 -3.000000 3.359113 + endloop + endfacet + facet normal 0.054139 0.000000 0.998533 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex -1.294256 -3.000000 -7.894612 + vertex 0.433111 -3.000000 -7.988267 + endloop + endfacet + facet normal -0.947653 0.000000 -0.319302 + outer loop + vertex 7.260603 -1.000000 3.359113 + vertex 7.812964 -1.000000 1.719764 + vertex 7.812964 -3.000000 1.719764 + endloop + endfacet + facet normal -0.161782 0.000000 0.986826 + outer loop + vertex 2.140227 -1.000000 -7.708400 + vertex 0.433111 -1.000000 -7.988267 + vertex 0.433111 -3.000000 -7.988267 + endloop + endfacet + facet normal -0.161782 0.000000 0.986826 + outer loop + vertex 2.140227 -1.000000 -7.708400 + vertex 0.433111 -3.000000 -7.988267 + vertex 2.140227 -3.000000 -7.708400 + endloop + endfacet + facet normal -0.856857 -0.000000 -0.515554 + outer loop + vertex 6.368744 -1.000000 4.841394 + vertex 7.260603 -3.000000 3.359113 + vertex 6.368744 -3.000000 4.841394 + endloop + endfacet + facet normal -0.856857 0.000000 -0.515554 + outer loop + vertex 6.368744 -1.000000 4.841394 + vertex 7.260603 -1.000000 3.359113 + vertex 7.260603 -3.000000 3.359113 + endloop + endfacet + facet normal -0.370138 0.000000 0.928977 + outer loop + vertex 3.747267 -1.000000 -7.068096 + vertex 2.140227 -3.000000 -7.708400 + vertex 3.747267 -3.000000 -7.068096 + endloop + endfacet + facet normal -0.725995 -0.000000 -0.687699 + outer loop + vertex 5.179090 -1.000000 6.097296 + vertex 6.368744 -3.000000 4.841394 + vertex 5.179090 -3.000000 6.097296 + endloop + endfacet + facet normal -0.370138 0.000000 0.928977 + outer loop + vertex 3.747267 -1.000000 -7.068096 + vertex 2.140227 -1.000000 -7.708400 + vertex 2.140227 -3.000000 -7.708400 + endloop + endfacet + facet normal -0.725995 0.000000 -0.687699 + outer loop + vertex 5.179090 -1.000000 6.097296 + vertex 6.368744 -1.000000 4.841394 + vertex 6.368744 -3.000000 4.841394 + endloop + endfacet + facet normal -0.561187 0.000000 0.827689 + outer loop + vertex 5.179090 -1.000000 -6.097296 + vertex 3.747267 -3.000000 -7.068096 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal -0.561187 -0.000000 -0.827689 + outer loop + vertex 3.747267 -1.000000 7.068096 + vertex 5.179090 -3.000000 6.097296 + vertex 3.747267 -3.000000 7.068096 + endloop + endfacet + facet normal -0.561187 0.000000 0.827689 + outer loop + vertex 5.179090 -1.000000 -6.097296 + vertex 3.747267 -1.000000 -7.068096 + vertex 3.747267 -3.000000 -7.068096 + endloop + endfacet + facet normal -0.561187 0.000000 -0.827689 + outer loop + vertex 3.747267 -1.000000 7.068096 + vertex 5.179090 -1.000000 6.097296 + vertex 5.179090 -3.000000 6.097296 + endloop + endfacet + facet normal -0.725995 0.000000 0.687699 + outer loop + vertex 6.368744 -1.000000 -4.841394 + vertex 5.179090 -3.000000 -6.097296 + vertex 6.368744 -3.000000 -4.841394 + endloop + endfacet + facet normal -0.370138 -0.000000 -0.928977 + outer loop + vertex 2.140227 -1.000000 7.708400 + vertex 3.747267 -3.000000 7.068096 + vertex 2.140227 -3.000000 7.708400 + endloop + endfacet + facet normal -0.725995 0.000000 0.687699 + outer loop + vertex 6.368744 -1.000000 -4.841394 + vertex 5.179090 -1.000000 -6.097296 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal -0.370138 0.000000 -0.928977 + outer loop + vertex 2.140227 -1.000000 7.708400 + vertex 3.747267 -1.000000 7.068096 + vertex 3.747267 -3.000000 7.068096 + endloop + endfacet + facet normal -0.856857 0.000000 0.515554 + outer loop + vertex 7.260603 -1.000000 -3.359113 + vertex 6.368744 -3.000000 -4.841394 + vertex 7.260603 -3.000000 -3.359113 + endloop + endfacet + facet normal -0.161782 -0.000000 -0.986826 + outer loop + vertex 0.433111 -1.000000 7.988267 + vertex 2.140227 -3.000000 7.708400 + vertex 0.433111 -3.000000 7.988267 + endloop + endfacet + facet normal -0.856857 0.000000 0.515554 + outer loop + vertex 7.260603 -1.000000 -3.359113 + vertex 6.368744 -1.000000 -4.841394 + vertex 6.368744 -3.000000 -4.841394 + endloop + endfacet + facet normal -0.161782 0.000000 -0.986826 + outer loop + vertex 0.433111 -1.000000 7.988267 + vertex 2.140227 -1.000000 7.708400 + vertex 2.140227 -3.000000 7.708400 + endloop + endfacet + facet normal -0.947653 0.000000 0.319302 + outer loop + vertex 7.812964 -1.000000 -1.719764 + vertex 7.260603 -3.000000 -3.359113 + vertex 7.812964 -3.000000 -1.719764 + endloop + endfacet + facet normal -0.947653 0.000000 0.319302 + outer loop + vertex 7.812964 -1.000000 -1.719764 + vertex 7.260603 -1.000000 -3.359113 + vertex 7.260603 -3.000000 -3.359113 + endloop + endfacet + facet normal 0.054139 0.000000 -0.998533 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 0.433111 -3.000000 7.988267 + vertex -1.294256 -3.000000 7.894612 + endloop + endfacet + facet normal 0.054139 0.000000 -0.998533 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 0.433111 -1.000000 7.988267 + vertex 0.433111 -3.000000 7.988267 + endloop + endfacet + facet normal -0.994138 0.000000 0.108119 + outer loop + vertex 8.000000 -1.000000 0.000000 + vertex 7.812964 -3.000000 -1.719764 + vertex 8.000000 -3.000000 0.000000 + endloop + endfacet + facet normal -0.994138 0.000000 0.108119 + outer loop + vertex 8.000000 -1.000000 0.000000 + vertex 7.812964 -1.000000 -1.719764 + vertex 7.812964 -3.000000 -1.719764 + endloop + endfacet + facet normal 0.267528 0.000000 -0.963550 + outer loop + vertex -2.961105 -1.000000 7.431814 + vertex -1.294256 -3.000000 7.894612 + vertex -2.961105 -3.000000 7.431814 + endloop + endfacet + facet normal 0.267528 0.000000 -0.963550 + outer loop + vertex -2.961105 -1.000000 7.431814 + vertex -1.294256 -1.000000 7.894612 + vertex -1.294256 -3.000000 7.894612 + endloop + endfacet + facet normal 0.468408 0.000000 -0.883512 + outer loop + vertex -4.489497 -1.000000 6.621512 + vertex -2.961105 -1.000000 7.431814 + vertex -2.961105 -3.000000 7.431814 + endloop + endfacet + facet normal 0.468408 0.000000 -0.883512 + outer loop + vertex -4.489497 -1.000000 6.621512 + vertex -2.961105 -3.000000 7.431814 + vertex -4.489497 -3.000000 6.621512 + endloop + endfacet + facet normal 0.647386 0.000000 -0.762162 + outer loop + vertex -5.807964 -1.000000 5.501595 + vertex -4.489497 -1.000000 6.621512 + vertex -4.489497 -3.000000 6.621512 + endloop + endfacet + facet normal 0.647386 0.000000 -0.762162 + outer loop + vertex -5.807964 -1.000000 5.501595 + vertex -4.489497 -3.000000 6.621512 + vertex -5.807964 -3.000000 5.501595 + endloop + endfacet + facet normal 0.796093 0.000000 -0.605174 + outer loop + vertex -6.854857 -1.000000 4.124431 + vertex -5.807964 -1.000000 5.501595 + vertex -5.807964 -3.000000 5.501595 + endloop + endfacet + facet normal 0.796093 0.000000 -0.605174 + outer loop + vertex -6.854857 -1.000000 4.124431 + vertex -5.807964 -3.000000 5.501595 + vertex -6.854857 -3.000000 4.124431 + endloop + endfacet + facet normal 0.907575 0.000000 -0.419889 + outer loop + vertex -7.581225 -1.000000 2.554412 + vertex -6.854857 -1.000000 4.124431 + vertex -6.854857 -3.000000 4.124431 + endloop + endfacet + facet normal 0.907575 0.000000 -0.419889 + outer loop + vertex -7.581225 -1.000000 2.554412 + vertex -6.854857 -3.000000 4.124431 + vertex -7.581225 -3.000000 2.554412 + endloop + endfacet + facet normal 0.976621 0.000000 -0.214970 + outer loop + vertex -7.953104 -1.000000 0.864952 + vertex -7.581225 -1.000000 2.554412 + vertex -7.581225 -3.000000 2.554412 + endloop + endfacet + facet normal 0.976621 0.000000 -0.214970 + outer loop + vertex -7.953104 -1.000000 0.864952 + vertex -7.581225 -3.000000 2.554412 + vertex -7.953104 -3.000000 0.864952 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex -7.953104 -1.000000 -0.864952 + vertex -7.953104 -1.000000 0.864952 + vertex -7.953104 -3.000000 0.864952 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -7.953104 -1.000000 -0.864952 + vertex -7.953104 -3.000000 0.864952 + vertex -7.953104 -3.000000 -0.864952 + endloop + endfacet + facet normal 0.976621 0.000000 0.214970 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -7.953104 -1.000000 -0.864952 + vertex -7.953104 -3.000000 -0.864952 + endloop + endfacet + facet normal 0.976621 0.000000 0.214970 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -7.953104 -3.000000 -0.864952 + vertex -7.581225 -3.000000 -2.554412 + endloop + endfacet + facet normal 0.907575 0.000000 0.419889 + outer loop + vertex -6.854857 -1.000000 -4.124431 + vertex -7.581225 -1.000000 -2.554412 + vertex -7.581225 -3.000000 -2.554412 + endloop + endfacet + facet normal 0.907575 0.000000 0.419889 + outer loop + vertex -6.854857 -1.000000 -4.124431 + vertex -7.581225 -3.000000 -2.554412 + vertex -6.854857 -3.000000 -4.124431 + endloop + endfacet + facet normal 0.796093 0.000000 0.605174 + outer loop + vertex -5.807964 -1.000000 -5.501595 + vertex -6.854857 -1.000000 -4.124431 + vertex -6.854857 -3.000000 -4.124431 + endloop + endfacet + facet normal 0.796093 0.000000 0.605174 + outer loop + vertex -5.807964 -1.000000 -5.501595 + vertex -6.854857 -3.000000 -4.124431 + vertex -5.807964 -3.000000 -5.501595 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.000000 -0.000000 -61.000000 + vertex -61.000000 -0.000000 -61.000000 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -61.000000 0.000000 61.000000 + vertex -60.000000 -0.000000 -60.000000 + vertex -61.000000 -0.000000 -61.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -60.000000 -0.000000 -60.000000 + vertex -61.000000 0.000000 61.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex -60.000000 0.000000 60.000000 + vertex -61.000000 0.000000 61.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex 60.000000 0.000000 60.000000 + vertex -61.000000 0.000000 61.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex 60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex 60.000000 -0.000000 -60.000000 + vertex 60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -6.854857 -1.000000 -4.124431 + vertex -5.807964 -1.000000 -5.501595 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -2.961105 -1.000000 -7.431814 + vertex -1.294256 -1.000000 -7.894612 + vertex -4.489497 -1.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 -7.894612 + vertex 0.433111 -1.000000 -7.988267 + vertex -4.489497 -1.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -7.953104 -1.000000 0.864952 + vertex -7.953104 -1.000000 -0.864952 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 2.140227 -1.000000 -7.708400 + vertex 3.747267 -1.000000 -7.068096 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.953104 -1.000000 0.864952 + vertex -6.854857 -1.000000 4.124431 + vertex -7.581225 -1.000000 2.554412 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -6.854857 -1.000000 4.124431 + vertex -7.953104 -1.000000 0.864952 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 3.747267 -1.000000 -7.068096 + vertex 5.179090 -1.000000 -6.097296 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -1.000000 -4.124431 + vertex -4.489497 -1.000000 6.621512 + vertex -7.581225 -1.000000 -2.554412 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -1.000000 4.124431 + vertex -4.489497 -1.000000 6.621512 + vertex -5.807964 -1.000000 5.501595 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -4.489497 -1.000000 6.621512 + vertex -6.854857 -1.000000 -4.124431 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -4.489497 -1.000000 6.621512 + vertex -6.854857 -1.000000 4.124431 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 6.368744 -1.000000 -4.841394 + vertex 7.260603 -1.000000 -3.359113 + vertex 5.179090 -1.000000 -6.097296 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 5.179090 -1.000000 -6.097296 + vertex 7.260603 -1.000000 -3.359113 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 6.621512 + vertex -1.294256 -1.000000 7.894612 + vertex -2.961105 -1.000000 7.431814 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex -1.294256 -1.000000 7.894612 + vertex -4.489497 -1.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -1.294256 -1.000000 7.894612 + vertex -4.489497 -1.000000 6.621512 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 8.000000 -1.000000 0.000000 + vertex 7.812964 -1.000000 1.719764 + vertex 7.812964 -1.000000 -1.719764 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 7.812964 -1.000000 -1.719764 + vertex 7.812964 -1.000000 1.719764 + vertex 7.260603 -1.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 2.140227 -1.000000 7.708400 + vertex 0.433111 -1.000000 7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 3.747267 -1.000000 7.068096 + vertex 2.140227 -1.000000 7.708400 + endloop + endfacet + facet normal -0.000000 -1.000000 -0.000000 + outer loop + vertex 7.260603 -1.000000 3.359113 + vertex 6.368744 -1.000000 4.841394 + vertex 7.812964 -1.000000 1.719764 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 7.260603 -1.000000 -3.359113 + vertex 6.368744 -1.000000 4.841394 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 7.812964 -1.000000 1.719764 + vertex 6.368744 -1.000000 4.841394 + vertex 7.260603 -1.000000 -3.359113 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 6.368744 -1.000000 4.841394 + vertex 5.179090 -1.000000 6.097296 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex 5.179090 -1.000000 6.097296 + vertex -1.294256 -1.000000 7.894612 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 5.179090 -1.000000 6.097296 + vertex 3.747267 -1.000000 7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -4.489497 -0.000000 -6.621512 + vertex -60.000000 -0.000000 -60.000000 + vertex -5.807964 -0.000000 -5.501595 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -6.854857 -0.000000 -4.124431 + vertex -5.807964 -0.000000 -5.501595 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 -0.000000 -7.431814 + vertex -60.000000 -0.000000 -60.000000 + vertex -4.489497 -0.000000 -6.621512 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -7.581225 -0.000000 -2.554412 + vertex -6.854857 -0.000000 -4.124431 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -1.294256 -0.000000 -7.894612 + vertex -60.000000 -0.000000 -60.000000 + vertex -2.961105 -0.000000 -7.431814 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -7.953104 -0.000000 -0.864952 + vertex -7.581225 -0.000000 -2.554412 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 0.433111 -0.000000 -7.988267 + vertex -60.000000 -0.000000 -60.000000 + vertex -1.294256 -0.000000 -7.894612 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -7.953104 0.000000 0.864952 + vertex -7.953104 -0.000000 -0.864952 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -5.807964 0.000000 5.501595 + vertex -6.854857 0.000000 4.124431 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -6.854857 0.000000 4.124431 + vertex -7.581225 0.000000 2.554412 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -7.581225 0.000000 2.554412 + vertex -7.953104 0.000000 0.864952 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -7.953104 0.000000 0.864952 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 0.433111 -0.000000 -7.988267 + vertex 2.140227 -0.000000 -7.708400 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 2.140227 -0.000000 -7.708400 + vertex 3.747267 -0.000000 -7.068096 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 3.747267 -0.000000 -7.068096 + vertex 5.179090 -0.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex -60.000000 -0.000000 -60.000000 + vertex 0.433111 -0.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 6.368744 -0.000000 -4.841394 + vertex 60.000000 -0.000000 -60.000000 + vertex 5.179090 -0.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -4.489497 0.000000 6.621512 + vertex -5.807964 0.000000 5.501595 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.260603 -0.000000 -3.359113 + vertex 60.000000 -0.000000 -60.000000 + vertex 6.368744 -0.000000 -4.841394 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -4.489497 0.000000 6.621512 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 -0.000000 -1.719764 + vertex 60.000000 -0.000000 -60.000000 + vertex 7.260603 -0.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -1.294256 0.000000 7.894612 + vertex -2.961105 0.000000 7.431814 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 8.000000 0.000000 0.000000 + vertex 60.000000 -0.000000 -60.000000 + vertex 7.812964 -0.000000 -1.719764 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 0.433111 0.000000 7.988267 + vertex -1.294256 0.000000 7.894612 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 8.000000 0.000000 0.000000 + vertex 7.812964 0.000000 1.719764 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 7.812964 0.000000 1.719764 + vertex 7.260603 0.000000 3.359113 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 7.260603 0.000000 3.359113 + vertex 6.368744 0.000000 4.841394 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 6.368744 0.000000 4.841394 + vertex 5.179090 0.000000 6.097296 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 5.179090 0.000000 6.097296 + vertex 3.747267 0.000000 7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 3.747267 0.000000 7.068096 + vertex 2.140227 0.000000 7.708400 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 2.140227 0.000000 7.708400 + vertex 0.433111 0.000000 7.988267 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 0.433111 0.000000 7.988267 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 60.000000 -0.000000 -60.000000 + vertex 8.000000 0.000000 0.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -6.854857 -0.000000 -4.124431 + vertex -4.489497 -0.000000 -6.621512 + vertex -5.807964 -0.000000 -5.501595 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -7.581225 0.000000 2.554412 + vertex -7.953104 -0.000000 -0.864952 + vertex -7.953104 0.000000 0.864952 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 3.747267 -0.000000 -7.068096 + vertex -1.294256 -0.000000 -7.894612 + vertex -2.961105 -0.000000 -7.431814 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 3.747267 -0.000000 -7.068096 + vertex 0.433111 -0.000000 -7.988267 + vertex -1.294256 -0.000000 -7.894612 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 3.747267 -0.000000 -7.068096 + vertex 2.140227 -0.000000 -7.708400 + vertex 0.433111 -0.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -6.854857 0.000000 4.124431 + vertex -7.953104 -0.000000 -0.864952 + vertex -7.581225 0.000000 2.554412 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -5.807964 0.000000 5.501595 + vertex -7.581225 -0.000000 -2.554412 + vertex -7.953104 -0.000000 -0.864952 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -5.807964 0.000000 5.501595 + vertex -6.854857 -0.000000 -4.124431 + vertex -7.581225 -0.000000 -2.554412 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -5.807964 0.000000 5.501595 + vertex -7.953104 -0.000000 -0.864952 + vertex -6.854857 0.000000 4.124431 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 6.368744 -0.000000 -4.841394 + vertex 5.179090 -0.000000 -6.097296 + vertex 3.747267 -0.000000 -7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -5.807964 0.000000 5.501595 + vertex -4.489497 0.000000 6.621512 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -2.961105 -0.000000 -7.431814 + vertex -4.489497 -0.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex 7.260603 -0.000000 -3.359113 + vertex 6.368744 -0.000000 -4.841394 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -4.489497 -0.000000 -6.621512 + vertex -6.854857 -0.000000 -4.124431 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex 3.747267 -0.000000 -7.068096 + vertex -2.961105 -0.000000 -7.431814 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex 6.368744 -0.000000 -4.841394 + vertex 3.747267 -0.000000 -7.068096 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -6.854857 -0.000000 -4.124431 + vertex -5.807964 0.000000 5.501595 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex -2.961105 0.000000 7.431814 + vertex -1.294256 0.000000 7.894612 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex 7.812964 -0.000000 -1.719764 + vertex 7.260603 -0.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex 8.000000 0.000000 0.000000 + vertex 7.812964 -0.000000 -1.719764 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex 7.260603 -0.000000 -3.359113 + vertex -2.961105 0.000000 7.431814 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 2.140227 0.000000 7.708400 + vertex -1.294256 0.000000 7.894612 + vertex 0.433111 0.000000 7.988267 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 2.140227 0.000000 7.708400 + vertex 7.812964 0.000000 1.719764 + vertex -1.294256 0.000000 7.894612 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 6.368744 0.000000 4.841394 + vertex 7.260603 0.000000 3.359113 + vertex 7.812964 0.000000 1.719764 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 5.179090 0.000000 6.097296 + vertex 2.140227 0.000000 7.708400 + vertex 3.747267 0.000000 7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 5.179090 0.000000 6.097296 + vertex 7.812964 0.000000 1.719764 + vertex 2.140227 0.000000 7.708400 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 5.179090 0.000000 6.097296 + vertex 6.368744 0.000000 4.841394 + vertex 7.812964 0.000000 1.719764 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..8e6ed64fa6eeb4fb3c310c7513463635b0f6ee19 GIT binary patch literal 30227 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⩛j)qhq1_CEbo48J;fa*u; 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 VPs<<x30oT&2=EEw|EsI<{{U_r^9}$2 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..6d0a48be9fed1a6a9398d9e8a620f5480d5fcd8d GIT binary patch literal 29584 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 QF&iTzVL=hXe|I(h4}450GXMYp literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.stl b/apps/cpu/Multiphase/backup/JetBreakup2.stl new file mode 100644 index 0000000000000000000000000000000000000000..3c36f67113ef3741bbe0f8526dfe5efaf635f1ec GIT binary patch literal 11384 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 N#&|^oEkxS6{{j2D`0D@w literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.FCStd b/apps/cpu/Multiphase/backup/JetBreakup3.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..beaf8c0e46fe33f5d006d98e3a96214ba09f2bbb GIT binary patch literal 28673 zcmZ6RQ;;UXqOIGu{kLt~wrx$@wr$(CZBEa$ZQC~P>~kOPJ^QI5BOj_FGIOn5UoAx$ zP%tzgARs6p&)`HklS_x1PB<W-nRXzce-9v0dlOe%GdmZ04_linJuT<`4h+AU`rD(@ zlVv!=>`}qQyg%!ym8L@>B{W+MdI*$}<&kpO3sTqh{o^!kw4Ng5hAHKQT7MH=Fr;?4 zaK7K3nNj_SoC~qv_b4if{7@43naZ-hU0y9M`If!&zdwB#KNWiY2y?Qba`AFu%EwIK zf?O^TjRF&HZL}VQn%~~v*F8cI$<H6r`B>o|q&!$<_eL2L3(jtDqOF8*W5o{&^uuw! zq(klwv3n~Fdg&L}*^Eqa6w2OFNF(8;Iuo_=8yP;I#hSl$P^Vk5VVX+UPe6gc!xZh} zWMxEP_eM0&myP7Cygm0m-Gwv^W{s{!JQ^!2pqD@J{0OE_f&(>1KUSHIz=T6{VK!Cw z(z$hn1GN`yS0=39$wVyu=Bs);tNQKh_)se`vIy)u#4-+5EZP|}n<$^ojqB-U+LiqY zUm%q)+?5C-jJNOlGBB=1w#(?3AX#ZP*A0GihjqSp=Ct2)^fc53=m1({<sVDCtlYjP z(hj>yHl?=$Yv8!&Z;Dh6n;2T5=P^e$w&rZeGu9WHTajd21dkb5r}!}KFt6?CVe7#Z z(ujNSs=gMFEvhQpNNv~qvt~yDc9{NXSNrIUWtEkOrCz1ej)9O;LnG*=#Ca<rlRhA~ zFj~}(7Si@_>e)Z=%>B1Lhk7vXI9kt}TY5SB2OjN<Wqs0~qLP<V%uxMxv`ZU&tp*w! zwNiR{@)Yx;=zy*TJ7oh9HZbm4m8ccOpCafQt0Hk17CvxJWw{G9x)uswMo#v!0(M=# zvu}X9TcUB?c28Jn<(VJ!kA_pGj9fUj<3`7i<6{}!yf$?DYg+fni!7Nq3)^C?y+F^- zM2RS@FN5N#j#uHGf@xr_DFVc`|26F^$!Qr`jG>2@1a*yq`(dts<)WFT3R<b~6nXmJ z<tE*RBehPWg@XjB{s3haR4wvJoL}}BP<{>G7~!ot&XEoX21k%;#`&D&rng$Fgsxg= z(U!C)LVhVz4Lzxn`fFuE6Bfq}o#)tTs2ru<CG;j3*Nt6*Cx$Nca!nQB-(OM{V};w( zBwEW-7;XvSPY0K_2srb3i7fcy@tc{e5_gFYWn|jeaztU_Jla95WOr8}u~@(SBD4My zG|AW+k-=By-n?|kyfLzW=g~q-f%iKLQ4BAbMJLqkbg6CB<hOz?=AAhA19KUGF3yC@ z`Dd(TkLBou7#0+J%S&LQipRD5l+aNc@SwK!YGE%{8&AarEawoOWB8=X7|G^`1|f#d z;jUJ~Gd)6vL*In7{ERMqBSTxF5Xq63wC+{_Tfb0#udx++uY_FdiM%wNFXNrvHFG1D z6xc%5$a7yB*s<GY?1AnfBk0=b41ToT8BVY0g&8KRlxky;?fnKP-k8rIvcvC|;HU#e zTL0_uTw8t6+nQHJsDq7WT8f5>8#yMP($VVC26;(B*;I>Wdv>MQbk1Ubko4qizmoLy z;O#%2)EUr!_gkBAwNeoVO(|oPa{>2Nbs7!;auYi7JB;P*f;+x-Fx5wHH72Q_$(&2R zgA&60TZ&<<I}h!!=VC|utzFs1BfZYlEytY)`QRHcE;v4q2Z}EP3W~1)3aV!p@#R*% zlPKD`WDlIr4dErBv|Fci{ao62`aqv{d<h`7w8lA=_2Bp^!938LA>HfILAaTx>+3z* z;turOfUjIpc`u@EOVxKj$>jK{!8F-63?5i($9tAr54_?8l~7pLJ&G>9+CRfWJ<>5< zhjnV`H#x!6MS-Nii@fB7q$whf)GMWs;wvRT+%s%Mrh`3h1|x5%c<iR@tbXLFgBXh+ zwA3+>b+8G3^D!`7k9Kr$2pQw*z(bJdF5YxRIL6(b)ng6&O~-sS%DF1BkplMRP=6Xn zE0fDRZV2#j(uzQ&`Wu_Jfo-}C62{Hb6X*1Ls)3PkUBIF1u#|-}RJ-11)92@-OUQhl zZNODu^X3Zq3AU@4R%z9Rt~*{!sQ10}bzWSO-Fd3PpCv}FcL4@VLrJnapa66M`wRpA zQ9|zHy7%$Ae5A{Qi7<`c1H0Rw2y8(g5E(l+GFvV$^kP5(>bJ#jO<uBMhQ)G|o(wLK z!?LL&xLxr+Vuxz~XCgeFZG(h(J2`r^vhu5mkMYut9s~1TW2z<X+=dr&AY?&!-b~ME zzL1IdY>-kl-Gwkwk{b_3!*@AQl=!USk6VsQ#v)!1!7T2rON3AUuzTc=%0xWv`=3O_ z3vSP6l6||M-|@G;N53Iw`gtb-7VZ+=VORhUQpLya!XsEz0<{OCAzzbU-BY+7Aos6& zNzJQnmuWql7K40EloQf2iF=w?CX?N8kLe@#xnYav?%h$VRx(%L5_9=hYoI1b@c5ja zn~owBssHm`HJMe(2&5=dko>jWXM)6uE`}la6nsl9vA5hjQvGB+Z>sks(S1&b<=W54 zj_v-360iRm=sY7IBWgV>b!rIx%@g-fow{i;Lrj>00$Jo~rIXsW4>!YYyQF$dC%t1A z|7pPHJ2aSCX;QXRfBwp^tZrub?IDyV6?bgHV;7f>X!$L-O>ss)S@^!34b!utbRr_a zQMt2c{~4E@GZ$P9=np`OvSz|st#td0VDfU(m7my-Tm71IGTxbewL43M677&^xe>kM zAdI2w80ifMJ)rl)**o;%sYzt%8)pcaexy=G`@l<*Y87<qi7SCEE)y_*WWu&vD@fxl zyW`rp5GtiLI+rFx0MIUd;i-248M4)pPAGaJE8gsD4hz<yu$(%f|7<2#haCPvw3;x% z$#3pWsBQ_B)*6C#O6^g7an?Ko30UeF>j-?Z!iOkJw*{{MW!dbAR~r635u6<w;D?l& zgyJq0zS~%a3YUg)d?4IDi^}ZV-Q7%&0pG=<T>ER)8wdl=O+~a||7}vSvM?oQ(hz{e z7p#ez36<L|<OZf6!6_A`<7k7$vM#vhDRe353USA<ayg0Nb)m6n7U(KT5Gf{`cjv^< zA<N9!wu&4K$jNNe`=-J|{1N^fC;Z$qenWz<#iKtP!?=@YYKs1AjAhSLqg53gwm5<G zd}6^J%HN#lm^m8rkl-s1Mfo|x__6LZ?c4AgY@^CVR-;eA=M(uz0UH#QG(^;?l~Q1U z?7K2r&$pt=Y*)XFW87;eMXW>7L}SbC9^8-e-l{~Gvs<(~WszoS!o$7ETrhrT#5-SR z6uwam!33(7ga$xt@=cz7Q7#I()fc0EYB~2(zJcJIH?Fly@opQ>GOxYUp=IS?Qn{dg z8H@2CN|F%RnzD~|zO^)JShmh&Xl<&$H+DOq9;qGJ0`2rBjF*&QPLy#+B(<BI-vZT8 zTqnS`M7cvWg{)J?0V=S2;Q=DNY1zj*$GUAG1qcPik?~9|lIXLjwnGP;n!Uu!7UK8w zGekaae<$Td0Z#G?nf!P8p5eB9KRwQa%HN_c`!GGI-FnvT5-ShW4@p|d@<1zR-}qjj z>7gZh$eQyJa?7>c|8o#deb`~kqh{Zd4t>iDCBNi#l-7IYF_A6-H)t|})Bkf61j45w zIYwUj@WQ9N=|T4-1|(mWunQh2vbX|yB9#>%?6!uW2ksN01>JpyZ_I)GGIE3h{(jjC zaPX0+9+@LmIk6N}t@6mfFTic>0DEBDe~IT>$w0k^;G?O*S<V=>k-dgEWL%L$rlRAe z4BObQ$UqV7zA-f7tn`MiDQ~w<ItTwrY+Ex>K9bbQ_Lf*2XW*J=f1a$ps*4ivTQd(F z+LhEfIeOcLchW(#V_9t*HlEiCw8bVAp*bR+fwTWBNYos-*_P3j;V?i)zIqo-jL-oe zRCQSx2!uhZGEhq=CM`&kWT=Yg9No-pJ!zXBx_^?f5u9PUMQXpfJiIw%hA_VAG)XtU z=?8bLF5f|jgW;DRBrt(20=TE(s`^BN^-mhsyS?0f(g7Ke76YV#iLasDtIUOy86~=f zep;C*EX;+oiYfR<RYWN`DFX1TiQgMY-KnK4BevYCL1&a(KIYYXCWHb3X=L~8>_B+_ zzwg3R9MDQ;dn4=F?X*&~;(RwqWuxJu{^GVd3kYee3KG%8Ec+qQATn7_CR+A-bHcN~ zT>AOId2Sho;(d%Y+W$s4W{BC|p9U^=7seUyga2eR5!u-Ms~q(tKGa7=YbV0>3_sqt z_d@<%+7^Z}6xq1Ar+1GC$GT?1bOzUG52vV&_YI*$GoA(=Klw4Z52Q*NWqo1Fe#<cl z9X*~M12$+z@RT{c!}%F22G^HrHnV3RJTSX%aVxWY+s+TW^=~Y@XFq)W6l^P$SC#hu zX1L1BMt)logm5GA2~hlB5vQ_ZC)OJo2q-8M2nhaP#8EVIa#67`axkMec5?WaapE_{ z5&Tx_PsjCM{>=LFLbyF!G7Jda^Ex!e0S}|D$_IRYeEpuEloU%7mEL-;;hUZ_k*icC z7044)`^C`b{j}emzLW3Q@pbjQb(JlkAdu$I^L6xOpzzc4_P9sx@A+_c9N!Mu+3uV9 zcKmohM)iC3uzIhV{BtsTKU2BtN|xMym93p=v9q{BMxP%2hYl?JwM3R4;I8*h+d{jd z`gCMje%p2Loa`=lriFIeHT1DQ_(s|*%(Q^XO1E^TntOk*n*T>7_(%I)CLG}PUf4nJ z)!*SF^o4agqQLg08u%D4L#B7`SXm6vK1ODdiOFe%Q`vI9xBj(T3`^tYU8W5t5)zqY zI?b(=6oO6hGBjEWjgI9OUPNXJCvvScnjG&Dr7HQI%B|7TcC?WG_shKHeJ-$R6_<Wu zH6}oDOQwl<BPD^^j{}<_#-KpuYYHU{`8s{s_S@qP>Z=nG#wp%mYO8@KOJ}!qk4@|3 zh|sb()8O982RHN8`?*P9j$`}bew%&da;*u*<sf&$<L)C|z^~Hp+XJT?&QDyjhf>~C zgBO75Z>5Vqjk?m(%~Z{fmK+zY6^?vX$Q|tFZB=`&Y}S{e*{^HOlLE@LyQ}S-+GyTa z1xAWZ<BSI|c^W;ZoF&am(8!^AREw3AnE2gOt+uyBPsSb>vNqnO?b=AKMGwyd1GdXj zwH6S5uHD}gR%tyo72|sM)W8<;ww}&-s|2R$x<xdAk)F{~^XK<ta^kX~BU){|<Mf3h zgBAG|(HX~-)EyZ5+ZA=vmSz`{EB<|L&@+&9LrNncaYv&#+Q$`mhh7Gn*F5b{mtjC< zhaYr~dRBFOI=2hovONq?S?SmU0{)rmrIJ@j?U*MM5-sIlkItPGsa}{T5MbIW&7X@g z3M##25Dc(@;E9AK^0NDY3&SdPIzzOw6xZBct3MDGUZqv3QaZuvT3n}h)GK>cacXq0 z&05uh{dQ@SnsUH2X+~_Us`$EP;I^QnPQTBoll3Vy6S30%=s$tqYXZ}HAS<lffji8D zjU;;2ccAN6{VEk!6_ZG9DgA5&Sf}(8RAb;vhdM@D;we_B%+H8A3Pt2kVE*los94nE z3lo!7T%N6p0QJ=~R+*dzegMI9=I*fa>%jmgH*<xmK8l#nO|3qTNS&*?o1N51b5+$0 zG}ojHcv`EvIxkLfsED#r1Z?ruhjrnt<AjFz*@PpIpqA<;qP<aLN<b+rg_$%urx2{@ zaJjjM*sa_#&4K(WL$R^LtrCt-9TMf|#vGR6YnUf}JD(1DCS1pv9jVuU9MNRA_Rv(H z4AflZ)={Y}S6zH8F>ekPTYEcqghc4`DqDK|Gp63Hk8estAbPDRQRcNoOBb)CA=^uk zu-00tJUmH~w*7gT60Kurr0i4qT3cO`L<)Pcz^0|SmNvQnczJ6vom&x#pS#?s8GiE} z(@a2*T!o64r-qr%T{}LhZ>Bx!!}**`k3;mr_N1q&HX9|W!wQ;ZVlDo6FAu(D2{G$o zH}+a|TzH#(IIs-Xq@mXYoO*X;RC+m&GL{%n_2PT#i_6spf<~W#FB=5!6)Y-^@{S|R z2#SlcvGnfe?gX8?yyWBn?d2^fjdTtZ2Q$<f($>f<bZkK5@hBy15W=?Hyw7A~C?+&B zi*R}tQ3Dsx`|2U%tfJ!5TGwTcND5KJo6H(Lw|l|IPrg0zPLnAT>*MX5FGmOZ;rf11 zTO7rH*yV+d3#pC|W-x@|&kqp+4%T#u$7vCU+UWWD*-#0vl~kc9+itF;%H}%TZ6M4l zBpBDfq2#dva$zXo+u0^F4>nT-POWAFvcecBjG;36>Suk6gr6v_dm*77HGj1{l>rk@ z>+7d6R!H|f^wc5#)>QxX^hrb<AB7~M!O?Y%&)TPu=dXWx*Z5ui@CodNT=b`lYzFX> zW+lQk$ig+80L9Ngb8{3BxvGj#p+UVUulTg@*PgAJ7>QFIfjTow-A6?#dI5}r%LnSo z928AwWg=M@{-b@Ge*CFn1<H0vR<k5@$)}EMaS||L#c5m628k+AF1pk4Y@^bdX2(y= zg?fEPWQ9|ND|A$~mVNyKt^z-n5?m07W~L`IP!|reZB+q8MBsmF#-spZ?$-egJ1Px) zPkCcoX*c8u*koKo?2*6-`8;{v%D1=MSz)-lzJ7e@-}$-SyPEpo=<m-)kf3hT==XoU znX<MyRdqG~;G)leDePAAcb_-qnX@-%Q)4IPBzG~Z)t;D6GCUsx37hERvM??#_LsE- zteTX%6s}W?(y*OV+d@g&V0WCxL9*<{p|o}iT9QwgN948u5M~kRc0xi!$|~ea%T6QS z&8Y-9xXA0K$inn-?w6bPjppN(?ShS~_}-9A>qNXo6}t$%Eff9uX@0@j_@-LW=rc^Q zrl;xXw%C6>{RG;$ZY-b-;%z$!nB%&Y_arN=w0pA+J^9X=RR1)k(KRkuQ+&_f_g65i z5D>g9?t`N?UfI^4@if8U;^L$7mr@l1eWsK}G}q_Nr>t!cNXMBkNL^gVvtM&t{%Q2v z5!rs6SITCyng2UZ{^BI+hv01knrt!@61ZX+x4mO=W+-^@x6@d79LE;XQTCKrJMX&{ z7b%X6e-7`pu1~lX*JY7_NP1=svEHxu4ZifGiM|=&-zl)#2}eVDAq#DPv;pp-s^v1Y z7Xd9Kl!k7mw7+wi$=@%F|1AIWHM7PyUiPG-6{kQ+=jd}K#q&qovow9CtJELwfQFl0 zb&Z?X@<Bls*uR<OHIAu)j8hCeA2K7PPELu64u=RVRK{g`06%^AEd{h6Rd@db?*Nzk z*c*_Z!Q-g~Pov8$<SLMTY*@u-vwxtDZ*zVcaiV7fa|xX7KujBGDYDAxJV0;59lb0v zDtMB5Qyip$m}<D>k@ofYJROxVq)LKNIVJ(%U%#E(H7VppXN)e6JSRsb>j3W4@gx#k z%tpV;%#=I<T@|J8EjK1c4@^AhS(sMG%-~hIxTdt%Gko`m0Y6ZSq~f5B!LsdUz9x^X zw2At=136OAP??L}I6X{mwJr(7GguxaZ@)cSj`C}rF+alqx<~uf1)24Up1m~IH%M*@ zdf5VyJz!w0Vwi3<cDz4!v6O`^LrY^Di^}2RLitV49mE}gQ1;96H&9Se{~7SO*)1d= z1i*AA&&<DH=(a?hMW&ZTz=d9h`H<>@g63`?pV4LDw-U|VM(|np;-U8C7y`wJ9cRm* z>xu!}igc&%K%5w*2FM)ZzJ~3_1fWBh6k$6}8fZHjC~*Ap*P3>MO-u$NC$uOM7~X?G zN{|rSZ!&BTgV6OB<j{TRY&e)Q+xSA%r!yKd-h;UWGXj7NNy6aa2#kbqS#!1n1P*H$ z2{i4ME=GcXbCC;@BPwwMQWK^rC+c|_mFNiNdcl@@JA5qAH6FFn5}KzDusrbr6q=p% z;l~EHoFaGwcG_|g3YeCo>Mv<Bq?@-f6-L`!|3EU@{Kk+B?LlQ=2&S|FjWLuM1e3_d zRQ6p~pFpyt;&B%PaM?OhppqaD#0*ZFHOMj`;#=%4YhYAt1fC3WNX}E-tlPdc&u_Af z)jB6*@<CP*mH`y`YFI^(TP$g~TGkZ85U!M2#^k0=7KJFrVIvMhi9!GH3S_B*tOk`u zTH_97x5~sjf<}bpb{=xJ$&!I))_8}NAPHhc>J7!S^CwoOAZ5L1^}RwJ8t2*>f(zz* zW$e%K1qQrf)}Nk9F~;BFr>WZn?-cSA#|-$xA1@=q<M<&wEmhj~nHPf*X1iJ>y0B8V zG@3;N`gk$f_i(PT(!2*$yKQmtk%oGCK{0gHr&Q+2sw7x0v4Dga?Gpn<CNZB`HKW97 zN;2jM^5BrSLhIqMI^;O>I$I>A`QSQBs%y3s;FQi3qms$(VmO!EJ3BK&y5Eo)-oebX zg$Zt0Y>%yhd3WeZt{1OdF&0lHa4A(I$S<CR&e@Qggfe1;VvOq!)}(=4F`@x22*rFD z-oqtHJk8oX?|yw*FaUZqe8x&(el7$@rb5ZTh}|htw%X#MYhWDSa@4hXN+Fcm1r-#a zS&*whVi5%aMSjCrbM?O{&r^3L-{l=<$t<XaKES4`w@-M2Lmqa8i;FxIj4TN}Krljq zm@{r%Y()F>nk`x*NZas79YL-te7tjNBU}n6TDRh~?(iI2Ngizn2)MI{GJr*H?xcAf zx4p(UqlkHn?Ue>zv=2mf+A>2uB#B4PWIdv_7ELJotVL{j{4U72a@v_J56JlU4Kn?N z2GQgdmj;AE&Wew)ML}41L_kF2oW>DQI8pXLMUE|A@3GK8?h)+j$k2n;YUEE4=xg<8 zR`%=M%1kJ~N@ygaFhtW|J4l&q*n~2;InA*Ne>+qN{mu6Hjbal@h=RF4a2--CX5%hO zNX#~%0hh5zs2YkH%XKSAylBq0i;o*H#GNODF?Q#S(%=T6R6!snWdpgPKqwq0ODGH< zDKwIyUHJz3=Lt`=nyh#xgc#~~F!A>9yMhS$gqxQ_$^l3+b<`-yF?Cg!o_rHgaK#lz zwh>Ohz#=LF;U$?OsJJx6#ilE+Vvi9*W7*n(h%{zUWV9hgx}iw~Die6ox?y!eq6GBI zCUl`5&)b~Dyg`e`JUKiNf`P(;dUS-j^AkLnyV;&M!u)$<1XK~tKZz?%*5Uio+f)%c z)JmHu6!Ne%S~`<&v{giIG-c{|By#FVS%DEqp(vJFPj`$*K-q1ugyS=JGD?sY@BpP6 zX(Q!+a!8nj6DLBrJmk1hpF9|MaP7sCxoAqfhT+aLPO~2!15?Z_ok%%k<xP8sBp57w z@(JW^xPma4Xogq?7pp{SL8F?~%}!d}45QyDdFTKuo2X0xloZ&SBj<!eh=v0kg`W|J z#8GmFpAazS7FCygXc;UF3c6D)i0oNWz)R_i;(#X;HqRMCLdgmxUa?%nrci{+OodPl zE|2DKPs1qtr}?GoYBu<Y9sdBYD_GgYa9%-*xp?CKptOEL{9_!82KJ0O{M}i7e8bz5 zgd8czM<|_;JXr`?Cy>Q=j||hxeoJY>afW{~f=0w2E9*2MkFXw4@_<%4q*)^Z<;Bdh zU>Zv-!P(0%$~R&a)_+RB15Xsief=&f7&shLL@C<yD0muxZFYI+(1!t)7=V6JClb_- z82eA06(yy$3SFU$uHcBsDES~;4sT7s3aLcJY?=^=49yV=4MSRv`!X{LJ=gGefNTa1 zxlQ2+uh~$AIy`SP663)2524gEg@}Z=SQi>dSs;{brIs3t=7XlDDxmb<l%l`K^f9`j zO>QN@bqH1dLM$4hW`kE~&!dVeHWSz=3xK$h438g|5sy(yWREY=iQcfWf<N6{kM>6( zZ1BMv4gM<DkH*qmw(bl{2SqfT!3JhJqS&*id4pzhMu5o7&k><@$P;8=dnicGJ3f^J zA?fJuWw5o2O>4GS=$pfo+sXT74?H?;syzHeplD-61Uo-`61#0-m}LXP$GBElXA`a; zA@#tn6)-$Zx;@L14A&oY=)sX3<Xoa15H972Wd(YUk*2$Ku=r=!6t!JA6T91j#Q6JA zRbQ^e7}m4<y?c;{frxR{8yfn~Wj3}$F1dI%r^^2kxe1qACjnmONzCMI%7-Po-R90I zm2xj<?XgZ)l-^>yKw?h(6Gj@!X=r}hsPNZo#Oj}Wan~Xg(%hU5<GZPc4#^pARfA|d zY6mE)-qDpLE0W;4+5^lhU<xo1E)d45SK94^z;^xWvAKJUTpiLG!Y(l}J8PU8FMhe( z%z8gxk3y&qz7~UcD_&+A4-=QSdkV>8#5&7k4~<ZPS9edqw>TALm`h8|Wz0TfTErIO zy8tkQeM4lxj`M&Q1n23`CyV`H&Y;o|B@x?j81T-x$q<fxGu(#kBLz?R09Ng|q{}zt z|E4sXehxQ>z(7Frus}cv|39T+`VXdQRhP3LVub7c&^YXvGmC;fIEa90m&*n-K7qoj z4$)o&LHY4>drPp`RKigzq%Miw`P=-36A_kd!HH9C*(J4dc3xoqT9kJ@b3SaxQZ3<T z{o+Va4&77k++8YECoDLi;p|JbU;%MXyWlz-BI%me`HDmxDqYNsbk+35tb2H3RQE0z z-!)BalEO*Vd)iPmI`2J?SNIVqBc$g^gQZsZH^@Us%|>6mD*h%pp7=reenbjTQZ?xv z=v^Aj!tj5m&9@PEC;+#qb%@ohmhr!#<PT;{vqssqu9hh@SQ*#M1l;;e+a2--UGA+p z9^oJvb@Y2+X2@ZL;nVeiH-sNRGa&<nf**s^@HU@f#2d$9J8HTaDe6tDMcL&Bf1`!P zJvtc6W`_eoQj@k{E%fqx>qSY;LxH5Vb`A>IjOAxqU#dT(D}N-ww`AJ}R9au6;dT%y zm1Bd9FN+oF+~Vi|O-<e@4gl^$cP|4F{wgd&0&90X?;yca>m}&))FzD7MeS)G^C-Vg z1RZYh@#?xp9tI(JLfslZD$Rkpkj$^=IdjLIW8m(2F$nHh7YO0k*!VhUasE;-=X;Oc zceaSl*;jUV=m;P~?6?8Bj>izC0`lZDSQNPI9Bec@1!&#=f7H(FUok-=XjMcK5(r3L z?7#K{^MCfklCGZp20NPXO8x8syF#d>@2Ved(zWF<M9FDhY|B6V=a?7|^7X<K?!=?j z(?U-+H?b}(shXAka)3vmPc=cmt*_V9>yzHU<G;3ZW#4xMn5=(OSP?k!zsw_W8$G(V ze0h4lbMw#t>g(U;+lwCGOv#*>%)WnB(3kH@w&Yj0sDWm&<Uig}xX|0f)t%-uavBuK zK7sJJ)z9deyv=pp@&CELRh!2f|20-8S4WNEf4&?8Rv7w1k3<*jfEVkRa+|+38+{U9 zpMN<%-m`7`>Zkc;R@rxQLI4=c8O!3>C>99Vpvh$m{aNSgwSg=ONoYGFEJ7c{*w>rr zGNnrJk?rDZYF%UYX6RdH6(a-xOHm}KFZ|?R_xV>0Ik9q2c*<+INILOn&H5|<#DKOc zLUlq@165GAa=JdinO<GSeV$XXphxx1PPS`akY>&*xuKv@n*ePJvW?axZq4$-jiR;` z3#%l<nH`o@<R%vZ>83BpO0IdGb;+x(OIiigxWXiWEH1Ye{BT~jX|>ZsZdhYoO{_pI zCJ(MPLTkZB^F+(q0ye@yAgHP(iewF#W>i~GW0$GDbwN~lcO+Ycx%tAWdL#Bin^)z& z=A&qtBxeO9C=GO9IDeok$N27g;NA0~4!(l&1q2e<cd4|2UL)7%MYm8x>lX=r>^QdG z2-5z{FF*0y+z;mjtdXAWueD>)d3)aSHrwn@n;DX;T}L=!>g`ANY}4Z-G0VVuvEjn6 zU2lK(2d9kDZjogz!smrrhGFjH3;x`<=A~W&*Yzq5dyuUIII?3E&G>>Gu1y>y90tp; z`me3_>@Q!}$diEZ`kx;EABXPle$PH0USfvk>XUGPw-rwKTT9QRg@BO+KLb(+(b=?+ zIt4J2!n$2Jz1_zK9AxeIMI%&iS>phazKf#<53ohMz=yn6Pe&2vU%&LS;jTFK=4+Oq zsbZ4J7qOuQ43@cz@ym5)V0m(PJF0_yBAi?1auMx4QI*f+Dc)WE#CbF4(BVKiaCaBX ze%<yI!;V|aeeljzPUpBOWW)ubdUxtOMwQE6ts89l9Y=Owel4ABVMcVfP4oM_->GMv zJ$6(w3q3*6X(5KY<rbnQnUzw(f1CBo=HahHL-bN($^TrNJe&OGt;xHg>U7_P+d)CY zVcG8q*MK1j)9LwDj_(HrZJb@J{Tuc43}!{p<CD&Ea5Y|`Pxka_Q0TO}Lw4zPpk%h0 zprOBWHa;cJW>Axdx8=U|FT@3=DusR!T6jAa?c?OgUhw?j_R9S7>ARL0fsZh(w#gUn z*DbudfaMo@4dXX%&Ckuo4X==5gYIq4svd{rO_kP(b<Ddh<nL%C_dwvkNGfu;q2!TU zJz-r@6JV_H1~Xb3GK|<mbcYhgk|_u5AOKQ+T17tJega$xGdT$}kUTg?-vZ+`VIab> zfnX>>Y#wx_5oKTjkce~dhBzTK{@=zLB(n*~<VH~z#t6K!__K>d(ZG6aM^dsx@qDsN zU?w9FeRvfmnezoO(DTKASdkftYStrR3e8K=UB@j+Hqeqw7@F94BLbJqiEHo*U|tJX zD+c(P=xz3d!Rl<dkTnpLWP{>q!Yi_3baxwob(fZ;bcqsub?**}U7#UiBBG8EeMLzz z_|h$5MoL=(Ley@_B)P^yVdzIl-KdSaQk4C@Bd?U#r4qYLjjOLFMvP4v8qwDdBN*wn zHR`LHsvPs~g{Zfpm54~15%rO@#lsABq77v?2z{6i@LN)2HZh6OJDVyp`Xj(3xwPnk zgV)lz)P%?_4u%2I#bI&S{edovaRN~Se~T)DCda}#1*Q+1QqZ@1Tm;r6!2V1gb3l3| z(FRYFv!ZsPM(_w1gbdiAo0UsWOVEdm)bx;oVw##Kk8kXzvF!_sn2TWWnpfv2)^FZn zB7-z{c7(-iP-YV}uc1z+rL2}rEZl1U%Qa+PdB#dbpJu5fZ5>`}miUc<5}--I)JFn_ z6V@<5u%=S36qXX5)WdSo3u@4qP_+7DhWMRGNzM03P}Nw5p&u9|^ezMYuCwh8_zjy& z_rKeNTDZY!Y1<KLiJ2Qrpj-Pl!`S%Wm_N`D+ua0+<lC4y2O$gQ%WO5rT(e}yt%s1S zXP%K(n&Qx-n;-}}Au9vb!dqX@szMNf(t=ky5Q*sMKY-MYbcAk1G-Kjl1%Z-xcule0 zp{{R3lUWl&A6_QncK0TR3&~DX<|+4pnwdIn744WRbN^(@hoR9A9?*wy_c~dvI1rIH zt8gt$AQ4YulE{a-yp3WfW|j)WL?auvj%V6Y;LkE@k3n3~*@e<TZlPxk!ig)r?fxt4 z<n$8;^+N_8b5Spviko_eNny~`d0FIaIX^F3q$NMBo??gZ7CGY3Do*q`bs8P4K78QY z;oL~SpF7t(ZY$!{Shce&BG#!v=3M{LM8BR@Pq<U3Yck+;Iau3V;{S`MUE$Ajl~>C- z-v9sZVE^%4ovejT-+!K)B>rEX%km%3-O`n_-(*MXeb6{vHLVsTCA&JuTAipAgI$%J zfu(ST!`dDI0N>wygspdIJ5j=y9<A3R|8A3Y<OJL}nvc|Qd;2>+e}9TNc7C*VZ|VI| z@}C(*8`N#1_1gn(+K=9z9Y4N~_sreP{WkP$0e8b9h1R91ej50G=u0&`()XHFiDQ$b zp0p|TvP!2#i(*d#D=gKRe`g!Uok>`@ZX{q8mU|iYmT>ylPIkV(COo}w$7{l*5T%=! zL!l`47HjhwWFV6{H(c`I{el8I1z0KJRumkcU4Fiz-#!%=aYJ`}nJcL8dKqPJ8IKpm z`!5js1_bL}mhs+YPT-0Njma`vYI&ozW9Zhpb6n(=N8U18coJIAe*edSd4)!?X%1^5 z42<vmsec}X5_hTm3%z;^3;yi=j9P!if8@hgfoa@nVxkI4SJ1}?sL-oRyKizT685Wp z+eLNX3(_oDH8&KnD-)QGO0?0|BCb_BcPFbV!@xOBc4mO%7<i{cHn<xIwH#~N=2`G* z=^jM_FE3IJ7?0CWgTKyBHm#O=Obu(ytC1C?wh|z=hG;$5XqIbP+rUaH3ItY_U`w=t z(2W1bfD0Kdu!$-5;l{TgCnjsE<=b#qEDjiZA*);sRK0@k=LHj-1hdXqBv14vx1UP# zmv5AVo6hu0kP;;H5YBuS@7xv4yb@i!+5^H4gXoRn?#fa72VUjB$RuNo_3OTk?-Cd7 z*UQUnvrBCh$ZB80V93qvA+qJz?>>u42GWa+cKo1P1u{LhColE#UE>Tt-sa<nxtkC8 z^Iwxkd+}W7D=_UrzAoU1j-4eH3UbIcaim!FmEZHbHvlW$Jl=6H0U!B49o;?sYukDP zTh|Kks^|M>-#1t2Rlu>B7g|-oaYVy?k|m-EVIegNU_^~|yFonzN5jUVl58m1u~$ru z5OHVp3gK%gie2FJ-YXcZ@YA}Nu9Yk$2d45Y;%SmbcpQbYlAm8qs@P|oYhL=AXK+V# zaQ95piQ4X5J#TW7Dehe*24%m7vaz)W6811aef-w3Yu!zcJ!<U?(p;kWD7H|Kiw#W~ z(tqXHq*Cd9RBy}#9m?zJ`)v7%IIS$7FQlI=Sar>ex2jF@nEP8-b%IL4#3Gea>sfxP z*dHZ3pTK{TH(arQe**ZcPh77w6i!k$u{q=*MKZ_W%HWHt1;nygH_=vWGo4#DFTJw| z+N_qAJsNE2>X1J|Ai3jyd7EGJmZjrDmX!zRE9-P67pn7q4m_@B_Boa1L*eTOv5zrm zQ@P;O^qUzIG53T*SnoM7xSZOg(X%gHNTATB1U%JKy=FQWaE?x#cL$C&qXiUuBkpeK zJgrPA)Dh|`j_j&6b|(d>1)Hg1Jv+j#HZ!`90WTrd;cyZHEAdMOPh-ua-esbxe1A@n zr_Rh;pfktukkCp%&jE1i_RqqV);NW&y@X8^OQE;Cg^$TZi{OwgRSZKjvLb1ORiXKa zJ8-N58qyD75QX2s49~pioA640!xA+;XPn=a;x{pR!D&I|05@3;nf}qgwylRP7(F7o z^lQb_!F9Yv)yx8Gn0<9KZ&R#?)@9@4?=(xy4w@tv-}8cpM|r00&4i|htVZ#IVy6Q$ zi-N&NlN3s?G%u<SNAC<2N*`8}ThuLj2I{hkArQf=;TOf^6OhU&DckG}L&*g@DS~8) z=gQTQDQN*Y4mnd+E%+jx=ya}ZexWuyEOhp6f3B30n`>@*MPxOZ9-R$zrfd8I?240P z)ZW(AY8*ET9t;25G%VJX40VC!*Bc1%nI&{vXGqUT$EH%=cm~EC8NPt5EN!E?C2s#b zPJ3d%=itSl=f(l|fVIpdrSqGqfbvO}Yta{nB-yXEd_rAq>J%-%Vhx^|RPOwB<`bsM zZDxGc-M3h}D_iuVc84BJ;av`ElTWt-VcO24^peW+eHD>!VAQQ1au-3@^$(&$4w*z1 z?R8ygEa*>&g}8g%0-jwCmLYp0n>Z=^&CASHy2x7H8p%1~TEu{W8Lu)Nsa>%SbQ_#N zOftHe+x-=^Kuk*KWUzV<5fffk{MPi{Gs$;{e=qAjniGzcLh0G(i-pF2zIEE^$qPH% zJE|Mw_5cnwIRpJ<4Z#FvN#bV&;#^-Q17F$Cg~j%SQODyT;|+MU++Hr_8N#q47+elD z&7QGd8xUpMbk`0-G>iynj5|3#2!zH5qK9mpxJuU_BBz}|=cGDy3Ps*w%25QNyw;)@ z#gx_@N)^F`u_=Hxd-E7~`0+B{VHRyCQ}%+7gdC7-lnYLfalFyJcEOc9%bDzY5e(Jj z$UvN9^OY79wo;xsn&zh<%3-REl#%uV9Mm7`LFRf0U?~C|%1vP6<L5NmPW_Y&977XI ztV1vMD5XPgEm0kKe2+yh>c(QD*ous{0u9%#G+Jy7Ue}?^|CwR{jn#x8=RE_8JcvvP zi=Jht<DO(rxSj*bcKFliijaG6;inh4#9S(EcN3r2JIz{^i<z!eNT;wA+(dw<-Y(tt zs5})U_IdNm6-;Z<=Kg<$W2QZ!ri_2EBns-kjGFa-V2SFW)sP@k?~KM}BU|hxDfw8j zs68DW<#SI(EAWJLQIP)*c6HENqMZpYX-)HF4~P9d#Qh#AAa2acio?xT1Cni+;)&5; zmBCym)4{aO++Z=3Zf|XRDh;7E3JAFS{avX`4a{d=7{FSXq>vSjn5bMKtcr85*J>ah z{q9qvCfqI`wd_yeT!9*fmfR7tEwmG*<=mzXDwQJrW~^v@2upv2^6tA^B-$5a_YaM1 zg1Z)bVov~m@;nE!^#JN^F%qWH3vaDC>Y-E`-A|Sh78#dSh%5$8?m0Xe^88a_*NkCn z_xrlM^=J<KocT{6rXoPGIA@UfSPZ*KZd7v1=D$e1bsK7>yOl6Z(nh-Czl4%X9jc@@ z2?sRAT5w*s0$=uH#yDCqDaqYPCQH{4pF<G4))F)~pM<K{1tLbbI;&BND>||3j^=4s zb}P~t-j1J%&A`6=xGp--eaQ))?VHn&-x(ggYfo7o7`f(ujJl+%-*ve~2^@!Eu~T7{ z{h00oMsEb|fPZIvCg`mC47UFR9G-Wu|NF94MQAc101gB+O8;ML$o8K#ywcu~-(*Dc zebG2<B!iE-vPtq470mZa7JTFiN+Tx1aI9SHzrp@hNJMZGXCkcA+OkexdDWT2#bUx^ z<$q)0f3wTTqpw#_uW=&Kg!)D9?fTB`y|cCDGAiW0;@jWRtEpG%UcGRQU|`3hM_v19 z_x4CZL&2w%WEm=o)0||Q#o(`h0b{WHkU35}z51(3_8@)&CN~wPAN%EF*#5%4*_am` zJ2x_D)L`8!QA%8(t6)syBrHq!b`etquqW_Q`0>KA)1T42F&PByx0zo0ni<baZX#zp zsd*ycrp7RkC!}(gMX(IK=3qG$OSf8{<6`Fq^f?sGVez!VmP=8>sqrR786ZvhZUE!U zPfDDCLsL~dWiBM3wa|~}%U(hpu<uDv?k`(Vw*Qk<C5?*DfiMxTk?M~Fx{TM7C8c3m zW&B`TP`21z*4m}F+B7%iG`CFNTbOW86*dv!jc1wA_>`Hw`CdCmoBE2#GUuAR>Pr_i zc~Cv_JG6`{o%ymV>PlO<cQIN@VKQMJDPG!ZUpa}=*9-HbsYB)gUPlWw@0TqmkA6;I zu>+<pp}BLfBsczop-FZ_zU&TPX;ggW_WW$J7irU6rVy{nttqx{7b>FJdkaj)J~S2Q z<rtx5`+zIv&)4p>*HZb?QT)SFD&GLn>ifrd^+9&@_4((wlP|Y!Rq;o5{T7vWs(G2b z*fJGFkTy<gQ!+dhv@HUvQyLAH6qm}n%ZDmabdqg)`gtSmFE5mja!jv`JR47G4>`yw zC>FFa$G%i#YM-`u1spyR8v0@%$`eT?$<lVl<&r5#*Ydn`BHYqUp>tTRLlN9Mx?Ade zZvOXWz2bW{^;{p%o?7PhUDJ-1RAVa;XQsWkVOAIkLFv@4#n)=LBz2DNzk3QM<I#Y; z%5l*OfSu=-FZP!EoWP`6z5Cgn!#FvCjl&B$ZjT#yE2*a$Q)PvP)c_s8QvTdY)2NCb zy(=6&lPw%SdYFO(SJ`eJ=(wZ<7bfjgz2V-<uR0P+U5t$JMZ;_Emj3!$#?fMK9v?Jj z3#TfSh4ynq*ASEfq_wR-;q9}2N#794zklc+e|+u|FeBhbriO$eeb|9G+SyvxmF#&E za>!bp;hJC^Cxo-1FdWw=d2G?l=)=S|_lxlk%17xkqbDDRL#K3Qm{?BLf>0VMb-b{` zJLpJr-WOX#B|hJQ2`u5SNFqw6RLPOUVOEI@l~IRDZH<J$Qd!M{sC1oZiQ#zZYqb_x zsz~WGkHqPLr-0Mp5*dpW1pt{HsmF$>*p#Np`Vr8=E>#q+AYq)!8T{e4g{VvPT6=`P zI2u-m2OE(tPNLL?;Q{i$xtPdljfBDS9ga8?73$c5!SWU2q{3jVj3TzV+={cUP<Qd} zBg^bZ(K8u_Xu|YgqJS`96fQXNO2D<%pc{OeF(sdFNj-J(vTuJ_4e?7Be|Zl)Cp_1N zmvv=cxREq4IsnnGvPq|S1=@|cl5W?@+^3y|#gUksEzaKMN?nRet?TOa1a<zF?fn7v zOD0<~0t8-4*HK`31nm;PI6nLn%xxaX>(*I_bBD)WiSVX80k0C?+(P=GMJ(zW4u>9Y z)fz72hGL~%Pi-3|0!Yy52Lh_u0VMLTa>tTcTq)q)@REW{eyi)bS!>ouk94HU<Tg*P z)w1zo!kD~J9KQiBBoQ*+o3|HJK%gEdbm0+|OmamUvX~M&26zKR5mZ+X;#{$PFkN)% zFD~I&{)uzEBS5}t;RE+D7pJUiv$}MrFU*zdd!E)ⅈn}|CZX-7|L_3f7Q<^kN=Wd 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 QiP#z$3GxdO{4;6)KS-C%9smFU literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.stl b/apps/cpu/Multiphase/backup/JetBreakup3.stl new file mode 100644 index 0000000000000000000000000000000000000000..a7f77cbf00ea06646ff3b8e6cfddec6be7eea3b4 GIT binary patch literal 11384 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp b/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp new file mode 100644 index 000000000..b5a8a9eac --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp @@ -0,0 +1,482 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, 20.0)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(true); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-34.0, -20.0, 1.0, -31.5, 16.0, 46.0)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-24.0, 3, 20.0, -22.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + /*GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-24.0, -24.0, 0.0, 26.0, 26.0, 3.5)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-24.0, -24.0, 56.5, 26.0, 26.0, 59.9)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());*/ + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0-50, -20.0, 1.0, 130.0-50, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0, -20.0, 1.0, 130.0, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(78.0, 3, 20.0, 81.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + //BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + //BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + //denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + mu::Parser fctF1; + fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vx1"); + fctF1.DefineConst("R", 10.0); + //fctF1.DefineConst("R", 8.0); // FlowFocusingSS + fctF1.DefineConst("vx1", uLB); + fctF1.DefineConst("y0", 1.0); + fctF1.DefineConst("z0", 31.0); + + mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_1.SetExpr("vx3"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_2.SetExpr("vx3"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + //velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + /*bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1_init); + bcVisitor.addBC(velBCAdapterF2_2_init);*/ + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + + + //intHelper.setBC(); + //grid->accept(bcVisitor); + + //initialization of distributions + //initialization of distributions + LBMReal x1c = (g_maxX1 - g_minX1-1)/2; + LBMReal x2c = (g_maxX2 - g_minX2-1)/2; + LBMReal x3c = (g_maxX3 - g_minX3-1)/2; + mu::Parser fct1; + fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + //fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct2.SetExpr("vx1"); + /*fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0);*/ + fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp b/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp new file mode 100644 index 000000000..b4a6b3478 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp @@ -0,0 +1,586 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + + bool eastBoundary = config.getValue<bool>("eastBoundary"); + bool westBoundary = config.getValue<bool>("westBoundary"); + bool northBoundary = config.getValue<bool>("northBoundary"); + bool southBoundary = config.getValue<bool>("southBoundary"); + bool topBoundary = config.getValue<bool>("topBoundary"); + bool bottomBoundary = config.getValue<bool>("bottomBoundary"); + + int eastBoundaryType = config.getInt("eastBoundaryType"); + int westBoundaryType = config.getInt("westBoundaryType"); + int northBoundaryType = config.getInt("northBoundaryType"); + int southBoundaryType = config.getInt("southBoundaryType"); + int topBoundaryType = config.getInt("topBoundaryType"); + int bottomBoundaryType = config.getInt("bottomBoundaryType"); + + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 7.5); + fctF1.DefineConst("x0", 60.0); + fctF1.DefineConst("z0", 60.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + //GbTriFaceMesh3DPtr cylinder; + //if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + /*GbObject3DPtr cylinder(new GbCuboid3D(g_minX1 + 2.0, g_minX2 + 2.0, g_minX3 + 2.0, g_maxX1 - 2.0, g_maxX2 - 2.0, g_maxX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/solidWall", WbWriterVtkXmlBinary::getInstance());*/ + + + + bool isDefined_SlipBC = false; + bool isDefined_noSlipBC = false; + bool isDefined_Outflow = false; + + if (eastBoundary) + { + switch (eastBoundaryType) + { + case 0: + + break; + case 1: + break; + case 2: + break; + case 3: + break; + } + } + + /*GbObject3DPtr geoWallEast(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_maxX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallEast.get(), pathname + "/geo/geoWallEast", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallWest(new GbCuboid3D(g_minX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallWest.get(), pathname + "/geo/geoWallWest", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallTop(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_maxX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallTop.get(), pathname + "/geo/geoWallTop", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallBottom(new GbCuboid3D(g_maxX1 + 2.0, g_minX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallBottom.get(), pathname + "/geo/geoWallBottom", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallNorth(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_minX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallNorth.get(), pathname + "/geo/geoWallNorth", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallSouth(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_maxX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallSouth.get(), pathname + "/geo/geoWallSouth", WbWriterVtkXmlBinary::getInstance());*/ + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // Original + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, 499+80, -1.0, 121.0, 501.0+80, 121.0)); // Original + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(true); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + BCAdapterPtr velBCAdapterF1 (new VelocityBCAdapterMultiphase(false, true, false, fctF1 , phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + //D3Q27InteractorPtr tubes = D3Q27InteractorPtr(new D3Q27Interactor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + + + /*D3Q27InteractorPtr wallEast = D3Q27InteractorPtr(new D3Q27Interactor(geoWallEast, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallWest = D3Q27InteractorPtr(new D3Q27Interactor(geoWallWest, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallTop = D3Q27InteractorPtr(new D3Q27Interactor(geoWallTop, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallBottom = D3Q27InteractorPtr(new D3Q27Interactor(geoWallBottom, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallNorth = D3Q27InteractorPtr(new D3Q27Interactor(geoWallNorth, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallSouth = D3Q27InteractorPtr(new D3Q27Interactor(geoWallSouth, grid, noSlipBCAdapter, Interactor3D::SOLID));*/ + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + //intHelper.addInteractor(inflowF1Int); + //intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = (g_maxX1+g_minX1)/2; //radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + fct1.SetExpr("0.5*(phiH + phiL) - 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + + + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); + //fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + /*fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0);*/ + fct2.SetExpr("0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("phiL", phiL); + fct2.DefineConst("phiH", phiH); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + mu::Parser fct3; + fct3.SetExpr("0.5*sigma*(phiH + phiL)/radius - 0.5*sigma/radius*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct3.DefineConst("sigma", sigma); + fct3.DefineConst("x1c", x1c); + fct3.DefineConst("x2c", x2c); + fct3.DefineConst("x3c", x3c); + fct3.DefineConst("phiL", phiL); + fct3.DefineConst("phiH", phiH); + fct3.DefineConst("radius", radius); + fct3.DefineConst("interfaceThickness", interfaceThickness); + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + //initVisitor.setRho(fct3); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp b/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp new file mode 100644 index 000000000..33333fc0d --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp @@ -0,0 +1,560 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + //inflow + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-26.5, -1, 24.0, -22.5, 18.0, 78.0)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-1.0, -1.0, 0.5, 53.0, 18.0, 2.5)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + + GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-1.0, -1.0, 63.5, 53.0, 18.0, 66.5)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance()); + + //outflow + GbCuboid3DPtr geoOutflow(new GbCuboid3D(178.5, -1, 24.0, 181.5, 18.0, 78.0)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + mu::Parser fctF1; + //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vx1"); + fctF1.DefineConst("vx1", uLB); + /*fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("y0", 0.0); + fctF1.DefineConst("z0", 0.0);*/ + + fctF1.DefineConst("R", 10.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("z0", 31.0); // FlowFocusingSS , FlowFocusingS + + mu::Parser fctF2_1; + //fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.SetExpr("vx3"); + fctF2_1.DefineConst("vx3", uF2); + /*fctF2_1.DefineConst("R", 16.0); + fctF2_1.DefineConst("x0", 35.0); + fctF2_1.DefineConst("y0", 0.0);*/ + + fctF2_1.DefineConst("R", 12.0); // FlowFocusingSS , FlowFocusingS + fctF2_1.DefineConst("x0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF2_1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + + + mu::Parser fctF2_2; + //fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_2.SetExpr("vx3"); + fctF2_2.DefineConst("vx3", -uF2); + /*fctF2_2.DefineConst("R", 16.0); + fctF2_2.DefineConst("x0", 35.0); + fctF2_2.DefineConst("y0", 0.0);*/ + + fctF2_2.DefineConst("R", 12.0); // FlowFocusingSS , FlowFocusingS + fctF2_2.DefineConst("x0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF2_2.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + + + /*mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_2(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID)); + D3Q27InteractorPtr inflowF2_2Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2, Interactor3D::SOLID));*/ + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + BCAdapterPtr velBCAdapterF1 (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + + BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1_init); + bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(inflowF2_1Int_init); + intHelper.addInteractor(inflowF2_2Int_init); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + + + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x1-x1c))/interfaceThickness)"); + fct1.SetExpr("phiH"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0); + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp b/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp new file mode 100644 index 000000000..9f2800898 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp @@ -0,0 +1,508 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // For JetBreakup (Original) + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + BCAdapterPtr velBCAdapterF1 (new VelocityBCAdapterMultiphase(false, true, false, fctF1 , phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + //D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID)); + + //D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + + + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); + fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0); + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp b/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp new file mode 100644 index 000000000..18651e4a5 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp @@ -0,0 +1,488 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + //inflow + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-2.0, -25.0, -25.0, 0.5, 25.0, 25.0)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(35.0, -15.0, 62.0, 65.0, 15.0, 59.5)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + + //outflow + GbCuboid3DPtr geoOutflow(new GbCuboid3D(179.5, -25.0, -25.0, 182.0, 25.0, 25.0)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + mu::Parser fctF1; + fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fctF1.DefineConst("R", 12.0); + fctF1.DefineConst("vx1", uLB); + fctF1.DefineConst("y0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.DefineConst("R", 10.0); + fctF2_1.DefineConst("vx3", -uF2); + fctF2_1.DefineConst("x0", 50.0); + fctF2_1.DefineConst("y0", 0.0); + + + BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiL, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + + + + + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + + + + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + velBCAdapterF2_1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1); + + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(inflowF2_1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x3-x1c))/interfaceThickness)"); + + //fct1.SetExpr("phiH"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0); + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp b/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp new file mode 100644 index 000000000..a5d20b94a --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp @@ -0,0 +1,529 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vx1"); + fctF1.DefineConst("vx1", 0.0); + /*fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("y0", 0.0); + fctF1.DefineConst("z0", 0.0);*/ + + fctF1.DefineConst("R", 10.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("z0", 31.0); // FlowFocusingSS , FlowFocusingS + + + + + /*mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_2(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID)); + D3Q27InteractorPtr inflowF2_2Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2, Interactor3D::SOLID));*/ + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(false); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = 0.0; //cylinder->getX2Centroid(); + double cx3 = 0.0; //cylinder->getX3Centroid(); + + GbCuboid3DPtr geoBottomWall(new GbCuboid3D(g_minX1-2, g_minX2-1, g_minX3-2, g_maxX1+2, g_minX2+1, g_maxX3+2)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoBottomWall.get(), pathname+"/geo/geoBottomWall", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoTopWall(new GbCuboid3D(g_minX1-2, g_maxX2-1, g_minX3-2, g_maxX1+2, g_maxX2+1, g_maxX3+2)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoTopWall.get(), pathname+"/geo/geoTopWall", WbWriterVtkXmlASCII::getInstance()); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + fctvel_F2_init.SetExpr("U"); + fctvel_F2_init.DefineConst("U", 0); + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + BCAdapterPtr velBCAdapterBottom(new VelocityBCAdapterMultiphase(false, false, true, fctF1, phiH, 0.0, endTime)); + BCAdapterPtr velBCAdapterTop (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiL, 0.0, endTime)); + + + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterBottom->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmThermal())); + velBCAdapterTop->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmThermal())); + + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + //bcVisitor.addBC(noSlipBCAdapter); + //bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterBottom); + bcVisitor.addBC(velBCAdapterTop); + + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr bottomWallInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomWall, grid, velBCAdapterBottom, Interactor3D::SOLID)); + + D3Q27InteractorPtr topWallInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopWall, grid, velBCAdapterTop, Interactor3D::SOLID)); + + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + intHelper.addInteractor(bottomWallInt); + intHelper.addInteractor(topWallInt); + //intHelper.addInteractor(inflowF2_2Int_init); + //intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new ThermalCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], ThermalCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x1-x1c))/interfaceThickness)"); + + fct1.SetExpr("0.5*(phiH + phiL)"); + //fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct2.SetExpr("0.005*cos(2*3.14159265*x1/50.0)"); + /*fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0);*/ + /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness);*/ + + + InitDistributionsBlockVisitorThermal initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + initVisitor.setRho(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp b/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp new file mode 100644 index 000000000..5795ec610 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp @@ -0,0 +1,404 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + double uLB = config.getDouble("uLB"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + vector<double> length = config.getVector<double>("length"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = (uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = 0.0; + double g_minX2 = 0.0; + double g_minX3 = 0.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1]; + double g_maxX3 = length[2]; + + //geometry + + GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + //inflow + GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 1.0*dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2, g_maxX3 + dx)); + if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); + + //outflow + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2, g_minX3 - dx, g_maxX1 + 2.0*dx, g_maxX2 + dx, g_maxX3 + dx)); + if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + //inflow + //GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); + //if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); + //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = cylinder->getX2Centroid(); + double cx3 = cylinder->getX3Centroid(); + + mu::Parser fct; + fct.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct.DefineConst("x2Vmax", 0.0); //x2-Pos fuer vmax + fct.DefineConst("x3Vmax", 0.0); //x3-Pos fuer vmax + fct.DefineConst("R", r); + fct.DefineConst("vx1", uLB); + fct.DefineConst("x0", cx1); + fct.DefineConst("y0", cx2); + fct.DefineConst("z0", cx3); + //fct.DefineConst("nue", nuLB); + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //mu::Parser fct; + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BS visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapter); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + D3Q27InteractorPtr cylinderInt(new D3Q27Interactor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(cylinderInt); + intHelper.addInteractor(inflowInt); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = (length[0]-1)/2; + LBMReal x2c = (length[1]-1)/2; + LBMReal x3c = (length[2]-1)/2; + mu::Parser fct1; + fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt b/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt new file mode 100644 index 000000000..f0d610480 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt @@ -0,0 +1,72 @@ +pathname = d:/temp/Multiphase +pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase +geoFile = FlowFocusingS2_Small.ast +#geoFile = T-Junction.ast +numOfThreads = 4 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) +blocknx = 5 2 9 + +#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test) +#blocknx = 10 10 10 +dx = 1.0 +refineLevel = 0 + +#Simulation +uLB = 0.001 +uF2 = 0.001 +Re = 10 +#nuL = 3.3e-3 +nuL = 1.0e-2 +nuG = 1.36e-2 +#nuL = 0.16666 +#nuG = 0.16666 +densityRatio = 1.0495 +#densityRatio = 10.0 +sigma = 7.4e-4 +interfaceThickness = 3 +#radius = 10.0 (Droplet test) +#radius = -20.0 (FlowFocusingSS , FlowFocusingS) +radius = -5.0 (FlowFocusingSq) +#radius = 10.0 (FlowFocusing) +#radius = 20.0 (T-Junction) +contactAngle = 120.0 +gravity = 1.34e-5 +phi_L = 1.0 +phi_H = 0.0 +Phase-field Relaxation = 1.0 +Mobility = 0.05 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 200 +endTime = 20000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Multiphase.cfg b/apps/cpu/Multiphase/backup/Multiphase.cfg new file mode 100644 index 000000000..3f19b6657 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase.cfg @@ -0,0 +1,115 @@ +pathname = d:/temp/Multiphase +pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase +geoFile = JetBreakup2.ast +#geoFile = T-Junction.ast +numOfThreads = 4 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) (Periodic X2) +#blocknx = 5 2 9 + + +#boundingBox = -24.5 180.5 -1.5 11.5 1.5 64.5 (FlowFocusingS2_Small) (Original was 180.5) +#blocknx = 5 6 9 + +#boundingBox = -1.0 121.0 580.0 629.0 -1.0 121.0 (Jet Breakup) (Original) +#boundingBox = -50.0 50.0 -10.0 -60.0 -25.0 25.0 (Jet Breakup2) (Original) + + + +#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test) +#blocknx = 10 10 10 + + + +# Grid + +boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Jet Breakup2) (Original) +#blocknx = 50 50 50 +blocknx = 10 10 10 +dx = 1.0 +refineLevel = 0 + +# Boundary Condition +# Boundary type tags: 1: no-slip 2:velocity 3:outflow 4: slip + +isEastBoundary = false +isWestBoundary = false +isNorthBoundary = false +isSouthBoundary = false +isTopBoundary = false +isBottomBoundary = false + +eastBoundaryType = 4 +westBoundaryType = 4 +northBoundaryType = 4 +southBoundaryType = 4 +topBoundaryType = 0 +bottomBoundaryType = 0 + +isPeriodicX1 = true +isPeriodicX2 = true +isPeriodicX3 = true + + + + +# Initial profiles +isInitialVelocity = false +phaseFieldProfile = 0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness) +velocityProfile = 0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness) + + +#Simulation +uLB = 0.05 +uF2 = 0.0025 +Re = 10 +#nuL = 1.0e-1 +#nuG = 1.04e-1 +nuL = 1.160e-2 +nuG = 1.16e-1 +densityRatio = 813 +sigma = 1.56e-1 +interfaceThickness = 5 +radius = 10.0 (Droplet test) +#radius = -5.0 (FlowFocusing2D) +#radius = 615.0 (Jet Breakup) +contactAngle = 120.0 +gravity = 0.0 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.55 +Mobility = 0.02 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 100 +endTime = 200000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Multiphase.cpp b/apps/cpu/Multiphase/backup/Multiphase.cpp new file mode 100644 index 000000000..eae4ab93d --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase.cpp @@ -0,0 +1,755 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + + bool isEastBoundary = config.getValue<bool>("isEastBoundary"); + bool isWestBoundary = config.getValue<bool>("isWestBoundary"); + bool isNorthBoundary = config.getValue<bool>("isNorthBoundary"); + bool isSouthBoundary = config.getValue<bool>("isSouthBoundary"); + bool isTopBoundary = config.getValue<bool>("isTopBoundary"); + bool isBottomBoundary = config.getValue<bool>("isBottomBoundary"); + bool isPeriodicX1 = config.getValue<bool>("isPeriodicX1"); + bool isPeriodicX2 = config.getValue<bool>("isPeriodicX2"); + bool isPeriodicX3 = config.getValue<bool>("isPeriodicX3"); + + int eastBoundaryType = config.getInt("eastBoundaryType"); + int westBoundaryType = config.getInt("westBoundaryType"); + int northBoundaryType = config.getInt("northBoundaryType"); + int southBoundaryType = config.getInt("southBoundaryType"); + int topBoundaryType = config.getInt("topBoundaryType"); + int bottomBoundaryType = config.getInt("bottomBoundaryType"); + + bool isInitialVelocity = config.getValue<bool>("isInitialVelocity"); + string phaseFieldProfile = config.getString("phaseFieldProfile"); + string velocityProfile = config.getString("velocityProfile"); + + double p_in = config.getDouble("p_in"); + double p_out = config.getDouble("p_out"); + + + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 7.5); + fctF1.DefineConst("x0", 60.0); + fctF1.DefineConst("z0", 60.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2)); + + //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius)); + //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + + //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0)); + //GbObject3DPtr cylinders(new GbObject3DManager()); + //GbObject3DPtr cylinders1(new GbObjectGroup3D()); + + + + + GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); + + //GbTriFaceMesh3DPtr cylinder; + //if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + /*GbObject3DPtr cylinder(new GbCuboid3D(g_minX1 + 2.0, g_minX2 + 2.0, g_minX3 + 2.0, g_maxX1 - 2.0, g_maxX2 - 2.0, g_maxX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/solidWall", WbWriterVtkXmlBinary::getInstance());*/ + + + double blockLength = blocknx[0] * dx; + + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(isPeriodicX1); + grid->setPeriodicX2(isPeriodicX2); + grid->setPeriodicX3(isPeriodicX3); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + + + + + + if (isEastBoundary) + { + GbCuboid3DPtr geoEastBoundary(new GbCuboid3D(g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoEastBoundary.get(), pathname+"/geo/geoEastBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (eastBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + + } + + if (eastBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + + if (eastBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + + if (eastBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + if (eastBoundaryType == 5) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(p_out)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + + } + + + if (isWestBoundary) + { + GbCuboid3DPtr geoWestBoundary(new GbCuboid3D(g_minX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx, g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoWestBoundary.get(), pathname+"/geo/geoWestBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (westBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + + } + + if (westBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + + if (westBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + + if (westBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + if (westBoundaryType == 5) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(p_in)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + + } + + + if (isNorthBoundary) + { + GbCuboid3DPtr geoNorthBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_minX3 + 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoNorthBoundary.get(), pathname+"/geo/geoNorthBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (northBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + + } + + if (northBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + } + + if (northBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + } + + if (northBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + } + + } + + + if (isSouthBoundary) + { + GbCuboid3DPtr geoSouthBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_maxX3 - 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoSouthBoundary.get(), pathname+"/geo/geoSouthBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (southBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + + } + + if (southBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + } + + if (southBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + } + + if (southBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + } + + } + + + + + if (isTopBoundary) + { + GbCuboid3DPtr geoTopBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 + 1.0*dx, g_maxX2 - 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoTopBoundary.get(), pathname+"/geo/geoTopBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (topBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + + } + + if (topBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + } + + if (topBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + } + + if (topBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + } + + } + + + if (isBottomBoundary) + { + GbCuboid3DPtr geoBottomBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_minX2 + 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoBottomBoundary.get(), pathname+"/geo/geoBottomBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (bottomBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + + } + + if (bottomBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + } + + if (bottomBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + } + + if (bottomBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + } + + } + + + + + + + + + + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(true); + kernel->setForcingX1(0.0); + kernel->setForcingX2(gr); + kernel->setForcingX3(0.0); + + kernel->setPhiL(phiL); + kernel->setPhiH(phiH); + kernel->setPhaseFieldRelaxation(tauH); + kernel->setMobility(mob); + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = (g_maxX1+g_minX1)/2; //radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2; + LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2; + LBMReal x3c = (g_maxX3+g_minX3)/2; + mu::Parser fct1; + + //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))"); + + //fct1.SetExpr("0.5*(phiH + phiL) - 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct1.SetExpr(phaseFieldProfile); + + //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)"); + //fct1.SetExpr("phiL"); + fct1.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("phiL", phiL); + fct1.DefineConst("phiH", phiH); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + /*fct2.SetExpr("vx1"); + fct2.DefineConst("R", 10.0); + fct2.DefineConst("vx1", uLB); + fct2.DefineConst("y0", 1.0); + fct2.DefineConst("z0", 31.0);*/ + //fct2.SetExpr("0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.SetExpr(velocityProfile); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("phiL", phiL); + fct2.DefineConst("phiH", phiH); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + mu::Parser fct3; + fct3.SetExpr("0.5*sigma*(phiH + phiL)/radius - 0.5*sigma/radius*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct3.DefineConst("sigma", sigma); + fct3.DefineConst("x1c", x1c); + fct3.DefineConst("x2c", x2c); + fct3.DefineConst("x3c", x3c); + fct3.DefineConst("phiL", phiL); + fct3.DefineConst("phiH", phiH); + fct3.DefineConst("radius", radius); + fct3.DefineConst("interfaceThickness", interfaceThickness); + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + if (isInitialVelocity) initVisitor.setVx1(fct2); + //initVisitor.setRho(fct3); + grid->accept(initVisitor); + + //set connectors + InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + //ConnectorFactoryPtr factory(new Block3DConnectorFactory()); + //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + rcp.restart((int)restartStep); + grid->setTimeStep(restartStep); + + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter()); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm())); + //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm())); + //bcVisitor.addBC(velBCAdapter); + //grid->accept(bcVisitor); + + //set connectors + //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor()); + InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor()); + SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); + grid->accept(setConnsVisitor); + + if (myid == 0) UBLOG(logINFO, "Restart - end"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp new file mode 100644 index 000000000..1cdf5905c --- /dev/null +++ b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp @@ -0,0 +1,1258 @@ +#include "MultiphaseCumulantLBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include <omp.h> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() +{ + this->nx1 = 0; + this->nx2 = 0; + this->nx3 = 0; + this->parameter = NORMAL; + this->OxyyMxzz = 1.0; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) +{ + this->nx1 = nx1; + this->nx2 = nx2; + this->nx3 = nx3; + parameter = p; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::init() +{ + //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); + DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); + DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field + PhaseFieldArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, 0.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + dataSet->setPhaseField(divU); +} +////////////////////////////////////////////////////////////////////////// +LBMKernelPtr MultiphaseCumulantLBMKernel::clone() +{ + LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter)); + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init(); + + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + kernel->setMobility(this->mob); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + switch (parameter) + { + case NORMAL: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0; + break; + case MAGIC: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor); + break; + } + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate() +{ + timer.resetAndStart(); + collideAll(); + timer.stop(); +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::collideAll() +{ + using namespace D3Q27System; + + //initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + + + //phaseField = dataSet->getPhaseField(); + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + +//#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} +//#pragma omp for + + + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr p1Field(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr p1Field_filtered(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); + + //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + LBMReal mfbbb = (*this->zeroDistributionsH)(x1,x2,x3); + //LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + // h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + //if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1,x2,x3) = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; + if ((*phaseField)(x1,x2,x3) > 1.0) (*phaseField)(x1,x2,x3)=1.0; + + mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + mfbbb = (*this->zeroDistributionsF)(x1,x2,x3); + + (*p1Field)(x1,x2,x3) = ((mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb); + (*p1Field_filtered)(x1,x2,x3) = (*p1Field)(x1,x2,x3); + } + } + } + } + + LBMReal sum1, AA; + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int cnum = 0; + sum1 = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + //for (int k = FSTARTDIR ; k <= 5 ; k++) + { + if(!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + //cnum++; + sum1 += (*p1Field)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])*WEIGTH[k]; + + } + else + { + //cnum++; + //sum1 += (*p1Field)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]])*WEIGTH[k]; + //std::cout << x1 << ' ' << x2 << ' ' << x3 << ' '<< k << std::endl; + sum1 += ((*p1Field)(x1, x2, x3))*WEIGTH[k]; + } + } + //LBMReal av = (sum1+(*p1Field)(x1, x2, x3))/7.0; + //(*p1Field_filtered)(x1, x2, x3) = av; + + /*LBMReal d0 = 2.0/9.0; + LBMReal d1 = -1.0/9.6; + LBMReal wf = 0.25; + AA = 3*d0*(*p1Field)(x1, x2, x3) + d1*((*p1Field)(x1+1, x2, x3)+(*p1Field)(x1-1, x2, x3)) + + d1*((*p1Field)(x1, x2+1, x3)+(*p1Field)(x1, x2-1, x3)) + d1*((*p1Field)(x1, x2, x3+1)+(*p1Field)(x1, x2, x3-1)); + (*p1Field_filtered)(x1, x2, x3) = (*p1Field)(x1, x2, x3) - AA*wf;*/ + + (*p1Field_filtered)(x1, x2, x3) = ((*p1Field)(x1, x2, x3))*WEIGTH[ZERO] + sum1; + //(*p1Field)(x1, x2, x3) = ((*p1Field)(x1, x2, x3))*WEIGTH[ZERO] + sum1; + + } + } + } + } + + LBMReal collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF+1]; + LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; + LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222; + LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + + ////////////////////////////////////////////////////////////////////////// + //Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + //E N T + //c c c + ////////// + //W S B + //a a a + + //Rest ist b + + //mfxyz + //a - negative + //b - null + //c - positive + + // a b c + //-1 0 1 + + /* + phi[ZERO] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, p1Field_filtered, x1, x2, x3); + //findNeighbors(phaseField, p1Field, x1, x2, x3); + + LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + + LBMReal mfbbb = (*this->zeroDistributionsF)(x1,x2,x3); + + g[E ] = mfcbb; + g[N ] = mfbcb; + g[T ] = mfbbc; + g[NE ] = mfccb; + g[NW ] = mfacb; + g[TE ] = mfcbc; + g[TW ] = mfabc; + g[TN ] = mfbcc; + g[TS ] = mfbac; + g[TNE] = mfccc; + g[TNW] = mfacc; + g[TSE] = mfcac; + g[TSW] = mfaac; + g[W ] = mfabb; + g[S ] = mfbab; + g[B ] = mfbba; + g[SW ] = mfaab; + g[SE ] = mfcab; + g[BW ] = mfaba; + g[BE ] = mfcba; + g[BS ] = mfbaa; + g[BN ] = mfbca; + g[BSW] = mfaaa; + g[BSE] = mfcaa; + g[BNW] = mfaca; + g[BNE] = mfcca; + g[ZERO] = mfbbb; + + LBMReal rhoH = 997.0; + LBMReal rhoL = rhoH/densityRatio; + + //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL); + + //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG; + //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL; + + //LBMReal tauH = 1.0; + LBMReal di = sqrt(8*kappa/beta); + + LBMReal dX1_phi = gradX1_phi(); + LBMReal dX2_phi = gradX2_phi(); + LBMReal dX3_phi = gradX3_phi(); + + LBMReal dX1_pr1 = gradX1_pr1(); + LBMReal dX2_pr1 = gradX2_pr1(); + LBMReal dX3_pr1 = gradX3_pr1(); + + LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9; + LBMReal normX1 = dX1_phi/denom; + LBMReal normX2 = dX2_phi/denom; + LBMReal normX3 = dX3_phi/denom; + + collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL); + + /*if ((phi[ZERO] > 0.1)||(phi[ZERO] < 0.9)) + { + collFactorM*=(1.0-denom); + }*/ + + w1 = collFactorM; + + /*dX1_phi = -normX1*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX2_phi = -normX2*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX3_phi = -normX3*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);*/ + + //UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3); + /*Block3D bl = this->block(); + + int wX1 = bl->getX1() + x1; + int wX2 = bl->getX2() + x2; + int wX3 = bl->getX3() + x3;*/ + + /*if (wX3 >= 30.0) + { + dX1_phi = 0.0; + dX2_phi = 0.0; + dX3_phi = 0.0; + }*/ + + + LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi(); + //mu = mu*10; + + //LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + + + //----------- Calculating Macroscopic Values ------------- + + //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH); + if (phi[ZERO] > 1.0) rho = rhoH; + //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]); + + if (withForcing) + { + //muX1 = static_cast<double>(x1-1+ix1*maxX1); + //muX2 = static_cast<double>(x2-1+ix2*maxX2); + //muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + //LBMReal rho_m = 1.0/densityRatio; + //LBMReal rho_m = (rhoL + rhoH)/2.0; + LBMReal rho_m = rhoH; + forcingX1 = forcingX1*(rho-rho_m); + forcingX2 = forcingX2*(rho-rho_m); + forcingX3 = forcingX3*(rho-rho_m); + + //ux += forcingX1*deltaT*0.5; // X + //uy += forcingX2*deltaT*0.5; // Y + //uz += forcingX3*deltaT*0.5; // Z + } + + /*LBMReal p1 = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; + + p1 = p1*rho*c1o3;*/ + + LBMReal rho2 = rho*rho; + + /*LBMReal Sx = rhoToPhi*dX1_phi*p1/rho2; + LBMReal Sy = rhoToPhi*dX2_phi*p1/rho2; + LBMReal Sz = rhoToPhi*dX3_phi*p1/rho2;*/ + + LBMReal Sx = -1.0*dX1_pr1/rho; + LBMReal Sy = -1.0*dX2_pr1/rho; + LBMReal Sz = -1.0*dX3_pr1/rho; + + + /*if ((phi[ZERO] < 0.1)||(phi[ZERO] > 0.9)) + { + Sx = 0.0; + Sy = 0.0; + Sz = 0.0; + }*/ + + LBMReal ux = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb)) + (mu*dX1_phi + forcingX1)/(2*rho) + 0.5*Sx; + + LBMReal uy = ((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) + (mu*dX2_phi + forcingX2)/(2*rho) + 0.5*Sy; + + LBMReal uz = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) + (mu*dX3_phi + forcingX3)/(2*rho) + 0.5*Sz; + + + //+ (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + //vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + + + + LBMReal ux2 = ux*ux; + LBMReal uy2 = uy*uy; + LBMReal uz2 = uz*uz; + LBMReal ux_uy = ux*uy; + LBMReal ux_uz = ux*uz; + LBMReal uy_uz = uy*uz; + LBMReal ux_uy_uz = ux*uy*uz; + + +/* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - + (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[ZERO] = -(forcingTerm1)*WEIGTH[ZERO]; + } + } + //-------------------------------------------------------- +*/ + + //----------- Calculating Forcing Terms * ------------- + //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + //LBMReal gamma = WEIGTH[dir]*(1.0 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + + //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + + /*forcingTerm[dir] = (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/ + + + forcingTerm[dir] = (-ux)* (gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) + + (-uy)* (gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) + + (-uz)* (gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)) + + (DX1[dir])*(gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) + + (DX2[dir])*(gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) + + (DX3[dir])*(gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)); + + } + + LBMReal gamma = WEIGTH[ZERO]*(-1.5*(ux2+uy2+uz2)); + /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi; + forcingTerm[ZERO] = (-ux)*(gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) + + (-uy)*(gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) + + (-uz)*(gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)); + + //-------------------------------------------------------- + + g[E ] += 0.5*forcingTerm[E ] ; + g[N ] += 0.5*forcingTerm[N ] ; + g[T ] += 0.5*forcingTerm[T ] ; + g[NE ] += 0.5*forcingTerm[NE ] ; + g[NW ] += 0.5*forcingTerm[NW ] ; + g[TE ] += 0.5*forcingTerm[TE ] ; + g[TW ] += 0.5*forcingTerm[TW ] ; + g[TN ] += 0.5*forcingTerm[TN ] ; + g[TS ] += 0.5*forcingTerm[TS ] ; + g[TNE] += 0.5*forcingTerm[TNE] ; + g[TNW] += 0.5*forcingTerm[TNW] ; + g[TSE] += 0.5*forcingTerm[TSE] ; + g[TSW] += 0.5*forcingTerm[TSW] ; + g[W ] += 0.5*forcingTerm[W ] ; + g[S ] += 0.5*forcingTerm[S ] ; + g[B ] += 0.5*forcingTerm[B ] ; + g[SW ] += 0.5*forcingTerm[SW ] ; + g[SE ] += 0.5*forcingTerm[SE ] ; + g[BW ] += 0.5*forcingTerm[BW ] ; + g[BE ] += 0.5*forcingTerm[BE ] ; + g[BS ] += 0.5*forcingTerm[BS ] ; + g[BN ] += 0.5*forcingTerm[BN ] ; + g[BSW] += 0.5*forcingTerm[BSW] ; + g[BSE] += 0.5*forcingTerm[BSE] ; + g[BNW] += 0.5*forcingTerm[BNW] ; + g[BNE] += 0.5*forcingTerm[BNE] ; + g[ZERO] += 0.5*forcingTerm[ZERO]; + + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + LBMReal hEq, gEq; + + if (dir != ZERO) + { + + //gEq = p1*WEIGTH[dir]/(rho*c1o3) + gamma; + gEq = gamma; + + g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + //gEq = p1*WEIGTH[dir]/(rho*c1o3) + gamma; + gEq = pr1[ZERO]*WEIGTH1[dir] + gamma; + + g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = g[D3Q27System::INV_E]; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = g[D3Q27System::INV_N]; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = g[D3Q27System::INV_T]; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = g[D3Q27System::INV_NE]; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = g[D3Q27System::INV_NW]; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = g[D3Q27System::INV_TE]; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = g[D3Q27System::INV_TW]; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = g[D3Q27System::INV_TN]; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = g[D3Q27System::INV_TS]; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = g[D3Q27System::INV_TNE]; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = g[D3Q27System::INV_TNW]; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = g[D3Q27System::INV_TSE]; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = g[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = g[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = g[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = g[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = g[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = g[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = g[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = g[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = g[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = g[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = g[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = g[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = g[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = g[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsF)(x1,x2,x3) = g[D3Q27System::ZERO]; + + + + + + + + + + +///////////////////// P H A S E - F I E L D S O L V E R ///////////////////////////////////////// + + + +///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + + //LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15; + //LBMReal di = sqrt(8*kappa/beta); + LBMReal tauH1 = 3.0*mob + 0.5; + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal hEq, gEq; + + if (dir != ZERO) + { + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; // + phi[ZERO]*(dxux + dyuy + dzuz); + + //LBMReal hSource =((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.1 : 1.0) * 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + LBMReal hSource = 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + hEq = phi[ZERO]*WEIGTH[dir]*(1.0 + 3.0*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir]; + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); // + WEIGTH[dir]*phi[ZERO]*(dxux + dyuy + dzuz); + //h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + hEq = phi[ZERO]*WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2)); + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; + h[ZERO] = h[ZERO] - (h[ZERO] - hEq)/(tauH1); // + WEIGTH[ZERO]*phi[ZERO]*(dxux + dyuy + dzuz); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + + (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; + (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; + (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; + (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; + (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; + (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; + (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; + (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; + (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; + (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; + (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; + (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; + (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3 ) = h[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3 ) = h[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3 ) = h[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3 ) = h[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsH)(x1,x2,x3) = h[D3Q27System::ZERO]; + + +///////////////////// END OF OLD BGK SOLVER /////////////////////////////// + + + + + + + ////////////////////////////////////////////////////////////////////////// + + } + } + } + } + dataSet->setPhaseField(divU); + + } +} +////////////////////////////////////////////////////////////////////////// +double MultiphaseCumulantLBMKernel::getCallculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*phi[k]; + } + return 3.0*sum; +} + + + +LBMReal MultiphaseCumulantLBMKernel::gradX1_pr1() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*pr1[k]; + } + return 3.0*sum; + //return 0.5*(pr1[E] - pr1[W]); +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_pr1() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*pr1[k]; + } + return 3.0*sum; + //return 0.5*(pr1[N] - pr1[S]); +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_pr1() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*pr1[k]; + } + return 3.0*sum; + //return 0.5*(pr1[T] - pr1[B]); +} + + + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*(phi[k] - phi[ZERO]); + } + return 6.0*sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + DistributionArray3DPtr distributionsH = dataSet->getHdistributions(); + + //const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + //const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + //const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + //if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + /*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/ + + } + } + } + } + //---------------------------------------------------------- + +/* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// +*/ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf, int x1, int x2, int x3) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + phi[ZERO] = (*ph)(x1,x2,x3); + pr1[ZERO] = (*pf)(x1,x2,x3); + + LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180); + LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + pr1[k] = (*pf)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } + else + { + /* + if (phi[ZERO] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + + phi[k] = (*ph)(x1, x2, x3); + pr1[k] = (*pf)(x1, x2, x3); + + //if (bcArray->isSolid(x1 + DX1[k], x2, x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + // + //if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + + + //if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) + //{ + // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3)) + // { + // //phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // } + // else + // { + // phi[k] = (*ph)(x1, x2, x3); + // } + //} + + + /*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/ + + /*if (phi[ZERO] < 0.00001) + { + phi[k] = 0.0; + } + else + { + phi[k] = 0.5; + }*/ + + //phi[k] = 0.5; + //phi[k] = (*ph)(x1, x2, x3); + //phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + + + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int cnum = 0; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + //if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + cnum++; + sum += (*pf)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])*WEIGTH[k]; + + } + } + LBMReal av = sum/cnum; + (*pf_filtered)(x1, x2, x3) = ((*pf)(x1, x2, x3))*WEIGTH[ZERO] + sum; + + } + } + } + } + + + + +} + + + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + dataSet->getFdistributions()->swap(); + dataSet->getHdistributions()->swap(); + //computePhasefield(); +} \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp new file mode 100644 index 000000000..e69de29bb diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp new file mode 100644 index 000000000..498d91ff8 --- /dev/null +++ b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp @@ -0,0 +1,2700 @@ +#include "MultiphaseCumulantLBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include <omp.h> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() +{ + this->nx1 = 0; + this->nx2 = 0; + this->nx3 = 0; + this->parameter = NORMAL; + this->OxyyMxzz = 1.0; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) +{ + this->nx1 = nx1; + this->nx2 = nx2; + this->nx3 = nx3; + parameter = p; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::init() +{ + //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); + DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); + DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field + PhaseFieldArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, 0.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + dataSet->setPhaseField(divU); +} +////////////////////////////////////////////////////////////////////////// +LBMKernelPtr MultiphaseCumulantLBMKernel::clone() +{ + LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter)); + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init(); + + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + kernel->setMobility(this->mob); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + switch (parameter) + { + case NORMAL: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0; + break; + case MAGIC: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor); + break; + } + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate() +{ + timer.resetAndStart(); + collideAll(); + timer.stop(); +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::collideAll() +{ + using namespace D3Q27System; + + //initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + + + //phaseField = dataSet->getPhaseField(); + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + +//#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} +//#pragma omp for + + + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); + + //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + LBMReal mfbbb = (*this->zeroDistributionsH)(x1,x2,x3); + //LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + // h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + //if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1,x2,x3) = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; + } + } + } + } + + + LBMReal collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF+1]; + LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; + LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222; + LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + + ////////////////////////////////////////////////////////////////////////// + //Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + //E N T + //c c c + ////////// + //W S B + //a a a + + //Rest ist b + + //mfxyz + //a - negative + //b - null + //c - positive + + // a b c + //-1 0 1 + + /* + phi[ZERO] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, x1, x2, x3); + + LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + + LBMReal mfbbb = (*this->zeroDistributionsF)(x1,x2,x3); + + + + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + + //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL); + + //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG; + //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL; + + //LBMReal tauH = 1.0; + LBMReal di = sqrt(8*kappa/beta); + + LBMReal dX1_phi = gradX1_phi(); + LBMReal dX2_phi = gradX2_phi(); + LBMReal dX3_phi = gradX3_phi(); + + LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9; + LBMReal normX1 = dX1_phi/denom; + LBMReal normX2 = dX2_phi/denom; + LBMReal normX3 = dX3_phi/denom; + + collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL); + + /*if ((phi[ZERO] > 0.1)||(phi[ZERO] < 0.9)) + { + collFactorM*=(1.0-denom); + }*/ + + w1 = collFactorM; + + /*dX1_phi = -normX1*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX2_phi = -normX2*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX3_phi = -normX3*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);*/ + + //UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3); + /*Block3D bl = this->block(); + + int wX1 = bl->getX1() + x1; + int wX2 = bl->getX2() + x2; + int wX3 = bl->getX3() + x3;*/ + + /*if (wX3 >= 30.0) + { + dX1_phi = 0.0; + dX2_phi = 0.0; + dX3_phi = 0.0; + }*/ + + + LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi(); + + //LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + + + //----------- Calculating Macroscopic Values ------------- + + //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH); + //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]); + + if (withForcing) + { + //muX1 = static_cast<double>(x1-1+ix1*maxX1); + //muX2 = static_cast<double>(x2-1+ix2*maxX2); + //muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + LBMReal rho_m = 1.0/densityRatio; + forcingX1 = forcingX1*(rho-rho_m); + forcingX2 = forcingX2*(rho-rho_m); + forcingX3 = forcingX3*(rho-rho_m); + + //ux += forcingX1*deltaT*0.5; // X + //uy += forcingX2*deltaT*0.5; // Y + //uz += forcingX3*deltaT*0.5; // Z + } + + LBMReal ux = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb)) / (rho*c1o3) + (mu*dX1_phi + forcingX1)/(2*rho); + + LBMReal uy = ((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) / (rho*c1o3) + (mu*dX2_phi + forcingX2)/(2*rho); + + LBMReal uz = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) / (rho*c1o3) + (mu*dX3_phi + forcingX3)/(2*rho); + + LBMReal p1 = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb + + (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + //vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + + + + LBMReal ux2 = ux*ux; + LBMReal uy2 = uy*uy; + LBMReal uz2 = uz*uz; + LBMReal ux_uy = ux*uy; + LBMReal ux_uz = ux*uz; + LBMReal uy_uz = uy*uz; + LBMReal ux_uy_uz = ux*uy*uz; + + +/* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - + (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[ZERO] = -(forcingTerm1)*WEIGTH[ZERO]; + } + } + //-------------------------------------------------------- +*/ + + //----------- Calculating Forcing Terms * ------------- + //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(1.0 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + + //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + + /*forcingTerm[dir] = (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/ + + + forcingTerm[dir] = ((-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3))) + + (DX1[dir])*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (DX2[dir])*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (DX3[dir])*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + } + + LBMReal gamma = WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2)); + /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi; + forcingTerm[ZERO] = (-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + //-------------------------------------------------------- + +/* + f1[E ] = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + f1[N ] = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + f1[T ] = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE ]/c1o3; + f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE ]/c1o3; + f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN ]/c1o3; + f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNE]/c1o3; + f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNW]/c1o3; + f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSE]/c1o3; + f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSW]/c1o3; + f1[W ] = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[W ]/c1o3; + f1[S ] = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[S ]/c1o3; + f1[B ] = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[B ]/c1o3; + f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SW ]/c1o3; + f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SE ]/c1o3; + f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BW ]/c1o3; + f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BE ]/c1o3; + f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BS ]/c1o3; + f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BN ]/c1o3; + f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSW]/c1o3; + f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSE]/c1o3; + f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNW]/c1o3; + f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNE]/c1o3; + f1[ZERO] = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - (p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3; +*/ + + mfcbb = 3.0*(mfcbb + 0.5*forcingTerm[E ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb = 3.0*(mfbcb + 0.5*forcingTerm[N ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc = 3.0*(mfbbc + 0.5*forcingTerm[T ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb = 3.0*(mfccb + 0.5*forcingTerm[NE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb = 3.0*(mfacb + 0.5*forcingTerm[NW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc = 3.0*(mfcbc + 0.5*forcingTerm[TE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc = 3.0*(mfabc + 0.5*forcingTerm[TW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc = 3.0*(mfbcc + 0.5*forcingTerm[TN ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac = 3.0*(mfbac + 0.5*forcingTerm[TS ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc = 3.0*(mfccc + 0.5*forcingTerm[TNE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc = 3.0*(mfacc + 0.5*forcingTerm[TNW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac = 3.0*(mfcac + 0.5*forcingTerm[TSE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac = 3.0*(mfaac + 0.5*forcingTerm[TSW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb = 3.0*(mfabb + 0.5*forcingTerm[W ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab = 3.0*(mfbab + 0.5*forcingTerm[S ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba = 3.0*(mfbba + 0.5*forcingTerm[B ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab = 3.0*(mfaab + 0.5*forcingTerm[SW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab = 3.0*(mfcab + 0.5*forcingTerm[SE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba = 3.0*(mfaba + 0.5*forcingTerm[BW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba = 3.0*(mfcba + 0.5*forcingTerm[BE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa = 3.0*(mfbaa + 0.5*forcingTerm[BS ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca = 3.0*(mfbca + 0.5*forcingTerm[BN ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa = 3.0*(mfaaa + 0.5*forcingTerm[BSW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa = 3.0*(mfcaa + 0.5*forcingTerm[BSE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca = 3.0*(mfaca + 0.5*forcingTerm[BNW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca = 3.0*(mfcca + 0.5*forcingTerm[BNE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb = 3.0*(mfbbb + 0.5*forcingTerm[ZERO])/rho ;//- (3.0*p1 - rho)*WEIGTH[ZERO]; + + LBMReal rho1 = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; + + + /* + //forcing + /////////////////////////////////////////////////////////////////////////////////////////// + if (withForcing) + { + muX1 = static_cast<double>(x1-1+ix1*maxX1); + muX2 = static_cast<double>(x2-1+ix2*maxX2); + muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + vvx += forcingX1*deltaT*0.5; // X + vvy += forcingX2*deltaT*0.5; // Y + vvz += forcingX3*deltaT*0.5; // Z + } + /////////////////////////////////////////////////////////////////////////////////////////// + */ + + LBMReal oMdrho, m0, m1, m2; + + oMdrho=mfccc+mfaaa; + m0=mfaca+mfcac; + m1=mfacc+mfcaa; + m2=mfaac+mfcca; + oMdrho+=m0; + m1+=m2; + oMdrho+=m1; + m0=mfbac+mfbca; + m1=mfbaa+mfbcc; + m0+=m1; + m1=mfabc+mfcba; + m2=mfaba+mfcbc; + m1+=m2; + m0+=m1; + m1=mfacb+mfcab; + m2=mfaab+mfccb; + m1+=m2; + m0+=m1; + oMdrho+=m0; + m0=mfabb+mfcbb; + m1=mfbab+mfbcb; + m2=mfbba+mfbbc; + m0+=m1+m2; + m0+=mfbbb; //hat gefehlt + oMdrho = 1. - (oMdrho + m0); + //oMdrho = rho - (oMdrho + m0); + + + //////////////////////////////////////////////////////////////////////////////////// + LBMReal wadjust; + LBMReal qudricLimit = 0.01; + //////////////////////////////////////////////////////////////////////////////////// + //Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; + mfaac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity + LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// + //LBMReal OxyyMxzz = 1.;//2+s9;// + LBMReal O4 = 1.; + LBMReal O5 = 1.; + LBMReal O6 = 1.; + + //Cum 4. + //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + + //LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + + //Cum 5. + LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; + LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; + LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; + + //Cum 6. + LBMReal CUMccc = mfccc +((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; + + //2. + // linear combinations + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; + + LBMReal dxux = -c1o2 * collFactorM *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; + + /*LBMReal Dxy =-three*collFactorM*mfbba; + LBMReal Dxz =-three*collFactorM*mfbab; + LBMReal Dyz =-three*collFactorM*mfabb; + + LBMReal strainMag = sqrt(2*(dxux*dxux + dyuy*dyuy + dzuz*dzuz) + Dxy*Dxy + Dxz*Dxz + Dyz*Dyz); + LBMReal intVis = 3*abs(denom - 1e-9)*strainMag; + LBMReal fluidVis = (1.0/collFactorM - 0.5)/3.0; + collFactorM = 1.0/((fluidVis + intVis)*3.0 + 0.5);*/ + (*divU)(x1,x2,x3) = dxux + dyuy + dzuz; + + + //relax + mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz); + mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy); + mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz); + + mfabb += collFactorM * (-mfabb); + mfbab += collFactorM * (-mfbab); + mfbba += collFactorM * (-mfbba); + + // linear combinations back + mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); + mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); + mfaac = c1o3 * ( mxxMyy - 2. * mxxMzz + mxxPyyPzz); + + //3. + // linear combinations + LBMReal mxxyPyzz = mfcba + mfabc; + LBMReal mxxyMyzz = mfcba - mfabc; + + LBMReal mxxzPyyz = mfcab + mfacb; + LBMReal mxxzMyyz = mfcab - mfacb; + + LBMReal mxyyPxzz = mfbca + mfbac; + LBMReal mxyyMxzz = mfbca - mfbac; + + //relax + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit); + mfbbb += wadjust * (-mfbbb); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit); + mxyyMxzz += wadjust * (-mxyyMxzz); + + // linear combinations back + mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; + mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; + mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; + mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; + mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; + mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; + + //4. + CUMacc += O4 * (-CUMacc); + CUMcac += O4 * (-CUMcac); + CUMcca += O4 * (-CUMcca); + + CUMbbc += O4 * (-CUMbbc); + CUMbcb += O4 * (-CUMbcb); + CUMcbb += O4 * (-CUMcbb); + + //5. + CUMbcc += O5 * (-CUMbcc); + CUMcbc += O5 * (-CUMcbc); + CUMccb += O5 * (-CUMccb); + + //6. + CUMccc += O6 * (-CUMccc); + + //back cumulants to central moments + //4. + //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + mfcbb = CUMcbb + ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + mfbcb = CUMbcb + ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + mfbbc = CUMbbc + ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + + //mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + + //5. + mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; + mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; + mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; + + //6. + mfccc = CUMccc -((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; + + //////////////////////////////////////////////////////////////////////////////////// + //forcing + mfbaa=-mfbaa; + mfaba=-mfaba; + mfaab=-mfaab; + ////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////// + //back + //////////////////////////////////////////////////////////////////////////////////// + //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * ( uz2 - uz) * c1o2; + m1 = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * ( uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * ( uz2 - uz) * c1o2; + m1 = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * ( uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * ( uz2 - uz) * c1o2; + m1 = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * ( uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * ( uz2 - uz) * c1o2; + m1 = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * ( uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * ( uz2 - uz) * c1o2; + m1 = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * ( uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * ( uy2 - uy) * c1o2; + m1 = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * ( uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * ( uy2 - uy) * c1o2; + m1 = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * ( uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * ( uy2 - uy) * c1o2; + m1 = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * ( uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + + +/////////////////////////////////////////////////////////////////////////// + +/* + m000 = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; + + m100 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[E] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW] - f1[W]; + m010 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[N] + f1[NE] + f1[NW] - f1[S] - f1[SE] - f1[SW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m001 = f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW] - f1[B] - f1[BE] - f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] - f1[BW]; + + m110 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[NE] - f1[NW] - f1[SE] + f1[SW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m101 = -f1[BE] - f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m011 = -f1[BN] - f1[BNE] - f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m200 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[E] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW] + f1[W]; + m020 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[N] + f1[NE] + f1[NW] + f1[S] + f1[SE] + f1[SW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m002 = f1[B] + f1[BE] + f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[BW] + f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW]; + m120 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m102 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m210 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[NE] + f1[NW] - f1[SE] - f1[SW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m012 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m201 = -f1[BE] - f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m021 = -f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m111 = -f1[BNE] + f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m220 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m202 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m022 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m211 = -f1[BNE] - f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m121 = -f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m112 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m221 = -f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m212 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m122 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m222 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + + k200 = m200 - m000*ux2; + k020 = m020 - m000*uy2; + k002 = m002 - m000*uz2; + k110 = m110 - m000*ux_uy; + k101 = m101 - m000*ux_uz; + k011 = m011 - m000*uy_uz; + + k021 = m021 - (m020*uz + 2.0*uy*k011); + k012 = m012 - (uy*m002 + 2.0*uz*k011); + k102 = m102 - (ux*m002 + 2.0*uz*k101); + k201 = m201 - (m200*uz + 2.0*ux*k101 ); + k210 = m210 - (m200*uy + 2.0*ux*k110 ); + k120 = m120 - (ux*m020 + 2.0*uy*k110); + k111 = m111 - (ux_uy_uz + ux*k011 + uy*k101 + uz*k110); + + k121 = m121 - (uz*m120+ 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111); + k112 = m112 - (uy*m102+ 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111); + k211 = m211 - (uz*m210+ 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111); + + + k220 = m220 - ( ux2*m020+ 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210); + k022 = m022 - ( uy2*m002+ 4.0*uy_uz*k011 + 2.0*uy*k012 + uz2*k020 + 2.0*uz*k021); + k202 = m202 - ( ux2*m002+ 4.0*ux_uz*k101 + 2.0*ux*k102 + uz2*k200 + 2.0*uz*k201); + + k221 = m221 - (uz*m220+ + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111 + + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211); + k122 = m122 - (ux*m022 + + 2.0*uy2*uz*k101 + uy2*k102 + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + + 2.0*uy*k112 + uz2*k120 + 2.0*uz*k121); + k212 = m212 - (uy*m202 + + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211); + + k222 = m222 - (ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221); + + //////////////// Central moments to Cumulants \\\\\\\\\\\\\\\\\\\\\\\\\ + + c200 = k200; + c020 = k020; + c002 = k002; + c110 = k110; + c101 = k101; + c011 = k011; + + c021 = k021; + c012 = k012; + c102 = k102; + c201 = k201; + c210 = k210; + c120 = k120; + c111 = k111; + + c121 = k121 - (k020*k101 + 2*k011*k110)/m000; + c211 = k211 - (k200*k011 + 2*k110*k101)/m000; + c112 = k112 - (k002*k110 + 2*k011*k101)/m000; + + c220 = k220 - (k200*k020 + 2*k110*k110)/m000; + c202 = k202 - (k200*k002 + 2*k101*k101)/m000; + c022 = k022 - (k020*k002 + 2*k011*k011)/m000; + + c122 = k122 - (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + c212 = k212 - (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + c221 = k221 - (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + c222 = k222 - (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + + (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + c200_pl_c020_pl_c002 = c200 + c020 + c002; + c200_mi_c020 = c200 - c020; + c200_mi_c002 = c200 - c002; + + c210_pl_c012 = c210+c012; + c210_mi_c012 = c210-c012; + c201_pl_c021 = c201+c021; + c201_mi_c021 = c201-c021; + c120_pl_c102 = c120+c102; + c120_mi_c102 = c120-c102; + + c220_pl_c202_pl_c022 = c220 + c202 + c022; + c220_mi2_c202_pl_c022 = c220 - 2.0*c202 + c022; + c220_pl_c202_mi2_c022 = c220 + c202 - 2.0*c022; + + /////////////////////////// Relaxation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + c110 = c110*(1-w1); + c101 = c101*(1-w1); + c011 = c011*(1-w1); + + c200_mi_c020 = c200_mi_c020*(1-w1); + c200_mi_c002 = c200_mi_c002*(1-w1); + + c200_pl_c020_pl_c002 = c200_pl_c020_pl_c002*(1-w2) + m000*w2; + + c120_pl_c102 = c120_pl_c102*(1-w3); + c210_pl_c012 = c210_pl_c012*(1-w3); + c201_pl_c021 = c201_pl_c021*(1-w3); + + + c120_mi_c102 = c120_mi_c102*(1-w4); + c210_mi_c012 = c210_mi_c012*(1-w4); + c201_mi_c021 = c201_mi_c021*(1-w4); + + c111 = c111*(1-w5); + + c220_mi2_c202_pl_c022 = c220_mi2_c202_pl_c022*(1-w6); + c220_pl_c202_mi2_c022 = c220_pl_c202_mi2_c022*(1-w6); + + c220_pl_c202_pl_c022 = c220_pl_c202_pl_c022*(1-w7); + + c211 = c211*(1-w8); + c121 = c121*(1-w8); + c112 = c112*(1-w8); + + + c221 = c221*(1-w9); + c212 = c212*(1-w9); + c122 = c122*(1-w9); + + c222 = c222*(1-w10); + + + c200 = c1o3 *c200_mi_c020 + c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c020 = -2*c1o3* c200_mi_c020+ c1o3* c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c002 = c1o3 * c200_mi_c020 -2*c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + + c210 = (c210_mi_c012 + c210_pl_c012)*0.5; + c012 = 0.5*(-c210_mi_c012 + c210_pl_c012); + c120 =(c120_mi_c102 + c120_pl_c102)*0.5; + c102 = 0.5*(-c120_mi_c102 + c120_pl_c102); + c201 = (c201_mi_c021 + c201_pl_c021)*0.5; + c021 = 0.5*(-c201_mi_c021 + c201_pl_c021); + + c220 = c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_mi2_c022 + c1o3*c220_pl_c202_pl_c022; + c202 = -c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_pl_c022; + c022 = -c1o3* c220_pl_c202_mi2_c022 + c1o3* c220_pl_c202_pl_c022; + + + ////////////////////// Cumulants to Central moments \\\\\\\\\\\\\\\\\\\\\\\\\ + + k200 = c200; + k020 = c020; + k002 = c002; + k110 = c110; + k101 = c101; + k011 = c011; + + k021 = c021; + k012 = c012; + k102 = c102; + k201 = c201; + k210 = c210; + k120 = c120; + k111 = c111; + + k121 = c121 + (k020*k101 + 2*k011*k110)/m000; + k211 = c211 + (k200*k011 + 2*k110*k101)/m000; + k112 = c112 + (k002*k110 + 2*k011*k101)/m000; + + k220 = c220 + (k200*k020 + 2*k110*k110)/m000; + k202 = c202 + (k200*k002 + 2*k101*k101)/m000; + k022 = c022 + (k020*k002 + 2*k011*k011)/m000; + + k122 = c122 + (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + k212 = c212 + (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + k221 = c221 + (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + k222 = c222 + (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + - (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + /////////////////////////////////////////////////////////////////////////////// + + + m200 = k200 + m000*ux2; + m020 = k020 + m000*uy2; + m002 = k002 + m000*uz2; + m110 = k110 + m000*ux_uy; + m101 = k101 + m000*ux_uz; + m011 = k011 + m000*uy_uz; + + m021 = m020*uz + 2.0*uy*k011 + k021; + m012 = uy*m002 + 2.0*uz*k011 + k012; + m102 = ux*m002 + 2.0*uz*k101 + k102; + m112 = uy*m102 + 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111+k112; + + m201 = m200*uz + 2.0*ux*k101 + k201; + m210 = m200*uy + 2.0*ux*k110 + k210; + m211 = uz*m210 + 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111+k211; + + m120 = ux*m020 + 2.0*uy*k110 + k120; + m121 = uz*m120 + 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111+ k121; + + m111 = ux_uy_uz + ux*k011 + uy*k101 + uz*k110+k111; + + m220 = ux2*m020 + 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210 + k220; + + m221 = uz*m220 + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111+ + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211 + k221; + + m022 = uy2*m002 + 4.0*uy_uz*k011 +2.0*uy*k012+ uz2*k020+ 2.0*uz*k021 + k022; + + m122 = ux*m022 + 2.0*uy2*uz*k101 + uy2*k102 + + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + 2.0*uy*k112 +uz2*k120 + 2.0*uz*k121 + k122; + + m202 = ux2*m002 + 4.0*ux_uz*k101+ 2.0*ux*k102 + uz2*k200+ 2.0*uz*k201 + k202; + + m212 = uy*m202 + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211 + k212; + + m222 = ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221 + k222; + + f1[ZERO] = (-m200 + m220 - m222 + m202 - m020 + m022 - m002 + m000); + f1[E] = 0.5* (m200 - m220 + m222 - m202 - m120 + m122 - m102 +m100); + f1[W] = 0.5* (m200 - m220 + m222 - m202 + m120 - m122 + m102 -m100); + f1[N] = 0.5* (-m210 - m220 + m222 + m212 + m020 - m022 - m012 +m010); + f1[S] = 0.5* (m210 - m220 + m222 - m212 + m020 - m022 + m012 -m010); + f1[T] = 0.5* (m221 + m222 - m201 - m202 - m021 - m022 + m002 +m001); + f1[B] = 0.5* (-m221 + m222 + m201 - m202 + m021 - m022 + m002-m001); + + f1[NE] = 0.25*( m210 + m220- m222 - m212 + m110+ m120- m122 -m112); + f1[SW] = 0.25*(-m210 + m220- m222 + m212 + m110- m120+ m122 -m112); + f1[SE] = 0.25*(-m210 + m220- m222 + m212 - m110+ m120- m122 +m112); + f1[NW] = 0.25*( m210 + m220- m222 - m212 - m110- m120+ m122 + m112); + f1[TE] = 0.25*(-m221 - m222 + m201 + m202 - m121 - m122 + m101 + m102); + f1[BW] = 0.25*( m221 -m222 - m201 + m202 - m121 + m122 + m101 - m102); + f1[BE] = 0.25*(m221 - m222 - m201 + m202 + m121 - m122 - m101 +m102); + f1[TW] = 0.25*(-m221 - m222 + m201 + m202 + m121 + m122 - m101 -m102); + f1[TN] = 0.25*(-m221 - m222 - m211 - m212 + m021 + m022 + m011+m012); + f1[BS] = 0.25*( m221 - m222 - m211 + m212 - m021 + m022 + m011 - m012); + f1[BN] = 0.25*( m221 - m222 + m211 - m212 - m021 + m022 - m011 + m012); + f1[TS] = 0.25*(-m221 - m222 + m211 + m212 + m021 + m022 - m011 -m012); + + f1[TNE]=0.125*( m221 + m222 + m211 + m212 + m121 + m122 + m111 + m112); + f1[BNE]=0.125*(-m221 + m222 -m211 + m212 -m121 + m122 -m111 + m112); + f1[TSE]=0.125*( m221 + m222 - m211 - m212 + m121 + m122 - m111 - m112); + f1[BSE]=0.125*(-m221 + m222 +m211 - m212 -m121 + m122 +m111 - m112); + f1[TNW]=0.125*( m221 + m222 + m211 + m212 - m121 - m122 - m111 - m112); + f1[BNW]=0.125*(-m221 + m222 -m211 + m212 +m121 - m122 +m111 - m112); + f1[TSW]=0.125*( m221 + m222 - m211 - m212 - m121 - m122 + m111 + m112); + f1[BSW]=0.125*(-m221 + m222+m211 - m212+m121 - m122-m111 + m112); + +*/ + ////////////////////////////////////////////////////////////////////////// + //proof correctness + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + LBMReal rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; + + /*LBMReal rho_post = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */ + //LBMReal dif = fabs(rho - rho_post); + LBMReal dif = rho1 - rho_post; +#ifdef SINGLEPRECISION + if(dif > 10.0E-7 || dif < -10.0E-7) +#else + if(dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post) + +" dif="+UbSystem::toString(dif) + +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3))); + //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + //exit(EXIT_FAILURE); + } +#endif + + + mfcbb = rho*c1o3*(mfcbb ) + 0.5*forcingTerm[E ] ; + mfbcb = rho*c1o3*(mfbcb ) + 0.5*forcingTerm[N ] ; + mfbbc = rho*c1o3*(mfbbc ) + 0.5*forcingTerm[T ] ; + mfccb = rho*c1o3*(mfccb ) + 0.5*forcingTerm[NE ] ; + mfacb = rho*c1o3*(mfacb ) + 0.5*forcingTerm[NW ] ; + mfcbc = rho*c1o3*(mfcbc ) + 0.5*forcingTerm[TE ] ; + mfabc = rho*c1o3*(mfabc ) + 0.5*forcingTerm[TW ] ; + mfbcc = rho*c1o3*(mfbcc ) + 0.5*forcingTerm[TN ] ; + mfbac = rho*c1o3*(mfbac ) + 0.5*forcingTerm[TS ] ; + mfccc = rho*c1o3*(mfccc ) + 0.5*forcingTerm[TNE] ; + mfacc = rho*c1o3*(mfacc ) + 0.5*forcingTerm[TNW] ; + mfcac = rho*c1o3*(mfcac ) + 0.5*forcingTerm[TSE] ; + mfaac = rho*c1o3*(mfaac ) + 0.5*forcingTerm[TSW] ; + mfabb = rho*c1o3*(mfabb ) + 0.5*forcingTerm[W ] ; + mfbab = rho*c1o3*(mfbab ) + 0.5*forcingTerm[S ] ; + mfbba = rho*c1o3*(mfbba ) + 0.5*forcingTerm[B ] ; + mfaab = rho*c1o3*(mfaab ) + 0.5*forcingTerm[SW ] ; + mfcab = rho*c1o3*(mfcab ) + 0.5*forcingTerm[SE ] ; + mfaba = rho*c1o3*(mfaba ) + 0.5*forcingTerm[BW ] ; + mfcba = rho*c1o3*(mfcba ) + 0.5*forcingTerm[BE ] ; + mfbaa = rho*c1o3*(mfbaa ) + 0.5*forcingTerm[BS ] ; + mfbca = rho*c1o3*(mfbca ) + 0.5*forcingTerm[BN ] ; + mfaaa = rho*c1o3*(mfaaa ) + 0.5*forcingTerm[BSW] ; + mfcaa = rho*c1o3*(mfcaa ) + 0.5*forcingTerm[BSE] ; + mfaca = rho*c1o3*(mfaca ) + 0.5*forcingTerm[BNW] ; + mfcca = rho*c1o3*(mfcca ) + 0.5*forcingTerm[BNE] ; + mfbbb = rho*c1o3*(mfbbb ) + 0.5*forcingTerm[ZERO]; + + ////////////////////////////////////////////////////////////////////////// + //write distribution for F + ////////////////////////////////////////////////////////////////////////// + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + (*this->zeroDistributionsF)(x1,x2,x3) = mfbbb; + + + +///////////////////// P H A S E - F I E L D S O L V E R ///////////////////////////////////////// +/* + + mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + mfbbb = (*this->zeroDistributionsH)(x1,x2,x3); + + + LBMReal hSource = ( (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])/denom ); // + phi[ZERO]*(dxux + dyuy + dzuz); + + + LBMReal drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + + ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; + + + LBMReal collFactorPhi = 1.0 / tauH; + oMdrho = one; // comp special + //////////////////////////////////////////////////////////////////////////////////// + + // LBMReal wadjust; + // LBMReal qudricLimitP = 0.01f;// * 0.0001f; + // LBMReal qudricLimitM = 0.01f;// * 0.0001f; + // LBMReal qudricLimitD = 0.01f;// * 0.001f; + //LBMReal s9 = minusomega; + //test + //s9 = 0.; + //////////////////////////////////////////////////////////////////////////////////// + //Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; // 2nd raw moment + m1 = mfaac - mfaaa; // 1st raw moment + m0 = m2 + mfaab; // zeroth raw moment + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; // this corresponds to a (central moment of order 1 = first raw moment - velocity * zeroth moment) + mfaac = m2 - two* m1 * uz + uz2 * m0; // this corresponds to a (central moment of order 2 = second raw moment - 2* velocity * 1st raw moment + velocity^2 * zeroth moment) + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += one* oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////////// + // Collision + //////////////////////////////////////////////////////////////////////////////////// + LBMReal m000 = mfaaa; + LBMReal m100 = mfbaa; + LBMReal m010 = mfaba; + LBMReal m001 = mfaab; + LBMReal m110 = mfbba; + LBMReal m101 = mfbab; + LBMReal m011 = mfabb; + LBMReal m111 = mfbbb; + LBMReal m200 = mfcaa - m000 / 3.0; + LBMReal m020 = mfaca - m000 / 3.0; + LBMReal m002 = mfaac - m000 / 3.0; + LBMReal m210 = mfcba - m010 / 3.0; + LBMReal m012 = mfabc - m010 / 3.0; + LBMReal m201 = mfcab - m001 / 3.0; + LBMReal m021 = mfacb - m001 / 3.0; + LBMReal m120 = mfbca - m100 / 3.0; + LBMReal m102 = mfbac - m100 / 3.0; + LBMReal m220 = mfcca - m000 / 9.0; + LBMReal m202 = mfcac - m000 / 9.0; + LBMReal m022 = mfacc - m000 / 9.0; + LBMReal m221 = mfccb - m001 / 9.0; + LBMReal m212 = mfcbc - m010 / 9.0; + LBMReal m122 = mfbcc - m100 / 9.0; + LBMReal m211 = mfcbb - m011 / 3.0; + LBMReal m121 = mfbcb - m101 / 3.0; + LBMReal m112 = mfbbc - m110 / 3.0; + LBMReal m222 = mfccc - m000 / 27.0; + + + m100 = (1.0 - collFactorPhi)*m100 + hSource*dX1_phi*collFactorPhi / 3.0; + m010 = (1.0 - collFactorPhi)*m010 + hSource*dX2_phi*collFactorPhi / 3.0; + m001 = (1.0 - collFactorPhi)*m001 + hSource*dX3_phi*collFactorPhi / 3.0; + + m110 = 0.0; + m101 = 0.0; + m011 = 0.0; + + m111 = 0.0; + + //(200)// + m200 = m000 / 3.0; + m020 = m000 / 3.0; + m002 = m000 / 3.0; + //// + + //(210)// + m210 = m010 / 3.0; + m201 = m001 / 3.0; + m120 = m100 / 3.0; + + + m102 = m100 / 3.0; + m021 = m001 / 3.0; + m012 = m010 / 3.0; + //// + + + //(220)// + m220 = m000 / 9.0; + m202 = m000 / 9.0; + m022 = m000 / 9.0; + //// + + //(221)// + m221 = m001 / 9.0; + m212 = m010 / 9.0; + m122 = m100 / 9.0; + //// + + //(211)// + m211 = m011 / 3.0; + m121 = m101 / 3.0; + m112 = m110 / 3.0; + //// + + //(222)// + m222 = m000 / 27.0; + //// + mfaaa = m000 ; + mfbaa = m100; + mfaba = m010; + mfaab = m001; + mfbba = m110; + mfbab = m101; + mfabb = m011; + mfbbb = m111; + mfcaa = m200; + mfaca = m020; + mfaac = m002; + mfcba = m210; + mfabc = m012; + mfcab = m201; + mfacb = m021; + mfbca = m120; + mfbac = m102; + mfcca = m220; + mfcac = m202; + mfacc = m022; + mfccb = m221; + mfcbc = m212; + mfbcc = m122; + mfcbb = m211; + mfbcb = m121; + mfbbc = m112; + mfccc = m222; + //////////////////////////////////////////////////////////////////////////////////// + //back + //////////////////////////////////////////////////////////////////////////////////// + //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + one* oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfaac - two* mfaab * uz + mfaaa * (one - uz2) - one* oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + one* oMdrho) * (uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2; + m1 = -mfabc - two* mfabb * uz + mfaba * (one - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfacc - two* mfacb * uz + mfaca * (one - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2; + m1 = -mfbac - two* mfbab * uz + mfbaa * (one - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2; + m1 = -mfbbc - two* mfbbb * uz + mfbba * (one - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2; + m1 = -mfbcc - two* mfbcb * uz + mfbca * (one - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfcac - two* mfcab * uz + mfcaa * (one - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2; + m1 = -mfcbc - two* mfcbb * uz + mfcba * (one - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfccc - two* mfccb * uz + mfcca * (one - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfaca - two* mfaba * uy + mfaaa * (one - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacb - two* mfabb * uy + mfaab * (one - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacc - two* mfabc * uy + mfaac * (one - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2; + m1 = -mfbca - two* mfbba * uy + mfbaa * (one - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2; + m1 = -mfbcb - two* mfbbb * uy + mfbab * (one - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2; + m1 = -mfbcc - two* mfbbc * uy + mfbac * (one - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfcca - two* mfcba * uy + mfcaa * (one - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccb - two* mfcbb * uy + mfcab * (one - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccc - two* mfcbc * uy + mfcac * (one - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcaa - two* mfbaa * ux + mfaaa * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcba - two* mfbba * ux + mfaba * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcca - two* mfbca * ux + mfaca * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcab - two* mfbab * ux + mfaab * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbb - two* mfbbb * ux + mfabb * (one - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccb - two* mfbcb * ux + mfacb * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcac - two* mfbac * ux + mfaac * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbc - two* mfbbc * ux + mfabc * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccc - two* mfbcc * ux + mfacc * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + //////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + //proof correctness + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + LBMReal drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; + //LBMReal dif = fabs(rho - rho_post); + dif = drho - drho_post; +#ifdef SINGLEPRECISION + if (dif > 10.0E-7 || dif < -10.0E-7) +#else + if (dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post) + + " dif=" + UbSystem::toString(dif) + + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); + //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + //exit(EXIT_FAILURE); + } +#endif + + + ////////////////////////////////////////////////////////////////////////// + //write distribution for H + ////////////////////////////////////////////////////////////////////////// + + //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + //(*this->zeroDistributionsH)(x1,x2,x3) = mfbbb; + +*/ + + +///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + + //LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15; + //LBMReal di = sqrt(8*kappa/beta); + LBMReal tauH1 = 3.0*mob + 0.5; + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal hEq, gEq; + + if (dir != ZERO) + { + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; // + phi[ZERO]*(dxux + dyuy + dzuz); + + //LBMReal hSource =((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.1 : 1.0) * 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + //LBMReal hSource = 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + hEq = phi[ZERO]*WEIGTH[dir]*(1.0 + 3.0*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir]; + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = h[dir] - (h[dir] - hEq)/(tauH); // + WEIGTH[dir]*phi[ZERO]*(dxux + dyuy + dzuz); + //h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + hEq = phi[ZERO]*WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2)); + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; + h[ZERO] = h[ZERO] - (h[ZERO] - hEq)/(tauH); // + WEIGTH[ZERO]*phi[ZERO]*(dxux + dyuy + dzuz); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + + (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; + (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; + (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; + (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; + (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; + (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; + (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; + (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; + (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; + (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; + (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; + (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; + (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3 ) = h[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3 ) = h[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3 ) = h[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3 ) = h[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsH)(x1,x2,x3) = h[D3Q27System::ZERO]; + + +///////////////////// END OF OLD BGK SOLVER /////////////////////////////// + + + + + + + ////////////////////////////////////////////////////////////////////////// + + } + } + } + } + dataSet->setPhaseField(divU); + + } +} +////////////////////////////////////////////////////////////////////////// +double MultiphaseCumulantLBMKernel::getCallculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*(phi[k] - phi[ZERO]); + } + return 6.0*sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + DistributionArray3DPtr distributionsH = dataSet->getHdistributions(); + + //const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + //const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + //const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + //if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + h[E ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + h[N ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + h[T ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + + h[W ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + h[S ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + h[B ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + /*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/ + + } + } + } + } + //---------------------------------------------------------- + +/* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// +*/ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + phi[ZERO] = (*ph)(x1,x2,x3); + + LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180); + LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } + else + { + /* + if (phi[ZERO] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + + phi[k] = (*ph)(x1, x2, x3); + + //if (bcArray->isSolid(x1 + DX1[k], x2, x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + // + //if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + + + //if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) + //{ + // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3)) + // { + // //phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // } + // else + // { + // phi[k] = (*ph)(x1, x2, x3); + // } + //} + + + /*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/ + + /*if (phi[ZERO] < 0.00001) + { + phi[k] = 0.0; + } + else + { + phi[k] = 0.5; + }*/ + + //phi[k] = 0.5; + //phi[k] = (*ph)(x1, x2, x3); + //phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + + + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + dataSet->getFdistributions()->swap(); + dataSet->getHdistributions()->swap(); + //computePhasefield(); +} \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg b/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg new file mode 100644 index 000000000..caa02fe7a --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg @@ -0,0 +1,75 @@ +pathname = /work/hessafar/MultiphaseWOInletTest +pathGeo = /home/hessafar/projects/VitualFluids/source +geoFile = JetBreakup2.ast +#geoFile = FlowFocusingS2_Small.ast +numOfThreads = 1 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) (Periodic X2) +#blocknx = 5 2 9 + + +#boundingBox = -24.5 180.5 -1.5 11.5 1.5 64.5 (FlowFocusingS2_Small) (Original was 180.5) +#blocknx = 5 6 9 + +#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 (Jet Breakup) (Original with inlet length) +boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 (Jet Breakup2) (Original without inlet length) +blocknx = 22 20 22 + +#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test) +#blocknx = 10 10 10 + +dx = 0.5 +refineLevel = 0 + +#Simulation +uLB = 0.05 +uF2 = 0.0001 +Re = 10 +nuL = 1.0e-5 +nuG = 1.16e-4 +densityRatio = 30 +sigma = 4.66e-3 +interfaceThickness = 5 +#radius = -5.0 (FlowFocusing2D) +radius = 615.0 (Jet Breakup) +contactAngle = 110.0 +gravity = 0.0 +#gravity = -5.04e-6 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.6 +Mobility = 0.02 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 500 +endTime = 200000000 diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd b/apps/cpu/Multiphase/backup/T-Junction.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..7546324577b48ee195aaa8a3172721be4e4d562b GIT binary patch literal 14928 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 E1zd9#M*si- literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd1 b/apps/cpu/Multiphase/backup/T-Junction.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..f42334cd9105ab78edc27ba44171436be705389a GIT binary patch literal 4308 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 Tw1)|B6K!XA{hAu@FB|<Ip${h% literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/T-Junction.ast b/apps/cpu/Multiphase/backup/T-Junction.ast new file mode 100644 index 000000000..9abee7d99 --- /dev/null +++ b/apps/cpu/Multiphase/backup/T-Junction.ast @@ -0,0 +1,2088 @@ +solid Mesh + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 41.548100 -5.344658 60.000000 + vertex 42.514893 -6.631227 60.000000 + vertex 43.675545 -7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 54.286926 9.034504 60.000000 + vertex 52.782173 9.605181 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 52.782173 9.605181 60.000000 + vertex 51.205368 9.927089 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 43.675545 7.746049 60.000000 + vertex 59.485363 3.166680 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 47.999744 9.797907 60.000000 + vertex 43.675545 7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 51.205368 9.927089 60.000000 + vertex 47.999744 9.797907 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 59.485363 3.166680 60.000000 + vertex 58.854561 4.647232 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 43.675545 -7.746049 60.000000 + vertex 45.000000 -8.660254 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 55.680649 8.229838 60.000000 + vertex 59.485363 3.166680 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 41.548100 -5.344658 60.000000 + vertex 43.675545 -7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 56.927242 7.212025 60.000000 + vertex 55.680649 8.229838 60.000000 + vertex 57.994427 6.007422 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.999744 -9.797907 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 46.453953 -9.350163 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.290581 -2.393157 60.000000 + vertex 40.800205 -3.919666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.800205 -3.919666 60.000000 + vertex 45.000000 -8.660254 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 47.999744 -9.797907 60.000000 + vertex 49.597340 -9.991890 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.290581 2.393157 60.000000 + vertex 40.032429 0.804666 60.000000 + vertex 40.032429 -0.804666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 47.999744 -9.797907 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 47.999744 -9.797907 60.000000 + vertex 51.205368 -9.927089 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 42.514893 6.631227 60.000000 + vertex 41.548100 5.344658 60.000000 + vertex 40.800205 3.919666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 52.782173 -9.605181 60.000000 + vertex 54.286926 -9.034504 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 54.286926 -9.034504 60.000000 + vertex 55.680649 -8.229838 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 40.800205 3.919666 60.000000 + vertex 40.290581 2.393157 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 40.290581 2.393157 60.000000 + vertex 40.032429 -0.804666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 42.514893 6.631227 60.000000 + vertex 40.800205 3.919666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 46.453953 9.350163 60.000000 + vertex 45.000000 8.660254 60.000000 + vertex 43.675545 7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 56.927242 -7.212025 60.000000 + vertex 57.994427 -6.007422 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 57.994427 -6.007422 60.000000 + vertex 58.854561 -4.647232 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 46.453953 9.350163 60.000000 + vertex 43.675545 7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.205368 9.927089 60.000000 + vertex 49.597340 9.991890 60.000000 + vertex 47.999744 9.797907 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 60.000000 -0.000000 60.000000 + vertex 59.870502 1.604113 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.485363 -3.166680 60.000000 + vertex 59.870502 -1.604113 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.870502 -1.604113 60.000000 + vertex 60.000000 -0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 40.032429 -0.804666 60.000000 + vertex 45.000000 -8.660254 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 52.782173 -9.605181 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 43.675545 7.746049 60.000000 + vertex 40.032429 -0.804666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 52.782173 -9.605181 60.000000 + vertex 56.927242 -7.212025 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 56.927242 -7.212025 60.000000 + vertex 59.485363 -3.166680 60.000000 + endloop + endfacet + facet normal 0.354604 -0.935016 0.000507 + outer loop + vertex 54.286926 -9.034504 60.000000 + vertex 52.782173 -9.605181 60.000000 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.455679 -0.890144 -0.000469 + outer loop + vertex 54.286926 -9.034504 60.000000 + vertex 53.865475 -9.222695 7.677362 + vertex 55.217609 -8.530917 8.439399 + endloop + endfacet + facet normal -0.981788 0.189978 -0.000491 + outer loop + vertex 40.290581 2.393157 60.000000 + vertex 40.380032 2.730610 11.685194 + vertex 40.055984 1.056659 11.953387 + endloop + endfacet + facet normal -0.948536 0.316668 0.000456 + outer loop + vertex 40.290581 2.393157 60.000000 + vertex 40.800205 3.919666 60.000000 + vertex 40.380032 2.730610 11.685194 + endloop + endfacet + facet normal 0.500000 -0.866025 0.000567 + outer loop + vertex 55.680649 -8.229838 60.000000 + vertex 54.286926 -9.034504 60.000000 + vertex 55.217609 -8.530917 8.439399 + endloop + endfacet + facet normal 0.597108 -0.802161 -0.000678 + outer loop + vertex 55.680649 -8.229838 60.000000 + vertex 55.217609 -8.530917 8.439399 + vertex 56.669765 -7.450787 9.406688 + endloop + endfacet + facet normal 0.632446 -0.774604 0.000437 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 55.680649 -8.229838 60.000000 + vertex 56.669765 -7.450787 9.406688 + endloop + endfacet + facet normal 0.733897 -0.679260 -0.000529 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 56.669765 -7.450787 9.406688 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal -0.999691 0.024856 -0.000360 + outer loop + vertex 40.032429 0.804666 60.000000 + vertex 40.055984 1.056659 11.953387 + vertex 40.015751 -0.561047 11.986877 + endloop + endfacet + facet normal -0.987050 0.160410 0.000357 + outer loop + vertex 40.032429 0.804666 60.000000 + vertex 40.290581 2.393157 60.000000 + vertex 40.055984 1.056659 11.953387 + endloop + endfacet + facet normal 0.996738 0.080699 -0.000008 + outer loop + vertex 59.870502 1.604113 60.000000 + vertex 60.000000 -0.000000 12.000000 + vertex 59.869751 1.608730 11.891677 + endloop + endfacet + facet normal 0.748511 -0.663123 0.000137 + outer loop + vertex 57.994427 -6.007422 60.000000 + vertex 56.927242 -7.212025 60.000000 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal 0.973621 0.228173 0.000007 + outer loop + vertex 59.870502 1.604113 60.000000 + vertex 59.869751 1.608730 11.891677 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal 0.838390 -0.545070 -0.000131 + outer loop + vertex 57.994427 -6.007422 60.000000 + vertex 57.940296 -6.078792 10.346415 + vertex 58.777405 -4.791364 11.001946 + endloop + endfacet + facet normal 0.996757 0.080467 0.000000 + outer loop + vertex 59.870502 1.604113 60.000000 + vertex 60.000000 -0.000000 60.000000 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal 0.845190 -0.534467 0.000241 + outer loop + vertex 58.854561 -4.647232 60.000000 + vertex 57.994427 -6.007422 60.000000 + vertex 58.777405 -4.791364 11.001946 + endloop + endfacet + facet normal 0.936599 0.350403 -0.000230 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.556835 2.943959 11.633276 + vertex 59.141815 4.053054 11.294811 + endloop + endfacet + facet normal 0.917731 -0.397203 -0.000277 + outer loop + vertex 58.854561 -4.647232 60.000000 + vertex 58.777405 -4.791364 11.001946 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal 0.970942 0.239316 0.000333 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.870502 1.604113 60.000000 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal 0.919980 -0.391966 -0.000082 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 58.854561 -4.647232 60.000000 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal -0.991290 -0.131696 -0.000324 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.015751 -0.561047 11.986877 + vertex 40.215744 -2.066004 11.820813 + endloop + endfacet + facet normal 0.883824 0.467820 -0.000495 + outer loop + vertex 58.854561 4.647232 60.000000 + vertex 59.141815 4.053054 11.294811 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal 0.970137 -0.242556 0.000074 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 59.500378 -3.121356 11.586938 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal -1.000000 0.000000 0.000347 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.032429 0.804666 60.000000 + vertex 40.015751 -0.561047 11.986877 + endloop + endfacet + facet normal 0.919980 0.391966 0.000644 + outer loop + vertex 58.854561 4.647232 60.000000 + vertex 59.485363 3.166680 60.000000 + vertex 59.141815 4.053054 11.294811 + endloop + endfacet + facet normal 0.845189 0.534466 0.000654 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 58.854561 4.647232 60.000000 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal 0.809745 0.586781 -0.000472 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 58.490032 5.283877 10.774073 + vertex 57.662033 6.425983 10.134433 + endloop + endfacet + facet normal 0.970942 -0.239316 0.000178 + outer loop + vertex 59.870502 -1.604113 60.000000 + vertex 59.485363 -3.166680 60.000000 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal 0.996283 -0.086144 -0.000191 + outer loop + vertex 59.870502 -1.604113 60.000000 + vertex 59.851536 -1.716760 11.876562 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal -0.964233 -0.265056 -0.000302 + outer loop + vertex 40.290581 -2.393157 60.000000 + vertex 40.215744 -2.066004 11.820813 + vertex 40.534901 -3.226747 11.558032 + endloop + endfacet + facet normal -0.987050 -0.160410 0.000444 + outer loop + vertex 40.290581 -2.393157 60.000000 + vertex 40.032429 -0.804666 60.000000 + vertex 40.215744 -2.066004 11.820813 + endloop + endfacet + facet normal 0.996757 -0.080467 0.000000 + outer loop + vertex 60.000000 -0.000000 60.000000 + vertex 59.870502 -1.604113 60.000000 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal 0.748511 0.663123 0.000577 + outer loop + vertex 56.927242 7.212025 60.000000 + vertex 57.994427 6.007422 60.000000 + vertex 57.662033 6.425983 10.134433 + endloop + endfacet + facet normal 0.708406 0.705805 -0.000687 + outer loop + vertex 56.927242 7.212025 60.000000 + vertex 57.662033 6.425983 10.134433 + vertex 56.448730 7.642896 9.251278 + endloop + endfacet + facet normal -0.921845 -0.387558 -0.000495 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 40.534901 -3.226747 11.558032 + vertex 41.074001 -4.508494 11.120858 + endloop + endfacet + facet normal -0.948536 -0.316668 0.000665 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 40.290581 -2.393157 60.000000 + vertex 40.534901 -3.226747 11.558032 + endloop + endfacet + facet normal 0.567662 0.823261 -0.000930 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 56.448730 7.642896 9.251278 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal 0.632446 0.774604 0.000613 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 56.927242 7.212025 60.000000 + vertex 56.448730 7.642896 9.251278 + endloop + endfacet + facet normal 0.404679 0.914459 -0.000694 + outer loop + vertex 54.286926 9.034504 60.000000 + vertex 54.842255 8.749433 8.212639 + vertex 53.213177 9.469715 7.370516 + endloop + endfacet + facet normal -0.859338 -0.511408 -0.000413 + outer loop + vertex 41.548100 -5.344658 60.000000 + vertex 41.074001 -4.508494 11.120858 + vertex 41.782188 -5.698035 10.560890 + endloop + endfacet + facet normal 0.500000 0.866025 0.000594 + outer loop + vertex 54.286926 9.034504 60.000000 + vertex 55.680649 8.229838 60.000000 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal -0.885456 -0.464723 0.000638 + outer loop + vertex 41.548100 -5.344658 60.000000 + vertex 40.800205 -3.919666 60.000000 + vertex 41.074001 -4.508494 11.120858 + endloop + endfacet + facet normal 0.263490 0.964662 -0.000325 + outer loop + vertex 52.782173 9.605181 60.000000 + vertex 53.213177 9.469715 7.370516 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal 0.354604 0.935016 0.000497 + outer loop + vertex 52.782173 9.605181 60.000000 + vertex 54.286926 9.034504 60.000000 + vertex 53.213177 9.469715 7.370516 + endloop + endfacet + facet normal -0.771350 -0.636411 -0.000581 + outer loop + vertex 42.514893 -6.631227 60.000000 + vertex 41.782188 -5.698035 10.560890 + vertex 42.848557 -6.989770 9.754133 + endloop + endfacet + facet normal -0.799443 -0.600742 0.000509 + outer loop + vertex 42.514893 -6.631227 60.000000 + vertex 41.548100 -5.344658 60.000000 + vertex 41.782188 -5.698035 10.560890 + endloop + endfacet + facet normal 0.132345 0.991204 -0.000491 + outer loop + vertex 51.205368 9.927089 60.000000 + vertex 52.044731 9.788722 6.941248 + vertex 50.593201 9.982390 6.659721 + endloop + endfacet + facet normal 0.200026 0.979790 0.000609 + outer loop + vertex 51.205368 9.927089 60.000000 + vertex 52.782173 9.605181 60.000000 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal -0.646138 -0.763221 -0.000853 + outer loop + vertex 43.675545 -7.746049 60.000000 + vertex 42.848557 -6.989770 9.754133 + vertex 44.293537 -8.211959 8.750070 + endloop + endfacet + facet normal -0.692725 -0.721202 0.000546 + outer loop + vertex 43.675545 -7.746049 60.000000 + vertex 42.514893 -6.631227 60.000000 + vertex 42.848557 -6.989770 9.754133 + endloop + endfacet + facet normal -0.009882 0.999951 -0.000363 + outer loop + vertex 49.597340 9.991890 60.000000 + vertex 50.593201 9.982390 6.659721 + vertex 49.209751 9.968726 6.680157 + endloop + endfacet + facet normal 0.040266 0.999189 0.000574 + outer loop + vertex 49.597340 9.991890 60.000000 + vertex 51.205368 9.927089 60.000000 + vertex 50.593201 9.982390 6.659721 + endloop + endfacet + facet normal -0.495631 -0.868533 -0.000765 + outer loop + vertex 45.000000 -8.660254 60.000000 + vertex 44.293537 -8.211959 8.750070 + vertex 45.840042 -9.093665 7.829767 + endloop + endfacet + facet normal -0.137559 0.990494 0.000052 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 49.209751 9.968726 6.680157 + vertex 48.043625 9.806763 6.915736 + endloop + endfacet + facet normal -0.568064 -0.822984 0.000632 + outer loop + vertex 45.000000 -8.660254 60.000000 + vertex 43.675545 -7.746049 60.000000 + vertex 44.293537 -8.211959 8.750070 + endloop + endfacet + facet normal -0.249430 0.968393 -0.000045 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 48.043625 9.806763 6.915736 + vertex 46.975643 9.531698 7.290181 + endloop + endfacet + facet normal -0.120537 0.992709 0.000445 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 49.597340 9.991890 60.000000 + vertex 49.209751 9.968726 6.680157 + endloop + endfacet + facet normal -0.368876 0.929478 -0.000450 + outer loop + vertex 46.453953 9.350163 60.000000 + vertex 46.975643 9.531698 7.290181 + vertex 45.668846 9.013384 7.922052 + endloop + endfacet + facet normal -0.335392 -0.942078 -0.000685 + outer loop + vertex 46.453953 -9.350163 60.000000 + vertex 45.840042 -9.093665 7.829767 + vertex 47.483089 -9.678077 7.094705 + endloop + endfacet + facet normal -0.278218 0.960518 0.000554 + outer loop + vertex 46.453953 9.350163 60.000000 + vertex 47.999744 9.797907 60.000000 + vertex 46.975643 9.531698 7.290181 + endloop + endfacet + facet normal -0.428692 -0.903451 0.000603 + outer loop + vertex 46.453953 -9.350163 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 45.840042 -9.093665 7.829767 + endloop + endfacet + facet normal -0.502281 0.864704 -0.000588 + outer loop + vertex 45.000000 8.660254 60.000000 + vertex 45.668846 9.013384 7.922052 + vertex 44.321312 8.231192 8.731980 + endloop + endfacet + facet normal -0.428692 0.903451 0.000620 + outer loop + vertex 45.000000 8.660254 60.000000 + vertex 46.453953 9.350163 60.000000 + vertex 45.668846 9.013384 7.922052 + endloop + endfacet + facet normal -0.641328 0.767266 -0.000818 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 44.321312 8.231192 8.731980 + vertex 42.912872 7.054971 9.707079 + endloop + endfacet + facet normal -0.278218 -0.960518 0.000541 + outer loop + vertex 47.999744 -9.797907 60.000000 + vertex 46.453953 -9.350163 60.000000 + vertex 47.483089 -9.678077 7.094705 + endloop + endfacet + facet normal -0.568064 0.822984 0.000632 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 45.000000 8.660254 60.000000 + vertex 44.321312 8.231192 8.731980 + endloop + endfacet + facet normal -0.190108 -0.981763 -0.000367 + outer loop + vertex 47.999744 -9.797907 60.000000 + vertex 47.483089 -9.678077 7.094705 + vertex 48.724289 -9.918295 6.754808 + endloop + endfacet + facet normal -0.771686 0.636003 -0.000748 + outer loop + vertex 42.514893 6.631227 60.000000 + vertex 42.912872 7.054971 9.707079 + vertex 41.725323 5.615130 10.605202 + endloop + endfacet + facet normal -0.692725 0.721202 0.000595 + outer loop + vertex 42.514893 6.631227 60.000000 + vertex 43.675545 7.746049 60.000000 + vertex 42.912872 7.054971 9.707079 + endloop + endfacet + facet normal -0.120537 -0.992709 0.000604 + outer loop + vertex 49.597340 -9.991890 60.000000 + vertex 47.999744 -9.797907 60.000000 + vertex 48.724289 -9.918295 6.754808 + endloop + endfacet + facet normal -0.085718 -0.996319 0.000028 + outer loop + vertex 49.597340 -9.991890 60.000000 + vertex 48.724289 -9.918295 6.754808 + vertex 49.562771 -9.990437 6.647644 + endloop + endfacet + facet normal -0.000150 -1.000000 -0.000027 + outer loop + vertex 49.597340 -9.991890 60.000000 + vertex 49.562771 -9.990437 6.647644 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal -0.869310 0.494268 -0.000413 + outer loop + vertex 41.548100 5.344658 60.000000 + vertex 41.725323 5.615130 10.605202 + vertex 40.944370 4.242121 11.225168 + endloop + endfacet + facet normal -0.799443 0.600742 0.000421 + outer loop + vertex 41.548100 5.344658 60.000000 + vertex 42.514893 6.631227 60.000000 + vertex 41.725323 5.615130 10.605202 + endloop + endfacet + facet normal 0.040266 -0.999189 0.000607 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 49.597340 -9.991890 60.000000 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal 0.095514 -0.995428 -0.000196 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 50.434238 -9.990567 6.647448 + vertex 51.472881 -9.890936 6.794806 + endloop + endfacet + facet normal 0.201349 -0.979520 0.000347 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 51.472881 -9.890936 6.794806 + vertex 52.549927 -9.669430 7.106485 + endloop + endfacet + facet normal -0.936879 0.349654 -0.000458 + outer loop + vertex 40.800205 3.919666 60.000000 + vertex 40.944370 4.242121 11.225168 + vertex 40.380032 2.730610 11.685194 + endloop + endfacet + facet normal -0.885456 0.464723 0.000455 + outer loop + vertex 40.800205 3.919666 60.000000 + vertex 41.548100 5.344658 60.000000 + vertex 40.944370 4.242121 11.225168 + endloop + endfacet + facet normal 0.200026 -0.979791 0.000312 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 51.205368 -9.927089 60.000000 + vertex 52.549927 -9.669430 7.106485 + endloop + endfacet + facet normal 0.321649 -0.946859 -0.000262 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 52.549927 -9.669430 7.106485 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.000000 0.995974 0.089639 + outer loop + vertex 180.000000 11.807155 2.142683 + vertex 0.000000 12.000000 -0.000000 + vertex 0.000000 11.807155 2.142683 + endloop + endfacet + facet normal 0.000000 0.995974 0.089639 + outer loop + vertex 180.000000 11.807155 2.142683 + vertex 180.000000 12.000000 -0.000000 + vertex 0.000000 12.000000 -0.000000 + endloop + endfacet + facet normal 0.000000 0.963963 0.266037 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 0.000000 11.807155 2.142683 + vertex 0.000000 11.234818 4.216498 + endloop + endfacet + facet normal 0.000000 0.963963 0.266037 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 11.807155 2.142683 + vertex 0.000000 11.807155 2.142683 + endloop + endfacet + facet normal 0.001350 0.900968 0.433883 + outer loop + vertex 50.593201 9.982390 6.659721 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal 0.000000 0.889892 0.456170 + outer loop + vertex 50.593201 9.982390 6.659721 + vertex 180.000000 11.234818 4.216498 + vertex 0.000000 11.234818 4.216498 + endloop + endfacet + facet normal -0.000184 0.836995 0.547211 + outer loop + vertex 49.209751 9.968726 6.680157 + vertex 50.593201 9.982390 6.659721 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -0.000454 0.825086 0.565007 + outer loop + vertex 48.043625 9.806763 6.915736 + vertex 49.209751 9.968726 6.680157 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -0.000981 0.809017 0.587785 + outer loop + vertex 0.000000 9.036858 7.895265 + vertex 48.043625 9.806763 6.915736 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -0.000898 0.807141 0.590358 + outer loop + vertex 46.975643 9.531698 7.290181 + vertex 48.043625 9.806763 6.915736 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal 0.000025 0.773134 0.634243 + outer loop + vertex 45.668846 9.013384 7.922052 + vertex 46.975643 9.531698 7.290181 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal -0.000528 0.900969 0.433884 + outer loop + vertex 180.000000 10.301386 6.154791 + vertex 180.000000 11.234818 4.216498 + vertex 50.593201 9.982390 6.659721 + endloop + endfacet + facet normal 0.000177 0.824306 0.566145 + outer loop + vertex 180.000000 10.301386 6.154791 + vertex 50.593201 9.982390 6.659721 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal -0.001083 0.691062 0.722794 + outer loop + vertex 0.000000 7.481878 9.381978 + vertex 44.321312 8.231192 8.731980 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal 0.000371 0.809017 0.587785 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 180.000000 10.301386 6.154791 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal -0.000096 0.759849 0.650099 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 53.213177 9.469715 7.370516 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal 0.000275 0.802992 0.595989 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 52.044731 9.788722 6.941248 + vertex 53.213177 9.469715 7.370516 + endloop + endfacet + facet normal -0.000842 0.550897 0.834573 + outer loop + vertex 0.000000 5.686424 10.567146 + vertex 42.912872 7.054971 9.707079 + vertex 0.000000 7.481878 9.381978 + endloop + endfacet + facet normal 0.000246 0.691063 0.722795 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 9.036858 7.895265 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal -0.000914 0.393025 0.919527 + outer loop + vertex 40.944370 4.242121 11.225168 + vertex 0.000000 5.686424 10.567146 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal 0.000378 0.550897 0.834573 + outer loop + vertex 180.000000 5.686424 10.567146 + vertex 180.000000 7.481878 9.381978 + vertex 57.662033 6.425983 10.134433 + endloop + endfacet + facet normal -0.000133 0.488565 0.872527 + outer loop + vertex 180.000000 5.686424 10.567146 + vertex 57.662033 6.425983 10.134433 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal -0.001192 0.222521 0.974927 + outer loop + vertex 0.000000 1.610799 11.891397 + vertex 40.380032 2.730610 11.685194 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal -0.000100 0.291849 0.956464 + outer loop + vertex 180.000000 3.708204 11.412678 + vertex 59.141815 4.053054 11.294811 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal 0.000214 0.389740 0.920925 + outer loop + vertex 180.000000 3.708204 11.412678 + vertex 58.490032 5.283877 10.774073 + vertex 59.141815 4.053054 11.294811 + endloop + endfacet + facet normal 0.000264 0.393025 0.919528 + outer loop + vertex 180.000000 3.708204 11.412678 + vertex 180.000000 5.686424 10.567146 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal -0.000925 0.044865 0.998993 + outer loop + vertex 0.000000 -0.538378 11.987917 + vertex 40.055984 1.056659 11.953387 + vertex 0.000000 1.610799 11.891397 + endloop + endfacet + facet normal 0.000001 0.067182 0.997741 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 59.869751 1.608730 11.891677 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal -0.000001 0.190000 0.981784 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 59.556835 2.943959 11.633276 + vertex 59.869751 1.608730 11.891677 + endloop + endfacet + facet normal 0.000374 0.222521 0.974928 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 180.000000 3.708204 11.412678 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal -0.000981 -0.134233 0.990949 + outer loop + vertex 40.215744 -2.066004 11.820813 + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 -2.670251 11.699135 + endloop + endfacet + facet normal 0.000302 0.044865 0.998993 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 1.610799 11.891397 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal -0.000221 -0.071697 0.997426 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 60.000000 -0.000000 12.000000 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal 0.000365 -0.220707 0.975340 + outer loop + vertex 40.534901 -3.226747 11.558032 + vertex 40.215744 -2.066004 11.820813 + vertex 0.000000 -2.670251 11.699135 + endloop + endfacet + facet normal -0.000932 -0.309017 0.951056 + outer loop + vertex 0.000000 -4.716300 11.034333 + vertex 40.534901 -3.226747 11.558032 + vertex 0.000000 -2.670251 11.699135 + endloop + endfacet + facet normal -0.000360 -0.322951 0.946416 + outer loop + vertex 41.074001 -4.508494 11.120858 + vertex 40.534901 -3.226747 11.558032 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 0.000398 -0.134233 0.990950 + outer loop + vertex 180.000000 -2.670251 11.699135 + vertex 180.000000 -0.538378 11.987917 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal -0.000156 -0.201912 0.979404 + outer loop + vertex 180.000000 -2.670251 11.699135 + vertex 59.851536 -1.716760 11.876562 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal -0.001156 -0.473868 0.880595 + outer loop + vertex 0.000000 -6.610764 10.014879 + vertex 41.782188 -5.698035 10.560890 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 0.000043 -0.453768 0.891120 + outer loop + vertex 180.000000 -4.716300 11.034333 + vertex 58.777405 -4.791364 11.001946 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal -0.000047 -0.330578 0.943779 + outer loop + vertex 180.000000 -4.716300 11.034333 + vertex 59.500378 -3.121356 11.586938 + vertex 58.777405 -4.791364 11.001946 + endloop + endfacet + facet normal 0.000271 -0.309017 0.951057 + outer loop + vertex 180.000000 -4.716300 11.034333 + vertex 180.000000 -2.670251 11.699135 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal -0.000757 -0.623490 0.781831 + outer loop + vertex 0.000000 -8.292751 8.673538 + vertex 42.848557 -6.989770 9.754133 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 0.000327 -0.473869 0.880596 + outer loop + vertex 180.000000 -6.610764 10.014879 + vertex 180.000000 -4.716300 11.034333 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal -0.001047 -0.753071 0.657939 + outer loop + vertex 0.000000 -9.708204 7.053423 + vertex 45.840042 -9.093665 7.829767 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal 0.000153 -0.740550 0.672002 + outer loop + vertex 180.000000 -8.292751 8.673538 + vertex 55.217609 -8.530917 8.439399 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.000391 -0.623490 0.781831 + outer loop + vertex 180.000000 -8.292751 8.673538 + vertex 180.000000 -6.610764 10.014879 + vertex 56.669765 -7.450787 9.406688 + endloop + endfacet + facet normal 0.000016 -0.816610 0.577190 + outer loop + vertex 48.724289 -9.918295 6.754808 + vertex 47.483089 -9.678077 7.094705 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal -0.000162 -0.830133 0.557565 + outer loop + vertex 49.562771 -9.990437 6.647644 + vertex 48.724289 -9.918295 6.754808 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal -0.000019 -0.868552 0.495599 + outer loop + vertex 0.000000 -10.811626 5.206605 + vertex 50.434238 -9.990567 6.647448 + vertex 49.562771 -9.990437 6.647644 + endloop + endfacet + facet normal -0.000689 -0.858449 0.512899 + outer loop + vertex 0.000000 -10.811626 5.206605 + vertex 49.562771 -9.990437 6.647644 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal 0.000052 -0.828587 0.559861 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 51.472881 -9.890936 6.794806 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal -0.000007 -0.815108 0.579309 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 52.549927 -9.669430 7.106485 + vertex 51.472881 -9.890936 6.794806 + endloop + endfacet + facet normal 0.000017 -0.787550 0.616251 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 53.865475 -9.222695 7.677362 + vertex 52.549927 -9.669430 7.106485 + endloop + endfacet + facet normal 0.000356 -0.753071 0.657939 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 180.000000 -8.292751 8.673538 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.000000 -0.868835 0.495102 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 50.434238 -9.990567 6.647448 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 0.000264 -0.858449 0.512899 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -9.708204 7.053423 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal 0.000000 -0.936235 0.351375 + outer loop + vertex 180.000000 -11.567554 3.192442 + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 -11.567554 3.192442 + endloop + endfacet + facet normal 0.000000 -0.936235 0.351375 + outer loop + vertex 180.000000 -11.567554 3.192442 + vertex 180.000000 -10.811626 5.206605 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 0.000000 -0.983930 0.178557 + outer loop + vertex 180.000000 -11.951692 1.075672 + vertex 0.000000 -11.567554 3.192442 + vertex 0.000000 -11.951692 1.075672 + endloop + endfacet + facet normal 0.000000 -0.983930 0.178557 + outer loop + vertex 180.000000 -11.951692 1.075672 + vertex 180.000000 -11.567554 3.192442 + vertex 0.000000 -11.567554 3.192442 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 180.000000 -11.951692 -1.075672 + vertex 0.000000 -11.951692 1.075672 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 180.000000 -11.951692 -1.075672 + vertex 180.000000 -11.951692 1.075672 + vertex 0.000000 -11.951692 1.075672 + endloop + endfacet + facet normal -0.000000 -0.983930 -0.178557 + outer loop + vertex 180.000000 -11.567554 -3.192442 + vertex 0.000000 -11.951692 -1.075672 + vertex 0.000000 -11.567554 -3.192442 + endloop + endfacet + facet normal 0.000000 -0.983930 -0.178557 + outer loop + vertex 180.000000 -11.567554 -3.192442 + vertex 180.000000 -11.951692 -1.075672 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal -0.000000 -0.936235 -0.351375 + outer loop + vertex 180.000000 -10.811626 -5.206605 + vertex 0.000000 -11.567554 -3.192442 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal 0.000000 -0.936235 -0.351375 + outer loop + vertex 180.000000 -10.811626 -5.206605 + vertex 180.000000 -11.567554 -3.192442 + vertex 0.000000 -11.567554 -3.192442 + endloop + endfacet + facet normal 0.000000 -0.858449 -0.512899 + outer loop + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -10.811626 -5.206605 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal -0.000000 -0.858449 -0.512899 + outer loop + vertex 180.000000 -9.708204 -7.053423 + vertex 0.000000 -10.811626 -5.206605 + vertex 0.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal 0.000000 -0.753071 -0.657939 + outer loop + vertex 180.000000 -8.292751 -8.673538 + vertex 180.000000 -9.708204 -7.053423 + vertex 0.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal -0.000000 -0.753071 -0.657939 + outer loop + vertex 180.000000 -8.292751 -8.673538 + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal 0.000000 -0.623490 -0.781831 + outer loop + vertex 180.000000 -6.610764 -10.014879 + vertex 180.000000 -8.292751 -8.673538 + vertex 0.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal -0.000000 -0.623490 -0.781831 + outer loop + vertex 180.000000 -6.610764 -10.014879 + vertex 0.000000 -8.292751 -8.673538 + vertex 0.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal 0.000000 -0.473869 -0.880596 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -6.610764 -10.014879 + vertex 0.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal -0.000000 -0.473869 -0.880596 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 0.000000 -6.610764 -10.014879 + vertex 0.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal 0.000000 -0.309017 -0.951056 + outer loop + vertex 180.000000 -2.670251 -11.699135 + vertex 180.000000 -4.716300 -11.034333 + vertex 0.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal -0.000000 -0.309017 -0.951056 + outer loop + vertex 180.000000 -2.670251 -11.699135 + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal 0.000000 -0.134233 -0.990950 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 -2.670251 -11.699135 + vertex 0.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal -0.000000 -0.134233 -0.990950 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 0.000000 -2.670251 -11.699135 + vertex 0.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal 0.000000 0.044865 -0.998993 + outer loop + vertex 180.000000 1.610799 -11.891397 + vertex 180.000000 -0.538378 -11.987917 + vertex 0.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal 0.000000 0.044865 -0.998993 + outer loop + vertex 180.000000 1.610799 -11.891397 + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 1.610799 -11.891397 + endloop + endfacet + facet normal 0.000000 0.222521 -0.974928 + outer loop + vertex 180.000000 3.708204 -11.412678 + vertex 0.000000 1.610799 -11.891397 + vertex 0.000000 3.708204 -11.412678 + endloop + endfacet + facet normal 0.000000 0.222521 -0.974928 + outer loop + vertex 180.000000 3.708204 -11.412678 + vertex 180.000000 1.610799 -11.891397 + vertex 0.000000 1.610799 -11.891397 + endloop + endfacet + facet normal 0.000000 0.393025 -0.919528 + outer loop + vertex 180.000000 5.686424 -10.567146 + vertex 0.000000 3.708204 -11.412678 + vertex 0.000000 5.686424 -10.567146 + endloop + endfacet + facet normal 0.000000 0.393025 -0.919528 + outer loop + vertex 180.000000 5.686424 -10.567146 + vertex 180.000000 3.708204 -11.412678 + vertex 0.000000 3.708204 -11.412678 + endloop + endfacet + facet normal 0.000000 0.550897 -0.834573 + outer loop + vertex 180.000000 7.481878 -9.381978 + vertex 0.000000 5.686424 -10.567146 + vertex 0.000000 7.481878 -9.381978 + endloop + endfacet + facet normal 0.000000 0.550897 -0.834573 + outer loop + vertex 180.000000 7.481878 -9.381978 + vertex 180.000000 5.686424 -10.567146 + vertex 0.000000 5.686424 -10.567146 + endloop + endfacet + facet normal 0.000000 0.691063 -0.722795 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 0.000000 7.481878 -9.381978 + vertex 0.000000 9.036858 -7.895265 + endloop + endfacet + facet normal 0.000000 0.691063 -0.722795 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 7.481878 -9.381978 + vertex 0.000000 7.481878 -9.381978 + endloop + endfacet + facet normal 0.000000 0.809017 -0.587785 + outer loop + vertex 180.000000 10.301386 -6.154791 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 10.301386 -6.154791 + endloop + endfacet + facet normal 0.000000 0.809017 -0.587785 + outer loop + vertex 180.000000 10.301386 -6.154791 + vertex 180.000000 9.036858 -7.895265 + vertex 0.000000 9.036858 -7.895265 + endloop + endfacet + facet normal 0.000000 0.900969 -0.433884 + outer loop + vertex 180.000000 11.234818 -4.216498 + vertex 0.000000 10.301386 -6.154791 + vertex 0.000000 11.234818 -4.216498 + endloop + endfacet + facet normal 0.000000 0.900969 -0.433884 + outer loop + vertex 180.000000 11.234818 -4.216498 + vertex 180.000000 10.301386 -6.154791 + vertex 0.000000 10.301386 -6.154791 + endloop + endfacet + facet normal 0.000000 0.963963 -0.266037 + outer loop + vertex 180.000000 11.807155 -2.142683 + vertex 0.000000 11.234818 -4.216498 + vertex 0.000000 11.807155 -2.142683 + endloop + endfacet + facet normal 0.000000 0.963963 -0.266037 + outer loop + vertex 180.000000 11.807155 -2.142683 + vertex 180.000000 11.234818 -4.216498 + vertex 0.000000 11.234818 -4.216498 + endloop + endfacet + facet normal 0.000000 0.995974 -0.089639 + outer loop + vertex 180.000000 12.000000 -0.000000 + vertex 0.000000 11.807155 -2.142683 + vertex 0.000000 12.000000 -0.000000 + endloop + endfacet + facet normal 0.000000 0.995974 -0.089639 + outer loop + vertex 180.000000 12.000000 -0.000000 + vertex 180.000000 11.807155 -2.142683 + vertex 0.000000 11.807155 -2.142683 + endloop + endfacet + facet normal -0.000091 0.587298 0.809371 + outer loop + vertex 56.448730 7.642896 9.251278 + vertex 57.662033 6.425983 10.134433 + vertex 180.000000 7.481878 9.381978 + endloop + endfacet + facet normal 0.000121 0.684477 0.729035 + outer loop + vertex 54.842255 8.749433 8.212639 + vertex 56.448730 7.642896 9.251278 + vertex 180.000000 7.481878 9.381978 + endloop + endfacet + facet normal -0.000038 0.719347 0.694650 + outer loop + vertex 44.321312 8.231192 8.731980 + vertex 45.668846 9.013384 7.922052 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal 0.000511 0.637855 0.770156 + outer loop + vertex 42.912872 7.054971 9.707079 + vertex 44.321312 8.231192 8.731980 + vertex 0.000000 7.481878 9.381978 + endloop + endfacet + facet normal 0.000130 0.529168 0.848517 + outer loop + vertex 41.725323 5.615130 10.605202 + vertex 42.912872 7.054971 9.707079 + vertex 0.000000 5.686424 10.567146 + endloop + endfacet + facet normal -0.000128 0.411591 0.911369 + outer loop + vertex 40.944370 4.242121 11.225168 + vertex 41.725323 5.615130 10.605202 + vertex 0.000000 5.686424 10.567146 + endloop + endfacet + facet normal 0.000587 0.290961 0.956735 + outer loop + vertex 40.380032 2.730610 11.685194 + vertex 40.944370 4.242121 11.225168 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal 0.000659 0.158074 0.987427 + outer loop + vertex 40.055984 1.056659 11.953387 + vertex 40.380032 2.730610 11.685194 + vertex 0.000000 1.610799 11.891397 + endloop + endfacet + facet normal 0.000038 0.020697 0.999786 + outer loop + vertex 40.015751 -0.561047 11.986877 + vertex 40.055984 1.056659 11.953387 + vertex 0.000000 -0.538378 11.987917 + endloop + endfacet + facet normal -0.000036 -0.109684 0.993966 + outer loop + vertex 40.215744 -2.066004 11.820813 + vertex 40.015751 -0.561047 11.986877 + vertex 0.000000 -0.538378 11.987917 + endloop + endfacet + facet normal 0.000248 -0.425791 0.904822 + outer loop + vertex 41.782188 -5.698035 10.560890 + vertex 41.074001 -4.508494 11.120858 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 0.000479 -0.529441 0.848346 + outer loop + vertex 42.848557 -6.989770 9.754133 + vertex 41.782188 -5.698035 10.560890 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -0.000177 -0.634911 0.772586 + outer loop + vertex 44.293537 -8.211959 8.750070 + vertex 42.848557 -6.989770 9.754133 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal 0.000121 -0.721984 0.691909 + outer loop + vertex 45.840042 -9.093665 7.829767 + vertex 44.293537 -8.211959 8.750070 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal -0.000044 -0.782803 0.622269 + outer loop + vertex 47.483089 -9.678077 7.094705 + vertex 45.840042 -9.093665 7.829767 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal -0.000125 -0.667030 0.745031 + outer loop + vertex 56.669765 -7.450787 9.406688 + vertex 55.217609 -8.530917 8.439399 + vertex 180.000000 -8.292751 8.673538 + endloop + endfacet + facet normal -0.000221 -0.564951 0.825124 + outer loop + vertex 57.940296 -6.078792 10.346415 + vertex 56.669765 -7.450787 9.406688 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 11.234818 4.216498 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.000000 5.686424 10.567146 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.000000 3.708204 11.412678 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 1.610799 11.891397 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -11.951692 -1.075672 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -8.292751 -8.673538 + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -10.811626 -5.206605 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 9.036858 -7.895265 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 9.036858 7.895265 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -11.567554 -3.192442 + vertex 0.000000 -11.951692 -1.075672 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 3.708204 -11.412678 + vertex 0.000000 1.610799 -11.891397 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -11.567554 3.192442 + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 -11.951692 1.075672 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -11.951692 1.075672 + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -9.708204 7.053423 + vertex 0.000000 -8.292751 8.673538 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -10.811626 -5.206605 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 3.708204 -11.412678 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 5.686424 -10.567146 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 5.686424 -10.567146 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 7.481878 -9.381978 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 3.708204 -11.412678 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 11.234818 -4.216498 + vertex 0.000000 10.301386 -6.154791 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -2.670251 11.699135 + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -4.716300 11.034333 + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -6.610764 10.014879 + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -8.292751 8.673538 + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.807155 -2.142683 + vertex 0.000000 11.807155 2.142683 + vertex 0.000000 12.000000 -0.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.234818 -4.216498 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 11.807155 -2.142683 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 11.234818 -4.216498 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.807155 -2.142683 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 11.807155 2.142683 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 10.301386 6.154791 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 5.686424 10.567146 + vertex 180.000000 3.708204 11.412678 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 3.708204 11.412678 + vertex 180.000000 1.610799 11.891397 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 1.610799 11.891397 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 -6.610764 10.014879 + vertex 180.000000 11.234818 4.216498 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 10.301386 6.154791 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -8.292751 -8.673538 + vertex 180.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -11.951692 -1.075672 + vertex 180.000000 -11.567554 -3.192442 + vertex 180.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 3.708204 -11.412678 + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 1.610799 -11.891397 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -11.567554 3.192442 + vertex 180.000000 -11.951692 1.075672 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -11.951692 1.075672 + vertex 180.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -8.292751 8.673538 + vertex 180.000000 -9.708204 7.053423 + vertex 180.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 -10.811626 -5.206605 + vertex 180.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 3.708204 -11.412678 + vertex 180.000000 5.686424 -10.567146 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 5.686424 -10.567146 + vertex 180.000000 7.481878 -9.381978 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 3.708204 -11.412678 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 -4.216498 + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 10.301386 -6.154791 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 -2.670251 11.699135 + vertex 180.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 -4.716300 11.034333 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.807155 2.142683 + vertex 180.000000 11.807155 -2.142683 + vertex 180.000000 12.000000 -0.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -6.610764 10.014879 + vertex 180.000000 -8.292751 8.673538 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 11.234818 -4.216498 + vertex 180.000000 11.807155 -2.142683 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -11.951692 -1.075672 + vertex 180.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -8.292751 8.673538 + vertex 180.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -10.811626 -5.206605 + vertex 180.000000 9.036858 -7.895265 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 11.234818 -4.216498 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 11.807155 -2.142683 + vertex 180.000000 11.807155 2.142683 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/T-Junction.stl b/apps/cpu/Multiphase/backup/T-Junction.stl new file mode 100644 index 0000000000000000000000000000000000000000..87c59e91572cedafd98f2b21053d09011e80a623 GIT binary patch literal 14984 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt b/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt new file mode 100644 index 000000000..34aa746a2 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt @@ -0,0 +1,72 @@ +pathname = d:/temp/Thermal +pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase +geoFile = FlowFocusingS2_Small.ast +#geoFile = T-Junction.ast +numOfThreads = 4 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) +#blocknx = 5 2 9 + +boundingBox = 0.5 200.5 0.5 100.5 0.5 3.5 (Droplet test) +blocknx = 10 10 3 +dx = 1.0 +refineLevel = 0 + +#Simulation +uLB = 0.001 +uF2 = 0.001 +Re = 10 +#nuL = 3.3e-3 +nuL = 3.33e-5 +nuG = 3.33e-5 +Phase-field Relaxation = 0.500141 +#nuL = 0.16666 +#nuG = 0.16666 +densityRatio = 1.0495 +#densityRatio = 10.0 +sigma = 7.4e-4 +interfaceThickness = 3 +#radius = 10.0 (Droplet test) +#radius = -20.0 (FlowFocusingSS , FlowFocusingS) +radius = -5.0 (FlowFocusingSq) +#radius = 10.0 (FlowFocusing) +#radius = 20.0 (T-Junction) +contactAngle = 120.0 +gravity = -2.7e-4 +phi_L = 1.0 +phi_H = 4.0 +Mobility = 0.05 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 200 +endTime = 20000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Tube_jet.FCStd b/apps/cpu/Multiphase/backup/Tube_jet.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..a496c4b14043a3d397f70a479205f7d23139c991 GIT binary patch literal 11826 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 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Tube_jet.stl b/apps/cpu/Multiphase/backup/Tube_jet.stl new file mode 100644 index 0000000000000000000000000000000000000000..8b9fa2cb33db4762af84b2e7da4d46a01d3c0184 GIT binary patch literal 15084 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 GLH`#TDig*4 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.FCStd b/apps/cpu/Multiphase/backup/Tube_jet1.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..a009fabad2296f3a56ef31b8122ccb60341a76a6 GIT binary patch literal 11785 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 E13zR&tpET3 literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.stl b/apps/cpu/Multiphase/backup/Tube_jet1.stl new file mode 100644 index 0000000000000000000000000000000000000000..416bdd4d9e81be88dfc2164c97a67577812ebdd3 GIT binary patch literal 28884 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 CIvURa literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/Tube_jet_s.stl b/apps/cpu/Multiphase/backup/Tube_jet_s.stl new file mode 100644 index 0000000000000000000000000000000000000000..8cdc56a34427f1dbea876038a43b0fea78de2d09 GIT binary patch literal 26284 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 KQmhj8{{H}?;}(?w literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/aaaa.stl b/apps/cpu/Multiphase/backup/aaaa.stl new file mode 100644 index 0000000000000000000000000000000000000000..012423f0625912bb76dcae9c5040a1dcad1d2bda GIT binary patch literal 2684 zcmb`HF^&{L3`INU1RE2PkZq1wgha9tmzl664mLvCkVD~T*LVNw?qL&3+UdV8zi+#` zW?sMl{PFqqzkPgo-h7RF{P$(sp1#)eHlM_nzlN@eOM1&paR)z$KeLwT?VkkQIFUNt z2i~zhh2N!b>~}mfuZY{EHTB*VhzMm-T^eGk-Pw@J5+Q%Z^Zz0S`9%<YMA+o_BIL=F zPDCqyCaA96D<b#OTyN0{X?z!Ywo`BN?f2TrQ)Fi+(PejdB0NiaaY|y~G1k-7JNWpr z$I-Qt2ubhq6`?tZp9y*uAx)O(12Og;O)L6L&>JUwi^_NhF`mD5z0@;K>RckGuM_TM z*+{D6MZZ?BwapP7u|zP36N;Y+{8d9*r`z%L*1fvQdO+aKiYJp(otrUFp|y1dF?Ir9 zC)_ErVyUa;#@S4YTa9~>+M$NeBwd93VVsaY&a`*rglD<V+9c{1sBZ>Yyg{9nH1S%a z&Z-H#loh(;2Ld=qe1C=4a>Hl*Ovo2PnyiJ+wz8{G%6e3Tcu$>@ZxNk^Z}yJ%IqIzB z53KK<6Vl9AM4I3EtghU5*2`|CD^u^CIgW(7x+a$ITFgLJPCGT{R_j=U9o5shy<fu# zvb&zj)ZL05&V(9%cSY=7fsN_oglni1;qRm8h^&5_?-QzVo2Onxb~9=m?QlM5C(x&R w)t!h??@pIDpVVT9tn`X!`-bi~$+<*$mh|G(zg3A%-<;5Wz21qS`Xhq)Uq5t5*8l(j literal 0 HcmV?d00001 diff --git a/apps/cpu/Multiphase/backup/dd.ast b/apps/cpu/Multiphase/backup/dd.ast new file mode 100644 index 000000000..b95f8748a --- /dev/null +++ b/apps/cpu/Multiphase/backup/dd.ast @@ -0,0 +1,198 @@ +solid Mesh + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 5.000000 -5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 0.000000 5.000000 5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -5.000000 -5.000000 + vertex 0.000000 -5.000000 5.000000 + vertex 0.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.000000 -5.000000 -5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.000000 -5.000000 -5.000000 + vertex 0.000000 5.000000 -5.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 20.000000 5.000000 -5.000000 + vertex 0.000000 5.000000 -5.000000 + vertex 20.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 5.000000 -5.000000 + vertex 0.000000 5.000000 5.000000 + vertex 20.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.000000 5.000000 5.000000 + vertex 0.000000 -5.000000 5.000000 + vertex 20.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.000000 5.000000 5.000000 + vertex 0.000000 -5.000000 5.000000 + vertex 20.000000 -5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.000000 -5.000000 5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 20.000000 -5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 20.000000 -5.000000 5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 20.000000 -5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 5.000000 5.000000 + vertex 20.000000 25.000000 25.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 5.000000 -5.000000 + vertex 20.000000 25.000000 25.000000 + vertex 20.000000 25.000000 -25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 25.000000 -25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 -5.000000 -5.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 5.000000 5.000000 + vertex 20.000000 -5.000000 5.000000 + vertex 20.000000 25.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 -5.000000 5.000000 + vertex 20.000000 -5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -5.000000 5.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 20.000000 25.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 20.000000 -5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 120.000000 -25.000000 -25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 120.000000 25.000000 -25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 25.000000 -25.000000 + vertex 120.000000 25.000000 -25.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 120.000000 -25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 120.000000 -25.000000 25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 120.000000 -25.000000 -25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 25.000000 -25.000000 + vertex 20.000000 25.000000 -25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 20.000000 25.000000 -25.000000 + vertex 20.000000 25.000000 25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.000000 25.000000 25.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 120.000000 25.000000 25.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 120.000000 -25.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 120.000000 -25.000000 -25.000000 + vertex 120.000000 25.000000 -25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 120.000000 -25.000000 25.000000 + vertex 120.000000 -25.000000 -25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/dd.stl b/apps/cpu/Multiphase/backup/dd.stl new file mode 100644 index 0000000000000000000000000000000000000000..c72bd5e4cc997a156f43cc526b38d7fb49077aa1 GIT binary patch literal 1484 zcmb`HO-=(b4282sJpy~!aE7KxNNl>|B0WNm(oKO|klD>~I0EnaZ#<JhVu2-hGWPpy zCuw_rd3$|2|J%pieWA54_^p)wUdsGX%C*9KDThaW%KFpd$gPR2nm>$y>aZe6(b(&H zTIycdubVSobxo}riLA;KN~M~Kb_CTBNwszfP-;$O)rI?jLfk9i9oFQtkjkpO^XOew zyAU}u5MBG38oQ=tRXzo&)CZy=;-_2J=N55LdJlZk@>E>U<`M5y@gCfAW=jY?QMn~N zBLoyPJXhKwvZ_N(Kf$Z6M`CqrR8tAU_cRimA|^?Me=A2qGG3Q7C;D>_>1TvjDq%dc z?`NIJr}7CU&OTGfu^=Jc5e>prBjI-v1eCExh3JjAnh<TB*(E?5am2G3fjYlVwe%nX zle$|1@39Xhnuz5$7z8pg)kr8HM6NXu6Q-3O@~>c2oC&f)=k-F^WI-Sk>kaV(*`ijR literal 0 HcmV?d00001 diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.cpp b/src/basics/geometry3d/GbTriFaceMesh3D.cpp index 9c098f14c..3615cff63 100644 --- a/src/basics/geometry3d/GbTriFaceMesh3D.cpp +++ b/src/basics/geometry3d/GbTriFaceMesh3D.cpp @@ -67,8 +67,8 @@ GbTriFaceMesh3D::~GbTriFaceMesh3D() /*======================================================================*/ void GbTriFaceMesh3D::init() { - nodes = NULL; - triangles = NULL; + //nodes = NULL; + //triangles = NULL; x1min = 0.0; x1max = 0.0; x1center = 0.0; @@ -787,7 +787,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co timer.start(); if (kdtreeSplitAlg == KDTREE_SAHPLIT) { UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit"); - cout << "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit" << std::endl; + //cout << "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit" << std::endl; this->kdTree = new Kd::Tree<double>(*this, Kd::SAHSplit<double>()); } else if (kdtreeSplitAlg == KDTREE_SPATIALSPLIT) { UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SpatialMedianSplit"); @@ -795,7 +795,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co } else throw UbException(UB_EXARGS, "unknown kdtree split option)"); UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds"); - cout << "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds" << std::endl; + //cout << "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds" << std::endl; } // eigentlicher PIO-Test @@ -1005,48 +1005,44 @@ void GbTriFaceMesh3D::writeMeshPly(const std::string &filename) out << "3 " << (*triangles)[i].v1 << " " << (*triangles)[i].v2 << " " << (*triangles)[i].v3 << endl; } /*======================================================================*/ -void GbTriFaceMesh3D::readMeshFromSTLFile(string filename, bool removeRedundantNodes) +void GbTriFaceMesh3D::readMeshFromSTLFileASCII(string filename, bool removeRedundantNodes) { UBLOG(logDEBUG1, "GbTriFaceMesh3DCreator::readMeshFromSTLFile !!! Dieses Format hat leider redundante Knoten ..."); - UbFileInputASCII in(filename); - // this->nodes = new vector<GbTriFaceMesh3D::Vertex>; - // this->triangles = new vector<GbTriFaceMesh3D::TriFace>; - string dummy; - - double x, y, z; int nr = 0; - in.readLine(); - while (dummy != "endsolid") { - in.readLine(); - in.readLine(); - dummy = in.readString(); - if (dummy != "vertex") - throw UbException(UB_EXARGS, "no vertex format"); - x = in.readDouble(); - y = in.readDouble(); - z = in.readDouble(); - nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z)); - in.readLine(); - in.readString(); - x = in.readDouble(); - y = in.readDouble(); - z = in.readDouble(); - nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z)); - in.readLine(); - in.readString(); - x = in.readDouble(); - y = in.readDouble(); - z = in.readDouble(); - nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z)); - triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2)); - in.readLine(); - in.readLine(); - in.readLine(); - dummy = in.readString(); - nr += 3; + ifstream in(filename.c_str()); + if (!in.good()) { + (*nodes).clear(); + (*triangles).clear(); + UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename)); } + char title[80]; + std::string s0, s1; + float n0, n1, n2, f0, f1, f2, f3, f4, f5, f6, f7, f8; + in.read(title, 80); + while (!in.eof()) { + in >> s0; // facet || endsolid + if (s0 == "facet") { + in >> s1 >> n0 >> n1 >> n2; // normal x y z + in >> s0 >> s1; // outer loop + in >> s0 >> f0 >> f1 >> f2; // vertex x y z + in >> s0 >> f3 >> f4 >> f5; // vertex x y z + in >> s0 >> f6 >> f7 >> f8; // vertex x y z + in >> s0; // endloop + in >> s0; // endfacet + // Generate a new Triangle without Normal as 3 Vertices + nodes->push_back(GbTriFaceMesh3D::Vertex(f0, f1, f2)); + nodes->push_back(GbTriFaceMesh3D::Vertex(f3, f4, f5)); + nodes->push_back(GbTriFaceMesh3D::Vertex(f6, f7, f8)); + triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2)); + nr += 3; + } else if (s0 == "endsolid") { + break; + } + } + in.close(); + if (removeRedundantNodes) { this->deleteRedundantNodes(); // dort wird autoamtisch calculateValues() aufgerufen } else { @@ -1056,13 +1052,11 @@ void GbTriFaceMesh3D::readMeshFromSTLFile(string filename, bool removeRedundantN /*======================================================================*/ void GbTriFaceMesh3D::readMeshFromSTLFileBinary(string filename, bool removeRedundantNodes) { - // vector<GbTriFaceMesh3D::Vertex> *nodes = new vector<GbTriFaceMesh3D::Vertex>; - // vector<GbTriFaceMesh3D::TriFace> *triangles = new vector<GbTriFaceMesh3D::TriFace>; int nr = 0; FILE *f = fopen(filename.c_str(), "rb"); if (!f) { - delete nodes; - delete triangles; + (*nodes).clear(); + (*triangles).clear(); UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename)); } char title[80]; diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.h b/src/basics/geometry3d/GbTriFaceMesh3D.h index 7f574bdf0..eb7fc1a9f 100644 --- a/src/basics/geometry3d/GbTriFaceMesh3D.h +++ b/src/basics/geometry3d/GbTriFaceMesh3D.h @@ -269,7 +269,7 @@ public: this->transX2 = transX2; this->transX3 = transX3; } - void readMeshFromSTLFile(std::string filename, bool removeRedundantNodes); + void readMeshFromSTLFileASCII(std::string filename, bool removeRedundantNodes); void readMeshFromSTLFileBinary(std::string filename, bool removeRedundantNodes); double getX1Minimum() override @@ -344,7 +344,7 @@ public: void rotateAroundPoint(const double &px1, const double &px2, const double &px3, const double &alpha, const double &beta, const double &gamma); void translate(const double &x1, const double &x2, const double &x3) override; - void reflectAcrossXYLine(const double &alpha); + //void reflectAcrossXYLine(const double &alpha); bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3) override; bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3, int counter); @@ -378,8 +378,8 @@ protected: KDTREE_SPLITAGORITHM kdtreeSplitAlg; void init(); - std::vector<Vertex> *nodes; - std::vector<TriFace> *triangles; + std::vector<Vertex> * nodes; + std::vector<TriFace> * triangles; // for transfer std::string filename; bool transferViaFilename{ false }; diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h index f90e05e07..0a666a932 100644 --- a/src/cpu/VirtualFluids.h +++ b/src/cpu/VirtualFluids.h @@ -133,6 +133,10 @@ #include <BoundaryConditions/SimpleSlipBCAlgorithm.h> #include <BoundaryConditions/PowellEyringModelNoSlipBCAlgorithm.h> #include <BoundaryConditions/BinghamModelVelocityBCAlgorithm.h> +#include <BoundaryConditions/NoSlipBCAlgorithmMultiphase.h> +#include <BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h> +#include <BoundaryConditions/VelocityBCAdapterMultiphase.h> +#include <BoundaryConditions/VelocityBCAlgorithmMultiphase.h> #include <Connectors/Block3DConnector.h> #include <Connectors/Block3DConnectorFactory.h> @@ -231,6 +235,7 @@ #include <LBM/ThixotropyInterpolationProcessor.h> #include <LBM/RheologyK17LBMKernel.h> #include <LBM/PowellEyringModelLBMKernel.h> +#include <LBM/MultiphaseCumulantLBMKernel.h> @@ -322,6 +327,9 @@ #include <CheckRatioBlockVisitor.h> #include <SpongeLayerBlockVisitor.h> #include <ZoltanPartitioningGridVisitor.h> +#include <Visitors/SetKernelBlockVisitorMultiphase.h> +#include <Visitors/BoundaryConditionsBlockVisitorMultiphase.h> +#include <Visitors/InitDistributionsBlockVisitorMultiphase.h> #include <RefineAroundGbObjectHelper.h> #include <Visitors/RefineCrossAndInsideGbObjectHelper.h> diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp index 61b427e32..69543bc6d 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp @@ -65,7 +65,20 @@ void BCAlgorithm::setCompressible(bool c) } ////////////////////////////////////////////////////////////////////////// void BCAlgorithm::setCollFactor(LBMReal cf) { collFactor = cf; } - +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setCollFactorL(LBMReal cf) { collFactorL = cf; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setCollFactorG(LBMReal cf) { collFactorG = cf; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setCollFactorPh(LBMReal cf) { collFactorPh = cf; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setDensityRatio(LBMReal dr) { densityRatio = dr; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setPhiBound(LBMReal phiL, LBMReal phiH) +{ + this->phiL = phiL; + this->phiH = phiH; +} ////////////////////////////////////////////////////////////////////////// char BCAlgorithm::getType() { return type; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h index 734aa9342..518ea9fac 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h @@ -47,37 +47,46 @@ class BoundaryConditions; class BCAlgorithm { public: - static const char VelocityBCAlgorithm = 0; - static const char EqDensityBCAlgorithm = 1; - static const char NonEqDensityBCAlgorithm = 2; - static const char NoSlipBCAlgorithm = 3; - static const char SlipBCAlgorithm = 4; - static const char HighViscosityNoSlipBCAlgorithm = 5; - static const char ThinWallNoSlipBCAlgorithm = 6; - static const char VelocityWithDensityBCAlgorithm = 7; - static const char NonReflectingOutflowBCAlgorithm = 8; - static const char VelocityAndThixotropyBCAlgorithm = 9; - static const char DensityAndThixotropyBCAlgorithm = 10; - static const char NoSlipAndThixotropyBCAlgorithm = 11; + static const char VelocityBCAlgorithm = 0; + static const char EqDensityBCAlgorithm = 1; + static const char NonEqDensityBCAlgorithm = 2; + static const char NoSlipBCAlgorithm = 3; + static const char SlipBCAlgorithm = 4; + static const char HighViscosityNoSlipBCAlgorithm = 5; + static const char ThinWallNoSlipBCAlgorithm = 6; + static const char VelocityWithDensityBCAlgorithm = 7; + static const char NonReflectingOutflowBCAlgorithm = 8; + static const char VelocityAndThixotropyBCAlgorithm = 9; + static const char DensityAndThixotropyBCAlgorithm = 10; + static const char NoSlipAndThixotropyBCAlgorithm = 11; static const char NonReflectingOutflowAndThixotropyBCAlgorithm = 12; - static const char VelocityWithDensityAndThixotropyBCAlgorithm = 13; - static const char BinghamModelNoSlipBCAlgorithm = 14; - static const char HerschelBulkleyModelNoSlipBCAlgorithm = 15; - static const char SimpleVelocityBCAlgorithm = 16; - static const char SimpleSlipBCAlgorithm = 17; - static const char PowellEyringModelNoSlipBCAlgorithm = 18; - static const char BinghamModelVelocityBCAlgorithm = 19; + static const char VelocityWithDensityAndThixotropyBCAlgorithm = 13; + static const char BinghamModelNoSlipBCAlgorithm = 14; + static const char HerschelBulkleyModelNoSlipBCAlgorithm = 15; + static const char SimpleVelocityBCAlgorithm = 16; + static const char SimpleSlipBCAlgorithm = 17; + static const char PowellEyringModelNoSlipBCAlgorithm = 18; + static const char BinghamModelVelocityBCAlgorithm = 19; + static const char NoSlipBCAlgorithmMultiphase = 20; public: BCAlgorithm() = default; virtual ~BCAlgorithm() = default; - virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0; + virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0; + virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} void setNodeIndex(int x1, int x2, int x3); void setBcPointer(SPtr<BoundaryConditions> bcPtr); void setCompressible(bool c); void setCollFactor(LBMReal cf); + + void setCollFactorL(LBMReal cf); + void setCollFactorG(LBMReal cf); + void setCollFactorPh(LBMReal cf); + void setDensityRatio(LBMReal dr); + void setPhiBound(LBMReal phiL, LBMReal phiH); + char getType(); bool isPreCollision(); virtual SPtr<BCAlgorithm> clone() = 0; @@ -94,9 +103,13 @@ protected: SPtr<BoundaryConditions> bcPtr; SPtr<DistributionArray3D> distributions; + SPtr<DistributionArray3D> distributionsH; SPtr<BCArray3D> bcArray; LBMReal collFactor; + LBMReal collFactorL, collFactorG, collFactorPh; + LBMReal densityRatio; + LBMReal phiL, phiH; int x1, x2, x3; LBMReal compressibleFactor; diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h index 84ba7a604..f59a89949 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h @@ -251,6 +251,10 @@ public: throw UbException(UB_EXARGS, "unknown error"); } } + + //Multiphase + void setBoundaryPhaseField(const float &phiBC) { this->bcPhaseField = phiBC; } + float getBoundaryPhaseField() { return this->bcPhaseField; } /*============== Density Boundary ========================*/ void setDensityBoundaryFlag(const int &direction, const short &secOpt = 0) @@ -348,8 +352,9 @@ protected: float bcVelocityX2{ 0.0f }; float bcVelocityX3{ 0.0f }; float bcDensity{ 0.0f }; - // float bcThixotropy{ 0.0f }; + float bcPhaseField{ 0.0f }; + //FIXME: remove LODI variables, don't forget to adjust MPIIOCoProcessors float bcLodiDensity{ 0.0f }; float bcLodiVelocityX1{ 0.0f }; float bcLodiVelocityX2{ 0.0f }; diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp new file mode 100644 index 000000000..7ea78b526 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp @@ -0,0 +1,111 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file NoSlipBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "NoSlipBCAlgorithmMultiphase.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +NoSlipBCAlgorithmMultiphase::NoSlipBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::NoSlipBCAlgorithmMultiphase; + BCAlgorithm::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +NoSlipBCAlgorithmMultiphase::~NoSlipBCAlgorithmMultiphase() +{ + +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> NoSlipBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new NoSlipBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NoSlipBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NoSlipBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void NoSlipBCAlgorithmMultiphase::applyBC() +{ + LBMReal f[D3Q27System::ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + LBMReal feq[D3Q27System::ENDF+1]; + LBMReal heq[D3Q27System::ENDF+1]; + distributions ->getDistributionInv(f, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + LBMReal phi, rho, vx1, vx2, vx3, p1; + + D3Q27System::calcDensity(h, phi); + + //LBMReal collFactorM = phi*collFactorL + (1-phi)*collFactorG; + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + //rho = phi + (1.0 - phi)*1.0/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + calcMacrosFct(f, p1, vx1, vx2, vx3); + /*vx1/=(rho*c1o3); + vx2/=(rho*c1o3); + vx3/=(rho*c1o3);*/ + + //calcFeqFct(feq, rho, vx1, vx2, vx3); + //D3Q27System::calcMultiphaseFeq(feq, rho, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + //LBMReal collFactorM1 = 0.9; + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasNoSlipBoundaryFlag(fdir)) + { + //quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + //LBMReal q = bcPtr->getQ(invDir); + //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactorM)+feq[invDir])+((q/(1.0+q))*(f[invDir]+f[fdir])); + LBMReal fReturn = f[invDir]; + distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + + //LBMReal hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); + LBMReal hReturn = h[invDir]; + distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } +} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h new file mode 100644 index 000000000..037ee6f50 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h @@ -0,0 +1,50 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file NoSlipBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef NoSlipBCAlgorithmMultiphase_h__ +#define NoSlipBCAlgorithmMultiphase_h__ + +#include "BCAlgorithm.h" + +//! A class implements no-slip boundary condition for multiphase simulations +class NoSlipBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + NoSlipBCAlgorithmMultiphase(); + virtual ~NoSlipBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone() override; + void addDistributions(SPtr<DistributionArray3D> distributions) override; + void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; + void applyBC(); +}; +#endif // NoSlipBCAlgorithmMultiphase_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp new file mode 100644 index 000000000..e8a3fa794 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp @@ -0,0 +1,372 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file NonReflectingOutflowBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "NonReflectingOutflowBCAlgorithmMultiphase.h" +#include "D3Q27System.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +NonReflectingOutflowBCAlgorithmMultiphase::NonReflectingOutflowBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::NonReflectingOutflowBCAlgorithm; + BCAlgorithm::preCollision = true; +} +////////////////////////////////////////////////////////////////////////// +NonReflectingOutflowBCAlgorithmMultiphase::~NonReflectingOutflowBCAlgorithmMultiphase() +{ +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> NonReflectingOutflowBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new NonReflectingOutflowBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCAlgorithmMultiphase::applyBC() +{ + using namespace D3Q27System; + using namespace UbMath; + LBMReal f[ENDF+1]; + LBMReal ftemp[ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + //LBMReal heq[D3Q27System::ENDF+1]; + LBMReal htemp[ENDF+1]; + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + + //flag points in direction of fluid + if (bcPtr->hasDensityBoundaryFlag(E)) { nx1 += 1; direction = E; } + else if (bcPtr->hasDensityBoundaryFlag(W)) { nx1 -= 1; direction = W; } + else if (bcPtr->hasDensityBoundaryFlag(N)) { nx2 += 1; direction = N; } + else if (bcPtr->hasDensityBoundaryFlag(S)) { nx2 -= 1; direction = S; } + else if (bcPtr->hasDensityBoundaryFlag(T)) { nx3 += 1; direction = T; } + else if (bcPtr->hasDensityBoundaryFlag(B)) { nx3 -= 1; direction = B; } + else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); + + distributions->getDistribution(f, x1, x2, x3); + distributions->getDistribution(ftemp, nx1, nx2, nx3); + distributionsH->getDistribution(h, x1, x2, x3); + distributionsH->getDistribution(htemp, nx1, nx2, nx3); + + LBMReal phi, rho, p1, vx1, vx2, vx3; + + D3Q27System::calcDensity(h, phi); + + //LBMReal collFactorM = phi*collFactorL + (1-phi)*collFactorG; + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + //rho = phi + (1.0 - phi)*1.0/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + + + calcMacrosFct(f, p1, vx1, vx2, vx3); + /*vx1/=(rho*c1o3); + vx2/=(rho*c1o3); + vx3/=(rho*c1o3);*/ + + + switch (direction) + { + case E: + f[E] = ftemp[E] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[E] ; + f[NE] = ftemp[NE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[NE] ; + f[SE] = ftemp[SE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[SE] ; + f[TE] = ftemp[TE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[TE] ; + f[BE] = ftemp[BE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[BE] ; + f[TNE] = ftemp[TNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[TNE] ; + f[TSE] = ftemp[TSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[TSE] ; + f[BNE] = ftemp[BNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[BNE] ; + f[BSE] = ftemp[BSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[BSE] ; + + distributions->setDistributionInvForDirection(f[E], x1+DX1[W], x2+DX2[W], x3+DX3[W], W); + distributions->setDistributionInvForDirection(f[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributions->setDistributionInvForDirection(f[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributions->setDistributionInvForDirection(f[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributions->setDistributionInvForDirection(f[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributions->setDistributionInvForDirection(f[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributions->setDistributionInvForDirection(f[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributions->setDistributionInvForDirection(f[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributions->setDistributionInvForDirection(f[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + + h[E] = htemp[E] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[E] ; + h[NE] = htemp[NE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[NE] ; + h[SE] = htemp[SE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[SE] ; + h[TE] = htemp[TE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[TE] ; + h[BE] = htemp[BE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[BE] ; + h[TNE] = htemp[TNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[TNE] ; + h[TSE] = htemp[TSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[TSE] ; + h[BNE] = htemp[BNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[BNE] ; + h[BSE] = htemp[BSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[BSE] ; + + distributionsH->setDistributionInvForDirection(h[E], x1+DX1[W], x2+DX2[W], x3+DX3[W], W); + distributionsH->setDistributionInvForDirection(h[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributionsH->setDistributionInvForDirection(h[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributionsH->setDistributionInvForDirection(h[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributionsH->setDistributionInvForDirection(h[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributionsH->setDistributionInvForDirection(h[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributionsH->setDistributionInvForDirection(h[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributionsH->setDistributionInvForDirection(h[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributionsH->setDistributionInvForDirection(h[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + + break; + case W: + f[W] = ftemp[W] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[W] ; + f[NW] = ftemp[NW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[NW] ; + f[SW] = ftemp[SW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[SW] ; + f[TW] = ftemp[TW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[TW] ; + f[BW] = ftemp[BW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[BW] ; + f[TNW] = ftemp[TNW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[TNW]; + f[TSW] = ftemp[TSW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[TSW]; + f[BNW] = ftemp[BNW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[BNW]; + f[BSW] = ftemp[BSW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[BSW]; + + distributions->setDistributionInvForDirection(f[W], x1+DX1[E], x2+DX2[E], x3+DX3[E], E); + distributions->setDistributionInvForDirection(f[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributions->setDistributionInvForDirection(f[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributions->setDistributionInvForDirection(f[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributions->setDistributionInvForDirection(f[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributions->setDistributionInvForDirection(f[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributions->setDistributionInvForDirection(f[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributions->setDistributionInvForDirection(f[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributions->setDistributionInvForDirection(f[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + h[W] = htemp[W] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[W] ; + h[NW] = htemp[NW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[NW] ; + h[SW] = htemp[SW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[SW] ; + h[TW] = htemp[TW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[TW] ; + h[BW] = htemp[BW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[BW] ; + h[TNW] = htemp[TNW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[TNW]; + h[TSW] = htemp[TSW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[TSW]; + h[BNW] = htemp[BNW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[BNW]; + h[BSW] = htemp[BSW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[BSW]; + + distributionsH->setDistributionInvForDirection(h[W], x1+DX1[E], x2+DX2[E], x3+DX3[E], E); + distributionsH->setDistributionInvForDirection(h[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributionsH->setDistributionInvForDirection(h[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributionsH->setDistributionInvForDirection(h[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributionsH->setDistributionInvForDirection(h[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributionsH->setDistributionInvForDirection(h[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributionsH->setDistributionInvForDirection(h[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributionsH->setDistributionInvForDirection(h[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributionsH->setDistributionInvForDirection(h[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + break; + case N: + f[N] = ftemp[N] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[N] ; + f[NE] = ftemp[NE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[NE] ; + f[NW] = ftemp[NW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[NW] ; + f[TN] = ftemp[TN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[TN] ; + f[BN] = ftemp[BN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[BN] ; + f[TNE] = ftemp[TNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[TNE] ; + f[TNW] = ftemp[TNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[TNW] ; + f[BNE] = ftemp[BNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[BNE] ; + f[BNW] = ftemp[BNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[BNW] ; + + distributions->setDistributionInvForDirection(f[N], x1+DX1[S], x2+DX2[S], x3+DX3[S], S); + distributions->setDistributionInvForDirection(f[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributions->setDistributionInvForDirection(f[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributions->setDistributionInvForDirection(f[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributions->setDistributionInvForDirection(f[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributions->setDistributionInvForDirection(f[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributions->setDistributionInvForDirection(f[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributions->setDistributionInvForDirection(f[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributions->setDistributionInvForDirection(f[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + + h[N] = htemp[N] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[N] ; + h[NE] = htemp[NE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[NE] ; + h[NW] = htemp[NW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[NW] ; + h[TN] = htemp[TN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[TN] ; + h[BN] = htemp[BN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[BN] ; + h[TNE] = htemp[TNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[TNE] ; + h[TNW] = htemp[TNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[TNW] ; + h[BNE] = htemp[BNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[BNE] ; + h[BNW] = htemp[BNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[BNW] ; + + distributionsH->setDistributionInvForDirection(h[N], x1+DX1[S], x2+DX2[S], x3+DX3[S], S); + distributionsH->setDistributionInvForDirection(h[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributionsH->setDistributionInvForDirection(h[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributionsH->setDistributionInvForDirection(h[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributionsH->setDistributionInvForDirection(h[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributionsH->setDistributionInvForDirection(h[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributionsH->setDistributionInvForDirection(h[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributionsH->setDistributionInvForDirection(h[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributionsH->setDistributionInvForDirection(h[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + + break; + case S: + f[S] = ftemp[S] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[S] ; + f[SE] = ftemp[SE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[SE] ; + f[SW] = ftemp[SW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[SW] ; + f[TS] = ftemp[TS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[TS] ; + f[BS] = ftemp[BS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[BS] ; + f[TSE] = ftemp[TSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[TSE] ; + f[TSW] = ftemp[TSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[TSW] ; + f[BSE] = ftemp[BSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[BSE] ; + f[BSW] = ftemp[BSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[BSW] ; + + distributions->setDistributionInvForDirection(f[S], x1+DX1[N], x2+DX2[N], x3+DX3[N], N); + distributions->setDistributionInvForDirection(f[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributions->setDistributionInvForDirection(f[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributions->setDistributionInvForDirection(f[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributions->setDistributionInvForDirection(f[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributions->setDistributionInvForDirection(f[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributions->setDistributionInvForDirection(f[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributions->setDistributionInvForDirection(f[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributions->setDistributionInvForDirection(f[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + h[S] = htemp[S] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[S] ; + h[SE] = htemp[SE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[SE] ; + h[SW] = htemp[SW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[SW] ; + h[TS] = htemp[TS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[TS] ; + h[BS] = htemp[BS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[BS] ; + h[TSE] = htemp[TSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[TSE] ; + h[TSW] = htemp[TSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[TSW] ; + h[BSE] = htemp[BSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[BSE] ; + h[BSW] = htemp[BSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[BSW] ; + + distributionsH->setDistributionInvForDirection(h[S], x1+DX1[N], x2+DX2[N], x3+DX3[N], N); + distributionsH->setDistributionInvForDirection(h[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributionsH->setDistributionInvForDirection(h[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributionsH->setDistributionInvForDirection(h[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributionsH->setDistributionInvForDirection(h[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributionsH->setDistributionInvForDirection(h[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributionsH->setDistributionInvForDirection(h[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributionsH->setDistributionInvForDirection(h[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributionsH->setDistributionInvForDirection(h[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + break; + case T: + f[T] = ftemp[T] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[T] ; + f[TE] = ftemp[TE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TE] ; + f[TW] = ftemp[TW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TW] ; + f[TN] = ftemp[TN] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TN] ; + f[TS] = ftemp[TS] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TS] ; + f[TNE] = ftemp[TNE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TNE] ; + f[TNW] = ftemp[TNW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TNW] ; + f[TSE] = ftemp[TSE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TSE] ; + f[TSW] = ftemp[TSW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TSW] ; + + distributions->setDistributionInvForDirection(f[T], x1+DX1[B], x2+DX2[B], x3+DX3[B], B); + distributions->setDistributionInvForDirection(f[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributions->setDistributionInvForDirection(f[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributions->setDistributionInvForDirection(f[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributions->setDistributionInvForDirection(f[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributions->setDistributionInvForDirection(f[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributions->setDistributionInvForDirection(f[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributions->setDistributionInvForDirection(f[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributions->setDistributionInvForDirection(f[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + + h[T] = htemp[T] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[T] ; + h[TE] = htemp[TE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TE] ; + h[TW] = htemp[TW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TW] ; + h[TN] = htemp[TN] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TN] ; + h[TS] = htemp[TS] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TS] ; + h[TNE] = htemp[TNE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TNE] ; + h[TNW] = htemp[TNW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TNW] ; + h[TSE] = htemp[TSE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TSE] ; + h[TSW] = htemp[TSW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TSW] ; + + distributionsH->setDistributionInvForDirection(h[T], x1+DX1[B], x2+DX2[B], x3+DX3[B], B); + distributionsH->setDistributionInvForDirection(h[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributionsH->setDistributionInvForDirection(h[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributionsH->setDistributionInvForDirection(h[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributionsH->setDistributionInvForDirection(h[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributionsH->setDistributionInvForDirection(h[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributionsH->setDistributionInvForDirection(h[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributionsH->setDistributionInvForDirection(h[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributionsH->setDistributionInvForDirection(h[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + + break; + case B: + f[B] = ftemp[B] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[B] ; + f[BE] = ftemp[BE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BE] ; + f[BW] = ftemp[BW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BW] ; + f[BN] = ftemp[BN] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BN] ; + f[BS] = ftemp[BS] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BS] ; + f[BNE] = ftemp[BNE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BNE] ; + f[BNW] = ftemp[BNW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BNW] ; + f[BSE] = ftemp[BSE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BSE] ; + f[BSW] = ftemp[BSW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BSW] ; + + distributions->setDistributionInvForDirection(f[B], x1+DX1[T], x2+DX2[T], x3+DX3[T], T); + distributions->setDistributionInvForDirection(f[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributions->setDistributionInvForDirection(f[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributions->setDistributionInvForDirection(f[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributions->setDistributionInvForDirection(f[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributions->setDistributionInvForDirection(f[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributions->setDistributionInvForDirection(f[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributions->setDistributionInvForDirection(f[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributions->setDistributionInvForDirection(f[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + h[B] = htemp[B] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[B] ; + h[BE] = htemp[BE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BE] ; + h[BW] = htemp[BW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BW] ; + h[BN] = htemp[BN] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BN] ; + h[BS] = htemp[BS] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BS] ; + h[BNE] = htemp[BNE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BNE] ; + h[BNW] = htemp[BNW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BNW] ; + h[BSE] = htemp[BSE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BSE] ; + h[BSW] = htemp[BSW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BSW] ; + + distributionsH->setDistributionInvForDirection(h[B], x1+DX1[T], x2+DX2[T], x3+DX3[T], T); + distributionsH->setDistributionInvForDirection(h[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributionsH->setDistributionInvForDirection(h[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributionsH->setDistributionInvForDirection(h[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributionsH->setDistributionInvForDirection(h[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributionsH->setDistributionInvForDirection(h[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributionsH->setDistributionInvForDirection(h[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributionsH->setDistributionInvForDirection(h[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributionsH->setDistributionInvForDirection(h[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + break; + default: + UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); + } +} + diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h new file mode 100644 index 000000000..1a34c931d --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h @@ -0,0 +1,49 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file NonReflectingOutflowBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef NonReflectingOutflowBCAlgorithmMultiphase_h__ +#define NonReflectingOutflowBCAlgorithmMultiphase_h__ + +#include "BCAlgorithm.h" +//! A class implements non reflecting outflow boundary condition for multiphase simulations +class NonReflectingOutflowBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + NonReflectingOutflowBCAlgorithmMultiphase(); + ~NonReflectingOutflowBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone(); + void addDistributions(SPtr<DistributionArray3D> distributions); + void addDistributionsH(SPtr<DistributionArray3D> distributionsH); + void applyBC(); +}; +#endif // NonReflectingOutflowBCAlgorithmMultiphase_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp new file mode 100644 index 000000000..436f67229 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp @@ -0,0 +1,141 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file SlipBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "SlipBCAlgorithmMultiphase.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +SlipBCAlgorithmMultiphase::SlipBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::SlipBCAlgorithm; + BCAlgorithm::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +SlipBCAlgorithmMultiphase::~SlipBCAlgorithmMultiphase() +{ + +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> SlipBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new SlipBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCAlgorithmMultiphase::applyBC() +{ + LBMReal f[D3Q27System::ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + LBMReal feq[D3Q27System::ENDF+1]; + LBMReal heq[D3Q27System::ENDF+1]; + distributions->getDistributionInv(f, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + + LBMReal p1, vx1, vx2, vx3, phi, rho; + + D3Q27System::calcDensity(h, phi); + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + + calcMacrosFct(f, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + + UbTupleFloat3 normale = bcPtr->getNormalVector(); + LBMReal amp = vx1*val<1>(normale)+vx2*val<2>(normale)+vx3*val<3>(normale); + + vx1 = vx1 - amp * val<1>(normale); //normale zeigt von struktur weg! + vx2 = vx2 - amp * val<2>(normale); //normale zeigt von struktur weg! + vx3 = vx3 - amp * val<3>(normale); //normale zeigt von struktur weg! + + //rho = 1.0+drho*compressibleFactor; + rho = 1.0; // In multiphase model set to 1.0! + + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasSlipBoundaryFlag(fdir)) + { + //quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + LBMReal q = bcPtr->getQ(invDir);// m+m q=0 stabiler + //vx3=0; + LBMReal velocity = 0.0; + switch (invDir) + { + case D3Q27System::E: velocity = (UbMath::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) + case D3Q27System::W: velocity = (UbMath::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) + case D3Q27System::N: velocity = (UbMath::c4o9*(+vx2)); break; + case D3Q27System::S: velocity = (UbMath::c4o9*(-vx2)); break; + case D3Q27System::T: velocity = (UbMath::c4o9*(+vx3)); break; + case D3Q27System::B: velocity = (UbMath::c4o9*(-vx3)); break; + case D3Q27System::NE: velocity = (UbMath::c1o9*(+vx1+vx2)); break; + case D3Q27System::SW: velocity = (UbMath::c1o9*(-vx1-vx2)); break; + case D3Q27System::SE: velocity = (UbMath::c1o9*(+vx1-vx2)); break; + case D3Q27System::NW: velocity = (UbMath::c1o9*(-vx1+vx2)); break; + case D3Q27System::TE: velocity = (UbMath::c1o9*(+vx1 +vx3)); break; + case D3Q27System::BW: velocity = (UbMath::c1o9*(-vx1 -vx3)); break; + case D3Q27System::BE: velocity = (UbMath::c1o9*(+vx1 -vx3)); break; + case D3Q27System::TW: velocity = (UbMath::c1o9*(-vx1 +vx3)); break; + case D3Q27System::TN: velocity = (UbMath::c1o9*(+vx2+vx3)); break; + case D3Q27System::BS: velocity = (UbMath::c1o9*(-vx2-vx3)); break; + case D3Q27System::BN: velocity = (UbMath::c1o9*(+vx2-vx3)); break; + case D3Q27System::TS: velocity = (UbMath::c1o9*(-vx2+vx3)); break; + case D3Q27System::TNE: velocity = (UbMath::c1o36*(+vx1+vx2+vx3)); break; + case D3Q27System::BSW: velocity = (UbMath::c1o36*(-vx1-vx2-vx3)); break; + case D3Q27System::BNE: velocity = (UbMath::c1o36*(+vx1+vx2-vx3)); break; + case D3Q27System::TSW: velocity = (UbMath::c1o36*(-vx1-vx2+vx3)); break; + case D3Q27System::TSE: velocity = (UbMath::c1o36*(+vx1-vx2+vx3)); break; + case D3Q27System::BNW: velocity = (UbMath::c1o36*(-vx1+vx2-vx3)); break; + case D3Q27System::BSE: velocity = (UbMath::c1o36*(+vx1-vx2-vx3)); break; + case D3Q27System::TNW: velocity = (UbMath::c1o36*(-vx1+vx2+vx3)); break; + default: throw UbException(UB_EXARGS, "unknown error"); + } + LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(1.0+q)); + distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + + LBMReal hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); + //LBMReal hReturn = h[invDir]; + distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } +} \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h new file mode 100644 index 000000000..3d89df927 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h @@ -0,0 +1,51 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file SlipBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef SlipBCAlgorithmMultiphase_h__ +#define SlipBCAlgorithmMultiphase_h__ + +#include "BCAlgorithm.h" + +//! A class implements slip boundary condition for multiphase simulation +class SlipBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + SlipBCAlgorithmMultiphase(); + virtual ~SlipBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone() override; + void addDistributions(SPtr<DistributionArray3D> distributions) override; + void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; + void applyBC() override; + +}; +#endif // SlipBCAlgorithm_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp new file mode 100644 index 000000000..c288aff3e --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp @@ -0,0 +1,344 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file VelocityBCAdapterMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "VelocityBCAdapterMultiphase.h" +#include "basics/utilities/UbLogger.h" +#include "basics/utilities/UbMath.h" +#include "basics/utilities/UbTuple.h" + +using namespace std; + + +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC) +{ + if(vx1) this->vx1BCs.push_back(velVxBC); + if(vx2) this->vx2BCs.push_back(velVxBC); + if(vx3) this->vx3BCs.push_back(velVxBC); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const LBMReal& phiBC, const double& startTime, const double& endTime ) +{ + if(vx1) this->vx1BCs.push_back(BCFunction(function,startTime,endTime)); + if(vx2) this->vx2BCs.push_back(BCFunction(function,startTime,endTime)); + if(vx3) this->vx3BCs.push_back(BCFunction(function,startTime,endTime)); + this->phiBC = phiBC; + this->init(); + //this->init(vx3BCs); + +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const LBMReal& phiBC, const double& startTime, const double& endTime ) +{ + if(vx1) this->vx1BCs.push_back(BCFunction(function1,startTime,endTime)); + if(vx2) this->vx2BCs.push_back(BCFunction(function2,startTime,endTime)); + if(vx3) this->vx3BCs.push_back(BCFunction(function3,startTime,endTime)); + this->phiBC = phiBC; + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const string& functionstring, const double& startTime, const double& endTime ) +{ + if(vx1) this->vx1BCs.push_back(BCFunction(functionstring,startTime,endTime)); + if(vx2) this->vx2BCs.push_back(BCFunction(functionstring,startTime,endTime)); + if(vx3) this->vx3BCs.push_back(BCFunction(functionstring,startTime,endTime)); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir) +{ + if(x1Dir) this->vx1BCs.push_back(velBC); + if(x2Dir) this->vx2BCs.push_back(velBC); + if(x3Dir) this->vx3BCs.push_back(velBC); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC) +{ + if( velVx1BC.getEndTime()!=-Ub::inf ) this->vx1BCs.push_back(velVx1BC); + if( velVx2BC.getEndTime()!=-Ub::inf ) this->vx2BCs.push_back(velVx2BC); + if( velVx3BC.getEndTime()!=-Ub::inf ) this->vx3BCs.push_back(velVx3BC); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const vector< BCFunction >& velVx1BCs, const vector< BCFunction >& velVx2BCs, const vector< BCFunction >& velVx3BCs) +{ + this->vx1BCs = velVx1BCs; + this->vx2BCs = velVx2BCs; + this->vx3BCs = velVx3BCs; + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime ) +{ + this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime)); + this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime)); + this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime)); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const string& vx1Function, const double& vx1StartTime, const double& vx1EndTime, + const string& vx2Function, const double& vx2StartTime, const double& vx2EndTime, + const string& vx3Function, const double& vx3StartTime, const double& vx3EndTime ) +{ + if(vx1Function.size()) this->vx1BCs.push_back(BCFunction(vx1Function,vx1StartTime,vx1EndTime)); + if(vx2Function.size()) this->vx2BCs.push_back(BCFunction(vx2Function,vx2StartTime,vx2EndTime)); + if(vx3Function.size()) this->vx3BCs.push_back(BCFunction(vx3Function,vx3StartTime,vx3EndTime)); + this->init(); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::setNewVelocities(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime ) +{ + this->clear(); + this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime)); + this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime)); + this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime)); + this->init(); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::init() +{ + this->unsetTimeDependent(); + + this->timeStep = 0.0; + + this->x1 = 0.0; + this->x2 = 0.0; + this->x3 = 0.0; + + this->tmpVx1Function = NULL; + this->tmpVx2Function = NULL; + this->tmpVx3Function = NULL; + + try //initilialization and validation of functions + { + this->init(vx1BCs); + this->init(vx2BCs); + this->init(vx3BCs); + } + catch(mu::Parser::exception_type& e){ stringstream error; error<<"mu::parser exception occurs, message("<<e.GetMsg()<<"), formula("<<e.GetExpr()+"), token("+e.GetToken()<<")" + <<", pos("<<e.GetPos()<<"), error code("<<e.GetCode(); throw UbException(error.str()); } + catch(...) { throw UbException(UB_EXARGS,"unknown exception" ); } +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::init(std::vector<BCFunction>& vxBCs) +{ + for(size_t pos=0; pos<vxBCs.size(); ++pos) + { + if( !( UbMath::equal( BCFunction::INFCONST, vxBCs[pos].getEndTime() ) + && UbMath::greaterEqual( this->timeStep, vxBCs[pos].getStartTime() ) ) ) + { + this->setTimeDependent(); + } + + vxBCs[pos].getFunction().DefineVar("t" , &this->timeStep); + vxBCs[pos].getFunction().DefineVar("x1", &this->x1 ); + vxBCs[pos].getFunction().DefineVar("x2", &this->x2 ); + vxBCs[pos].getFunction().DefineVar("x3", &this->x3 ); + + vxBCs[pos].getFunction().Eval(); //<-- validation + } +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::init(const D3Q27Interactor* const& interactor, const double& time) +{ + this->timeStep = time; + this->tmpVx1Function = this->tmpVx2Function = this->tmpVx3Function = NULL; + + //aktuelle velocityfunction bestimmen + double maxEndtime = -Ub::inf; + + for(size_t pos=0; pos<vx1BCs.size(); ++pos) + { + if( UbMath::equal(vx1BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT) ) maxEndtime=Ub::inf; + maxEndtime = UbMath::max(maxEndtime,vx1BCs[pos].getStartTime(),vx1BCs[pos].getEndTime()); //startTime abfragen, da INFCONST=-10 + + if( UbMath::greaterEqual(this->timeStep,vx1BCs[pos].getStartTime()) ) + { + if( UbMath::lessEqual( this->timeStep , vx1BCs[pos].getEndTime() ) + || UbMath::equal( vx1BCs[pos].getEndTime(), (double)BCFunction::INFCONST ) + || UbMath::equal( vx1BCs[pos].getEndTime(), (double)BCFunction::INFTIMEDEPENDENT) ) + { + tmpVx1Function = &vx1BCs[pos].getFunction(); + break; + } + } + } + for(size_t pos=0; pos<vx2BCs.size(); ++pos) + { + if( UbMath::equal(vx2BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT)) maxEndtime=Ub::inf; + maxEndtime = UbMath::max(maxEndtime,vx2BCs[pos].getStartTime(),vx2BCs[pos].getEndTime()); //startTime abfragen, da INFCONST=-10 + + if( UbMath::greaterEqual(this->timeStep,vx2BCs[pos].getStartTime()) ) + { + if( UbMath::lessEqual( this->timeStep , vx2BCs[pos].getEndTime() ) + || UbMath::equal( vx2BCs[pos].getEndTime(), (double)BCFunction::INFCONST ) + || UbMath::equal( vx2BCs[pos].getEndTime(), (double)BCFunction::INFTIMEDEPENDENT ) ) + { + tmpVx2Function = &vx2BCs[pos].getFunction(); + break; + } + } + } + for(size_t pos=0; pos<vx3BCs.size(); ++pos) + { + if( UbMath::equal(vx3BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT)) maxEndtime=Ub::inf; + maxEndtime = UbMath::max(maxEndtime,vx3BCs[pos].getStartTime(),vx3BCs[pos].getEndTime()); //startTime abfragen, da INFCONST=-10 + + if( UbMath::greaterEqual(this->timeStep,vx3BCs[pos].getStartTime()) ) + { + if( UbMath::lessEqual( this->timeStep , vx3BCs[pos].getEndTime() ) + || UbMath::equal( vx3BCs[pos].getEndTime(), (double)BCFunction::INFCONST ) + || UbMath::equal( vx3BCs[pos].getEndTime(), (double)BCFunction::INFTIMEDEPENDENT ) ) + { + tmpVx3Function = &vx3BCs[pos].getFunction(); + break; + } + } + } + + if( UbMath::greaterEqual(time,maxEndtime) ) + { + if( !this->isTimePeriodic() ) this->unsetTimeDependent(); + else //bei peridoic die interavalle neu setzen: + { + if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) + for(size_t pos=0; pos<vx1BCs.size(); ++pos) + { + vx1BCs[pos].setStartTime( vx1BCs[pos].getStartTime() + timeStep ); + vx1BCs[pos].setEndTime( vx1BCs[pos].getEndTime() + timeStep ); + } + if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) + for(size_t pos=0; pos<vx2BCs.size(); ++pos) + { + vx2BCs[pos].setStartTime( vx2BCs[pos].getStartTime() + timeStep ); + vx2BCs[pos].setEndTime( vx2BCs[pos].getEndTime() + timeStep ); + } + if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) + for(size_t pos=0; pos<vx3BCs.size(); ++pos) + { + vx3BCs[pos].setStartTime( vx3BCs[pos].getStartTime() + timeStep ); + vx3BCs[pos].setEndTime( vx3BCs[pos].getEndTime() + timeStep ); + } + this->init(interactor,time); + } + } + + UBLOG(logDEBUG4,"D3Q27VelocityBCAdapter::init(time="<<time<<") " + <<", vx1= \""<<(tmpVx1Function ? tmpVx1Function->GetExpr() : "-")<<"\"" + <<", vx2= \""<<(tmpVx2Function ? tmpVx2Function->GetExpr() : "-")<<"\"" + <<", vx3= \""<<(tmpVx3Function ? tmpVx3Function->GetExpr() : "-")<<"\"" + <<", timedependent="<<boolalpha<<this->isTimeDependent() ); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::update( const D3Q27Interactor* const& interactor, const double& time ) +{ + this->init(interactor,time); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& q, const int& fdirection, const double& time ) +{ + bc->setVelocityBoundaryFlag(D3Q27System::INVDIR[fdirection],secondaryBcOption); + bc->setQ((float)q,fdirection); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& time ) +{ + this->setNodeVelocity(interactor,bc,worldX1,worldX2,worldX3,time); + bc->setBcAlgorithmType(algorithmType); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::setNodeVelocity( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& timestep) +{ + //Geschwindigkeiten setzen + try + { + //PunktKoordinaten bestimmen + this->x1 = worldX1; + this->x2 = worldX2; + this->x3 = worldX3; + this->timeStep = timestep; + + if(tmpVx1Function) bc->setBoundaryVelocityX1((float)tmpVx1Function->Eval()); + if(tmpVx2Function) bc->setBoundaryVelocityX2((float)tmpVx2Function->Eval()); + if(tmpVx3Function) bc->setBoundaryVelocityX3((float)tmpVx3Function->Eval()); + bc->setBoundaryPhaseField(this->phiBC); + } + catch(mu::Parser::exception_type& e){ stringstream error; error<<"mu::parser exception occurs, message("<<e.GetMsg()<<"), formula("<<e.GetExpr()+"), token("+e.GetToken()<<")" + <<", pos("<<e.GetPos()<<"), error code("<<e.GetCode(); throw UbException(error.str()); } + catch(...) { throw UbException(UB_EXARGS,"unknown exception" ); } +} +/*==========================================================*/ +UbTupleDouble3 VelocityBCAdapterMultiphase::getVelocity(const double& x1, const double& x2, const double& x3, const double& timeStep) const +{ + double vx1 = 0.0; + double vx2 = 0.0; + double vx3 = 0.0; + this->x1 = x1; + this->x2 = x2; + this->x3 = x3; + this->timeStep = timeStep; + + if(tmpVx1Function) vx1 = tmpVx1Function->Eval(); + if(tmpVx2Function) vx2 = tmpVx2Function->Eval(); + if(tmpVx3Function) vx3 = tmpVx3Function->Eval(); + + return UbTupleDouble3(vx1,vx2,vx3); +} +/*==========================================================*/ +string VelocityBCAdapterMultiphase::toString() +{ + stringstream info; + info<<"D3Q27VelocityBCAdapter:\n"; + info<<" #vx1-functions = "<<(int)vx1BCs.size()<<endl; + info<<" #vx2-functions = "<<(int)vx2BCs.size()<<endl; + info<<" #vx3-functions = "<<(int)vx3BCs.size()<<endl; + info<<" protected variables: x1, x2, x3, t"<<endl; + + const vector<BCFunction>* bcvecs[3] = { &vx1BCs, &vx2BCs, &vx3BCs }; + for(int i=0; i<3; i++) + { + for(size_t pos=0; pos<bcvecs[i]->size(); ++pos) + { + info<<"\n vx"<<(i+1)<<"-function nr."<<pos<<":"<<endl; + info<<(*bcvecs[i])[pos]<<endl; + } + } + return info.str(); +} + + diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h new file mode 100644 index 000000000..29025a89d --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h @@ -0,0 +1,169 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file VelocityBCAdapterMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= +#ifndef VelocityBCAdapterMultiphase_H +#define VelocityBCAdapterMultiphase_H + +#include <iostream> +#include <string> +#include <sstream> +#include <vector> + +#include <basics/utilities/UbInfinity.h> +#include <basics/utilities/UbFileOutput.h> +#include <basics/utilities/UbFileInput.h> + +class UbFileOutput; +class UbFileInput; + +#include <BCAdapter.h> +#include <BCFunction.h> + +//! \brief A class provides an interface for velocity boundary condition for multiphase simulation in grid generator. + +//! \details +//! Example: +//! \code{.cpp} vector<BCFunction> vx1BCs,vx2BCs,vx3BCs; +//! vx1BCs.push_back(BCFunction(0.01 , 0 , 100) ); //t=[0 ..100[ -> vx1 = 0.01 +//! vx1BCs.push_back(BCFunction(0.004, 100, 200) ); //t=[100..200[ -> vx1 = 0.004 +//! vx1BCs.push_back(BCFunction(0.03 , 200, 400) ); //t=[200..400] -> vx1 = 0.03 +//! +//! vx2BCs.push_back(BCFunction(0.02 , 0 , 200) ); //t=[0 ..200[ -> vx2 = 0.02 +//! vx2BCs.push_back(BCFunction(0.002, 200, 300) ); //t=[200..300[ -> vx2 = 0.002 +//! vx2BCs.push_back(BCFunction(0.043, 300, 600) ); //t=[300..600] -> vx2 = 0.043 +//! +//! VelocityBCAdapter bcAdapter(vx1BCs,vx2BCs,vx3BCs); +//! bcAdapter.setTimePeriodic(); //-> t=[0 ..100[ -> vx1 = 0.01 +//! // t=[100..200[ -> vx1 = 0.004 +//! // t=[200..400[ -> vx1 = 0.03 +//! // t=[400..500[ -> vx1 = 0.01 +//! // t=[500..600[ -> vx1 = 0.004 +//! // t=[600..800[ -> vx1 = 0.03 ... +//! // t=[0 ..200[ -> vx2 = 0.02 +//! // t=[200..300[ -> vx2 = 0.002 +//! // t=[300..600] -> vx2 = 0.043 +//! // t=[600..800[ -> vx2 = 0.02 +//! // t=[800..900[ -> vx2 = 0.002 +//! // t=[900..1200]-> vx2 = 0.043 ... +//! \endcode +//! Example of parabolic inflow: +//! \code{.cpp} +//! mu::Parser fct; +//! fct.SetExpr("max(vmax*(1.0-4.0*((x2-x2_vmax)^2+(x3-x3_vmax)^2)/H^2),0.0)"); //paraboloid (with vmax for +//! (0/x2_vmax/x3_vmax) fct.DefineConst("x2Vmax", 0.0 ); //x2-Pos für vmax fct.DefineConst("x3Vmax", 0.0 +//! ); //x3-Pos für vmax fct.DefineConst("H" , diameterOfPipe); fct.DefineConst("vmax" , vmax ); +//! VelocityBCAdapter velBC(true, false ,false ,fct, 0, BCFunction::INFCONST); +//! \endcode + +class VelocityBCAdapterMultiphase : public BCAdapter +{ +public: + //constructors + VelocityBCAdapterMultiphase() { this->init(); } + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC ); + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const LBMReal& phiBC, const double& startTime, const double& endTime ); + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const LBMReal& phiBC, const double& startTime, const double& endTime ); + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const std::string& functionstring, const double& startTime, const double& endTime ); + + VelocityBCAdapterMultiphase(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir); + + VelocityBCAdapterMultiphase(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC); + + VelocityBCAdapterMultiphase(const std::vector< BCFunction >& velVx1BCs, const std::vector< BCFunction >& velVx2BCs, const std::vector< BCFunction >& velVx3BCs); + + VelocityBCAdapterMultiphase(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime); + + VelocityBCAdapterMultiphase(const std::string& vx1Function, const double& vx1StartTime, const double& vx1EndTime, + const std::string& vx2Function, const double& vx2StartTime, const double& vx2EndTime, + const std::string& vx3Function, const double& vx3StartTime, const double& vx3EndTime ); + + //methods + void setTimePeriodic() { (this->type |= TIMEPERIODIC); } + void unsetTimePeriodic() { (this->type &= ~TIMEPERIODIC); } + bool isTimePeriodic() { return ((this->type & TIMEPERIODIC) == TIMEPERIODIC); } + + //folgendes ist fuer moving objects gedadacht... + void setNewVelocities(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime); + + + //------------- implements D3Q27BoundaryConditionAdapter ----- start + std::string toString(); + + void init(const D3Q27Interactor* const& interactor, const double& time=0); + void update(const D3Q27Interactor* const& interactor, const double& time=0); + + void adaptBCForDirection(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const double &worldX1, + const double &worldX2, const double &worldX3, const double &q, const int &fdirection, + const double &time = 0); + void adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const double &worldX1, + const double &worldX2, const double &worldX3, const double &time = 0); + + //------------- implements D3Q27BoundaryConditionAdapter ----- end + + UbTupleDouble3 getVelocity(const double& x1, const double& x2, const double& x3, const double& timeStep) const; + + +protected: + void init(); + void init(std::vector<BCFunction>& vxBCs); + + //time dependency wird automatisch ueber D3Q27BCFunction Intervalle ermittelt! + void setTimeDependent() { (this->type |= TIMEDEPENDENT); } + void unsetTimeDependent() { (this->type &= ~TIMEDEPENDENT); } + + void clear() { vx1BCs.clear(); vx2BCs.clear(); vx3BCs.clear(); this->init(); } + void setNodeVelocity(const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& timestep); + +private: + mutable mu::value_type x1, x2, x3; + mutable mu::value_type timeStep; + + mu::Parser* tmpVx1Function; + mu::Parser* tmpVx2Function; + mu::Parser* tmpVx3Function; + + std::vector<BCFunction> vx1BCs; + std::vector<BCFunction> vx2BCs; + std::vector<BCFunction> vx3BCs; + + LBMReal phiBC; +}; + +#endif diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp new file mode 100644 index 000000000..c840f1cb8 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp @@ -0,0 +1,148 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file VelocityBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "VelocityBCAlgorithmMultiphase.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +VelocityBCAlgorithmMultiphase::VelocityBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::VelocityBCAlgorithm; + BCAlgorithm::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +VelocityBCAlgorithmMultiphase::~VelocityBCAlgorithmMultiphase() +{ +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> VelocityBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new VelocityBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void VelocityBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void VelocityBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void VelocityBCAlgorithmMultiphase::applyBC() +{ + LBMReal f[D3Q27System::ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + LBMReal feq[D3Q27System::ENDF+1]; + LBMReal heq[D3Q27System::ENDF+1]; + LBMReal htemp[D3Q27System::ENDF+1]; + + distributions->getDistributionInv(f, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + LBMReal phi, rho, vx1, vx2, vx3, p1, phiBC; + + D3Q27System::calcDensity(h, phi); + + //LBMReal collFactorM = phi*collFactorL + (1-phi)*collFactorG; + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + + + //rho = phi + (1.0 - phi)*1.0/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + + calcMacrosFct(f, p1, vx1, vx2, vx3); + /*vx1/=(rho*c1o3); + vx2/=(rho*c1o3); + vx3/=(rho*c1o3);*/ + + //D3Q27System::calcMultiphaseFeq(feq, rho, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + + ///// added for phase field ////// + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + //flag points in direction of fluid + if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::E)) { nx1 -= 1; direction = D3Q27System::E; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::W)) { nx1 += 1; direction = D3Q27System::W; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::N)) { nx2 -= 1; direction = D3Q27System::N; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::S)) { nx2 += 1; direction = D3Q27System::S; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::T)) { nx3 -= 1; direction = D3Q27System::T; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::B)) { nx3 += 1; direction = D3Q27System::B; } + else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary...")); + + phiBC = bcPtr->getBoundaryPhaseField(); + + D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3); + + for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++) + { + if (bcPtr->hasVelocityBoundaryFlag(fdir)) + { + LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir]; + distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); + } + } + + ////////////////////////////////// + + + + + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasVelocityBoundaryFlag(fdir)) + { + const int invDir = D3Q27System::INVDIR[fdir]; + LBMReal q = bcPtr->getQ(invDir);// m+m q=0 stabiler + LBMReal velocity = bcPtr->getBoundaryVelocity(invDir); + //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho*c1o3)/(1.0+q)); + LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q)); + distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + + //LBMReal hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorM)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); + //distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } + +} + diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h new file mode 100644 index 000000000..869940099 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h @@ -0,0 +1,51 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file VelocityBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef VelocityBoundaryConditionMultiphase_h__ +#define VelocityBoundaryConditionMultiphase_h__ + +#include "BCAlgorithm.h" +//! A class implements velocity boundary condition for multiphase simulations +class VelocityBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + VelocityBCAlgorithmMultiphase(); + ~VelocityBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone() override; + void addDistributions(SPtr<DistributionArray3D> distributions) override; + void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; + void applyBC() override; +}; + +#endif // VelocityBoundaryConditionMultiphase_h__ + diff --git a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp index 70d7c438e..b9ec65974 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp @@ -21,7 +21,7 @@ void D3Q27ETFullVectorConnector::init() int anz = 27; switch (sendDir) { - case D3Q27System::ZERO: + case D3Q27System::REST: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; case D3Q27System::E: diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp index 89950b25e..9d4cb41aa 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp @@ -30,7 +30,7 @@ void ThixotropyFullVectorConnector::init() int anz = 2*27; switch (sendDir) { - case D3Q27System::ZERO: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; + case D3Q27System::REST: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; case D3Q27System::E: case D3Q27System::W: sender->getData().resize(maxX2*maxX3*anz, 0.0); break; case D3Q27System::N: diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp index d75c90c9d..bd6d46c2b 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp +++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp @@ -62,7 +62,7 @@ D3Q27EsoTwist3DSoA::D3Q27EsoTwist3DSoA(const size_t &nx1, const size_t &nx2, con new CbArray3D<LBMReal, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value)); d.BSW = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr( new CbArray3D<LBMReal, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value)); - d.ZERO = + d.REST = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx1, nx2, nx3, value)); } ////////////////////////////////////////////////////////////////////////// @@ -119,7 +119,7 @@ void D3Q27EsoTwist3DSoA::getDistribution(LBMReal *const f, size_t x1, size_t x2, f[D3Q27System::BNW] = (*d.BNW)(x1p, x2, x3p); f[D3Q27System::BNE] = (*d.BNE)(x1, x2, x3p); - f[D3Q27System::ZERO] = (*d.ZERO)(x1, x2, x3); + f[D3Q27System::REST] = (*d.REST)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::setDistribution(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -156,7 +156,7 @@ void D3Q27EsoTwist3DSoA::setDistribution(const LBMReal *const f, size_t x1, size (*d.BNW)(x1p, x2, x3p) = f[D3Q27System::INV_BNW]; (*d.BNE)(x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*d.ZERO)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*d.REST)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::getDistributionInv(LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -189,7 +189,7 @@ void D3Q27EsoTwist3DSoA::getDistributionInv(LBMReal *const f, size_t x1, size_t f[D3Q27System::INV_BNW] = (*d.BNW)(x1 + 1, x2, x3 + 1); f[D3Q27System::INV_BNE] = (*d.BNE)(x1, x2, x3 + 1); - f[D3Q27System::ZERO] = (*d.ZERO)(x1, x2, x3); + f[D3Q27System::REST] = (*d.REST)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::setDistributionInv(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -222,7 +222,7 @@ void D3Q27EsoTwist3DSoA::setDistributionInv(const LBMReal *const f, size_t x1, s //(*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f[D3Q27System::BNW]; //(*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f[D3Q27System::BNE]; - //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; + //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::setDistributionForDirection(const LBMReal *const f, size_t x1, size_t x2, size_t x3, @@ -281,8 +281,8 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(const LBMReal *const f, siz // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::BNE]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f[D3Q27System::TSW]; directionFlag=true; - // if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; directionFlag=true; + // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true; //#ifdef _DEBUG // if(!directionFlag)UB_THROW( UbException(UB_EXARGS, "Direction didn't find") ); //#endif //DEBUG @@ -370,7 +370,7 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(LBMReal f, size_t x1, size_ // case D3Q27System::TSW : // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f; // break; - // case D3Q27System::ZERO : + // case D3Q27System::REST : // (*this->zeroDistributions)(x1,x2,x3) = f; // break; // default: @@ -437,8 +437,8 @@ void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(const LBMReal *const f, // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1)= f[D3Q27System::BNE]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::TSW]; directionFlag=true; - // if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; directionFlag=true; + // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true; //#ifdef _DEBUG // if(!directionFlag)UB_THROW( UbException(UB_EXARGS, "Direction didn't find") ); //#endif //DEBUG @@ -527,7 +527,7 @@ void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(LBMReal f, size_t x1, si // case D3Q27System::TSW : // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f; // break; - // case D3Q27System::ZERO : + // case D3Q27System::REST : // (*this->zeroDistributions)(x1,x2,x3) = f; // break; // default: @@ -592,7 +592,7 @@ LBMReal D3Q27EsoTwist3DSoA::getDistributionInvForDirection(size_t /*x1*/, size_t // return (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3); // case D3Q27System::TSW : // return (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1); - // case D3Q27System::ZERO : + // case D3Q27System::REST : // return (*this->zeroDistributions)(x1,x2,x3); // default: // UB_THROW( UbException(UB_EXARGS, "Direction didn't find") ); diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h index 72951922a..a3eb85e37 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h +++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h @@ -35,7 +35,7 @@ struct Distributions { CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr BNW; CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr BSE; CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr BSW; - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ZERO; + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr REST; }; class D3Q27EsoTwist3DSoA : public EsoTwist3D diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp index 6f8a6e746..5e762c68b 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp +++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp @@ -84,7 +84,7 @@ void D3Q27EsoTwist3DSplittedVector::getDistribution(LBMReal *const f, size_t x1, f[D3Q27System::BNW] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); f[D3Q27System::BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - f[D3Q27System::ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[D3Q27System::REST] = (*this->zeroDistributions)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistribution(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -117,7 +117,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistribution(const LBMReal *const f, size (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::getDistributionInv(LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -150,7 +150,7 @@ void D3Q27EsoTwist3DSplittedVector::getDistributionInv(LBMReal *const f, size_t f[D3Q27System::INV_BNW] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); f[D3Q27System::INV_BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - f[D3Q27System::ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[D3Q27System::REST] = (*this->zeroDistributions)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionInv(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -183,7 +183,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInv(const LBMReal *const f, s (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[D3Q27System::BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(const LBMReal *const f, size_t x1, size_t x2, size_t x3, @@ -241,8 +241,8 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(const LBMReal *c (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[D3Q27System::BNE]; if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::TSW]; - if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, @@ -327,7 +327,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(LBMReal f, size_ case D3Q27System::TSW: (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f; break; - case D3Q27System::ZERO: + case D3Q27System::REST: (*this->zeroDistributions)(x1, x2, x3) = f; break; default: @@ -390,8 +390,8 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(const LBMReal (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::BNE]; if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[D3Q27System::TSW]; - if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, @@ -476,7 +476,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(LBMReal f, si case D3Q27System::TSW: (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f; break; - case D3Q27System::ZERO: + case D3Q27System::REST: (*this->zeroDistributions)(x1, x2, x3) = f; break; default: @@ -539,7 +539,7 @@ LBMReal D3Q27EsoTwist3DSplittedVector::getDistributionForDirection(size_t x1, si return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); case D3Q27System::BNE: return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - case D3Q27System::ZERO: + case D3Q27System::REST: return (*this->zeroDistributions)(x1, x2, x3); default: UB_THROW(UbException(UB_EXARGS, "Direction didn't find")); @@ -601,7 +601,7 @@ LBMReal D3Q27EsoTwist3DSplittedVector::getDistributionInvForDirection(size_t x1, return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); case D3Q27System::TSW: return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - case D3Q27System::ZERO: + case D3Q27System::REST: return (*this->zeroDistributions)(x1, x2, x3); default: UB_THROW(UbException(UB_EXARGS, "Direction didn't find")); diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h index 4930beeab..9b8c36817 100644 --- a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h +++ b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h @@ -43,6 +43,7 @@ using AverageValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>; using ShearStressValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>; using RelaxationFactorArray3D = CbArray3D<LBMReal, IndexerX3X2X1>; +using PhaseFieldArray3D = CbArray3D<LBMReal, IndexerX3X2X1>; //! A class provides an interface for data structures in the kernel. class DataSet3D @@ -74,6 +75,10 @@ public: SPtr<RelaxationFactorArray3D> getRelaxationFactor() const; void setRelaxationFactor(SPtr<RelaxationFactorArray3D> values); + + SPtr<PhaseFieldArray3D> getPhaseField() const; + void setPhaseField(SPtr<PhaseFieldArray3D> values); + protected: private: SPtr<DistributionArray3D> fdistributions; @@ -91,95 +96,50 @@ private: SPtr<RelaxationFactorArray3D> relaxationFactor; + SPtr<PhaseFieldArray3D> phaseField; }; -inline SPtr<DistributionArray3D> DataSet3D::getFdistributions() const -{ - return fdistributions; -} +inline SPtr<DistributionArray3D> DataSet3D::getFdistributions() const { return fdistributions; } -inline void DataSet3D::setFdistributions(SPtr<DistributionArray3D> distributions) -{ - fdistributions = distributions; -} +inline void DataSet3D::setFdistributions(SPtr<DistributionArray3D> distributions) { fdistributions = distributions; } -inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const -{ - return hdistributions; -} +inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const { return hdistributions; } -inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions) -{ - hdistributions = distributions; -} +inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions) { hdistributions = distributions; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageValues() const -{ - return averageValues; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageValues() const { return averageValues; } -inline void DataSet3D::setAverageValues(SPtr<AverageValuesArray3D> values) -{ - averageValues = values; -} +inline void DataSet3D::setAverageValues(SPtr<AverageValuesArray3D> values) { averageValues = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageDensity() const -{ - return averageDensity; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageDensity() const { return averageDensity; } -inline void DataSet3D::setAverageDensity(SPtr<AverageValuesArray3D> values) -{ - averageDensity = values; -} +inline void DataSet3D::setAverageDensity(SPtr<AverageValuesArray3D> values) { averageDensity = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageVelocity() const -{ - return averageVelocity; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageVelocity() const { return averageVelocity; } -inline void DataSet3D::setAverageVelocity(SPtr<AverageValuesArray3D> values) -{ - averageVelocity = values; -} +inline void DataSet3D::setAverageVelocity(SPtr<AverageValuesArray3D> values) { averageVelocity = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageFluctuations() const -{ - return averageFluktuations; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageFluctuations() const { return averageFluktuations; } -inline void DataSet3D::setAverageFluctuations(SPtr<AverageValuesArray3D> values) -{ - averageFluktuations = values; -} +inline void DataSet3D::setAverageFluctuations(SPtr<AverageValuesArray3D> values) { averageFluktuations = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageTriplecorrelations() const -{ - return averageTriplecorrelations; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageTriplecorrelations() const { return averageTriplecorrelations; } inline void DataSet3D::setAverageTriplecorrelations(SPtr<AverageValuesArray3D> values) { averageTriplecorrelations = values; } -inline SPtr<ShearStressValuesArray3D> DataSet3D::getShearStressValues() const -{ - return shearStressValues; -} +inline SPtr<ShearStressValuesArray3D> DataSet3D::getShearStressValues() const { return shearStressValues; } -inline void DataSet3D::setShearStressValues(SPtr<ShearStressValuesArray3D> values) -{ - shearStressValues = values; -} +inline void DataSet3D::setShearStressValues(SPtr<ShearStressValuesArray3D> values) { shearStressValues = values; } -inline SPtr<RelaxationFactorArray3D> DataSet3D::getRelaxationFactor() const -{ - return relaxationFactor; -} +inline SPtr<RelaxationFactorArray3D> DataSet3D::getRelaxationFactor() const { return relaxationFactor; } + +inline void DataSet3D::setRelaxationFactor(SPtr<RelaxationFactorArray3D> values) { relaxationFactor = values; } + +inline SPtr<PhaseFieldArray3D> DataSet3D::getPhaseField() const { return phaseField; } + +inline void DataSet3D::setPhaseField(SPtr<PhaseFieldArray3D> values) { phaseField = values; } -inline void DataSet3D::setRelaxationFactor(SPtr<RelaxationFactorArray3D> values) -{ - relaxationFactor = values; -} #endif diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp index 1a13aa008..c456be678 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp +++ b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp @@ -35,7 +35,7 @@ // index 0 1 2 3 4 5 6 7 8 9 10 11 12 // 13 14 15 16 17 18 19 20 21 22 23 24 25 26 f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, -// BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW ZERO +// BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW REST const int EsoTwistD3Q27System::ETX1[EsoTwistD3Q27System::ENDF + 1] = { 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 }; const int EsoTwistD3Q27System::ETX2[EsoTwistD3Q27System::ENDF + 1] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, @@ -49,7 +49,7 @@ const int EsoTwistD3Q27System::etINVDIR[EsoTwistD3Q27System::ENDF + 1] = { D3Q27System::INV_TE, D3Q27System::INV_BW, D3Q27System::INV_BE, D3Q27System::INV_TW, D3Q27System::INV_TN, D3Q27System::INV_BS, D3Q27System::INV_BN, D3Q27System::INV_TS, D3Q27System::INV_TNE, D3Q27System::INV_TNW, D3Q27System::INV_TSE, D3Q27System::INV_TSW, D3Q27System::INV_BNE, D3Q27System::INV_BNW, D3Q27System::INV_BSE, - D3Q27System::INV_BSW, D3Q27System::ZERO + D3Q27System::INV_BSW, D3Q27System::REST }; const unsigned long int EsoTwistD3Q27System::etDIR[EsoTwistD3Q27System::ENDF + 1] = { diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h index a9214673e..21752cc48 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h +++ b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h @@ -47,7 +47,7 @@ struct EsoTwistD3Q27System { const static int STARTDIR = D3Q27System::STARTDIR; const static int ENDDIR = D3Q27System::ENDDIR; - static const int ZERO = D3Q27System::ZERO; /*f0 */ + static const int REST = D3Q27System::REST; /*f0 */ static const int E = D3Q27System::E; /*f1 */ static const int W = D3Q27System::W; /*f2 */ static const int N = D3Q27System::N; /*f3 */ diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp index 199d2cf87..1d37e4a09 100644 --- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp +++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp @@ -1341,7 +1341,7 @@ void Grid3D::getNeighborBlocksForDirectionWithDirZero(int dir, int ix1, int ix2, case Grid3DSystem::BSW: this->getNeighborsBottomSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case Grid3DSystem::ZERO: + case Grid3DSystem::REST: this->getNeighborsZero(ix1, ix2, ix3, level, levelDepth, blocks); break; default: diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h b/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h index ee61b8f73..94c3bf2a7 100644 --- a/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h +++ b/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h @@ -71,7 +71,7 @@ static const int BNE = 22; static const int BNW = 23; static const int BSE = 24; static const int BSW = 25; -static const int ZERO /*f0 */ = 26; +static const int REST /*f0 */ = 26; static const int ENDDIR = 25; diff --git a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp index 365373c09..280562ebf 100644 --- a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp @@ -87,7 +87,7 @@ void BGKLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// // read distribution //////////////////////////////////////////////////////////////////////////// - f[ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[REST] = (*this->zeroDistributions)(x1, x2, x3); f[E] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); f[N] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); @@ -118,7 +118,7 @@ void BGKLBMKernel::calculate(int /*step*/) f[BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); ////////////////////////////////////////////////////////////////////////// - drho = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + + drho = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; @@ -133,7 +133,7 @@ void BGKLBMKernel::calculate(int /*step*/) LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[ZERO] = c8o27 * (drho - cu_sq); + feq[REST] = c8o27 * (drho - cu_sq); feq[E] = c2o27 * (drho + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); feq[W] = c2o27 * (drho + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); feq[N] = c2o27 * (drho + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); @@ -170,7 +170,7 @@ void BGKLBMKernel::calculate(int /*step*/) c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); // Relaxation - f[ZERO] += (feq[ZERO] - f[ZERO]) * collFactor; + f[REST] += (feq[REST] - f[REST]) * collFactor; f[E] += (feq[E] - f[E]) * collFactor; f[W] += (feq[W] - f[W]) * collFactor; f[N] += (feq[N] - f[N]) * collFactor; @@ -210,7 +210,7 @@ void BGKLBMKernel::calculate(int /*step*/) forcingX2 = muForcingX2.Eval(); forcingX3 = muForcingX3.Eval(); - f[ZERO] += 0.0; + f[REST] += 0.0; f[E] += 3.0 * c2o27 * (forcingX1); f[W] += 3.0 * c2o27 * (-forcingX1); f[N] += 3.0 * c2o27 * (forcingX2); @@ -240,7 +240,7 @@ void BGKLBMKernel::calculate(int /*step*/) } ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - LBMReal rho_post = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + + LBMReal rho_post = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; LBMReal dif = drho - rho_post; @@ -284,7 +284,7 @@ void BGKLBMKernel::calculate(int /*step*/) (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; ////////////////////////////////////////////////////////////////////////// } } diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp index 04e9fe233..036b35379 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp @@ -497,7 +497,7 @@ void CompressibleOffsetInterpolationProcessor::calcInterpolatedNodeCF(LBMReal* f f[BSW] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[BSW]; f[BSE] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[BSE]; f[BNW] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[BNW]; - f[ZERO] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[ZERO]; + f[REST] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -691,7 +691,7 @@ void CompressibleOffsetInterpolationProcessor::calcInterpolatedNodeFC(LBMReal* f f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// void CompressibleOffsetInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp index 54d3b32b2..4dec63758 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp @@ -803,7 +803,7 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeCF(LBM f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; @@ -1251,7 +1251,7 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeFC(LBM f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp index 3436dd584..7a19f156e 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp @@ -798,7 +798,7 @@ void CompressibleOffsetSquarePressureInterpolationProcessor::calcInterpolatedNod f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; @@ -1251,7 +1251,7 @@ void CompressibleOffsetSquarePressureInterpolationProcessor::calcInterpolatedNod f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp index 874a24fbb..5e88242fa 100644 --- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp @@ -4,23 +4,12 @@ namespace D3Q27System { using namespace UbMath; -// index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18//falsch -// f: ZERO, E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW -// BSE BSW const int EX1[] = { 0, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, -// 1, -1, 1, -1 }; const int EX2[] = { 0, 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 1, 1, -// -1, -1, 1, 1, -1, -1 }; const int EX3[] = { 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, -// 1, 1, 1, 1, 1, -1, -1, -1, -1 }; - -// index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -// f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE -// BSW +// index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 +// f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW const int DX1[] = { 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1 }; const int DX2[] = { 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1 }; const int DX3[] = { 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1 }; -////index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -////f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW -///BSE BSW const double WEIGTH[] = { c2o27, c2o27, c2o27, c2o27, c2o27, c2o27, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c8o27 }; @@ -29,181 +18,4 @@ const int INVDIR[] = { INV_E, INV_W, INV_N, INV_S, INV_T, INV_B, INV INV_NW, INV_TE, INV_BW, INV_BE, INV_TW, INV_TN, INV_BS, INV_BN, INV_TS, INV_TNE, INV_TNW, INV_TSE, INV_TSW, INV_BNE, INV_BNW, INV_BSE, INV_BSW }; -//// The x,y,z component for each normalized direction -//const double cNorm[3][ENDDIR] = { { double(DX1[0]), -// double(DX1[1]), -// double(DX1[2]), -// double(DX1[3]), -// double(DX1[4]), -// double(DX1[5]), -// double(DX1[6]) / std::sqrt(double(2)), -// double(DX1[7]) / std::sqrt(double(2)), -// double(DX1[8]) / std::sqrt(double(2)), -// double(DX1[9]) / std::sqrt(double(2)), -// double(DX1[10]) / std::sqrt(double(2)), -// double(DX1[11]) / std::sqrt(double(2)), -// double(DX1[12]) / std::sqrt(double(2)), -// double(DX1[13]) / std::sqrt(double(2)), -// double(DX1[14]), -// double(DX1[15]), -// double(DX1[16]), -// double(DX1[17]), -// double(DX1[18]) / std::sqrt(double(3)), -// double(DX1[19]) / std::sqrt(double(3)), -// double(DX1[20]) / std::sqrt(double(3)), -// double(DX1[21]) / std::sqrt(double(3)), -// double(DX1[22]) / std::sqrt(double(3)), -// double(DX1[23]) / std::sqrt(double(3)), -// double(DX1[24]) / std::sqrt(double(3)), -// double(DX1[25]) / std::sqrt(double(3)) }, -// { double(DX2[0]), -// double(DX2[1]), -// double(DX2[2]), -// double(DX2[3]), -// double(DX2[4]), -// double(DX2[5]), -// double(DX2[6]) / std::sqrt(double(2)), -// double(DX2[7]) / std::sqrt(double(2)), -// double(DX2[8]) / std::sqrt(double(2)), -// double(DX2[9]) / std::sqrt(double(2)), -// double(DX2[10]), -// double(DX2[11]), -// double(DX2[12]), -// double(DX2[13]), -// double(DX2[14]) / std::sqrt(double(2)), -// double(DX2[15]) / std::sqrt(double(2)), -// double(DX2[16]) / std::sqrt(double(2)), -// double(DX2[17]) / std::sqrt(double(2)), -// double(DX2[18]) / std::sqrt(double(3)), -// double(DX2[19]) / std::sqrt(double(3)), -// double(DX2[20]) / std::sqrt(double(3)), -// double(DX2[21]) / std::sqrt(double(3)), -// double(DX2[22]) / std::sqrt(double(3)), -// double(DX2[23]) / std::sqrt(double(3)), -// double(DX2[24]) / std::sqrt(double(3)), -// double(DX2[25]) / std::sqrt(double(3)) }, -// { double(DX3[0]), -// double(DX3[1]), -// double(DX3[2]), -// double(DX3[3]), -// double(DX3[4]), -// double(DX3[5]), -// double(DX3[6]), -// double(DX3[7]), -// double(DX3[8]), -// double(DX3[9]), -// double(DX3[10]) / std::sqrt(double(2)), -// double(DX3[11]) / std::sqrt(double(2)), -// double(DX3[12]) / std::sqrt(double(2)), -// double(DX3[13]) / std::sqrt(double(2)), -// double(DX3[14]) / std::sqrt(double(2)), -// double(DX3[15]) / std::sqrt(double(2)), -// double(DX3[16]) / std::sqrt(double(2)), -// double(DX3[17]) / std::sqrt(double(2)), -// double(DX3[18]) / std::sqrt(double(3)), -// double(DX3[19]) / std::sqrt(double(3)), -// double(DX3[20]) / std::sqrt(double(3)), -// double(DX3[21]) / std::sqrt(double(3)), -// double(DX3[22]) / std::sqrt(double(3)), -// double(DX3[23]) / std::sqrt(double(3)), -// double(DX3[24]) / std::sqrt(double(3)), -// double(DX3[25]) / std::sqrt(double(3)) } }; - -} // namespace D3Q27System - -// const int FSTARTDIR = 0; -// const int FENDDIR = 25; //D3Q27 - -// const int STARTF = 0; -// const int ENDF = 26; //D3Q27 - -// const int EX1[ENDF+1]; -// const int EX2[ENDF+1]; -// const int EX3[ENDF+1]; - -// const int STARTDIR = 0; -// const int ENDDIR = 26; //alle geometrischen richtungen - -// const int DX1[ENDDIR+1]; -// const int DX2[ENDDIR+1]; -// const int DX3[ENDDIR+1]; - -// const int E /*f1 */ = 0; -// const int W /*f2 */ = 1; -// const int N /*f3 */ = 2; -// const int S /*f4 */ = 3; -// const int T /*f5 */ = 4; -// const int B /*f6 */ = 5; -// const int NE /*f7 */ = 6; -// const int SW /*f8 */ = 7; -// const int SE /*f9 */ = 8; -// const int NW /*f10*/ = 9; -// const int TE /*f11*/ = 10; -// const int BW /*f12*/ = 11; -// const int BE /*f13*/ = 12; -// const int TW /*f14*/ = 13; -// const int TN /*f15*/ = 14; -// const int BS /*f16*/ = 15; -// const int BN /*f17*/ = 16; -// const int TS /*f18*/ = 17; -// const int TNE = 18; -// const int TNW = 19; -// const int TSE = 20; -// const int TSW = 21; -// const int BNE = 22; -// const int BNW = 23; -// const int BSE = 24; -// const int BSW = 25; -// const int ZERO /*f0 */ = 26; - -// const int INV_E = W; -// const int INV_W = E; -// const int INV_N = S; -// const int INV_S = N; -// const int INV_T = B; -// const int INV_B = T; -// const int INV_NE = SW; -// const int INV_SW = NE; -// const int INV_SE = NW; -// const int INV_NW = SE; -// const int INV_TE = BW; -// const int INV_BW = TE; -// const int INV_BE = TW; -// const int INV_TW = BE; -// const int INV_TN = BS; -// const int INV_BS = TN; -// const int INV_BN = TS; -// const int INV_TS = BN; -// const int INV_TNE = BSW; -// const int INV_TNW = BSE; -// const int INV_TSE = BNW; -// const int INV_TSW = BNE; -// const int INV_BNE = TSW; -// const int INV_BNW = TSE; -// const int INV_BSE = TNW; -// const int INV_BSW = TNE; - -// const int INVDIR[ENDDIR+1]; - -// const int M_RHO = 0; -// const int M_EN = 1; -// const int M_EPS = 2; -// const int M_JX1 = 3; -// const int M_QX1 = 4; -// const int M_JX2 = 5; -// const int M_QX2 = 6; -// const int M_JX3 = 7; -// const int M_QX3 = 8; -// const int M_3PX1X1 = 9; -// const int M_3PIX1X1 = 10; -// const int M_PWW = 11; -// const int M_PIWW = 12; -// const int M_PX1X2 = 13; -// const int M_PX2X3 = 14; -// const int M_PX1X3 = 15; -// const int M_MX1 = 16; -// const int M_MX2 = 17; -// const int M_MX3 = 18; - -// const int STARTM = 0; -// const int ENDM = 18; //D3Q27 +} // namespace D3Q27System \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h index 7b3e1e4cc..8f8c37645 100644 --- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h +++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h @@ -35,1101 +35,1207 @@ #define D3Q27SYSTEM_H #include <cmath> -#include <string> #include <iostream> +#include <string> -#include <basics/utilities/UbException.h> -#include <basics/utilities/UbTuple.h> -#include <basics/utilities/UbMath.h> -#include <basics/utilities/UbSystem.h> -//#include "Patch3DSystem.h" #include "LBMSystem.h" +#include "UbException.h" +#include "UbMath.h" -/*=========================================================================*/ -/* D3Q27System */ -/* */ -/** -class for global system-functions -<BR><BR> -@author <A HREF="mailto:kucher@irmb.tu-bs.de">K. Kucher</A> -@version 1.0 - 22.10.09 -*/ - -/* -usage: ... -*/ - +//! \brief namespace for global system-functions namespace D3Q27System { - //enum COLLISIONMODEL { UNDEFINED, INCOMPLBGKMODEL, COMPLBGKMODEL, COMPLBGKWTMODEL, INCOMPLBGKLESMODEL, INCOMPLBGKNONNEWTONIANMODEL - // , INCOMPGLBEJTMODEL, COMPGLBEJTMODEL, COMPGLBEJTWTMODEL, INCOMPGLBEJTLESMODEL, INCOMPGLBEJTWALEMODEL - // , CASCADEDMODEL}; - // - // #if defined(RCF_USE_SF_SERIALIZATION) && (CAB_RCF <= 903) - // SF_SERIALIZE_ENUM(COLLISIONMODEL) //muss im namespace stehen, sonst funzt es nicht! - // #endif - - ///*=====================================================================*/ - //std::string toString(const COLLISIONMODEL& model); - ///*=====================================================================*/ - //COLLISIONMODEL getCollModelByString(const std::string& str); - ///*=====================================================================*/ - - ///*=====================================================================*/ - //static bool isCompModel(const COLLISIONMODEL& model) - //{ - // switch(model) - // { - // case COMPLBGKMODEL : return true; - // case COMPLBGKWTMODEL : return true; - // case COMPGLBEJTWTMODEL : return true; - // case COMPGLBEJTMODEL : return true; - // case CASCADEDMODEL : return true; - // - // case INCOMPLBGKMODEL : return false; - // case INCOMPGLBEJTMODEL : return false; - // case INCOMPLBGKLESMODEL : return false; - // case INCOMPGLBEJTLESMODEL : return false; - // case INCOMPGLBEJTWALEMODEL : return false; - // case INCOMPLBGKNONNEWTONIANMODEL : return false; - - // default: throw UbException(UB_EXARGS,"unknown model"); - // } - //} - ///*=====================================================================*/ - //static bool isGLBEModel(const COLLISIONMODEL& model) - //{ - // switch(model) - // { - // case COMPGLBEJTWTMODEL : return true; - // case COMPGLBEJTMODEL : return true; - // case INCOMPGLBEJTMODEL : return true; - // case INCOMPGLBEJTLESMODEL : return true; - // case INCOMPGLBEJTWALEMODEL : return false; - - // case COMPLBGKMODEL : return false; - // case COMPLBGKWTMODEL : return false; - // case INCOMPLBGKMODEL : return false; - // case INCOMPLBGKLESMODEL : return false; - // case INCOMPLBGKNONNEWTONIANMODEL : return false; - - // default: throw UbException(UB_EXARGS,"unknown model"); - // } - //} - //static bool isLESModel(const COLLISIONMODEL& model) - //{ - // switch(model) - // { - // case INCOMPGLBEJTLESMODEL : return true; - // case INCOMPLBGKLESMODEL : return true; - // case INCOMPGLBEJTWALEMODEL : return true; - // - // case COMPGLBEJTWTMODEL : return false; - // case COMPGLBEJTMODEL : return false; - // case INCOMPGLBEJTMODEL : return false; - // case COMPLBGKMODEL : return false; - // case COMPLBGKWTMODEL : return false; - // case INCOMPLBGKMODEL : return false; - // case INCOMPLBGKNONNEWTONIANMODEL : return false; - - // default: throw UbException(UB_EXARGS,"unknown model"); - // } - //} - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //DIRECTION STUFF - static const int FSTARTDIR = 0; - static const int FENDDIR = 25; //D3Q27 - - //static const int FSTARTDIR = 1; - //static const int FENDDIR = 26; //D3Q27 +////////////////////////////////////////////////////////////////////////// +// DIRECTION STUFF +static const int FSTARTDIR = 0; +static const int FENDDIR = 25; // D3Q27 - static const int STARTF = 0; - static const int ENDF = 26; //D3Q27 +static const int STARTF = 0; +static const int ENDF = 26; // D3Q27 - //extern const int EX1[ENDF+1]; - //extern const int EX2[ENDF+1]; - //extern const int EX3[ENDF+1]; +static const int STARTDIR = 0; +static const int ENDDIR = 26; // all geometric directions - static const int STARTDIR = 0; - static const int ENDDIR = 26; //alle geometrischen richtungen +extern const int DX1[ENDDIR + 1]; +extern const int DX2[ENDDIR + 1]; +extern const int DX3[ENDDIR + 1]; +extern const double WEIGTH[ENDDIR + 1]; - extern const int DX1[ENDDIR + 1]; - extern const int DX2[ENDDIR + 1]; - extern const int DX3[ENDDIR + 1]; - extern const double WEIGTH[ENDDIR + 1]; +extern const double cNorm[3][ENDDIR]; - //static const int ZERO /*f0 */ = 0; - //static const int E /*f1 */ = 1; - //static const int W /*f2 */ = 2; - //static const int N /*f3 */ = 3; - //static const int S /*f4 */ = 4; - //static const int T /*f5 */ = 5; - //static const int B /*f6 */ = 6; - //static const int NE /*f7 */ = 7; - //static const int SW /*f8 */ = 8; - //static const int SE /*f9 */ = 9; - //static const int NW /*f10*/ = 10; - //static const int TE /*f11*/ = 11; - //static const int BW /*f12*/ = 12; - //static const int BE /*f13*/ = 13; - //static const int TW /*f14*/ = 14; - //static const int TN /*f15*/ = 15; - //static const int BS /*f16*/ = 16; - //static const int BN /*f17*/ = 17; - //static const int TS /*f18*/ = 18; - //static const int TNE = 19; - //static const int TNW = 20; - //static const int TSE = 21; - //static const int TSW = 22; - //static const int BNE = 23; - //static const int BNW = 24; - //static const int BSE = 25; - //static const int BSW = 26; +static const int E = 0; +static const int W = 1; +static const int N = 2; +static const int S = 3; +static const int T = 4; +static const int B = 5; +static const int NE = 6; +static const int SW = 7; +static const int SE = 8; +static const int NW = 9; +static const int TE = 10; +static const int BW = 11; +static const int BE = 12; +static const int TW = 13; +static const int TN = 14; +static const int BS = 15; +static const int BN = 16; +static const int TS = 17; +static const int TNE = 18; +static const int TNW = 19; +static const int TSE = 20; +static const int TSW = 21; +static const int BNE = 22; +static const int BNW = 23; +static const int BSE = 24; +static const int BSW = 25; +static const int REST = 26; - static const int E /*f1 */ = 0; - static const int W /*f2 */ = 1; - static const int N /*f3 */ = 2; - static const int S /*f4 */ = 3; - static const int T /*f5 */ = 4; - static const int B /*f6 */ = 5; - static const int NE /*f7 */ = 6; - static const int SW /*f8 */ = 7; - static const int SE /*f9 */ = 8; - static const int NW /*f10*/ = 9; - static const int TE /*f11*/ = 10; - static const int BW /*f12*/ = 11; - static const int BE /*f13*/ = 12; - static const int TW /*f14*/ = 13; - static const int TN /*f15*/ = 14; - static const int BS /*f16*/ = 15; - static const int BN /*f17*/ = 16; - static const int TS /*f18*/ = 17; - static const int TNE = 18; - static const int TNW = 19; - static const int TSE = 20; - static const int TSW = 21; - static const int BNE = 22; - static const int BNW = 23; - static const int BSE = 24; - static const int BSW = 25; - static const int ZERO /*f0 */ = 26; +static const int INV_E = W; +static const int INV_W = E; +static const int INV_N = S; +static const int INV_S = N; +static const int INV_T = B; +static const int INV_B = T; +static const int INV_NE = SW; +static const int INV_SW = NE; +static const int INV_SE = NW; +static const int INV_NW = SE; +static const int INV_TE = BW; +static const int INV_BW = TE; +static const int INV_BE = TW; +static const int INV_TW = BE; +static const int INV_TN = BS; +static const int INV_BS = TN; +static const int INV_BN = TS; +static const int INV_TS = BN; +static const int INV_TNE = BSW; +static const int INV_TNW = BSE; +static const int INV_TSE = BNW; +static const int INV_TSW = BNE; +static const int INV_BNE = TSW; +static const int INV_BNW = TSE; +static const int INV_BSE = TNW; +static const int INV_BSW = TNE; - static const int INV_E = W; - static const int INV_W = E; - static const int INV_N = S; - static const int INV_S = N; - static const int INV_T = B; - static const int INV_B = T; - static const int INV_NE = SW; - static const int INV_SW = NE; - static const int INV_SE = NW; - static const int INV_NW = SE; - static const int INV_TE = BW; - static const int INV_BW = TE; - static const int INV_BE = TW; - static const int INV_TW = BE; - static const int INV_TN = BS; - static const int INV_BS = TN; - static const int INV_BN = TS; - static const int INV_TS = BN; - static const int INV_TNE = BSW; - static const int INV_TNW = BSE; - static const int INV_TSE = BNW; - static const int INV_TSW = BNE; - static const int INV_BNE = TSW; - static const int INV_BNW = TSE; - static const int INV_BSE = TNW; - static const int INV_BSW = TNE; +extern const int INVDIR[ENDDIR + 1]; - extern const int INVDIR[ENDDIR + 1]; +static const int ET_E = 0; +static const int ET_W = 0; +static const int ET_N = 1; +static const int ET_S = 1; +static const int ET_T = 2; +static const int ET_B = 2; +static const int ET_NE = 3; +static const int ET_SW = 3; +static const int ET_SE = 4; +static const int ET_NW = 4; +static const int ET_TE = 5; +static const int ET_BW = 5; +static const int ET_BE = 6; +static const int ET_TW = 6; +static const int ET_TN = 7; +static const int ET_BS = 7; +static const int ET_BN = 8; +static const int ET_TS = 8; +static const int ET_TNE = 9; +static const int ET_BSW = 9; +static const int ET_TNW = 10; +static const int ET_BSE = 10; +static const int ET_TSE = 11; +static const int ET_BNW = 11; +static const int ET_TSW = 12; +static const int ET_BNE = 12; - static const int ET_E = 0; - static const int ET_W = 0; - static const int ET_N = 1; - static const int ET_S = 1; - static const int ET_T = 2; - static const int ET_B = 2; - static const int ET_NE = 3; - static const int ET_SW = 3; - static const int ET_SE = 4; - static const int ET_NW = 4; - static const int ET_TE = 5; - static const int ET_BW = 5; - static const int ET_BE = 6; - static const int ET_TW = 6; - static const int ET_TN = 7; - static const int ET_BS = 7; - static const int ET_BN = 8; - static const int ET_TS = 8; - static const int ET_TNE = 9; - static const int ET_BSW = 9; - static const int ET_TNW = 10; - static const int ET_BSE = 10; - static const int ET_TSE = 11; - static const int ET_BNW = 11; - static const int ET_TSW = 12; - static const int ET_BNE = 12; - - - ////////////////////////////////////////////////////////////////////////// - //MACROSCOPIC VALUES - /*=====================================================================*/ - static LBMReal getDensity(const LBMReal* const& f/*[27]*/) - { - return ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE])) - + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW])) - + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + ((f[E] + f[W]) + (f[N] + f[S]) - + (f[T] + f[B])) + f[ZERO]; - } - /*=====================================================================*/ - //ACHTUNG: gilt nicht fuer alle modelle -> praedikat verwenden anstelle static! toDo - static LBMReal getPressure(const LBMReal* const& f/*[27]*/) - { - return REAL_CAST(UbMath::c1o3) * getDensity(f); - } - /*=====================================================================*/ - static LBMReal getIncompVelocityX1(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])); - } - /*=====================================================================*/ - static LBMReal getIncompVelocityX2(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])); - } - /*=====================================================================*/ - static LBMReal getIncompVelocityX3(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])); - } - /*=====================================================================*/ - static void calcDensity(const LBMReal* const& f/*[27]*/, LBMReal& rho) - { - rho = ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE])) - + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW])) - + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + ((f[E] + f[W]) + (f[N] + f[S]) - + (f[T] + f[B])) + f[ZERO]; - - } - /*=====================================================================*/ - static void calcIncompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1) - { - vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])); - } - /*=====================================================================*/ - static void calcIncompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2) - { - vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])); - } - /*=====================================================================*/ - static void calcIncompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3) - { - vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])); - } - /*=====================================================================*/ - static LBMReal getCompVelocityX1(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])) / getDensity(f); - } - /*=====================================================================*/ - static LBMReal getCompVelocityX2(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])) / getDensity(f); - } - /*=====================================================================*/ - static LBMReal getCompVelocityX3(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])) / getDensity(f); - } - /*=====================================================================*/ - static void calcCompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1) - { - vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])) / getDensity(f); - } - /*=====================================================================*/ - static void calcCompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2) - { - vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])) / getDensity(f); - } - /*=====================================================================*/ - static void calcCompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3) - { - vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])) / getDensity(f); - } - /*=====================================================================*/ - static void calcIncompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& rho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) - { - D3Q27System::calcDensity(f, rho); - D3Q27System::calcIncompVelocityX1(f, vx1); - D3Q27System::calcIncompVelocityX2(f, vx2); - D3Q27System::calcIncompVelocityX3(f, vx3); - } - - /*=====================================================================*/ - static void calcCompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& drho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) - { - D3Q27System::calcDensity(f, drho); - D3Q27System::calcIncompVelocityX1(f, vx1); - D3Q27System::calcIncompVelocityX2(f, vx2); - D3Q27System::calcIncompVelocityX3(f, vx3); - LBMReal rho = drho + UbMath::one; - vx1 /= rho; - vx2 /= rho; - vx3 /= rho; - } - ////////////////////////////////////////////////////////////////////////// - static LBMReal getCompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - - //switch(direction) - //{ - // case ZERO : return REAL_CAST( UbMath::c8o27*rho*(1.0-cu_sq)); - // case E : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( vx1 )+UbMath::c9o2*( vx1 )*( vx1 )-cu_sq)); - // case W : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*(-vx1 )+UbMath::c9o2*(-vx1 )*(-vx1 )-cu_sq)); - // case N : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( vx2)+UbMath::c9o2*( vx2)*( vx2)-cu_sq)); - // case S : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( -vx2)+UbMath::c9o2*( -vx2)*( -vx2)-cu_sq)); - // case T : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( vx3 )+UbMath::c9o2*( vx3)*( vx3)-cu_sq)); - // case B : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( -vx3)+UbMath::c9o2*( -vx3)*( -vx3)-cu_sq)); - // case NE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq)); - // case SW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq)); - // case SE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq)); - // case NW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq)); - // case TE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq)); - // case BW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq)); - // case BE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq)); - // case TW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq)); - // case TN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - // case BS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq)); - // case BN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - // case TS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq)); - // case TNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - // case BSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - // case BNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - // case TSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - // case TSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - // case BNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - // case BSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - // case TNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); - // default: throw UbException(UB_EXARGS,"unknown dir"); - //} - - - ////----- - LBMReal rho = drho + UbMath::one; - switch (direction) - { - case ZERO: return REAL_CAST(UbMath::c8o27 * (drho + rho * (-cu_sq))); - case E: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq))); - case W: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq))); - case N: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq))); - case S: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq))); - case T: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq))); - case B: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq))); - case NE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq))); - case SW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq))); - case SE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq))); - case NW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq))); - case TE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq))); - case BW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq))); - case BE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq))); - case TW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq))); - case TN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq))); - case BS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq))); - case BN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq))); - case TS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq))); - case TNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq))); - case BSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq))); - case BNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq))); - case TSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq))); - case TSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq))); - case BNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq))); - case BSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq))); - case TNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq))); - default: throw UbException(UB_EXARGS, "unknown dir"); - } - - } - ////////////////////////////////////////////////////////////////////////// - static void calcCompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - //LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - - //feq[ZERO] = UbMath::c8o27*rho*(1.0-cu_sq); - //feq[E] = UbMath::c2o27*rho*(1.0+3.0*( vx1 )+UbMath::c9o2*( vx1 )*( vx1 )-cu_sq); - //feq[W] = UbMath::c2o27*rho*(1.0+3.0*(-vx1 )+UbMath::c9o2*(-vx1 )*(-vx1 )-cu_sq); - //feq[N] = UbMath::c2o27*rho*(1.0+3.0*( vx2)+UbMath::c9o2*( vx2)*( vx2)-cu_sq); - //feq[S] = UbMath::c2o27*rho*(1.0+3.0*( -vx2)+UbMath::c9o2*( -vx2)*( -vx2)-cu_sq); - //feq[T] = UbMath::c2o27*rho*(1.0+3.0*( vx3 )+UbMath::c9o2*( vx3)*( vx3)-cu_sq); - //feq[B] = UbMath::c2o27*rho*(1.0+3.0*( -vx3)+UbMath::c9o2*( -vx3)*( -vx3)-cu_sq); - //feq[NE] = UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq); - //feq[SW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); - //feq[SE] = UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq); - //feq[NW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); - //feq[TE] = UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq); - //feq[BW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); - //feq[BE] = UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq); - //feq[TW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); - //feq[TN] = UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //feq[BS] = UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); - //feq[BN] = UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //feq[TS] = UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); - //feq[TNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //feq[BSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //feq[BNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //feq[TSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //feq[TSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //feq[BNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //feq[BSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //feq[TNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - ////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// MACROSCOPIC VALUES +/*=====================================================================*/ +static LBMReal getDensity(const LBMReal *const &f /*[27]*/) +{ + return ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE])) + + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW])) + + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + + ((f[E] + f[W]) + (f[N] + f[S]) + (f[T] + f[B])) + f[REST]; +} +/*=====================================================================*/ +static LBMReal getPressure(const LBMReal *const &f /*[27]*/) { return REAL_CAST(UbMath::c1o3) * getDensity(f); } +/*=====================================================================*/ +static LBMReal getIncompVelocityX1(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])); +} +/*=====================================================================*/ +static LBMReal getIncompVelocityX2(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])); +} +/*=====================================================================*/ +static LBMReal getIncompVelocityX3(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])); +} +/*=====================================================================*/ +static void calcDensity(const LBMReal *const &f /*[27]*/, LBMReal &rho) +{ + rho = ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE])) + + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW])) + + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + + ((f[E] + f[W]) + (f[N] + f[S]) + (f[T] + f[B])) + f[REST]; +} +/*=====================================================================*/ +static void calcIncompVelocityX1(const LBMReal *const &f /*[27]*/, LBMReal &vx1) +{ + vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])); +} +/*=====================================================================*/ +static void calcIncompVelocityX2(const LBMReal *const &f /*[27]*/, LBMReal &vx2) +{ + vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])); +} +/*=====================================================================*/ +static void calcIncompVelocityX3(const LBMReal *const &f /*[27]*/, LBMReal &vx3) +{ + vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])); +} +/*=====================================================================*/ +static LBMReal getCompVelocityX1(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])) / + getDensity(f); +} +/*=====================================================================*/ +static LBMReal getCompVelocityX2(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])) / + getDensity(f); +} +/*=====================================================================*/ +static LBMReal getCompVelocityX3(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcCompVelocityX1(const LBMReal *const &f /*[27]*/, LBMReal &vx1) +{ + vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcCompVelocityX2(const LBMReal *const &f /*[27]*/, LBMReal &vx2) +{ + vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcCompVelocityX3(const LBMReal *const &f /*[27]*/, LBMReal &vx3) +{ + vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcIncompMacroscopicValues(const LBMReal *const &f /*[27]*/, LBMReal &rho, LBMReal &vx1, LBMReal &vx2, + LBMReal &vx3) +{ + D3Q27System::calcDensity(f, rho); + D3Q27System::calcIncompVelocityX1(f, vx1); + D3Q27System::calcIncompVelocityX2(f, vx2); + D3Q27System::calcIncompVelocityX3(f, vx3); +} - LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - LBMReal rho = drho + UbMath::one; +/*=====================================================================*/ +static void calcCompMacroscopicValues(const LBMReal *const &f /*[27]*/, LBMReal &drho, LBMReal &vx1, LBMReal &vx2, + LBMReal &vx3) +{ + D3Q27System::calcDensity(f, drho); + D3Q27System::calcIncompVelocityX1(f, vx1); + D3Q27System::calcIncompVelocityX2(f, vx2); + D3Q27System::calcIncompVelocityX3(f, vx3); + LBMReal rho = drho + UbMath::one; + vx1 /= rho; + vx2 /= rho; + vx3 /= rho; +} +////////////////////////////////////////////////////////////////////////// +static LBMReal getCompFeqForDirection(const int &direction, const LBMReal &drho, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + LBMReal rho = drho + UbMath::one; + switch (direction) { + case REST: + return REAL_CAST(UbMath::c8o27 * (drho + rho * (-cu_sq))); + case E: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq))); + case W: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq))); + case N: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq))); + case S: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq))); + case T: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq))); + case B: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq))); + case NE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq))); + case SW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq))); + case SE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq))); + case NW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq))); + case TE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq))); + case BW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq))); + case BE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq))); + case TW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq))); + case TN: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq))); + case BS: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq))); + case BN: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq))); + case TS: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq))); + case TNE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 + vx3) + + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq))); + case BSW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq))); + case BNE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 - vx3) + + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq))); + case TSW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq))); + case TSE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 + vx3) + + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq))); + case BNW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq))); + case BSE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 - vx3) + + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq))); + case TNW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq))); + default: + throw UbException(UB_EXARGS, "unknown dir"); + } +} +////////////////////////////////////////////////////////////////////////// +static void calcCompFeq(LBMReal *const &feq /*[27]*/, const LBMReal &drho, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + LBMReal rho = drho + UbMath::one; - feq[ZERO] = UbMath::c8o27 * (drho + rho * (-cu_sq)); - feq[E] = UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); - feq[W] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); - feq[N] = UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); - feq[S] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); - feq[T] = UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); - feq[B] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); - feq[NE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - feq[SW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - feq[SE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - feq[NW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - feq[TE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - feq[BW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - feq[BE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - feq[TW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - feq[TN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - feq[BS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - feq[BN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - feq[TS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - feq[TNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - feq[BSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - feq[BNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - feq[TSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - feq[TSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - feq[BNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - feq[BSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - feq[TNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); - } - ////////////////////////////////////////////////////////////////////////// - static LBMReal getIncompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - LBMReal cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + feq[REST] = UbMath::c8o27 * (drho + rho * (-cu_sq)); + feq[E] = UbMath::c2o27 * (drho + rho * (3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); + feq[W] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[N] = UbMath::c2o27 * (drho + rho * (3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); + feq[S] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[T] = UbMath::c2o27 * (drho + rho * (3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); + feq[B] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[NE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[SW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[SE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[NW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[TE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[BW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[BE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[TW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[TN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[BS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[BN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[TS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[TNE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[BSW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[BNE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[TSW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[TSE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[BNW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[BSE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[TNW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); +} +////////////////////////////////////////////////////////////////////////// +static LBMReal getIncompFeqForDirection(const int &direction, const LBMReal &drho, const LBMReal &vx1, + const LBMReal &vx2, const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - switch (direction) - { - case ZERO: return REAL_CAST(UbMath::c8o27 * (drho - cu_sq)); - case E: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); - case W: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); - case N: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); - case S: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); - case T: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); - case B: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); - case NE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - case SW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - case SE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - case NW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - case TE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - case BW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - case BE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - case TW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - case TN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - case BS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - case BN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - case TS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - case TNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - case BSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - case BNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - case TSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - case TSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - case BNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - case BSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - case TNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); - default: throw UbException(UB_EXARGS, "unknown dir"); - } - } - ////////////////////////////////////////////////////////////////////////// - static void calcIncompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + switch (direction) { + case REST: + return REAL_CAST(UbMath::c8o27 * (drho - cu_sq)); + case E: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); + case W: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); + case N: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); + case S: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); + case T: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); + case B: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); + case NE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + case SW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + case SE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + case NW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + case TE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + case BW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + case BE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + case TW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + case TN: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + case BS: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + case BN: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + case TS: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + case TNE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + case BSW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + case BNE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + case TSW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + case TSE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + case BNW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + case BSE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + case TNW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); + default: + throw UbException(UB_EXARGS, "unknown dir"); + } +} +////////////////////////////////////////////////////////////////////////// +static void calcIncompFeq(LBMReal *const &feq /*[27]*/, const LBMReal &drho, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[ZERO] = UbMath::c8o27 * (drho - cu_sq); - feq[E] = UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq); - feq[W] = UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq); - feq[N] = UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq); - feq[S] = UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq); - feq[T] = UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq); - feq[B] = UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq); - feq[NE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); - feq[SW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); - feq[SE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); - feq[NW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); - feq[TE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); - feq[BW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); - feq[BE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); - feq[TW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); - feq[TN] = UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); - feq[BS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); - feq[BN] = UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); - feq[TS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); - feq[TNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); - feq[BSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); - feq[BNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); - feq[TSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); - feq[TSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); - feq[BNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); - feq[BSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); - feq[TNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); - } - ////////////////////////////////////////////////////////////////////////// - static inline float getBoundaryVelocityForDirection(const int& direction, const float& bcVelocityX1, const float& bcVelocityX2, const float& bcVelocityX3) - { - switch (direction) - { - case E: return (float)(UbMath::c4o9 * (+bcVelocityX1)); - case W: return (float)(UbMath::c4o9 * (-bcVelocityX1)); - case N: return (float)(UbMath::c4o9 * (+bcVelocityX2)); - case S: return (float)(UbMath::c4o9 * (-bcVelocityX2)); - case T: return (float)(UbMath::c4o9 * (+bcVelocityX3)); - case B: return (float)(UbMath::c4o9 * (-bcVelocityX3)); - case NE: return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX2)); - case SW: return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX2)); - case SE: return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX2)); - case NW: return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX2)); - case TE: return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX3)); - case BW: return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX3)); - case BE: return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX3)); - case TW: return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX3)); - case TN: return (float)(UbMath::c1o9 * (+bcVelocityX2 + bcVelocityX3)); - case BS: return (float)(UbMath::c1o9 * (-bcVelocityX2 - bcVelocityX3)); - case BN: return (float)(UbMath::c1o9 * (+bcVelocityX2 - bcVelocityX3)); - case TS: return (float)(UbMath::c1o9 * (-bcVelocityX2 + bcVelocityX3)); - case TNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); - case BSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case BNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case TSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case TSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case BNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case BSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case TNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); - default: throw UbException(UB_EXARGS, "unknown direction"); - } - } - /*=====================================================================*/ - static const int& getInvertDirection(const int& direction) - { + feq[REST] = UbMath::c8o27 * (drho - cu_sq); + feq[E] = UbMath::c2o27 * (drho + 3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq); + feq[W] = UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq); + feq[N] = UbMath::c2o27 * (drho + 3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq); + feq[S] = UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq); + feq[T] = UbMath::c2o27 * (drho + 3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq); + feq[B] = UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq); + feq[NE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + feq[SW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + feq[SE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + feq[NW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + feq[TE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + feq[BW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + feq[BE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + feq[TW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + feq[TN] = UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + feq[BS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + feq[BN] = UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + feq[TS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + feq[TNE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); + feq[BSW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + feq[BNE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); + feq[TSW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + feq[TSE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); + feq[BNW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + feq[BSE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); + feq[TNW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); +} +////////////////////////////////////////////////////////////////////////// +static inline float getBoundaryVelocityForDirection(const int &direction, const float &bcVelocityX1, + const float &bcVelocityX2, const float &bcVelocityX3) +{ + switch (direction) { + case E: + return (float)(UbMath::c4o9 * (+bcVelocityX1)); + case W: + return (float)(UbMath::c4o9 * (-bcVelocityX1)); + case N: + return (float)(UbMath::c4o9 * (+bcVelocityX2)); + case S: + return (float)(UbMath::c4o9 * (-bcVelocityX2)); + case T: + return (float)(UbMath::c4o9 * (+bcVelocityX3)); + case B: + return (float)(UbMath::c4o9 * (-bcVelocityX3)); + case NE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX2)); + case SW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX2)); + case SE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX2)); + case NW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX2)); + case TE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX3)); + case BW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX3)); + case BE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX3)); + case TW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX3)); + case TN: + return (float)(UbMath::c1o9 * (+bcVelocityX2 + bcVelocityX3)); + case BS: + return (float)(UbMath::c1o9 * (-bcVelocityX2 - bcVelocityX3)); + case BN: + return (float)(UbMath::c1o9 * (+bcVelocityX2 - bcVelocityX3)); + case TS: + return (float)(UbMath::c1o9 * (-bcVelocityX2 + bcVelocityX3)); + case TNE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); + case BSW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); + case BNE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); + case TSW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); + case TSE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); + case BNW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); + case BSE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); + case TNW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); + default: + throw UbException(UB_EXARGS, "unknown direction"); + } +} +/*=====================================================================*/ +static const int &getInvertDirection(const int &direction) +{ #ifdef _DEBUG - if (direction<STARTDIR || direction>ENDDIR) + if (direction < STARTDIR || direction > ENDDIR) throw UbException(UB_EXARGS, "unknown direction"); #endif - return INVDIR[direction]; - } - /*=====================================================================*/ - static void getLBMDirections(std::vector<int>& dirs, bool onlyLBdirs = false) - { - std::vector<int> D3Q27Dirs; - if (onlyLBdirs) /*FSTARTDIR->FENDDIR*/ - { + return INVDIR[direction]; +} +/*=====================================================================*/ +static void getLBMDirections(std::vector<int> &dirs, bool onlyLBdirs = false) +{ + std::vector<int> D3Q27Dirs; + if (onlyLBdirs) /*FSTARTDIR->FENDDIR*/ + { dirs.resize(FENDDIR + 1); for (int dir = FSTARTDIR; dir <= FENDDIR; ++dir) - dirs[dir] = dir; - } - else /*STARTDIR->ENDDIR*/ - { + dirs[dir] = dir; + } else /*STARTDIR->ENDDIR*/ + { dirs.resize(ENDDIR + 1); for (int dir = STARTDIR; dir <= ENDDIR; ++dir) - dirs[dir] = dir; - } - } - ////////////////////////////////////////////////////////////////////////// - static std::vector<int> getEX(const int& exn) - { - std::vector<int> ex; - ex.resize(ENDDIR + 1); - switch (exn) - { - case 1: - for (int dir = STARTDIR; dir < ENDDIR; ++dir) - ex[dir] = DX1[dir]; - break; - case 2: - for (int dir = STARTDIR; dir < ENDDIR; ++dir) - ex[dir] = DX2[dir]; - break; - case 3: - for (int dir = STARTDIR; dir < ENDDIR; ++dir) - ex[dir] = DX3[dir]; - break; - } - return ex; - } - ////////////////////////////////////////////////////////////////////////// - static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1) - { - //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - - distNeigh[E] = distNeigh[W] = distNeigh[N] = deltaX1; - distNeigh[S] = distNeigh[T] = distNeigh[B] = deltaX1; - distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = UbMath::sqrt2 * deltaX1; - distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = UbMath::sqrt2 * deltaX1; - distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = UbMath::sqrt2 * deltaX1; - distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = UbMath::sqrt3 * deltaX1; - distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = UbMath::sqrt3 * deltaX1; - } - ////////////////////////////////////////////////////////////////////////// - static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1, const double& deltaX2, const double& deltaX3) - { - //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - distNeigh[E] = distNeigh[W] = deltaX1; - distNeigh[N] = distNeigh[S] = deltaX2; - distNeigh[T] = distNeigh[B] = deltaX3; - distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2); - distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3); - distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3); - distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); - distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); - } - ////////////////////////////////////////////////////////////////////////// - static inline void initRayVectors(double* const& rayX1, double* const& rayX2, double* const& rayX3) - { - int fdir; - double c1oS2 = UbMath::one_over_sqrt2; - double c1oS3 = UbMath::one_over_sqrt3; - fdir = E; rayX1[fdir] = 1.0; rayX2[fdir] = 0.0; rayX3[fdir] = 0.0; - fdir = W; rayX1[fdir] = -1.0; rayX2[fdir] = 0.0; rayX3[fdir] = 0.0; - fdir = N; rayX1[fdir] = 0.0; rayX2[fdir] = 1.0; rayX3[fdir] = 0.0; - fdir = S; rayX1[fdir] = 0.0; rayX2[fdir] = -1.0; rayX3[fdir] = 0.0; - fdir = T; rayX1[fdir] = 0.0; rayX2[fdir] = 0.0; rayX3[fdir] = 1.0; - fdir = B; rayX1[fdir] = 0.0; rayX2[fdir] = 0.0; rayX3[fdir] = -1.0; - fdir = NE; rayX1[fdir] = c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0; - fdir = SW; rayX1[fdir] = -c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0; - fdir = SE; rayX1[fdir] = c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0; - fdir = NW; rayX1[fdir] = -c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0; - fdir = TE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = c1oS2; - fdir = BW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = -c1oS2; - fdir = BE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = -c1oS2; - fdir = TW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = c1oS2; - fdir = TN; rayX1[fdir] = 0.0; rayX2[fdir] = c1oS2; rayX3[fdir] = c1oS2; - fdir = BS; rayX1[fdir] = 0.0; rayX2[fdir] = -c1oS2; rayX3[fdir] = -c1oS2; - fdir = BN; rayX1[fdir] = 0.0; rayX2[fdir] = c1oS2; rayX3[fdir] = -c1oS2; - fdir = TS; rayX1[fdir] = 0.0; rayX2[fdir] = -c1oS2; rayX3[fdir] = c1oS2; - fdir = TNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = TNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = TSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = TSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = BNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = BNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = BSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; - fdir = BSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; - } - ////////////////////////////////////////////////////////////////////////// - static inline LBMReal calcPress(const LBMReal* const f, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3) - { - LBMReal op = 1.0; - return ((f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + 2. * (f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS]) + - 3. * (f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]) - (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * (1 - 0.5 * op) + op * 0.5 * (rho)) * UbMath::c1o3; - - } - ////////////////////////////////////////////////////////////////////////// - static inline LBMReal getShearRate(const LBMReal* const f, LBMReal collFactorF) - { - LBMReal mfcbb = f[E]; - LBMReal mfbcb = f[N]; - LBMReal mfbbc = f[T]; - LBMReal mfccb = f[NE]; - LBMReal mfacb = f[NW]; - LBMReal mfcbc = f[TE]; - LBMReal mfabc = f[TW]; - LBMReal mfbcc = f[TN]; - LBMReal mfbac = f[TS]; - LBMReal mfccc = f[TNE]; - LBMReal mfacc = f[TNW]; - LBMReal mfcac = f[TSE]; - LBMReal mfaac = f[TSW]; - - LBMReal mfabb = f[W]; - LBMReal mfbab = f[S]; - LBMReal mfbba = f[B]; - LBMReal mfaab = f[SW]; - LBMReal mfcab = f[SE]; - LBMReal mfaba = f[BW]; - LBMReal mfcba = f[BE]; - LBMReal mfbaa = f[BS]; - LBMReal mfbca = f[BN]; - LBMReal mfaaa = f[BSW]; - LBMReal mfcaa = f[BSE]; - LBMReal mfaca = f[BNW]; - LBMReal mfcca = f[BNE]; - - LBMReal mfbbb = f[ZERO]; - - LBMReal m0, m1, m2; - - LBMReal rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //LBMReal OxxPyyPzz = 1.; + dirs[dir] = dir; + } +} +////////////////////////////////////////////////////////////////////////// +static std::vector<int> getEX(const int &exn) +{ + std::vector<int> ex; + ex.resize(ENDDIR + 1); + switch (exn) { + case 1: + for (int dir = STARTDIR; dir < ENDDIR; ++dir) + ex[dir] = DX1[dir]; + break; + case 2: + for (int dir = STARTDIR; dir < ENDDIR; ++dir) + ex[dir] = DX2[dir]; + break; + case 3: + for (int dir = STARTDIR; dir < ENDDIR; ++dir) + ex[dir] = DX3[dir]; + break; + } + return ex; +} +////////////////////////////////////////////////////////////////////////// +static inline void calcDistanceToNeighbors(std::vector<double> &distNeigh, const double &deltaX1) +{ + // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - LBMReal oMdrho; + distNeigh[E] = distNeigh[W] = distNeigh[N] = deltaX1; + distNeigh[S] = distNeigh[T] = distNeigh[B] = deltaX1; + distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = UbMath::sqrt2 * deltaX1; + distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = UbMath::sqrt2 * deltaX1; + distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = UbMath::sqrt2 * deltaX1; + distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = UbMath::sqrt3 * deltaX1; + distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = UbMath::sqrt3 * deltaX1; +} +////////////////////////////////////////////////////////////////////////// +static inline void calcDistanceToNeighbors(std::vector<double> &distNeigh, const double &deltaX1, const double &deltaX2, + const double &deltaX3) +{ + // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); + distNeigh[E] = distNeigh[W] = deltaX1; + distNeigh[N] = distNeigh[S] = deltaX2; + distNeigh[T] = distNeigh[B] = deltaX3; + distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2); + distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3); + distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3); + distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = + sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); + distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = + sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); +} +////////////////////////////////////////////////////////////////////////// +static inline void initRayVectors(double *const &rayX1, double *const &rayX2, double *const &rayX3) +{ + int fdir; + double c1oS2 = UbMath::one_over_sqrt2; + double c1oS3 = UbMath::one_over_sqrt3; + fdir = E; + rayX1[fdir] = 1.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = 0.0; + fdir = W; + rayX1[fdir] = -1.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = 0.0; + fdir = N; + rayX1[fdir] = 0.0; + rayX2[fdir] = 1.0; + rayX3[fdir] = 0.0; + fdir = S; + rayX1[fdir] = 0.0; + rayX2[fdir] = -1.0; + rayX3[fdir] = 0.0; + fdir = T; + rayX1[fdir] = 0.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = 1.0; + fdir = B; + rayX1[fdir] = 0.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = -1.0; + fdir = NE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = c1oS2; + rayX3[fdir] = 0.0; + fdir = SW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = 0.0; + fdir = SE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = 0.0; + fdir = NW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = c1oS2; + rayX3[fdir] = 0.0; + fdir = TE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = c1oS2; + fdir = BW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = -c1oS2; + fdir = BE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = -c1oS2; + fdir = TW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = c1oS2; + fdir = TN; + rayX1[fdir] = 0.0; + rayX2[fdir] = c1oS2; + rayX3[fdir] = c1oS2; + fdir = BS; + rayX1[fdir] = 0.0; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = -c1oS2; + fdir = BN; + rayX1[fdir] = 0.0; + rayX2[fdir] = c1oS2; + rayX3[fdir] = -c1oS2; + fdir = TS; + rayX1[fdir] = 0.0; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = c1oS2; + fdir = TNE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = c1oS3; + fdir = TNW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = c1oS3; + fdir = TSE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = c1oS3; + fdir = TSW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = c1oS3; + fdir = BNE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = -c1oS3; + fdir = BNW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = -c1oS3; + fdir = BSE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = -c1oS3; + fdir = BSW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = -c1oS3; +} +////////////////////////////////////////////////////////////////////////// +static inline LBMReal calcPress(const LBMReal *const f, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3) +{ + LBMReal op = 1.0; + return ((f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + + 2. * (f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS]) + + 3. * (f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]) - + (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * + (1 - 0.5 * op) + + op * 0.5 * (rho)) * + UbMath::c1o3; +} +////////////////////////////////////////////////////////////////////////// +static inline LBMReal getShearRate(const LBMReal *const f, LBMReal collFactorF) +{ + LBMReal mfcbb = f[E]; + LBMReal mfbcb = f[N]; + LBMReal mfbbc = f[T]; + LBMReal mfccb = f[NE]; + LBMReal mfacb = f[NW]; + LBMReal mfcbc = f[TE]; + LBMReal mfabc = f[TW]; + LBMReal mfbcc = f[TN]; + LBMReal mfbac = f[TS]; + LBMReal mfccc = f[TNE]; + LBMReal mfacc = f[TNW]; + LBMReal mfcac = f[TSE]; + LBMReal mfaac = f[TSW]; - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = 1. - (oMdrho + m0); + LBMReal mfabb = f[W]; + LBMReal mfbab = f[S]; + LBMReal mfbba = f[B]; + LBMReal mfaab = f[SW]; + LBMReal mfcab = f[SE]; + LBMReal mfaba = f[BW]; + LBMReal mfcba = f[BE]; + LBMReal mfbaa = f[BS]; + LBMReal mfbca = f[BN]; + LBMReal mfaaa = f[BSW]; + LBMReal mfcaa = f[BSE]; + LBMReal mfaca = f[BNW]; + LBMReal mfcca = f[BNE]; - LBMReal vx2; - LBMReal vy2; - LBMReal vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += UbMath::c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += UbMath::c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += UbMath::c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += UbMath::c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += UbMath::c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += UbMath::c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += UbMath::c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += UbMath::c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += UbMath::c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += UbMath::c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += UbMath::c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += UbMath::c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += UbMath::c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += UbMath::c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += UbMath::c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += UbMath::c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += UbMath::c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += UbMath::c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// + LBMReal mfbbb = f[REST]; - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + LBMReal m0, m1, m2; - // LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3) * mfabb + 2. * mfbba * mfbab); - // LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3) * mfbab + 2. * mfbba * mfabb); - // LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3) * mfbba + 2. * mfbab * mfabb); + LBMReal rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + (mfaab + mfacb + mfcab + mfccb) + + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - // LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + UbMath::c1o3 * (mfcaa + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho); - // LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + UbMath::c1o3 * (mfcaa + mfaac) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho); - // LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + UbMath::c1o3 * (mfaac + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho); + LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)); + LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)); + LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)); - //Cum 5. - // LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - UbMath::c1o3 * (mfbca + mfbac) * oMdrho; - // LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - UbMath::c1o3 * (mfcba + mfabc) * oMdrho; - // LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - UbMath::c1o3 * (mfacb + mfcab) * oMdrho; + LBMReal oMdrho; - //Cum 6. -// LBMReal CUMccc = mfccc + ((-4. * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) -// + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + 2. * (mfcaa * mfaca * mfaac) -// + 16. * mfbba * mfbab * mfabb) -// - UbMath::c1o3 * (mfacc + mfcac + mfcca) * oMdrho - UbMath::c1o9 * oMdrho * oMdrho -// - UbMath::c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) -// + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho; + oMdrho = mfccc + mfaaa; + m0 = mfaca + mfcac; + m1 = mfacc + mfcaa; + m2 = mfaac + mfcca; + oMdrho += m0; + m1 += m2; + oMdrho += m1; + m0 = mfbac + mfbca; + m1 = mfbaa + mfbcc; + m0 += m1; + m1 = mfabc + mfcba; + m2 = mfaba + mfcbc; + m1 += m2; + m0 += m1; + m1 = mfacb + mfcab; + m2 = mfaab + mfccb; + m1 += m2; + m0 += m1; + oMdrho += m0; + m0 = mfabb + mfcbb; + m1 = mfbab + mfbcb; + m2 = mfbba + mfbbc; + m0 += m1 + m2; + m0 += mfbbb; // hat gefehlt + oMdrho = 1. - (oMdrho + m0); + LBMReal vx2; + LBMReal vy2; + LBMReal vz2; + vx2 = vvx * vvx; + vy2 = vvy * vvy; + vz2 = vvz * vvz; + //////////////////////////////////////////////////////////////////////////////////// + // Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += UbMath::c1o36 * oMdrho; + mfaab = m1 - m0 * vvz; + mfaac = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += UbMath::c1o9 * oMdrho; + mfabb = m1 - m0 * vvz; + mfabc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += UbMath::c1o36 * oMdrho; + mfacb = m1 - m0 * vvz; + mfacc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += UbMath::c1o9 * oMdrho; + mfbab = m1 - m0 * vvz; + mfbac = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += UbMath::c4o9 * oMdrho; + mfbbb = m1 - m0 * vvz; + mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += UbMath::c1o9 * oMdrho; + mfbcb = m1 - m0 * vvz; + mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += UbMath::c1o36 * oMdrho; + mfcab = m1 - m0 * vvz; + mfcac = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += UbMath::c1o9 * oMdrho; + mfcbb = m1 - m0 * vvz; + mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += UbMath::c1o36 * oMdrho; + mfccb = m1 - m0 * vvz; + mfccc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += UbMath::c1o6 * oMdrho; + mfaba = m1 - m0 * vvy; + mfaca = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * vvy; + mfacb = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += UbMath::c1o18 * oMdrho; + mfabc = m1 - m0 * vvy; + mfacc = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += UbMath::c2o3 * oMdrho; + mfbba = m1 - m0 * vvy; + mfbca = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * vvy; + mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += UbMath::c2o9 * oMdrho; + mfbbc = m1 - m0 * vvy; + mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += UbMath::c1o6 * oMdrho; + mfcba = m1 - m0 * vvy; + mfcca = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * vvy; + mfccb = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += UbMath::c1o18 * oMdrho; + mfcbc = m1 - m0 * vvy; + mfccc = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * vvx; + mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * vvx; + mfcba = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += UbMath::c1o3 * oMdrho; + mfbca = m1 - m0 * vvx; + mfcca = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * vvx; + mfcab = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * vvx; + mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * vvx; + mfccb = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += UbMath::c1o3 * oMdrho; + mfbac = m1 - m0 * vvx; + mfcac = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * vvx; + mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += UbMath::c1o9 * oMdrho; + mfbcc = m1 - m0 * vvx; + mfccc = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity - LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; - LBMReal mxxMyy = mfcaa - mfaca; - LBMReal mxxMzz = mfcaa - mfaac; + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; - LBMReal dxux = -UbMath::c1o2 * collFactorF * (mxxMyy + mxxMzz) + UbMath::c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - LBMReal dyuy = dxux + collFactorF * UbMath::c3o2 * mxxMyy; - LBMReal dzuz = dxux + collFactorF * UbMath::c3o2 * mxxMzz; + LBMReal dxux = -UbMath::c1o2 * collFactorF * (mxxMyy + mxxMzz) + UbMath::c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorF * UbMath::c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorF * UbMath::c3o2 * mxxMzz; - LBMReal Dxy = -UbMath::three * collFactorF * mfbba; - LBMReal Dxz = -UbMath::three * collFactorF * mfbab; - LBMReal Dyz = -UbMath::three * collFactorF * mfabb; + LBMReal Dxy = -UbMath::three * collFactorF * mfbba; + LBMReal Dxz = -UbMath::three * collFactorF * mfbab; + LBMReal Dyz = -UbMath::three * collFactorF * mfabb; + return sqrt(UbMath::c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / + (rho + UbMath::one); +} +//Multiphase stuff +////////////////////////////////////////////////////////////////////////// +static void calcMultiphaseFeq(LBMReal *const &feq /*[27]*/, const LBMReal &rho, const LBMReal &p1, const LBMReal &vx1, + const LBMReal &vx2, const LBMReal &vx3) +{ + using namespace UbMath; + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - //TODO: may be factor 2 - return sqrt(UbMath::c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + UbMath::one); - } + feq[REST] = c8o27 * (p1 + rho * c1o3 * (-cu_sq)); + feq[E] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); + feq[W] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[N] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); + feq[S] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[T] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); + feq[B] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[NE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[SW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[SE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[NW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[TE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[BW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[BE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[TW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[TN] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[BS] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[BN] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[TS] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[TNE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[BSW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[BNE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[TSW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[TSE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[BNW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[BSE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[TNW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); } -#endif +////////////////////////////////////////////////////////////////////////// +static void calcMultiphaseFeqVB(LBMReal *const &feq /*[27]*/, const LBMReal &p1, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + using namespace UbMath; + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + feq[REST] = p1 + c8o27 * (-cu_sq); + feq[E] = c2o27 * ((3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); + feq[W] = c2o27 * ((3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[N] = c2o27 * ((3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); + feq[S] = c2o27 * ((3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[T] = c2o27 * ((3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); + feq[B] = c2o27 * ((3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[NE] = c1o54 * ((3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[SW] = c1o54 * ((3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[SE] = c1o54 * ((3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[NW] = c1o54 * ((3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[TE] = c1o54 * ((3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[BW] = c1o54 * ((3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[BE] = c1o54 * ((3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[TW] = c1o54 * ((3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[TN] = c1o54 * ((3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[BS] = c1o54 * ((3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[BN] = c1o54 * ((3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[TS] = c1o54 * ((3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[TNE] = c1o216 * ((3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[BSW] = c1o216 * ((3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[BNE] = c1o216 * ((3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[TSW] = c1o216 * ((3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[TSE] = c1o216 * ((3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[BNW] = c1o216 * ((3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[BSE] = c1o216 * ((3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[TNW] = c1o216 * ((3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); +} +////////////////////////////////////////////////////////////////////////// +static void calcMultiphaseHeq(LBMReal *const &heq /*[27]*/, const LBMReal &phi, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + using namespace UbMath; + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + heq[REST] = c8o27 * phi * (1.0 - cu_sq); + heq[E] = c2o27 * phi * (1.0 + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); + heq[W] = c2o27 * phi * (1.0 + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); + heq[N] = c2o27 * phi * (1.0 + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); + heq[S] = c2o27 * phi * (1.0 + 3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq); + heq[T] = c2o27 * phi * (1.0 + 3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq); + heq[B] = c2o27 * phi * (1.0 + 3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq); + heq[NE] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + heq[SW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + heq[SE] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + heq[NW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + heq[TE] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + heq[BW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + heq[BE] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + heq[TW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + heq[TN] = c1o54 * phi * (1.0 + 3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + heq[BS] = c1o54 * phi * (1.0 + 3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + heq[BN] = c1o54 * phi * (1.0 + 3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + heq[TS] = c1o54 * phi * (1.0 + 3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + heq[TNE] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); + heq[BSW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + heq[BNE] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); + heq[TSW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + heq[TSE] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); + heq[BNW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + heq[BSE] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); + heq[TNW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); +} +////////////////////////////////////////////////////////////////////////// +} // namespace D3Q27System +#endif diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp index 979476eb4..15e6f1ddd 100644 --- a/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp @@ -569,7 +569,7 @@ void IncompressibleOffsetInterpolationProcessor::calcInterpolatedNode(LBMReal* f f[BSW] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[BSW]; f[BSE] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[BSE]; f[BNW] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[BNW]; - f[ZERO] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[ZERO]; + f[REST] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -763,7 +763,7 @@ void IncompressibleOffsetInterpolationProcessor::calcInterpolatedNodeFC(LBMReal* f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// void IncompressibleOffsetInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp index 6a7256997..554fc6614 100644 --- a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp @@ -894,7 +894,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// //read distribution //////////////////////////////////////////////////////////////////////////// - f[ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[REST] = (*this->zeroDistributions)(x1, x2, x3); f[E] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); f[N] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); @@ -928,7 +928,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) drho = ((f[TNE]+f[BSW])+(f[TSE]+f[BNW]))+((f[BSE]+f[TNW])+(f[TSW]+f[BNE])) +(((f[NE]+f[SW])+(f[SE]+f[NW]))+((f[TE]+f[BW])+(f[BE]+f[TW])) +((f[BN]+f[TS])+(f[TN]+f[BS])))+((f[E]+f[W])+(f[N]+f[S]) - +(f[T]+f[B]))+f[ZERO]; + +(f[T]+f[B]))+f[REST]; //vx1 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[BSE]-f[TNW])+(f[BNE]-f[TSW])))+ // (((f[BE]-f[TW])+(f[TE]-f[BW]))+((f[SE]-f[NW])+(f[NE]-f[SW])))+ @@ -956,7 +956,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) LBMReal cu_sq = 1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - feq[ZERO] = c8o27*(drho-cu_sq); + feq[REST] = c8o27*(drho-cu_sq); feq[E] = c2o27*(drho+3.0*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); feq[W] = c2o27*(drho+3.0*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq); feq[N] = c2o27*(drho+3.0*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); @@ -985,7 +985,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) feq[TNW] = c1o216*(drho+3.0*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //Relaxation - f[ZERO] += (feq[ZERO]-f[ZERO])*collFactor; + f[REST] += (feq[REST]-f[REST])*collFactor; f[E] += (feq[E]-f[E])*collFactor; f[W] += (feq[W]-f[W])*collFactor; f[N] += (feq[N]-f[N])*collFactor; @@ -1016,7 +1016,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - LBMReal rho_post = f[ZERO]+f[E]+f[W]+f[N]+f[S]+f[T]+f[B] + LBMReal rho_post = f[REST]+f[E]+f[W]+f[N]+f[S]+f[T]+f[B] +f[NE]+f[SW]+f[SE]+f[NW]+f[TE]+f[BW]+f[BE] +f[TW]+f[TN]+f[BS]+f[BN]+f[TS]+f[TNE]+f[TSW] +f[TSE]+f[TNW]+f[BNE]+f[BSW]+f[BSE]+f[BNW]; @@ -1061,7 +1061,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp index 1d387655b..f3d168733 100644 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp @@ -185,3 +185,49 @@ bool LBMKernel::isInsideOfDomain(const int &x1, const int &x2, const int &x3) co const SPtr<BCArray3D> bcArray = this->bcProcessor->getBCArray(); return bcArray->isInsideOfDomain(x1, x2, x3, ghostLayerWidth); } +////////////////////////////////////////////////////////////////////////// + +void LBMKernel::setCollisionFactorMultiphase(double collFactorL, double collFactorG) +{ + this->collFactorL = collFactorL; + this->collFactorG = collFactorG; +} +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getCollisionFactorL() const { return collFactorL; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getCollisionFactorG() const { return collFactorG; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setDensityRatio(double densityRatio) { this->densityRatio = densityRatio; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getDensityRatio() const { return densityRatio; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setMultiphaseModelParameters(double beta, double kappa) +{ + this->beta = beta; + this->kappa = kappa; +} +////////////////////////////////////////////////////////////////////////// +void LBMKernel::getMultiphaseModelParameters(double &beta, double &kappa) +{ + beta = this->beta; + kappa = this->kappa; +} +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setContactAngle(double contactAngle) { this->contactAngle = contactAngle; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getContactAngle() const { return contactAngle; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setPhiL(double phiL) { this->phiL = phiL; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setPhiH(double phiH) { this->phiH = phiH; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getPhiL() const { return phiL; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getPhiH() const { return phiH; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setPhaseFieldRelaxation(double tauH) { this->tauH = tauH; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getPhaseFieldRelaxation() const { return tauH; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setMobility(double mob) { this->mob = mob; } +////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h index be29589b9..5c3e06765 100644 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h +++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h @@ -110,6 +110,25 @@ public: void setNX(std::array<int, 3> nx); std::array<int, 3> getNX(); + ///////// Extra methods for the multiphase kernel //////////// + + void setCollisionFactorMultiphase(double collFactorL, double collFactorG); + double getCollisionFactorL() const; + double getCollisionFactorG() const; + void setDensityRatio(double densityRatio); + double getDensityRatio() const; + void setMultiphaseModelParameters(double beta, double kappa); + void getMultiphaseModelParameters(double &beta, double &kappa); + void setContactAngle(double contactAngle); + double getContactAngle() const; + void setPhiL(double phiL); + void setPhiH(double phiH); + double getPhiL() const; + double getPhiH() const; + void setPhaseFieldRelaxation(double tauH); + double getPhaseFieldRelaxation() const; + void setMobility(double mob); + protected: SPtr<DataSet3D> dataSet; SPtr<BCProcessor> bcProcessor; @@ -133,6 +152,18 @@ protected: std::array<int, 3> nx; + // Multiphase model + LBMReal collFactorL; + LBMReal collFactorG; + LBMReal densityRatio; + LBMReal beta; + LBMReal kappa; + LBMReal contactAngle; + LBMReal phiL; + LBMReal phiH; + LBMReal tauH; + LBMReal mob; + private: void checkFunction(mu::Parser fct); }; diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp index 1da1a07ea..6076eb018 100644 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp @@ -88,7 +88,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// //read distribution //////////////////////////////////////////////////////////////////////////// - f[ZERO] = (*this->zeroDistributions)(x1,x2,x3); + f[REST] = (*this->zeroDistributions)(x1,x2,x3); f[E] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3); f[N] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); @@ -119,7 +119,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) f[BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p); ////////////////////////////////////////////////////////////////////////// - drho = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + drho = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; @@ -138,7 +138,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - feq[ZERO] = c8o27*(drho-cu_sq); + feq[REST] = c8o27*(drho-cu_sq); feq[E] = c2o27*(drho+3.0*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); feq[W] = c2o27*(drho+3.0*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); feq[N] = c2o27*(drho+3.0*( vx2)+c9o2*( vx2)*( vx2)-cu_sq); @@ -167,7 +167,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) feq[TNW]= c1o216*(drho+3.0*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //Relaxation - f[ZERO] += (feq[ZERO]-f[ZERO])*collFactor; + f[REST] += (feq[REST]-f[REST])*collFactor; f[E] += (feq[E]-f[E])*collFactor; f[W] += (feq[W]-f[W])*collFactor; f[N] += (feq[N]-f[N])*collFactor; @@ -208,7 +208,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) forcingX2 = muForcingX2.Eval(); forcingX3 = muForcingX3.Eval(); - f[ZERO] += 0.0 ; + f[REST] += 0.0 ; f[E ] += 3.0*c2o27 * (forcingX1) ; f[W ] += 3.0*c2o27 * (-forcingX1) ; f[N ] += 3.0*c2o27 * (forcingX2) ; @@ -238,7 +238,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) } ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - LBMReal rho_post = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + LBMReal rho_post = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; @@ -283,7 +283,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2, x3p) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp new file mode 100644 index 000000000..09c43e97b --- /dev/null +++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp @@ -0,0 +1,1748 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file MultiphaseCumulantLBMKernel.cpp +//! \ingroup LBMKernel +//! \author Hesameddin Safari +//======================================================================================= + +#include "MultiphaseCumulantLBMKernel.h" +#include "BCArray3D.h" +#include "Block3D.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "D3Q27System.h" +#include "DataSet3D.h" +#include "LBMKernel.h" +#include <cmath> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() { this->compressible = false; } +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::initDataSet() +{ + SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); + SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field + SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + dataSet->setPhaseField(divU); +} +////////////////////////////////////////////////////////////////////////// +SPtr<LBMKernel> MultiphaseCumulantLBMKernel::clone() +{ + SPtr<LBMKernel> kernel(new MultiphaseCumulantLBMKernel()); + kernel->setNX(nx); + dynamicPointerCast<MultiphaseCumulantLBMKernel>(kernel)->initDataSet(); + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + kernel->setMobility(this->mob); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate(int step) +{ + using namespace D3Q27System; + using namespace UbMath; + + // initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + // phaseField = dataSet->getPhaseField(); + + SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray(); + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1 - ghostLayerWidth; + int maxX2 = bcArrayMaxX2 - ghostLayerWidth; + int maxX3 = bcArrayMaxX3 - ghostLayerWidth; + + //#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} + //#pragma omp for + + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField( + new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr divU( + new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); + + // CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + for (int x3 = 0; x3 <= maxX3; x3++) { + for (int x2 = 0; x2 <= maxX2; x2++) { + for (int x1 = 0; x1 <= maxX1; x1++) { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + LBMReal mfbbb = (*this->zeroDistributionsH)(x1, x2, x3); + // LBMReal phase = h[REST] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + + // h[NW] + h[TE] + h[BW] + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + + //h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1, x2, x3) = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; + } + } + } + } + + LBMReal collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF + 1]; + // LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, + // m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; LBMReal k000, k100, k010, k001, k110, k101, k011, + // k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, + // k122, k222; LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, + // c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + // LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, + // k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + // k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + // LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, + // c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + // c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for (int x3 = minX3; x3 < maxX3; x3++) { + for (int x2 = minX2; x2 < maxX2; x2++) { + for (int x1 = minX1; x1 < maxX1; x1++) { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + ////////////////////////////////////////////////////////////////////////// + // Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + // E N T + // c c c + ////////// + // W S B + // a a a + + // Rest ist b + + // mfxyz + // a - negative + // b - null + // c - positive + + // a b c + //-1 0 1 + + /* + phi[REST] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, x1, x2, x3); + + LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); + LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); + LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); + LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); + LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); + LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); + LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); + LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); + LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); + LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); + LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); + LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); + LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); + LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); + LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); + LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); + LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); + LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); + LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); + LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); + LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); + LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); + LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); + LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); + LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); + + LBMReal mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); + + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0 / densityRatio; + + // LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL) / (phiH - phiL); + + // collFactorM = phi[REST]*collFactorL + (1-phi[REST])*collFactorG; + // collFactorM = phi[REST]*collFactorG + (1-phi[REST])*collFactorL; + + // LBMReal tauH = 1.0; + // LBMReal di = sqrt(8*kappa/beta); + + LBMReal dX1_phi = gradX1_phi(); + LBMReal dX2_phi = gradX2_phi(); + LBMReal dX3_phi = gradX3_phi(); + + LBMReal denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; + // LBMReal normX1 = dX1_phi/denom; + // LBMReal normX2 = dX2_phi/denom; + // LBMReal normX3 = dX3_phi/denom; + + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL); + + /*if ((phi[REST] > 0.1)||(phi[REST] < 0.9)) + { + collFactorM*=(1.0-denom); + }*/ + + w1 = collFactorM; + + /*dX1_phi = -normX1*((phi[REST]>phiH || phi[REST]<phiL) ? 0.0 : 4*(phi[REST] - phiL)*(phi[REST] + - phiH)/di); dX2_phi = -normX2*((phi[REST]>phiH || phi[REST]<phiL) ? 0.0 : 4*(phi[REST] - + phiL)*(phi[REST] - phiH)/di); dX3_phi = -normX3*((phi[REST]>phiH || phi[REST]<phiL) ? 0.0 : + 4*(phi[REST] - phiL)*(phi[REST] - phiH)/di);*/ + + // UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3); + /*Block3D bl = this->block(); + + int wX1 = bl->getX1() + x1; + int wX2 = bl->getX2() + x2; + int wX3 = bl->getX3() + x3;*/ + + /*if (wX3 >= 30.0) + { + dX1_phi = 0.0; + dX2_phi = 0.0; + dX3_phi = 0.0; + }*/ + + LBMReal mu = + 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi(); + + // LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + //----------- Calculating Macroscopic Values ------------- + + // LBMReal rho = phi[REST] + (1.0 - phi[REST])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi * (phi[REST] - phiH); + // LBMReal rho = phi[REST]*1.0/densityRatio + (1.0 - phi[REST]); + + if (withForcing) { + // muX1 = static_cast<double>(x1-1+ix1*maxX1); + // muX2 = static_cast<double>(x2-1+ix2*maxX2); + // muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + LBMReal rho_m = 1.0 / densityRatio; + forcingX1 = forcingX1 * (rho - rho_m); + forcingX2 = forcingX2 * (rho - rho_m); + forcingX3 = forcingX3 * (rho - rho_m); + + // ux += forcingX1*deltaT*0.5; // X + // uy += forcingX2*deltaT*0.5; // Y + // uz += forcingX3*deltaT*0.5; // Z + } + + LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + + (mfcbb - mfabb)) / + (rho * c1o3) + + (mu * dX1_phi + forcingX1) / (2 * rho); + + LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + + (mfbcb - mfbab)) / + (rho * c1o3) + + (mu * dX2_phi + forcingX2) / (2 * rho); + + LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + + (mfbbc - mfbba)) / + (rho * c1o3) + + (mu * dX3_phi + forcingX3) / (2 * rho); + + // LBMReal p1 = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) + // +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) + // +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb + + //(ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + // vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + LBMReal ux2 = ux * ux; + LBMReal uy2 = uy * uy; + LBMReal uz2 = uz * uz; + // LBMReal ux_uy = ux*uy; + // LBMReal ux_uz = ux*uz; + // LBMReal uy_uz = uy*uz; + // LBMReal ux_uy_uz = ux*uy*uz; + + /* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != REST) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + + mu*dirGrad_phi*WEIGTH[dir] - (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[REST] = -(forcingTerm1)*WEIGTH[REST]; + } + } + //-------------------------------------------------------- + */ + + //----------- Calculating Forcing Terms * ------------- + // LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) { + LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; + LBMReal velSq1 = velProd * velProd; + LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)); + + // forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + + // gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; + // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + // LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + + /*forcingTerm[dir] = (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/ + + forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + + (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) + + (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + + (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3)); + } + + LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + /*forcingTerm[REST] = -(ux)*((gamma - WEIGTH[REST])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[REST])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[REST])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi; + forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + + (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3)); + + //-------------------------------------------------------- + + /* + f1[E ] = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + f1[N ] = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + f1[T ] = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE + ]/c1o3; f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE + ]/c1o3; f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN + ]/c1o3; f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TNE]/c1o3; f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TNW]/c1o3; f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TSE]/c1o3; f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TSW]/c1o3; f1[W ] = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[W ]/c1o3; f1[S ] = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[S ]/c1o3; f1[B ] = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[B ]/c1o3; f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[SW ]/c1o3; f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[SE ]/c1o3; f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BW ]/c1o3; f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BE ]/c1o3; f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BS ]/c1o3; f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BN ]/c1o3; f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BSW]/c1o3; f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BSE]/c1o3; f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BNW]/c1o3; f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BNE]/c1o3; f1[REST] = (g[REST] + 0.5*forcingTerm[REST])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[REST]/c1o3; + */ + + mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[E]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]; + + LBMReal rho1 = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + + (mfbba + mfbbc) + mfbbb; + + /* + //forcing + /////////////////////////////////////////////////////////////////////////////////////////// + if (withForcing) + { + muX1 = static_cast<double>(x1-1+ix1*maxX1); + muX2 = static_cast<double>(x2-1+ix2*maxX2); + muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + vvx += forcingX1*deltaT*0.5; // X + vvy += forcingX2*deltaT*0.5; // Y + vvz += forcingX3*deltaT*0.5; // Z + } + /////////////////////////////////////////////////////////////////////////////////////////// + */ + + LBMReal oMdrho, m0, m1, m2; + + oMdrho = mfccc + mfaaa; + m0 = mfaca + mfcac; + m1 = mfacc + mfcaa; + m2 = mfaac + mfcca; + oMdrho += m0; + m1 += m2; + oMdrho += m1; + m0 = mfbac + mfbca; + m1 = mfbaa + mfbcc; + m0 += m1; + m1 = mfabc + mfcba; + m2 = mfaba + mfcbc; + m1 += m2; + m0 += m1; + m1 = mfacb + mfcab; + m2 = mfaab + mfccb; + m1 += m2; + m0 += m1; + oMdrho += m0; + m0 = mfabb + mfcbb; + m1 = mfbab + mfbcb; + m2 = mfbba + mfbbc; + m0 += m1 + m2; + m0 += mfbbb; // hat gefehlt + oMdrho = 1. - (oMdrho + m0); + // oMdrho = rho - (oMdrho + m0); + + //////////////////////////////////////////////////////////////////////////////////// + LBMReal wadjust; + LBMReal qudricLimit = 0.01; + //////////////////////////////////////////////////////////////////////////////////// + // Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; + mfaac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity + LBMReal OxyyPxzz = 1.; //-s9;//2+s9;// + LBMReal OxyyMxzz = 1.; // 2+s9;// + LBMReal O4 = 1.; + LBMReal O5 = 1.; + LBMReal O6 = 1.; + + // Cum 4. + // LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // + // till 18.05.2015 LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * + // mfabb); // till 18.05.2015 LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * + // mfbab * mfabb); // till 18.05.2015 + + LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); + LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); + LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); + + LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); + LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); + LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); + + // LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * + // oMdrho + c1o9*(-p1/c1o3)*oMdrho); LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * + // mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); LBMReal CUMacc = mfacc - + // ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + + // c1o9*(-p1/c1o3)*oMdrho); + + // Cum 5. + LBMReal CUMbcc = mfbcc - + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + + 2. * (mfbab * mfacb + mfbba * mfabc)) - + c1o3 * (mfbca + mfbac) * oMdrho; + LBMReal CUMcbc = mfcbc - + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + + 2. * (mfabb * mfcab + mfbba * mfbac)) - + c1o3 * (mfcba + mfabc) * oMdrho; + LBMReal CUMccb = mfccb - + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + + 2. * (mfbab * mfbca + mfabb * mfcba)) - + c1o3 * (mfacb + mfcab) * oMdrho; + + // Cum 6. + LBMReal CUMccc = + mfccc + + ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - + 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - + 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - + c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - + c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - + c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * + c2o3 * oMdrho) + + c1o27 * oMdrho; + + // 2. + // linear combinations + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; + + LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; + + /*LBMReal Dxy =-three*collFactorM*mfbba; + LBMReal Dxz =-three*collFactorM*mfbab; + LBMReal Dyz =-three*collFactorM*mfabb; + + LBMReal strainMag = sqrt(2*(dxux*dxux + dyuy*dyuy + dzuz*dzuz) + Dxy*Dxy + Dxz*Dxz + Dyz*Dyz); + LBMReal intVis = 3*abs(denom - 1e-9)*strainMag; + LBMReal fluidVis = (1.0/collFactorM - 0.5)/3.0; + collFactorM = 1.0/((fluidVis + intVis)*3.0 + 0.5);*/ + (*divU)(x1, x2, x3) = dxux + dyuy + dzuz; + + // relax + mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - + 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz); + mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy); + mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz); + + mfabb += collFactorM * (-mfabb); + mfbab += collFactorM * (-mfbab); + mfbba += collFactorM * (-mfbba); + + // linear combinations back + mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); + mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); + mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); + + // 3. + // linear combinations + LBMReal mxxyPyzz = mfcba + mfabc; + LBMReal mxxyMyzz = mfcba - mfabc; + + LBMReal mxxzPyyz = mfcab + mfacb; + LBMReal mxxzMyyz = mfcab - mfacb; + + LBMReal mxyyPxzz = mfbca + mfbac; + LBMReal mxyyMxzz = mfbca - mfbac; + + // relax + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); + mfbbb += wadjust * (-mfbbb); + wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit); + mxyyMxzz += wadjust * (-mxyyMxzz); + + // linear combinations back + mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; + mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; + mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; + mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; + mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; + mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; + + // 4. + CUMacc += O4 * (-CUMacc); + CUMcac += O4 * (-CUMcac); + CUMcca += O4 * (-CUMcca); + + CUMbbc += O4 * (-CUMbbc); + CUMbcb += O4 * (-CUMbcb); + CUMcbb += O4 * (-CUMcbb); + + // 5. + CUMbcc += O5 * (-CUMbcc); + CUMcbc += O5 * (-CUMcbc); + CUMccb += O5 * (-CUMccb); + + // 6. + CUMccc += O6 * (-CUMccc); + + // back cumulants to central moments + // 4. + // mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + // mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + // mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); + mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); + mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); + + mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + + c1o9 * (oMdrho - 1) * oMdrho; + mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + + c1o9 * (oMdrho - 1) * oMdrho; + mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + + c1o9 * (oMdrho - 1) * oMdrho; + + // mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + + // c1o9*(-p1/c1o3)*oMdrho; mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + // + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * + // mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + + // 5. + mfbcc = CUMbcc + + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + + 2. * (mfbab * mfacb + mfbba * mfabc)) + + c1o3 * (mfbca + mfbac) * oMdrho; + mfcbc = CUMcbc + + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + + 2. * (mfabb * mfcab + mfbba * mfbac)) + + c1o3 * (mfcba + mfabc) * oMdrho; + mfccb = CUMccb + + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + + 2. * (mfbab * mfbca + mfabb * mfcba)) + + c1o3 * (mfacb + mfcab) * oMdrho; + + // 6. + mfccc = CUMccc - + ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - + 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - + 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - + c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - + c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - + c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * + c2o3 * oMdrho) - + c1o27 * oMdrho; + + //////////////////////////////////////////////////////////////////////////////////// + // forcing + mfbaa = -mfbaa; + mfaba = -mfaba; + mfaab = -mfaab; + ////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////// + // back + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2; + m1 = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2; + m1 = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2; + m1 = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2; + m1 = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2; + m1 = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2; + m1 = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2; + m1 = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2; + m1 = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + /////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + // proof correctness + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + + (mfbba + mfbbc) + mfbbb; + + /*LBMReal rho_post = f1[REST] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */ + // LBMReal dif = fabs(rho - rho_post); + LBMReal dif = rho1 - rho_post; +#ifdef SINGLEPRECISION + if (dif > 10.0E-7 || dif < -10.0E-7) +#else + if (dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS, + "rho=" + UbSystem::toString(rho) + ", rho_post=" + + UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) + + " rho is not correct for node " + UbSystem::toString(x1) + "," + + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); + // UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node + // "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + // exit(EXIT_FAILURE); + } +#endif + + mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[E]; + mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N]; + mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T]; + mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE]; + mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW]; + mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE]; + mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW]; + mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN]; + mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS]; + mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE]; + mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW]; + mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE]; + mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW]; + mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W]; + mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S]; + mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B]; + mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW]; + mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE]; + mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW]; + mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE]; + mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS]; + mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN]; + mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW]; + mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE]; + mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW]; + mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE]; + mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST]; + + ////////////////////////////////////////////////////////////////////////// + // write distribution for F + ////////////////////////////////////////////////////////////////////////// + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb; + + ///////////////////// P H A S E - F I E L D S O L V E R + //////////////////////////////////////////// + + ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// + + h[E] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); + + // LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15; + // LBMReal di = sqrt(8*kappa/beta); + // LBMReal tauH1 = 3.0*mob + 0.5; + for (int dir = STARTF; dir < (ENDF + 1); dir++) { + LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; + LBMReal velSq1 = velProd * velProd; + LBMReal hEq; //, gEq; + + if (dir != REST) { + // LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; + LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / + denom; // + phi[REST]*(dxux + dyuy + dzuz); + + // LBMReal hSource =((phi[REST]>phiH || phi[REST]<phiL) ? 0.1 : 1.0) + // * 3.0*mob*(-4.0)/di*(phi[REST] - phiL)*(phi[REST] - phiH)*(dirGrad_phi)/denom; LBMReal + // hSource = 3.0*mob*(-4.0)/di*(phi[REST] - phiL)*(phi[REST] - phiH)*(dirGrad_phi)/denom; + hEq = phi[REST] * WEIGTH[dir] * + (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + + hSource * WEIGTH[dir]; + // gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + + // (p1-rho*c1o3)*WEIGTH[dir]; h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// + // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = + h[dir] - (h[dir] - hEq) / (tauH); // + WEIGTH[dir]*phi[REST]*(dxux + dyuy + dzuz); + // h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); + // g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } else { + hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + // gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + + // (p1-rho*c1o3)*WEIGTH[dir]; h[dir] = hEq; + h[REST] = h[REST] - + (h[REST] - hEq) / (tauH); // + WEIGTH[REST]*phi[REST]*(dxux + dyuy + dzuz); + // g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; + (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; + (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; + (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; + (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; + (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; + (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; + (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; + (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; + (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; + (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; + (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; + (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; + + ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// + } + } + } + } + dataSet->setPhaseField(divU); + } +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * DX1[k] * phi[k]; + } + return 3.0 * sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * DX2[k] * phi[k]; + } + return 3.0 * sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * DX3[k] * phi[k]; + } + return 3.0 * sum; +} + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * (phi[k] - phi[REST]); + } + return 6.0 * sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); + + // const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + // const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + // const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for (int x3 = minX3; x3 < maxX3; x3++) { + for (int x2 = minX2; x2 < maxX2; x2++) { + for (int x1 = minX1; x1 < maxX1; x1++) { + // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + h[E] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); + + /*(*this->phaseField)(x1,x2,x3) = h[REST] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + + h[BNW] + h[BSE] + h[BSW];*/ + } + } + } + } + //---------------------------------------------------------- + + /* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// + */ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, + int x3) +{ + using namespace D3Q27System; + + SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray(); + + phi[REST] = (*ph)(x1, x2, x3); + + // LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*UbMath::PI/180); + // LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } else { + /* + if (phi[REST] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + + phi[k] = (*ph)(x1, x2, x3); + + // if (bcArray->isSolid(x1 + DX1[k], x2, x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + // + // if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + + // if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) + //{ + // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3)) + // { + // //phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // } + // else + // { + // phi[k] = (*ph)(x1, x2, x3); + // } + //} + + /*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/ + + /*if (phi[REST] < 0.00001) + { + phi[k] = 0.0; + } + else + { + phi[k] = 0.5; + }*/ + + // phi[k] = 0.5; + // phi[k] = (*ph)(x1, x2, x3); + // phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + LBMKernel::swapDistributions(); + dataSet->getHdistributions()->swap(); + // computePhasefield(); +} \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h new file mode 100644 index 000000000..dd9963706 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h @@ -0,0 +1,99 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file MultiphaseCumulantLBMKernel.h +//! \ingroup LBMKernel +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef MultiphaseCumulantLBMKernel_H +#define MultiphaseCumulantLBMKernel_H + +#include "LBMKernel.h" +#include "BCProcessor.h" +#include "D3Q27System.h" +#include "basics/utilities/UbTiming.h" +#include "basics/container/CbArray4D.h" +#include "basics/container/CbArray3D.h" + +//! \brief Multiphase Cascaded Cumulant LBM kernel. +//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model +//! \author H. Safari, K. Kutscher, M. Geier +class MultiphaseCumulantLBMKernel : public LBMKernel +{ +public: + MultiphaseCumulantLBMKernel(); + virtual ~MultiphaseCumulantLBMKernel(void) = default; + void calculate(int step) override; + SPtr<LBMKernel> clone() override; + double getCalculationTime() override { return .0; } +protected: + virtual void initDataSet(); + void swapDistributions(); + LBMReal f1[D3Q27System::ENDF+1]; + + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; + + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH; + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH; + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH; + + //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField; + + LBMReal h [D3Q27System::ENDF+1]; + LBMReal g [D3Q27System::ENDF+1]; + LBMReal phi[D3Q27System::ENDF+1]; + LBMReal pr1[D3Q27System::ENDF+1]; + LBMReal phi_cutoff[D3Q27System::ENDF+1]; + + LBMReal gradX1_phi(); + LBMReal gradX2_phi(); + LBMReal gradX3_phi(); + //LBMReal gradX1_pr1(); + //LBMReal gradX2_pr1(); + //LBMReal gradX3_pr1(); + //LBMReal dirgradC_phi(int n, int k); + void computePhasefield(); + void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); + //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3); + //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/); + + LBMReal nabla2_phi(); + + + mu::value_type muX1,muX2,muX3; + mu::value_type muDeltaT; + mu::value_type muNu; + LBMReal forcingX1; + LBMReal forcingX2; + LBMReal forcingX3; +}; + +#endif diff --git a/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp index a673f473e..26355a6f8 100644 --- a/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp @@ -469,7 +469,7 @@ void ThixotropyInterpolationProcessor::calcInterpolatedNode(LBMReal* f, /*LBMRea f[BSW] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[BSW]; f[BSE] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[BSE]; f[BNW] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[BNW]; - f[ZERO] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[ZERO]; + f[REST] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -658,7 +658,7 @@ void ThixotropyInterpolationProcessor::calcInterpolatedNodeFC(LBMReal* f, LBMRea f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// void ThixotropyInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp new file mode 100644 index 000000000..f3bd4f954 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp @@ -0,0 +1,145 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file BoundaryConditionsBlockVisitorMultiphase.cpp +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#include "BoundaryConditionsBlockVisitorMultiphase.h" +#include "BCAdapter.h" +#include "BCArray3D.h" +#include "BCProcessor.h" +#include "Block3D.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "DataSet3D.h" +#include "Grid3D.h" +#include "Grid3DSystem.h" +#include "BCAdapter.h" +#include "Block3D.h" +#include "BCArray3D.h" +#include "LBMKernel.h" + +BoundaryConditionsBlockVisitorMultiphase::BoundaryConditionsBlockVisitorMultiphase() : +Block3DVisitor(0, Grid3DSystem::MAXLEVEL) +{ + +} +////////////////////////////////////////////////////////////////////////// +BoundaryConditionsBlockVisitorMultiphase::~BoundaryConditionsBlockVisitorMultiphase() +{ + +} +////////////////////////////////////////////////////////////////////////// +void BoundaryConditionsBlockVisitorMultiphase::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) +{ + if (block->getRank() == grid->getRank()) + { + SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); + + if (!kernel) + { + throw UbException(UB_EXARGS, "LBMKernel in " + block->toString() + "is not exist!"); + } + + SPtr<BCProcessor> bcProcessor = kernel->getBCProcessor(); + + if (!bcProcessor) + { + throw UbException(UB_EXARGS,"Boundary Conditions Processor is not exist!" ); + } + + SPtr<BCArray3D> bcArray = bcProcessor->getBCArray(); + + bool compressible = kernel->getCompressible(); + double collFactorL = kernel->getCollisionFactorL(); + double collFactorG = kernel->getCollisionFactorG(); + double collFactorPh = 1.0/kernel->getPhaseFieldRelaxation(); + double densityRatio = kernel->getDensityRatio(); + LBMReal phiL = kernel->getPhiL(); + LBMReal phiH = kernel->getPhiH(); + //int level = block->getLevel(); + + int minX1 = 0; + int minX2 = 0; + int minX3 = 0; + int maxX1 = (int)bcArray->getNX1(); + int maxX2 = (int)bcArray->getNX2(); + int maxX3 = (int)bcArray->getNX3(); + SPtr<BoundaryConditions> bcPtr; + + bcProcessor->clearBC(); + + SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); + SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); + + for (int x3 = minX3; x3 < maxX3; x3++) + { + for (int x2 = minX2; x2 < maxX2; x2++) + { + for (int x1 = minX1; x1 < maxX1; x1++) + { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) + { + if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) + { + char alg = bcPtr->getBcAlgorithmType(); + SPtr<BCAlgorithm> bca = bcMap[alg]; + + if (bca) + { + bca = bca->clone(); + bca->setNodeIndex(x1, x2, x3); + bca->setBcPointer(bcPtr); + //bca->addDistributions(distributions, distributionsH); + bca->addDistributions(distributions); + bca->addDistributionsH(distributionsH); + bca->setCollFactorL(collFactorL); + bca->setCollFactorG(collFactorG); + bca->setCollFactorPh(collFactorPh); + bca->setDensityRatio(densityRatio); + bca->setPhiBound(phiL, phiH); + bca->setCompressible(compressible); + bca->setBcArray(bcArray); + bcProcessor->addBC(bca); + } + } + } + } + } + } + } +} +////////////////////////////////////////////////////////////////////////// +void BoundaryConditionsBlockVisitorMultiphase::addBC(SPtr<BCAdapter> bc) +{ + bcMap.insert(std::make_pair(bc->getBcAlgorithmType(), bc->getAlgorithm())); +} + + + diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h new file mode 100644 index 000000000..7ff93af25 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h @@ -0,0 +1,55 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file BoundaryConditionsBlockVisitorMultiphase.h +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef BoundaryConditionBlockVisitorMultiphase_h__ +#define BoundaryConditionBlockVisitorMultiphase_h__ + +#include "Block3DVisitor.h" +#include <map> + +class BCAdapter; +class BCAlgorithm; + +class BoundaryConditionsBlockVisitorMultiphase : public Block3DVisitor +{ +public: + BoundaryConditionsBlockVisitorMultiphase(); + virtual ~BoundaryConditionsBlockVisitorMultiphase(); + + void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); + void addBC(SPtr<BCAdapter> bc); +protected: +private: + std::map<char, SPtr<BCAlgorithm>> bcMap; +}; +#endif // BoundaryConditionBlockVisitor_h__ diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp index bc1e7d11d..aba67e674 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp @@ -273,7 +273,7 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; //calcFeqsFct(f,rho,vx1,vx2,vx3); distributions->setDistribution(f, ix1, ix2, ix3); diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp new file mode 100644 index 000000000..f609d7af1 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp @@ -0,0 +1,499 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file InitDistributionsBlockVisitorMultiphase.cpp +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#include "InitDistributionsBlockVisitorMultiphase.h" +#include "BCArray3D.h" +#include "BCProcessor.h" +#include "Block3D.h" +#include "DataSet3D.h" +#include "EsoTwist3D.h" +#include "Grid3D.h" +#include "Grid3DSystem.h" +#include "LBMKernel.h" + +InitDistributionsBlockVisitorMultiphase::InitDistributionsBlockVisitorMultiphase() + : Block3DVisitor(0, Grid3DSystem::MAXLEVEL) +{ + this->setVx1(0.0); + this->setVx2(0.0); + this->setVx3(0.0); + this->setRho(0.0); +} +////////////////////////////////////////////////////////////////////////// +//D3Q27ETInitDistributionsBlockVisitor::D3Q27ETInitDistributionsBlockVisitor(LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3) +// : Block3DVisitor(0, Grid3DSystem::MAXLEVEL) +//{ +// this->setVx1(vx1); +// this->setVx2(vx2); +// this->setVx3(vx3); +// this->setRho(rho); +//} +////////////////////////////////////////////////////////////////////////// +InitDistributionsBlockVisitorMultiphase::InitDistributionsBlockVisitorMultiphase( LBMReal densityRatio, LBMReal intThickness, LBMReal radius, LBMReal vx1, LBMReal vx2, LBMReal vx3) + : Block3DVisitor(0, Grid3DSystem::MAXLEVEL), densityRatio(densityRatio), intThickness(intThickness), radius(radius) +{ + this->setVx1(vx1); + this->setVx2(vx2); + this->setVx3(vx3); + //this->setRho(rho); + //this->setNu(nu); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx1( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muVx1 = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx2( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muVx2 = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx3( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muVx3 = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setRho( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muRho = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setPhi( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muPhi = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx1( const std::string& muParserString) +{ + this->muVx1.SetExpr(muParserString); + this->checkFunction(muVx1); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx2( const std::string& muParserString) +{ + this->muVx2.SetExpr(muParserString); + this->checkFunction(muVx2); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx3( const std::string& muParserString) +{ + this->muVx3.SetExpr(muParserString); + this->checkFunction(muVx3); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setRho( const std::string& muParserString) +{ + this->muRho.SetExpr(muParserString); + this->checkFunction(muRho); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setPhi( const std::string& muParserString) +{ + this->muPhi.SetExpr(muParserString); + this->checkFunction(muPhi); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx1( LBMReal vx1 ) +{ + this->muVx1.SetExpr( UbSystem::toString(vx1,D3Q27RealLim::digits10) ); + this->checkFunction(muVx1); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx2( LBMReal vx2 ) +{ + this->muVx2.SetExpr( UbSystem::toString(vx2,D3Q27RealLim::digits10) ); + this->checkFunction(muVx2); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx3( LBMReal vx3 ) +{ + this->muVx3.SetExpr( UbSystem::toString(vx3,D3Q27RealLim::digits10) ); + this->checkFunction(muVx3); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setRho( LBMReal rho ) +{ + this->muRho.SetExpr( UbSystem::toString(rho,D3Q27RealLim::digits10) ); + this->checkFunction(muRho); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setPhi( LBMReal phi ) +{ + this->muPhi.SetExpr( UbSystem::toString(phi,D3Q27RealLim::digits10) ); + this->checkFunction(muPhi); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) +{ + using namespace D3Q27System; + + if(!block) UB_THROW( UbException(UB_EXARGS,"block is not exist") ); + + //UbTupleDouble3 blockLengths = grid->getBlockLengths(block); + //UbTupleDouble3 nodeOffset = grid->getNodeOffset(block); + //double dx = grid->getDeltaX(block); + //LBMReal o = LBMSystem::calcCollisionFactor(nu, block->getLevel()); + + + //define vars for functions + mu::value_type x1,x2,x3; + this->muVx1.DefineVar("x1",&x1); this->muVx1.DefineVar("x2",&x2); this->muVx1.DefineVar("x3",&x3); + this->muVx2.DefineVar("x1",&x1); this->muVx2.DefineVar("x2",&x2); this->muVx2.DefineVar("x3",&x3); + this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3); + this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3); + this->muPhi.DefineVar("x1",&x1); this->muPhi.DefineVar("x2",&x2); this->muPhi.DefineVar("x3",&x3); + + //Funktionszeiger + typedef void (*CalcFeqsFct)(LBMReal* const& /*feq[27]*/,const LBMReal& /*(d)rho*/,const LBMReal& /*vx1*/,const LBMReal& /*vx2*/,const LBMReal& /*vx3*/); + CalcFeqsFct calcFeqsFct = NULL; + + LBMReal vx1, vx2, vx3, rho, p1, phi; + + int gridRank = grid->getRank(); + int blockRank = block->getRank(); + + if (blockRank == gridRank && block->isActive()) + { + SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); + if (!kernel) + throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: "+block->toString()); + + if(kernel->getCompressible()) + calcFeqsFct = &D3Q27System::calcCompFeq; + else + calcFeqsFct = &D3Q27System::calcIncompFeq; + + //UbTupleDouble3 org = grid->getBlockWorldCoordinates(block); + + SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray(); + SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); + SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions()); + //PhaseFieldArray3DPtr phaseField = kernel->getDataSet()->getPhaseField(); + LBMReal phiL = kernel->getPhiL(); + LBMReal phiH = kernel->getPhiH(); + + LBMReal f[D3Q27System::ENDF+1]; + //LBMReal h[D3Q27System::ENDF+1]; + + //size_t nx1 = distributionsF->getNX1(); + //size_t nx2 = distributionsF->getNX2(); + //size_t nx3 = distributionsF->getNX3(); + + for(int ix3=0; ix3<bcArray->getNX3(); ix3++) + for(int ix2=0; ix2<bcArray->getNX2(); ix2++) + for(int ix1=0; ix1<bcArray->getNX1(); ix1++) + { + Vector3D coords = grid->getNodeCoordinates(block, ix1, ix2, ix3); + x1 = coords[0]; + x2 = coords[1]; + x3 = coords[2]; + + + p1 = 0.0; + //p1 = muRho.Eval(); + vx1 = muVx1.Eval(); + vx2 = muVx2.Eval(); + vx3 = muVx3.Eval(); + phi = muPhi.Eval(); + + //rho = phi*1.0 + (1.0-phi)/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + //vx1 = 0.0; //0.02*phi; + //vx2 = 0.0; + //vx3 = 0.0; + //(*phaseField)(ix1,ix2,ix3) = phi; + + + /* + vx1 = muVx1.Eval(); + vx2 = muVx2.Eval(); + vx3 = muVx3.Eval(); + rho = muRho.Eval(); + + //x-derivative + double deltaX=dx*0.5; + x1 = val<1>(coords)+deltaX; + double vx1Plusx1 = muVx1.Eval(); + double vx2Plusx1 = muVx2.Eval(); + double vx3Plusx1 = muVx3.Eval(); + + x1 = val<1>(coords)-deltaX; + double vx1Minusx1 = muVx1.Eval(); + double vx2Minusx1 = muVx2.Eval(); + double vx3Minusx1 = muVx3.Eval(); + + //y-derivative + x1 = val<1>(coords); + x2 = val<2>(coords)+deltaX; + double vx1Plusx2 = muVx1.Eval(); + double vx2Plusx2 = muVx2.Eval(); + double vx3Plusx2 = muVx3.Eval(); + + x2 = val<2>(coords)-deltaX; + double vx1Minusx2 = muVx1.Eval(); + double vx2Minusx2 = muVx2.Eval(); + double vx3Minusx2 = muVx3.Eval(); + + //z-derivative + x2 = val<2>(coords); + x3 = val<3>(coords)+deltaX; + double vx1Plusx3 = muVx1.Eval(); + double vx2Plusx3 = muVx2.Eval(); + double vx3Plusx3 = muVx3.Eval(); + + x3 = val<3>(coords)-deltaX; + double vx1Minusx3 = muVx1.Eval(); + double vx2Minusx3 = muVx2.Eval(); + double vx3Minusx3 = muVx3.Eval(); + + double ax=(vx1Plusx1-vx1Minusx1)/(2.0*deltaX)*dx; + double bx=(vx2Plusx1-vx2Minusx1)/(2.0*deltaX)*dx; + double cx=(vx3Plusx1-vx3Minusx1)/(2.0*deltaX)*dx; + + double ay=(vx1Plusx2-vx1Minusx2)/(2.0*deltaX)*dx; + double by=(vx2Plusx2-vx2Minusx2)/(2.0*deltaX)*dx; + double cy=(vx3Plusx2-vx3Minusx2)/(2.0*deltaX)*dx; + + double az=(vx1Plusx3-vx1Minusx3)/(2.0*deltaX)*dx; + double bz=(vx2Plusx3-vx2Minusx3)/(2.0*deltaX)*dx; + double cz=(vx3Plusx3-vx3Minusx3)/(2.0*deltaX)*dx; + double eps_new=1.0; + LBMReal op = 1.; + */ + + LBMReal feq[27]; + LBMReal geq[27]; + + //calcFeqsFct(feq,rho,vx1,vx2,vx3); + LBMReal vx1Sq = vx1*vx1; + LBMReal vx2Sq = vx2*vx2; + LBMReal vx3Sq = vx3*vx3; + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*vx1 + DX2[dir]*vx2 + DX3[dir]*vx3; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq)); + + feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq)); + //geq[dir] = p1*WEIGTH1[dir] + gamma; + geq[dir] = p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma; + } + + + + /*double f_E = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op)); + double f_N = f_E + eps_new *((2.*(ax - by))/(9.*o)); + double f_T = f_E + eps_new *((2.*(ax - cz))/(9.*o)); + double f_NE = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op)); + double f_SE = f_NE + eps_new *(( ay + bx )/(9.*o)); + double f_TE = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op)); + double f_BE = f_TE + eps_new *(( az + cx )/(9.*o)); + double f_TN = eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op)); + double f_BN = f_TN + eps_new *(( bz + cy )/(9.*o)); + double f_ZERO = eps_new *((5.*(ax + by + cz))/(9.*op)); + double f_TNE = eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o)); + double f_TSW = - eps_new *((ay + bx)/(36.*o)) - f_TNE; + double f_TSE = - eps_new *((az + cx)/(36.*o)) - f_TNE; + double f_TNW = - eps_new *((bz + cy)/(36.*o)) - f_TNE; + + + f[E] = f_E + feq[E]; + f[W] = f_E + feq[W]; + f[N] = f_N + feq[N]; + f[S] = f_N + feq[S]; + f[T] = f_T + feq[T]; + f[B] = f_T + feq[B]; + f[NE] = f_NE + feq[NE]; + f[SW] = f_NE + feq[SW]; + f[SE] = f_SE + feq[SE]; + f[NW] = f_SE + feq[NW]; + f[TE] = f_TE + feq[TE]; + f[BW] = f_TE + feq[BW]; + f[BE] = f_BE + feq[BE]; + f[TW] = f_BE + feq[TW]; + f[TN] = f_TN + feq[TN]; + f[BS] = f_TN + feq[BS]; + f[BN] = f_BN + feq[BN]; + f[TS] = f_BN + feq[TS]; + f[TNE] = f_TNE + feq[TNE]; + f[TNW] = f_TNW + feq[TNW]; + f[TSE] = f_TSE + feq[TSE]; + f[TSW] = f_TSW + feq[TSW]; + f[BNE] = f_TSW + feq[BNE]; + f[BNW] = f_TSE + feq[BNW]; + f[BSE] = f_TNW + feq[BSE]; + f[BSW] = f_TNE + feq[BSW]; + f[REST] = f_ZERO + feq[REST];*/ + + /*f[E] = feq[E] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[W] = feq[W] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[N] = feq[N] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[S] = feq[S] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[T] = feq[T] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[B] = feq[B] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[NE] = feq[NE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[SW] = feq[SW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[SE] = feq[SE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[NW] = feq[NW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TE] = feq[TE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BW] = feq[BW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BE] = feq[BE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TW] = feq[TW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TN] = feq[TN] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BS] = feq[BS] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BN] = feq[BN] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TS] = feq[TS] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TNE] = feq[TNE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[TNW] = feq[TNW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[TSE] = feq[TSE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[TSW] = feq[TSW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BNE] = feq[BNE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BNW] = feq[BNW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BSE] = feq[BSE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BSW] = feq[BSW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[REST] = feq[REST] / 3.0 + (p1-rho/3.0)*UbMath::c8o27;*/ + + + f[E] = geq[E] ; + f[W] = geq[W] ; + f[N] = geq[N] ; + f[S] = geq[S] ; + f[T] = geq[T] ; + f[B] = geq[B] ; + f[NE] = geq[NE] ; + f[SW] = geq[SW] ; + f[SE] = geq[SE] ; + f[NW] = geq[NW] ; + f[TE] = geq[TE] ; + f[BW] = geq[BW] ; + f[BE] = geq[BE] ; + f[TW] = geq[TW] ; + f[TN] = geq[TN] ; + f[BS] = geq[BS] ; + f[BN] = geq[BN] ; + f[TS] = geq[TS] ; + f[TNE] = geq[TNE] ; + f[TNW] = geq[TNW] ; + f[TSE] = geq[TSE] ; + f[TSW] = geq[TSW] ; + f[BNE] = geq[BNE] ; + f[BNW] = geq[BNW] ; + f[BSE] = geq[BSE] ; + f[BSW] = geq[BSW] ; + f[REST] = geq[REST] ; + + + //calcFeqsFct(f,rho,vx1,vx2,vx3); + distributionsF->setDistribution(f, ix1, ix2, ix3); + distributionsF->setDistributionInv(f, ix1, ix2, ix3); + + f[E] = phi * feq[E] / rho; + f[W] = phi * feq[W] / rho; + f[N] = phi * feq[N] / rho; + f[S] = phi * feq[S] / rho; + f[T] = phi * feq[T] / rho; + f[B] = phi * feq[B] / rho; + f[NE] = phi * feq[NE] / rho; + f[SW] = phi * feq[SW] / rho; + f[SE] = phi * feq[SE] / rho; + f[NW] = phi * feq[NW] / rho; + f[TE] = phi * feq[TE] / rho; + f[BW] = phi * feq[BW] / rho; + f[BE] = phi * feq[BE] / rho; + f[TW] = phi * feq[TW] / rho; + f[TN] = phi * feq[TN] / rho; + f[BS] = phi * feq[BS] / rho; + f[BN] = phi * feq[BN] / rho; + f[TS] = phi * feq[TS] / rho; + f[TNE] = phi * feq[TNE] / rho; + f[TNW] = phi * feq[TNW] / rho; + f[TSE] = phi * feq[TSE] / rho; + f[TSW] = phi * feq[TSW] / rho; + f[BNE] = phi * feq[BNE] / rho; + f[BNW] = phi * feq[BNW] / rho; + f[BSE] = phi * feq[BSE] / rho; + f[BSW] = phi * feq[BSW] / rho; + f[REST] = phi * feq[REST] / rho; + + distributionsH->setDistribution(f, ix1, ix2, ix3); + distributionsH->setDistributionInv(f, ix1, ix2, ix3); + + //distributions->swap(); + //distributions->setDistribution(f, ix1, ix2, ix3); + //distributions->setDistributionInv(f, ix1, ix2, ix3); + //distributions->swap(); + + } + } + + //variablen der functions loeschen, da die verwiesenen Objecte nach dem verlassen des scopes ungueltig sind! + this->muVx1.ClearVar(); + this->muVx2.ClearVar(); + this->muVx3.ClearVar(); + this->muRho.ClearVar(); + +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::checkFunction(mu::Parser fct) +{ + double x1=1.0,x2=1.0,x3=1.0; + fct.DefineVar("x1",&x1); + fct.DefineVar("x2",&x2); + fct.DefineVar("x3",&x3); + + try + { + fct.Eval(); + fct.ClearVar(); + } + catch(mu::ParserError& e) + { + throw UbException(UB_EXARGS,"function: "+e.GetExpr() + (std::string)"error: "+e.GetMsg() + +(std::string)", only x1,x2,x3 are allowed as variables" ); + } +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setNu( LBMReal nu ) +{ + this->nu = nu; +} + diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h new file mode 100644 index 000000000..05adc07ce --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h @@ -0,0 +1,102 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file InitDistributionsBlockVisitorMultiphase.h +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef InitDistributionsBlockVisitorMultiphase_H +#define InitDistributionsBlockVisitorMultiphase_H + +#include "Block3DVisitor.h" +#include "D3Q27System.h" +#include "Block3D.h" + +#include <muParser.h> + + + +class InitDistributionsBlockVisitorMultiphase : public Block3DVisitor +{ +public: + typedef std::numeric_limits<LBMReal> D3Q27RealLim; + +public: + InitDistributionsBlockVisitorMultiphase(); + //D3Q27ETInitDistributionsBlockVisitor(LBMReal rho, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0); + //! Constructor + //! \param nu - viscosity + //! \param rho - density + //! \param vx1 - velocity in x + //! \param vx2 - velocity in y + //! \param vx3 - velocity in z + InitDistributionsBlockVisitorMultiphase( LBMReal densityRatio, LBMReal intThickness, LBMReal radius, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0); + ////////////////////////////////////////////////////////////////////////// + //automatic vars are: x1,x2, x3 + //ussage example: setVx1("x1*0.01+x2*0.003") + ////////////////////////////////////////////////////////////////////////// + void setVx1( const mu::Parser& parser); + void setVx2( const mu::Parser& parser); + void setVx3( const mu::Parser& parser); + void setRho( const mu::Parser& parser); + void setPhi( const mu::Parser& parser); + + void setVx1( const std::string& muParserString); + void setVx2( const std::string& muParserString); + void setVx3( const std::string& muParserString); + void setRho( const std::string& muParserString); + void setPhi( const std::string& muParserString); + + ////////////////////////////////////////////////////////////////////////// + void setVx1( LBMReal vx1 ); + void setVx2( LBMReal vx2 ); + void setVx3( LBMReal vx3 ); + void setRho( LBMReal rho ); + void setPhi( LBMReal rho ); + void setNu( LBMReal nu ); + + void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); + +protected: + void checkFunction(mu::Parser fct); + +private: + mu::Parser muVx1; + mu::Parser muVx2; + mu::Parser muVx3; + mu::Parser muRho; + mu::Parser muPhi; + + LBMReal nu; + LBMReal densityRatio; + LBMReal intThickness; + LBMReal radius; +}; + +#endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp index 73431d928..b10151a9d 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp @@ -228,7 +228,7 @@ void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr< // f[BNW] = f_TSE + feq[BNW]; // f[BSE] = f_TNW + feq[BSE]; // f[BSW] = f_TNE + feq[BSW]; - // f[ZERO] = f_ZERO + feq[ZERO]; + // f[REST] = f_ZERO + feq[REST]; calcFeqsFct(f, rho, vx1, vx2, vx3); diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp index 72a81d60f..f9be89177 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp @@ -452,7 +452,7 @@ void InitThixotropyBlockVisitor::checkFunction(mu::Parser fct) // f[BNW] = f_TSE + feq[BNW]; // f[BSE] = f_TNW + feq[BSE]; // f[BSW] = f_TNE + feq[BSW]; -// f[ZERO] = f_ZERO + feq[ZERO]; +// f[REST] = f_ZERO + feq[REST]; // // // diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp new file mode 100644 index 000000000..d3cbcb145 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp @@ -0,0 +1,96 @@ +#include "SetKernelBlockVisitorMultiphase.h" +#include "Grid3DSystem.h" +#include "LBMSystem.h" +#include "Block3D.h" +#include "Grid3D.h" + +//SetKernelBlockVisitor::SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue) : +// Block3DVisitor(0, Grid3DSystem::MAXLEVEL), kernel(kernel), nue(nue) +//{ +// +//} +////////////////////////////////////////////////////////////////////////// +//SetKernelBlockVisitor::SetKernelBlockVisitor( LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem ) : +// Block3DVisitor(0, Grid3DSystem::MAXLEVEL), kernel(kernel), nue(nue) +//{ +// if (needMem > availMem) +// { +// throw UbException(UB_EXARGS,"SetKernelBlockVisitor: Not enough memory!!!"); +// } +//} +////////////////////////////////////////////////////////////////////////// +SetKernelBlockVisitorMultiphase::SetKernelBlockVisitorMultiphase(SPtr<LBMKernel> kernel, LBMReal nuL, LBMReal nuG, LBMReal densityRatio, LBMReal beta, LBMReal kappa, + LBMReal contactAngle, double availMem, double needMem, SetKernelBlockVisitorMultiphase::Action action /*= SetKernelBlockVisitor::New*/) : + Block3DVisitor(0, Grid3DSystem::MAXLEVEL), kernel(kernel), nuL(nuL), nuG(nuG), densityRatio(densityRatio), beta(beta), kappa(kappa), contactAngle(contactAngle), action(action), dataSetFlag(true) +{ + if (needMem > availMem) + { + throw UbException(UB_EXARGS, "SetKernelBlockVisitor: Not enough memory!!!"); + } +} +////////////////////////////////////////////////////////////////////////// +void SetKernelBlockVisitorMultiphase::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) +{ + if(kernel && (block->getRank() == grid->getRank())) + { + LBMReal collFactorL = LBMSystem::calcCollisionFactor(nuL, block->getLevel()); + LBMReal collFactorG = LBMSystem::calcCollisionFactor(nuG, block->getLevel()); + + kernel->setCollisionFactorMultiphase(collFactorL, collFactorG); + kernel->setDensityRatio(densityRatio); + kernel->setMultiphaseModelParameters(beta, kappa); + kernel->setContactAngle(contactAngle); + + kernel->setIndex(block->getX1(), block->getX2(), block->getX3()); + kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel())); + kernel->setBlock(block); + UbTupleInt3 blockNX = grid->getBlockNX(); + kernel->setNX(std::array<int, 3>{ { val<1>(blockNX), val<2>(blockNX), val<3>(blockNX) } }); + SPtr<LBMKernel> newKernel = kernel->clone(); + + switch (action) + { + case SetKernelBlockVisitorMultiphase::NewKernel: + block->setKernel(newKernel); + break; + case SetKernelBlockVisitorMultiphase::ChangeKernel: + { + SPtr<DataSet3D> dataSet = block->getKernel()->getDataSet(); + if (!dataSet) + { + UB_THROW(UbException(UB_EXARGS, "It is not possible to change a DataSet in kernel! Old DataSet is not exist!")); + } + + newKernel->setDataSet(dataSet); + + SPtr<BCProcessor> bcProc = block->getKernel()->getBCProcessor(); + if (!bcProc) + { + UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCProcessor in kernel! Old BCProcessor is not exist!")); + } + newKernel->setBCProcessor(bcProc); + block->setKernel(newKernel); + } + break; + + case SetKernelBlockVisitorMultiphase::ChangeKernelWithData: + { + SPtr<BCProcessor> bcProc = block->getKernel()->getBCProcessor(); + if (!bcProc) + { + UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCProcessor in kernel! Old BCProcessor is not exist!")); + } + newKernel->setBCProcessor(bcProc); + block->setKernel(newKernel); + } + break; + } + + } +} + +void SetKernelBlockVisitorMultiphase::setNoDataSetFlag(bool flag) +{ + dataSetFlag = flag; +} + diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h new file mode 100644 index 000000000..0874f665e --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h @@ -0,0 +1,70 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \file SetKernelBlockVisitorMultiphase.cpp +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= +#ifndef SetKernelBlockVisitorMultiphase_h +#define SetKernelBlockVisitorMultiphase_h + +#include "Block3DVisitor.h" +#include "LBMKernel.h" + + +class SetKernelBlockVisitorMultiphase : public Block3DVisitor +{ +public: + enum Action { NewKernel, ChangeKernel, ChangeKernelWithData}; +public: + //SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue); + + //SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem); + + SetKernelBlockVisitorMultiphase(SPtr<LBMKernel> kernel, LBMReal nuL, LBMReal nuG, LBMReal densityRatio, LBMReal beta, LBMReal kappa, LBMReal contactAngle, double availMem, double needMem, + SetKernelBlockVisitorMultiphase::Action action = SetKernelBlockVisitorMultiphase::NewKernel); + + virtual ~SetKernelBlockVisitorMultiphase() {} + + virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); + + void setNoDataSetFlag(bool flag); + +private: + SPtr<LBMKernel> kernel; + LBMReal nuL; + LBMReal nuG; + LBMReal densityRatio; + LBMReal beta; + LBMReal kappa; + LBMReal contactAngle; + Action action; + bool dataSetFlag; +}; + +#endif \ No newline at end of file -- GitLab