diff --git a/.gitignore b/.gitignore index a897b8121d8ad41b4c57c3f52467b96d427965ab..92f3a658f91e8d9ee8aced6f59b8344dc96e8ca2 100644 --- a/.gitignore +++ b/.gitignore @@ -75,9 +75,10 @@ doc/Doxygen/DTAGS # Ignore .tags in the main directory /.tags -# Ignore eclipse project files in the main directory +# Ignore project files in the main directory /.cproject /.project +/.dir-locals.el # Ignore the test directory /tutorialsTest diff --git a/applications/Allwmake b/applications/Allwmake index 14ba388bf1779a1be6a3decedd9dce8ce17df86b..d851254b23a2f237fc5d08e17369e5b2bd25365c 100755 --- a/applications/Allwmake +++ b/applications/Allwmake @@ -17,10 +17,7 @@ wmakeCheckPwd "$WM_PROJECT_DIR/applications" || { exit 1 } -set -x - wmake -all $targetType solvers wmake -all $targetType utilities - #------------------------------------------------------------------------------ diff --git a/applications/solvers/combustion/chemFoam/createFields.H b/applications/solvers/combustion/chemFoam/createFields.H index 62be3ce0ddf13e00b6104391368d124c519663de..8b35089fc88784cefdb6a8a650799c3024f2ac25 100644 --- a/applications/solvers/combustion/chemFoam/createFields.H +++ b/applications/solvers/combustion/chemFoam/createFields.H @@ -12,7 +12,7 @@ ( "initialConditions", runTime.constant(), - runTime, + mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) @@ -37,7 +37,7 @@ ( "rho", runTime.timeName(), - runTime, + mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), @@ -50,7 +50,7 @@ ( "Rspecific", runTime.timeName(), - runTime, + mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), @@ -69,7 +69,7 @@ ( "U", runTime.timeName(), - runTime, + mesh, IOobject::NO_READ, IOobject::NO_WRITE ), diff --git a/applications/solvers/compressible/rhoCentralFoam/Allwclean b/applications/solvers/compressible/rhoCentralFoam/Allwclean index 34bab5c4498a8525b4ae9551bdffa8b793cb34fc..787221b83c1eb5d42523103885dd9821afa25aee 100755 --- a/applications/solvers/compressible/rhoCentralFoam/Allwclean +++ b/applications/solvers/compressible/rhoCentralFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso BCs wclean diff --git a/applications/solvers/compressible/rhoCentralFoam/Allwmake b/applications/solvers/compressible/rhoCentralFoam/Allwmake index 8595a53d01fe6a28350a2f4c2cdf466488c0b516..5dee7d1a882f825e838a139e7fd3f970bbf67cac 100755 --- a/applications/solvers/compressible/rhoCentralFoam/Allwmake +++ b/applications/solvers/compressible/rhoCentralFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x (wmake $targetType BCs && wmake $targetType && wmake $targetType rhoCentralDyMFoam) diff --git a/applications/solvers/lagrangian/DPMFoam/Allwclean b/applications/solvers/lagrangian/DPMFoam/Allwclean index 6d736b2373f46bf526fca58e8f5bac0aaabd9c05..158a56c8f3421faa57b45786ed47fd4678709e16 100755 --- a/applications/solvers/lagrangian/DPMFoam/Allwclean +++ b/applications/solvers/lagrangian/DPMFoam/Allwclean @@ -1,7 +1,6 @@ #!/bin/sh cd ${0%/*} || exit 1 -set -x wclean libso DPMTurbulenceModels wclean diff --git a/applications/solvers/lagrangian/DPMFoam/Allwmake b/applications/solvers/lagrangian/DPMFoam/Allwmake index 9f702db886d2722edcd774b14ba19ecf2cb02092..1f021bfc2fdfa6d7ccf3eff7f87dd5d08b7901d8 100755 --- a/applications/solvers/lagrangian/DPMFoam/Allwmake +++ b/applications/solvers/lagrangian/DPMFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType DPMTurbulenceModels diff --git a/applications/solvers/multiphase/MPPICInterFoam/Allwclean b/applications/solvers/multiphase/MPPICInterFoam/Allwclean index d6607c3db0574ebf6e1ff572e14f54d2ecf59356..12d384e35695e6b298099563f1456891cb553bcc 100755 --- a/applications/solvers/multiphase/MPPICInterFoam/Allwclean +++ b/applications/solvers/multiphase/MPPICInterFoam/Allwclean @@ -1,8 +1,7 @@ #!/bin/sh cd ${0%/*} || exit 1 # run from this directory -set -x wclean libso CompressibleTwoPhaseMixtureTurbulenceModels wclean -# ----------------------------------------------------------------- end-of-file +#------------------------------------------------------------------------------ diff --git a/applications/solvers/multiphase/MPPICInterFoam/Allwmake b/applications/solvers/multiphase/MPPICInterFoam/Allwmake index 110d4b093a7a37ac08945856aca3fb4dcbf52070..36e2f896469fff9123eb2f6b5299c4a782a857ec 100755 --- a/applications/solvers/multiphase/MPPICInterFoam/Allwmake +++ b/applications/solvers/multiphase/MPPICInterFoam/Allwmake @@ -1,8 +1,7 @@ #!/bin/sh cd ${0%/*} || exit 1 # run from this directory -set -x wmake libso CompressibleTwoPhaseMixtureTurbulenceModels wmake -# ----------------------------------------------------------------- end-of-file +#------------------------------------------------------------------------------ diff --git a/applications/solvers/multiphase/compressibleInterFoam/Allwclean b/applications/solvers/multiphase/compressibleInterFoam/Allwclean index 0e26512420818bed32fa20e58fcc7ed85a3775a4..deb5e2378ba964821faf55e012c1ea79efafeb16 100755 --- a/applications/solvers/multiphase/compressibleInterFoam/Allwclean +++ b/applications/solvers/multiphase/compressibleInterFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso twoPhaseMixtureThermo wclean diff --git a/applications/solvers/multiphase/compressibleInterFoam/Allwmake b/applications/solvers/multiphase/compressibleInterFoam/Allwmake index 6542a62356dd345befc417be752d915bb17e32c7..20da00c472977322985e8067f4a32b45ea37d735 100755 --- a/applications/solvers/multiphase/compressibleInterFoam/Allwmake +++ b/applications/solvers/multiphase/compressibleInterFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType twoPhaseMixtureThermo diff --git a/applications/solvers/multiphase/compressibleInterFoam/TEqn.H b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H index 13e1feb546e1e9d9efdf2965b99b5f8ff5d8b193..460c3c3e91b84a79075f8c3d59bdb2e51ad7fd1c 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/TEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/TEqn.H @@ -5,7 +5,7 @@ + fvm::div(rhoPhi, T) - fvm::laplacian(mixture.alphaEff(turbulence->mut()), T) + ( - fvc::div(fvc::absolute(phi, U), p) + divU*p + fvc::ddt(rho, K) + fvc::div(rhoPhi, K) ) *( diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C index dc562c68e26a6182ffe18158a3cbd4bb9fa4d744..90d44b7a386fc47ceec42e949c99ce3ed8cae251 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C @@ -82,12 +82,12 @@ int main(int argc, char *argv[]) { #include "readControls.H" - { - // Store divU from the previous mesh so that it can be mapped - // and used in correctPhi to ensure the corrected phi has the - // same divergence - volScalarField divU("divU0", fvc::div(fvc::absolute(phi, U))); + // Store divU from the previous mesh so that it can be mapped + // and used in correctPhi to ensure the corrected phi has the + // same divergence + volScalarField divU("divU0", fvc::div(fvc::absolute(phi, U))); + { #include "CourantNo.H" #include "setDeltaT.H" @@ -110,8 +110,12 @@ int main(int argc, char *argv[]) ghf = (g & mesh.Cf()) - ghRef; } - if (mesh.changing() && correctPhi) + if ((correctPhi && mesh.changing()) || mesh.topoChanging()) { + // Calculate absolute flux from the mapped surface velocity + // SAF: temporary fix until mapped Uf is assessed + Uf = fvc::interpolate(U); + // Calculate absolute flux from the mapped surface velocity phi = mesh.Sf() & Uf; @@ -119,6 +123,8 @@ int main(int argc, char *argv[]) // Make the fluxes relative to the mesh motion fvc::makeRelative(phi, U); + + mesh.topoChanging(false); } } diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H index fef73aa36593d93ce1270cf1a1ce5a9b9cb95297..5423aee3c197ea607ec71403ec622735b016bd73 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/pEqn.H @@ -87,15 +87,6 @@ if (pimple.finalNonOrthogonalIter()) { - p = max(p_rgh + (alpha1*rho1 + alpha2*rho2)*gh, pMin); - p_rgh = p - (alpha1*rho1 + alpha2*rho2)*gh; - - dgdt = - ( - pos(alpha2)*(p_rghEqnComp2 & p_rgh)/rho2 - - pos(alpha1)*(p_rghEqnComp1 & p_rgh)/rho1 - ); - phi = phiHbyA + p_rghEqnIncomp.flux(); U = HbyA @@ -116,10 +107,16 @@ rho = alpha1*rho1 + alpha2*rho2; - // Correct p_rgh for consistency with p and the updated densities + p = max(p_rgh + rho*gh, pMin); p_rgh = p - rho*gh; p_rgh.correctBoundaryConditions(); + dgdt = + ( + pos(alpha2)*(p_rghEqnComp2 & p_rgh)/rho2 + - pos(alpha1)*(p_rghEqnComp1 & p_rgh)/rho1 + ); + K = 0.5*magSqr(U); Info<< "max(U) " << max(mag(U)).value() << endl; diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C index 6502258255358bcab1d6ea794d0898bcf5278ee6..5042da7731be89bb9f579ebf07566bd996cf1d4f 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C @@ -98,6 +98,7 @@ int main(int argc, char *argv[]) solve(fvm::ddt(rho) + fvc::div(rhoPhi)); #include "UEqn.H" + volScalarField divU(fvc::div(fvc::absolute(phi, U))); #include "TEqn.H" // --- Pressure corrector loop diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwclean b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwclean index 628a70b516616c245038aaf08537be8e178d901e..657fd9d2423e2fa47ae14e542a121de38fcab4fe 100755 --- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwclean +++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso multiphaseMixtureThermo wclean diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwmake b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwmake index 2a3c534c307ff0be1c1668187d7b4dd7e2d3e754..b92d87aef4ecf78c9f44705ed51d4727674320f4 100755 --- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwmake +++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType multiphaseMixtureThermo wmake $targetType diff --git a/applications/solvers/multiphase/driftFluxFoam/Allwclean b/applications/solvers/multiphase/driftFluxFoam/Allwclean index dcdca8527ffc62ff535b632f4c8077d01bf527bd..e3d46596bef94c55a3a77b7a57fe462f798d02a5 100755 --- a/applications/solvers/multiphase/driftFluxFoam/Allwclean +++ b/applications/solvers/multiphase/driftFluxFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso mixtureViscosityModels wclean libso relativeVelocityModels diff --git a/applications/solvers/multiphase/driftFluxFoam/Allwmake b/applications/solvers/multiphase/driftFluxFoam/Allwmake index e4af29196aa1b93aed70b4cf932522a34344b6bd..069235819e980122ae73c100e7d63a46045dfd6d 100755 --- a/applications/solvers/multiphase/driftFluxFoam/Allwmake +++ b/applications/solvers/multiphase/driftFluxFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType mixtureViscosityModels wmake $targetType relativeVelocityModels diff --git a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C index c8e3bb3721ff7a2142bbef76108e9169a860f5ca..b6e7fbae004aae0ab796408d9ec34b4e739eab8e 100644 --- a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C +++ b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.C @@ -24,6 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "relativeVelocityModel.H" +#include "fixedValueFvPatchFields.H" +#include "slipFvPatchFields.H" +#include "partialSlipFvPatchFields.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -33,6 +36,34 @@ namespace Foam defineRunTimeSelectionTable(relativeVelocityModel, dictionary); } +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +Foam::wordList Foam::relativeVelocityModel::UdmPatchFieldTypes() const +{ + const volVectorField& U = mixture_.U(); + + wordList UdmTypes + ( + U.boundaryField().size(), + calculatedFvPatchScalarField::typeName + ); + + forAll(U.boundaryField(), i) + { + if + ( + isA<fixedValueFvPatchVectorField>(U.boundaryField()[i]) + || isA<slipFvPatchVectorField>(U.boundaryField()[i]) + || isA<partialSlipFvPatchVectorField>(U.boundaryField()[i]) + ) + { + UdmTypes[i] = fixedValueFvPatchVectorField::typeName; + } + } + + return UdmTypes; +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -55,11 +86,12 @@ Foam::relativeVelocityModel::relativeVelocityModel "Udm", alphac_.time().timeName(), alphac_.mesh(), - IOobject::NO_READ, + IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), alphac_.mesh(), - dimensionedVector("Udm", dimVelocity, Zero) + dimensionedVector("Udm", dimVelocity, Zero), + UdmPatchFieldTypes() ) {} diff --git a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H index 475c87704ef519a03d4b6ad0cc79a3ab02b87fc6..420a7c3e8ae5e85e095fd6e8f2d031bfe2d0dd4f 100644 --- a/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H +++ b/applications/solvers/multiphase/driftFluxFoam/relativeVelocityModels/relativeVelocityModel/relativeVelocityModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,12 +52,16 @@ class relativeVelocityModel { // Private Member Functions + //- Return the list of patchFieldTypes for Udm derived from U + wordList UdmPatchFieldTypes() const; + //- Disallow default bitwise copy construct relativeVelocityModel(const relativeVelocityModel&); //- Disallow default bitwise assignment void operator=(const relativeVelocityModel&); + protected: // Protected data diff --git a/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwclean b/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwclean index 8717ef89533bc2aeb09e59273c62a296f7d210b2..eaec8f77a11e453b0eb9dfab150491bc472da049 100755 --- a/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwclean +++ b/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso temperaturePhaseChangeTwoPhaseMixtures wclean diff --git a/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwmake b/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwmake index 523c10c33cdc1cc42bce179473211f0da4907648..59af9259fef2b7216a6fe8086c4337b0faf9138e 100755 --- a/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwmake +++ b/applications/solvers/multiphase/interCondensingEvaporatingFoam/Allwmake @@ -4,7 +4,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation targetType=libso . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType temperaturePhaseChangeTwoPhaseMixtures wmake diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/Allwclean b/applications/solvers/multiphase/interPhaseChangeFoam/Allwclean index bc351e27d8076a8f66a16f82230c06fed45fbf78..573e235fdc450d62c560e79c92c632788bc87419 100755 --- a/applications/solvers/multiphase/interPhaseChangeFoam/Allwclean +++ b/applications/solvers/multiphase/interPhaseChangeFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso phaseChangeTwoPhaseMixtures wclean diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/Allwmake b/applications/solvers/multiphase/interPhaseChangeFoam/Allwmake index c0ac039a551e308e0d72e46c43de161dd8868503..dfcde284ea58f76076c3a8d09c21cdf39e6577df 100755 --- a/applications/solvers/multiphase/interPhaseChangeFoam/Allwmake +++ b/applications/solvers/multiphase/interPhaseChangeFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType phaseChangeTwoPhaseMixtures wmake $targetType diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/Allwclean b/applications/solvers/multiphase/multiphaseEulerFoam/Allwclean index 6d174c19d92041d44b720d8bd05fb080cdccaf8d..727191ec35af72ff5f2b9937f87fb51774d61409 100755 --- a/applications/solvers/multiphase/multiphaseEulerFoam/Allwclean +++ b/applications/solvers/multiphase/multiphaseEulerFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso multiphaseSystem wclean libso interfacialModels diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake b/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake index d81a6d71a873bb75f7b2f5c5c87006356d694527..d38522312d4d9a5c2889ef557cf6edf54347f8a4 100755 --- a/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake +++ b/applications/solvers/multiphase/multiphaseEulerFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmakeLnInclude interfacialModels wmake $targetType multiphaseSystem diff --git a/applications/solvers/multiphase/multiphaseInterFoam/Allwclean b/applications/solvers/multiphase/multiphaseInterFoam/Allwclean index 75d8939d310ec324e1d12d3f439918e4afff891c..9b5595f2a07c9c64dec5a83d44c3664d3384f114 100755 --- a/applications/solvers/multiphase/multiphaseInterFoam/Allwclean +++ b/applications/solvers/multiphase/multiphaseInterFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso multiphaseMixture wclean diff --git a/applications/solvers/multiphase/multiphaseInterFoam/Allwmake b/applications/solvers/multiphase/multiphaseInterFoam/Allwmake index 000e9f77432793bb6ad26e6596569a4fd07f3536..50f78a705cd4124a619c8d7af8143bc852ea1e5e 100755 --- a/applications/solvers/multiphase/multiphaseInterFoam/Allwmake +++ b/applications/solvers/multiphase/multiphaseInterFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType multiphaseMixture wmake $targetType diff --git a/applications/solvers/multiphase/reactingEulerFoam/Allwclean b/applications/solvers/multiphase/reactingEulerFoam/Allwclean index 5474c3349ab8cc606d3930dbc620b852c6ece9f5..ad8f3f8fafb54efe8b51f2bac0a2423e8ff751b8 100755 --- a/applications/solvers/multiphase/reactingEulerFoam/Allwclean +++ b/applications/solvers/multiphase/reactingEulerFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso phaseSystems wclean libso interfacialModels diff --git a/applications/solvers/multiphase/reactingEulerFoam/Allwmake b/applications/solvers/multiphase/reactingEulerFoam/Allwmake index f67d35aa292e86e819b9ae7266909b67ae053083..87e6a81e3f0bfc6b1c0aa2ad7ccb3572126ab3d2 100755 --- a/applications/solvers/multiphase/reactingEulerFoam/Allwmake +++ b/applications/solvers/multiphase/reactingEulerFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmakeLnInclude interfacialModels wmakeLnInclude interfacialCompositionModels diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.C index 6ca75c6ed49838560e37e30cdb4daa8ff72e3688..b5dd4ab37a0e8185fe1b76179a79d15df3d4b247 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.C +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.C @@ -77,11 +77,39 @@ void Foam::AnisothermalPhaseModel<BasePhaseModel>::correctThermo() } +template<class BasePhaseModel> +Foam::tmp<Foam::volScalarField> +Foam::AnisothermalPhaseModel<BasePhaseModel>::filterPressureWork +( + const tmp<volScalarField>& pressureWork +) const +{ + const volScalarField& alpha = *this; + + scalar pressureWorkAlphaLimit = + this->thermo_->lookupOrDefault("pressureWorkAlphaLimit", 0.0); + + if (pressureWorkAlphaLimit > 0) + { + return + ( + max(alpha - pressureWorkAlphaLimit, scalar(0)) + /max(alpha - pressureWorkAlphaLimit, pressureWorkAlphaLimit) + )*pressureWork; + } + else + { + return pressureWork; + } +} + + template<class BasePhaseModel> Foam::tmp<Foam::fvScalarMatrix> Foam::AnisothermalPhaseModel<BasePhaseModel>::heEqn() { const volScalarField& alpha = *this; + const volVectorField& U = this->U(); const surfaceScalarField& alphaPhi = this->alphaPhi(); const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi(); @@ -93,7 +121,8 @@ Foam::AnisothermalPhaseModel<BasePhaseModel>::heEqn() tmp<fvScalarMatrix> tEEqn ( - fvm::ddt(alpha, this->rho(), he) + fvm::div(alphaRhoPhi, he) + fvm::ddt(alpha, this->rho(), he) + + fvm::div(alphaRhoPhi, he) - fvm::Sp(contErr, he) + fvc::ddt(alpha, this->rho(), K_) + fvc::div(alphaRhoPhi, K_) @@ -112,13 +141,15 @@ Foam::AnisothermalPhaseModel<BasePhaseModel>::heEqn() // Add the appropriate pressure-work term if (he.name() == this->thermo_->phasePropertyName("e")) { - tEEqn.ref() += - fvc::ddt(alpha)*this->thermo().p() - + fvc::div(alphaPhi, this->thermo().p()); + tEEqn.ref() += filterPressureWork + ( + fvc::div(fvc::absolute(alphaPhi, alpha, U), this->thermo().p()) + + this->thermo().p()*fvc::ddt(alpha) + ); } else if (this->thermo_->dpdt()) { - tEEqn.ref() -= alpha*this->fluid().dpdt(); + tEEqn.ref() -= filterPressureWork(alpha*this->fluid().dpdt()); } return tEEqn; diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.H index 7a9cbd51bfb1a0b3f1a887a6eb6c1215afe284e4..86edbcd1f8bbeefe95672688d60a5ead43c2885b 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.H +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/AnisothermalPhaseModel/AnisothermalPhaseModel.H @@ -58,6 +58,15 @@ class AnisothermalPhaseModel volScalarField K_; + // Private member functions + + //- Optionally filter the pressure work term as the phase-fraction -> 0 + tmp<volScalarField> filterPressureWork + ( + const tmp<volScalarField>& pressureWork + ) const; + + public: // Constructors diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ReactingPhaseModel/ReactingPhaseModel.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ReactingPhaseModel/ReactingPhaseModel.C index 96a76de1698c4eeaf61e944ee599c89978fe7a22..b15f2898b549331d5ff2e2858ff121cb9c4b4f81 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ReactingPhaseModel/ReactingPhaseModel.C +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseModel/ReactingPhaseModel/ReactingPhaseModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,12 @@ Foam::ReactingPhaseModel<BasePhaseModel, ReactionType>::ReactingPhaseModel BasePhaseModel(fluid, phaseName, index, false), reaction_ ( - ReactionType::New(fluid.mesh(), this->name()) + ReactionType::New + ( + fluid.mesh(), + combustionModel::combustionPropertiesName, + this->name() + ) ) { this->thermo_ = &reaction_->thermo(); diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwclean b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwclean index 983c20bdc16eb3af101b8d91242d7f8c6b90f31c..451b6672a98fb0bb3bb2053be0e67fcd92609d0b 100755 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwclean +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso multiphaseSystem wclean libso multiphaseCompressibleTurbulenceModels diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwmake b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwmake index ea7fab7a82614eab2900c064f59311040595211b..05211a00395fb18974f08f5bf40fa3f4bff93ac2 100755 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwmake +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType multiphaseSystem wmake $targetType multiphaseCompressibleTurbulenceModels diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/EEqns.H b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/EEqns.H index 0130a872c905f8c2eef12af71d4b8e83aeb8081d..e4689efee6187e7c96e540a4c9ddacd5064a7eca 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/EEqns.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/EEqns.H @@ -35,6 +35,7 @@ for (int Ecorr=0; Ecorr<nEnergyCorrectors; Ecorr++) } fluid.correctThermo(); + fluid.correct(); } diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/pU/pEqn.H b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/pU/pEqn.H index 7e43e677492b10b5c07b9deb98fbe4732edef485..5e916dce2fdcb9f945c7f86dfe5e2a323c3b66c9 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/pU/pEqn.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/pU/pEqn.H @@ -89,9 +89,6 @@ PtrList<surfaceScalarField> phiFs(phases.size()); // --- Pressure corrector loop while (pimple.correct()) { - // Update continuity errors due to temperature changes - fluid.correct(); - volScalarField rho("rho", fluid.rho()); // Correct p_rgh for consistency with p and the updated densities diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C index 9807a0ae207153a943c14543d1403fcdf7348aa1..55b677386245c5ed9daec224cb0011cf58ca76f2 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C @@ -77,11 +77,6 @@ int main(int argc, char *argv[]) //#include "pUf/createDDtU.H" - int nEnergyCorrectors - ( - pimple.dict().lookupOrDefault<int>("nEnergyCorrectors", 1) - ); - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -90,6 +85,11 @@ int main(int argc, char *argv[]) { #include "readTimeControls.H" + int nEnergyCorrectors + ( + pimple.dict().lookupOrDefault<int>("nEnergyCorrectors", 1) + ); + if (LTS) { #include "setRDeltaT.H" diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwclean b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwclean index 59ec72ff10e339df685c8166026c1fcc35690343..2d0f2fde9e7a254d7b7e5eda3cb599fea8e5243e 100755 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwclean +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso twoPhaseSystem wclean libso twoPhaseCompressibleTurbulenceModels diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwmake b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwmake index d151b361df17e4ba1cf1a76e548d9ac6bbf8c88d..49c983288e0cac523f1dab93c12e8649f079a3b8 100755 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwmake +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType twoPhaseSystem wmake $targetType twoPhaseCompressibleTurbulenceModels diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/EEqns.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/EEqns.H index 0cdbfba8b92e6caffadc20309eb4de9967071571..d9f1e85e6fd2d3fdf6695f2564060c95c01e8aeb 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/EEqns.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/EEqns.H @@ -29,36 +29,25 @@ for (int Ecorr=0; Ecorr<nEnergyCorrectors; Ecorr++) } { - tmp<fvScalarMatrix> E2eqn(phase2.heEqn()); + tmp<fvScalarMatrix> E2Eqn(phase2.heEqn()); - if (E2eqn.valid()) + if (E2Eqn.valid()) { - E2eqn = + E2Eqn = ( - E2eqn + E2Eqn == *heatTransfer[phase2.name()] + alpha2*rho2*(U2&g) + fvOptions(alpha2, rho2, phase2.thermo().he()) ); - E2eqn->relax(); - fvOptions.constrain(E2eqn.ref()); - E2eqn->solve(); + E2Eqn->relax(); + fvOptions.constrain(E2Eqn.ref()); + E2Eqn->solve(); } } fluid.correctThermo(); + fluid.correct(); } - -Info<< phase1.name() << " min/max T " - << min(phase1.thermo().T()).value() - << " - " - << max(phase1.thermo().T()).value() - << endl; - -Info<< phase2.name() << " min/max T " - << min(phase2.thermo().T()).value() - << " - " - << max(phase2.thermo().T()).value() - << endl; diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createRDeltaTf.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createRDeltaTf.H new file mode 100644 index 0000000000000000000000000000000000000000..5a4c77eacf54c48264a29a876c673d2a7c6c6747 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/createRDeltaTf.H @@ -0,0 +1,21 @@ +tmp<surfaceScalarField> trDeltaTf; + +if (LTS && faceMomentum) +{ + trDeltaTf = tmp<surfaceScalarField> + ( + new surfaceScalarField + ( + IOobject + ( + fv::localEulerDdt::rDeltaTfName, + runTime.timeName(), + mesh, + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("one", dimless/dimTime, 1) + ) + ); +} diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pU/pEqn.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pU/pEqn.H index 9020cd6d5de4cc7c3a1f3bf14b4034bd9cf02fcc..3b225202e917f8839dd4d821cc15c2cc47bbd6d2 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pU/pEqn.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pU/pEqn.H @@ -83,9 +83,6 @@ tmp<surfaceScalarField> phiF2; // --- Pressure corrector loop while (pimple.correct()) { - // Update continuity errors due to temperature changes - fluid.correct(); - volScalarField rho("rho", fluid.rho()); // Correct p_rgh for consistency with p and the updated densities diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/DDtU.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/DDtU.H index 63b61cd61a73ad944fafeeced01737665c90b1ed..c7bccf66eac5e0a56750e2837027e16394903c56 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/DDtU.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/DDtU.H @@ -1,9 +1,2 @@ - ddtPhi1 = - ( - (phi1 - phi1.oldTime())/runTime.deltaT() - ); - - ddtPhi2 = - ( - (phi2 - phi2.oldTime())/runTime.deltaT() - ); +ddtPhi1 = fvc::ddt(phi1); +ddtPhi2 = fvc::ddt(phi2); diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/createDDtU.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/createDDtU.H index 7445d4af23f5d5c63485052c0a7217e668c65717..14e66e47a833f9cbf06eba9d03904b3c675599ba 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/createDDtU.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/createDDtU.H @@ -1,9 +1,2 @@ - surfaceScalarField ddtPhi1 - ( - (phi1 - phi1.oldTime())/runTime.deltaT() - ); - - surfaceScalarField ddtPhi2 - ( - (phi2 - phi2.oldTime())/runTime.deltaT() - ); +surfaceScalarField ddtPhi1(fvc::ddt(phi1)); +surfaceScalarField ddtPhi2(fvc::ddt(phi2)); diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/pEqn.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/pEqn.H index b27c9f4646fdec6beb7d7c731def2287e866d43c..7950d76b94470df97aaeebb600a3898177dee675 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/pEqn.H +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/pUf/pEqn.H @@ -32,10 +32,10 @@ surfaceScalarField rAUf1 IOobject::groupName("rAUf", phase1.name()), 1.0 /( - (alphaRhof10 + Vmf)/runTime.deltaT() + byDt(alphaRhof10 + Vmf) + fvc::interpolate(U1Eqn.A()) + Kdf - ) + ) ); surfaceScalarField rAUf2 @@ -43,10 +43,10 @@ surfaceScalarField rAUf2 IOobject::groupName("rAUf", phase2.name()), 1.0 /( - (alphaRhof20 + Vmf)/runTime.deltaT() + byDt(alphaRhof20 + Vmf) + fvc::interpolate(U2Eqn.A()) + Kdf - ) + ) ); @@ -93,9 +93,6 @@ tmp<surfaceScalarField> Ff2; while (pimple.correct()) { - // Update continuity errors due to temperature changes - fluid.correct(); - volScalarField rho("rho", fluid.rho()); // Correct p_rgh for consistency with p and the updated densities @@ -160,7 +157,7 @@ while (pimple.correct()) rAUf1 *( (alphaRhof10 + Vmf) - *MRF.absolute(phi1.oldTime())/runTime.deltaT() + *byDt(MRF.absolute(phi1.oldTime())) + fvc::flux(U1Eqn.H()) + Vmf*ddtPhi2 + Kdf*MRF.absolute(phi2) @@ -178,7 +175,7 @@ while (pimple.correct()) rAUf2 *( (alphaRhof20 + Vmf) - *MRF.absolute(phi2.oldTime())/runTime.deltaT() + *byDt(MRF.absolute(phi2.oldTime())) + fvc::flux(U2Eqn.H()) + Vmf*ddtPhi1 + Kdf*MRF.absolute(phi1) diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C index 40bcc365a03861664193d6db66a63ad54db67195..f180257e9c01496849486f9ddf60904706de4935 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C @@ -43,6 +43,22 @@ Description #include "localEulerDdtScheme.H" #include "fvcSmooth.H" +namespace Foam +{ + tmp<surfaceScalarField> byDt(const surfaceScalarField& sf) + { + if (fv::localEulerDdt::enabled(sf.mesh())) + { + return fv::localEulerDdt::localRDeltaTf(sf.mesh())*sf; + } + else + { + return sf/sf.mesh().time().deltaT(); + } + } +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) @@ -76,13 +92,9 @@ int main(int argc, char *argv[]) ) ); + #include "createRDeltaTf.H" #include "pUf/createDDtU.H" - int nEnergyCorrectors - ( - pimple.dict().lookupOrDefault<int>("nEnergyCorrectors", 1) - ); - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -91,9 +103,18 @@ int main(int argc, char *argv[]) { #include "readTimeControls.H" + int nEnergyCorrectors + ( + pimple.dict().lookupOrDefault<int>("nEnergyCorrectors", 1) + ); + if (LTS) { #include "setRDeltaT.H" + if (faceMomentum) + { + #include "setRDeltaTf.H" + } } else { diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/setRDeltaTf.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/setRDeltaTf.H new file mode 100644 index 0000000000000000000000000000000000000000..1c0366dc3b1caf64386aeab810bec5e12f702c33 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/setRDeltaTf.H @@ -0,0 +1 @@ +trDeltaTf.ref() = fvc::interpolate(fv::localEulerDdt::localRDeltaT(mesh)); diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatWallBoilingWallFunction/alphatWallBoilingWallFunctionFvPatchScalarField.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatWallBoilingWallFunction/alphatWallBoilingWallFunctionFvPatchScalarField.H old mode 100755 new mode 100644 diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean index aec98738818d2b95a622ca04fe17923087c5e896..056bc90a3d60a2527d7c3b629986889114f117c7 100755 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso twoPhaseSystem wclean libso interfacialModels diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake index a73a5ce4169e67fe95ad52f8af785c1b49d2b0da..9eb3ae37c4c37f266747f062116a79bf8383d045 100755 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmakeLnInclude interfacialModels wmake $targetType twoPhaseSystem diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/EEqns.H b/applications/solvers/multiphase/twoPhaseEulerFoam/EEqns.H index 25b97c17a13c32951d2802b550b0271add290af8..308e7589f9357932a83dcdc22cabe44ec62e75c2 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/EEqns.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/EEqns.H @@ -16,7 +16,8 @@ - contErr1*K1 + ( he1.name() == thermo1.phasePropertyName("e") - ? fvc::ddt(alpha1)*p + fvc::div(alphaPhi1, p) + ? fvc::div(fvc::absolute(alphaPhi1, alpha1, U1), p) + + p*fvc::ddt(alpha1) : -alpha1*dpdt ) @@ -48,7 +49,8 @@ - contErr2*K2 + ( he2.name() == thermo2.phasePropertyName("e") - ? fvc::ddt(alpha2)*p + fvc::div(alphaPhi2, p) + ? fvc::div(fvc::absolute(alphaPhi2, alpha2, U2), p) + + p*fvc::ddt(alpha1) : -alpha2*dpdt ) diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.C index eedb89cc551e7555689f8f209f3c26d6e6405d65..f5522c7509e5cebafa73861e42129c0ec2259869 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.C @@ -248,4 +248,30 @@ bool Foam::phaseModel::read(const dictionary& phaseProperties) } +void Foam::phaseModel::correctInflowFlux(surfaceScalarField& alphaPhi) const +{ + surfaceScalarField::Boundary& alphaPhiBf = alphaPhi.boundaryFieldRef(); + + // Ensure that the flux at inflow BCs is preserved + forAll(alphaPhiBf, patchi) + { + fvsPatchScalarField& alphaPhip = alphaPhiBf[patchi]; + + if (!alphaPhip.coupled()) + { + const scalarField& phip = phi().boundaryField()[patchi]; + const scalarField& alphap = boundaryField()[patchi]; + + forAll(alphaPhip, facei) + { + if (phip[facei] < SMALL) + { + alphaPhip[facei] = alphap[facei]*phip[facei]; + } + } + } + } +} + + // ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.H b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.H index 5fb0245513d3978d28622399612f2de3ba0cbddc..a5ae107c909d49351ce384fac4914edafeccb068 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/phaseModel/phaseModel.H @@ -319,6 +319,9 @@ public: return alphaRhoPhi_; } + //- Ensure that the flux at inflow BCs is preserved + void correctInflowFlux(surfaceScalarField& alphaPhi) const; + //- Correct the phase properties // other than the thermodynamics and turbulence // which have special treatment diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C index 7c2323a03055c421a1b4a348be04c171f5fd39f4..808fe255f9e7afa0c8f71203625e649a5fb049d8 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C @@ -444,28 +444,7 @@ void Foam::twoPhaseSystem::solve() ) ); - surfaceScalarField::Boundary& alphaPhic1Bf = - alphaPhic1.boundaryFieldRef(); - - // Ensure that the flux at inflow BCs is preserved - forAll(alphaPhic1Bf, patchi) - { - fvsPatchScalarField& alphaPhic1p = alphaPhic1Bf[patchi]; - - if (!alphaPhic1p.coupled()) - { - const scalarField& phi1p = phi1.boundaryField()[patchi]; - const scalarField& alpha1p = alpha1.boundaryField()[patchi]; - - forAll(alphaPhic1p, facei) - { - if (phi1p[facei] < 0) - { - alphaPhic1p[facei] = alpha1p[facei]*phi1p[facei]; - } - } - } - } + phase1_.correctInflowFlux(alphaPhic1); if (nAlphaSubCycles > 1) { @@ -537,6 +516,7 @@ void Foam::twoPhaseSystem::solve() phase2_.alphaPhi() = phi_ - phase1_.alphaPhi(); alpha2 = scalar(1) - alpha1; + phase2_.correctInflowFlux(phase2_.alphaPhi()); phase2_.alphaRhoPhi() = fvc::interpolate(phase2_.rho())*phase2_.alphaPhi(); diff --git a/applications/test/dimensionedType/Test-dimensionedType.C b/applications/test/dimensionedType/Test-dimensionedType.C index 965de25ead7de6a51ba17d9e7402dde8d1941b1b..892552fa7082c575e76bcec73e980e9c3e1938dd 100644 --- a/applications/test/dimensionedType/Test-dimensionedType.C +++ b/applications/test/dimensionedType/Test-dimensionedType.C @@ -81,6 +81,10 @@ int main(int argc, char *argv[]) } + Pout<< "zero scalar (time): " << dimensionedScalar(dimTime) << endl; + Pout<< "zero vector: " << dimensionedVector(dimLength) << endl; + Pout<< "zero tensor: " << dimensionedTensor(dimLength) << endl; + Info<< "End\n" << endl; return 0; diff --git a/applications/test/objectRegistry/Make/files b/applications/test/objectRegistry/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..b7c477f791db2df46c2c1b5e69deeca333fa99f0 --- /dev/null +++ b/applications/test/objectRegistry/Make/files @@ -0,0 +1,3 @@ +Test-objectRegistry.C + +EXE = $(FOAM_USER_APPBIN)/Test-objectRegistry diff --git a/applications/test/objectRegistry/Make/options b/applications/test/objectRegistry/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..6a9e9810b3d5ce6684bdaf03143933480ff45e42 --- /dev/null +++ b/applications/test/objectRegistry/Make/options @@ -0,0 +1,2 @@ +/* EXE_INC = -I$(LIB_SRC)/cfdTools/include */ +/* EXE_LIBS = -lfiniteVolume */ diff --git a/applications/test/objectRegistry/Test-objectRegistry.C b/applications/test/objectRegistry/Test-objectRegistry.C new file mode 100644 index 0000000000000000000000000000000000000000..5ccdb3fe91b924171add0905f5550ae4d044bcdc --- /dev/null +++ b/applications/test/objectRegistry/Test-objectRegistry.C @@ -0,0 +1,285 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Application + Test-objectRegistry + +Description + Simple test of objectRegistry functionality. + Particular focus on the behaviour of subRegistry. + +\*---------------------------------------------------------------------------*/ + +#include "argList.H" +#include "Time.H" +#include "polyMesh.H" +#include "IOstreams.H" +#include "objectRegistry.H" +#include "hashedWordList.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// file variable, needed for switching the default in lookupObject etc. +bool recursive = false; + + +template<class Type> +Foam::Ostream& printList(Foam::Ostream& os, const UList<Type>& list) +{ + // list with out any linebreaks + os << '('; + forAll(list, i) + { + if (i) os << ' '; + os << list[i]; + } + os << ')'; + + return os; +} + + +void printRegistry +( + Foam::Ostream& os, + const Foam::objectRegistry& obr, + Foam::label indent = 4 +); + + +void printRegistry +( + Foam::Ostream& os, + const Foam::objectRegistry& obr, + Foam::label indent +) +{ + wordList names = obr.sortedNames(); + hashedWordList regs = obr.sortedNames<objectRegistry>(); + + std::string prefix; + for (label i=indent; i; --i) + { + prefix += ' '; + } + + os << '#' << prefix.c_str() << obr.name() + << " parent:" << obr.parent().name() << nl; + + // all names + { + os << ' ' << prefix.c_str() << "objects: "; + printList(os, names) << nl; + } + + // sub-registry names + { + os << ' ' << prefix.c_str() << "registries: "; + printList(os, regs) << nl; + } + + // Print, but skip expansion of sub-registries for now + forAll(names, i) + { + const word& name = names[i]; + + os << (regs.found(name) ? '-' : ' ') + << prefix.c_str() << name << " => " << obr[name]->type() << nl; + } + for (label i=indent; i; --i) + { + os << '-'; // divider + } + os << '\n'; + + // Now descend into the sub-registries + forAll(regs, i) + { + const word& name = regs[i]; + const objectRegistry& next = obr.lookupObject<objectRegistry> + ( + name, + recursive + ); + + os << prefix.c_str() + << "current:" << obr.name() << " next:" + << next.name() << " next-parent:" << next.parent().name() << nl; + + os << prefix.c_str() << name << " => " << obr[name]->type(); + + if ("dictionary" == obr[name]->type()) + { + os << " (skip dictionary)" << nl; + } + else + { + os << nl; + printRegistry(os, next, indent + 4); + } + } +} + +// Main program: + +int main(int argc, char *argv[]) +{ + argList::noBanner(); + argList::noParallel(); + argList::addBoolOption + ( + "mesh", + "test with polyMesh objectRegistry instead of runTime" + ); + argList::addBoolOption + ( + "skip", + "skip some parts" + ); + argList::validArgs.append("recursive (true|false)"); + + #include "setRootCase.H" + #include "createTime.H" + #include "createPolyMesh.H" + + recursive = Switch(args[1]); + + const bool optMesh = args.optionFound("mesh"); + const bool optSkip = args.optionFound("skip"); + const objectRegistry& db = (optMesh ? mesh.thisDb() : runTime); + + Info<<"## start ##" << nl; + printRegistry(Info, db); + Info<< nl; + + const label nRegs = 3; + + // Add some items + for (label j = 0; j < 3; ++j) + { + word entryName = "entry" + name(j); + db.subRegistry + ( + entryName, + true, + recursive + ); + } + + Info<<"## initally populated ##" << nl; + printRegistry(Info, db); + Info<< nl; + + + // create a few sub-registries + for (label i = 0; i < nRegs; ++i) + { + word regName = "subreg" + name(i); + + const objectRegistry& subreg = db.subRegistry + ( + regName, + true, + recursive + ); + + for (label j = 0; j < 3; ++j) + { + word entryName = "entry" + name(j); + + subreg.subRegistry + ( + entryName, + true, + recursive + ); + subreg.subRegistry + ( + "$" + entryName, // qualified to avoid collisions + true, + recursive + ); + } + } + + Info<<"## after adding sub-registries" << nl; + printRegistry(Info, db); + Info<< nl; + + // Add further items into top-level + for (label j = 0; j < 6; ++j) + { + word entryName = "entry" + name(j); + db.subRegistry + ( + entryName, + true, + recursive + ); + } + + Info<< "after adding some entries, top-level now contains: "; + printList(Info, db.names()) << endl; + + Info<<"## Now attempt to add a few more entries ##" << nl; + + // Try adding the same items into sub registry + // create a few sub-registries + for (label i = 0; i < nRegs; ++i) + { + word regName = "subreg" + name(i); + + const objectRegistry& subreg = db.subRegistry + ( + regName, + false, + recursive + ); + + if (!optSkip) + { + for (label j = 0; j < 6; ++j) + { + word entryName = "entry" + name(j); + + subreg.subRegistry + ( + entryName, + true, + recursive + ); + } + } + } + + Info<<"## Complete picture ##" << nl; + printRegistry(Info, db); + Info<< nl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C index 7385fd502936689b5ad5f9cdcffcb311161c50a3..768f3c9f99113226b990e188d52d48a08d85e7dc 100644 --- a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C +++ b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -56,7 +56,9 @@ Description #include "mapPolyMesh.H" #include "faceSet.H" #include "cellSet.H" +#include "pointSet.H" #include "syncTools.H" +#include "ReadFields.H" #include "polyTopoChange.H" #include "polyModifyFace.H" #include "polyAddFace.H" @@ -315,6 +317,59 @@ void initCreatedPatches } +template<class TopoSet> +void subsetTopoSets +( + const fvMesh& mesh, + const IOobjectList& objectsList, + const labelList& map, + const fvMesh& subMesh, + PtrList<TopoSet>& subSets +) +{ + // Read original sets + PtrList<TopoSet> sets; + ReadFields<TopoSet>(objectsList, sets); + + subSets.setSize(sets.size()); + forAll(sets, i) + { + TopoSet& set = sets[i]; + + Info<< "Subsetting " << set.type() << " " << set.name() << endl; + + // Map the data + PackedBoolList isSet(set.maxSize(mesh)); + forAllConstIter(labelHashSet, set, iter) + { + isSet[iter.key()] = true; + } + label nSet = 0; + forAll(map, i) + { + if (isSet[map[i]]) + { + nSet++; + } + } + + subSets.set + ( + i, + new TopoSet(subMesh, set.name(), nSet, IOobject::AUTO_WRITE) + ); + TopoSet& subSet = subSets[i]; + forAll(map, i) + { + if (isSet[map[i]]) + { + subSet.insert(i); + } + } + } +} + + void createCoupledBaffles ( fvMesh& mesh, @@ -923,6 +978,41 @@ int main(int argc, char *argv[]) surfTensorFlds ); + + // Set handling + PtrList<cellSet> cellSets; + PtrList<faceSet> faceSets; + PtrList<pointSet> pointSets; + { + IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); + subsetTopoSets + ( + mesh, + objects, + subsetter.cellMap(), + subsetter.subMesh(), + cellSets + ); + subsetTopoSets + ( + mesh, + objects, + subsetter.faceMap(), + subsetter.subMesh(), + faceSets + ); + subsetTopoSets + ( + mesh, + objects, + subsetter.pointMap(), + subsetter.subMesh(), + pointSets + ); + } + + + if (!overwrite) { runTime++; @@ -1134,6 +1224,11 @@ int main(int argc, char *argv[]) Zero ); + // Update numbering of topoSets + topoSet::updateMesh(subsetter.subMesh().facesInstance(), map, cellSets); + topoSet::updateMesh(subsetter.subMesh().facesInstance(), map, faceSets); + topoSet::updateMesh(subsetter.subMesh().facesInstance(), map, pointSets); + // Move mesh (since morphing might not do this) if (map().hasMotionPoints()) diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/Make/options b/applications/utilities/mesh/advanced/combinePatchFaces/Make/options index 3da3443a27b1e7677ab4670333548fe371e1731a..ff070635902bbced7cd4946eda7cd24b1318e9e8 100644 --- a/applications/utilities/mesh/advanced/combinePatchFaces/Make/options +++ b/applications/utilities/mesh/advanced/combinePatchFaces/Make/options @@ -1,9 +1,11 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ EXE_LIBS = \ -lfiniteVolume \ + -lreconstruct \ -ldynamicMesh diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C index 2666d4c9de9b2a1d37e52f32a62ebdbb22464a89..c9eca74a58ac7007e764d2766a4c686c86ddc582 100644 --- a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C +++ b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -48,7 +48,6 @@ Description \*---------------------------------------------------------------------------*/ -#include "PstreamReduceOps.H" #include "argList.H" #include "Time.H" #include "polyTopoChange.H" @@ -60,6 +59,9 @@ Description #include "mapPolyMesh.H" #include "unitConversion.H" #include "motionSmoother.H" +#include "topoSet.H" +#include "processorMeshes.H" +#include "PstreamReduceOps.H" using namespace Foam; @@ -450,6 +452,8 @@ int main(int argc, char *argv[]) Info<< "Writing morphed mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); } else { diff --git a/applications/utilities/mesh/advanced/modifyMesh/Make/options b/applications/utilities/mesh/advanced/modifyMesh/Make/options index 70c838b774c8b2609363d066e78b1a19b9306ccd..4e67ae71f11d230e82849784e71ff1aaa9e24481 100644 --- a/applications/utilities/mesh/advanced/modifyMesh/Make/options +++ b/applications/utilities/mesh/advanced/modifyMesh/Make/options @@ -1,7 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude EXE_LIBS = \ -lmeshTools \ + -lreconstruct \ -ldynamicMesh diff --git a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C index 661811afa8410365dedacd1618dfaa0a2e16f98c..f9b0e4ef2db841001b6ed20cd05bd4d61dfddc0b 100644 --- a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C +++ b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -62,6 +62,8 @@ Description #include "meshTools.H" #include "Pair.H" #include "globalIndex.H" +#include "topoSet.H" +#include "processorMeshes.H" using namespace Foam; @@ -567,6 +569,8 @@ int main(int argc, char *argv[]) // Write resulting mesh Info<< "Writing modified mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); } else if (edgeToPos.size()) { @@ -641,6 +645,8 @@ int main(int argc, char *argv[]) // Write resulting mesh Info<< "Writing modified mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); } else { @@ -684,6 +690,8 @@ int main(int argc, char *argv[]) // Write resulting mesh Info<< "Writing modified mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); } diff --git a/applications/utilities/mesh/advanced/refineHexMesh/Make/options b/applications/utilities/mesh/advanced/refineHexMesh/Make/options index baa7b45f0074eb77361cd1d7db56bcae9c5b4969..554d59b25d64feec8cbf6ce14d64c58ac00a1823 100644 --- a/applications/utilities/mesh/advanced/refineHexMesh/Make/options +++ b/applications/utilities/mesh/advanced/refineHexMesh/Make/options @@ -1,11 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude - EXE_LIBS = \ + -lreconstruct \ -ldynamicMesh \ - -lmeshTools \ - -lfiniteVolume \ -lgenericPatchFields diff --git a/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C b/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C index 6a07259605e98ecc6c1452a9faae245d17562e77..3a6cdfe11aea93a4ebc18c7535a67d5311b089b2 100644 --- a/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C +++ b/applications/utilities/mesh/advanced/refineHexMesh/refineHexMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -49,6 +49,7 @@ Description #include "surfaceFields.H" #include "pointFields.H" #include "ReadFields.H" +#include "processorMeshes.H" using namespace Foam; @@ -197,6 +198,8 @@ int main(int argc, char *argv[]) mesh.write(); meshCutter.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/advanced/refineWallLayer/Make/options b/applications/utilities/mesh/advanced/refineWallLayer/Make/options index 7349856cabeb9aeedca94d459c4a1a022c72d996..19716ca4eca2a372fcd7b594a4a8e0c5126495e8 100644 --- a/applications/utilities/mesh/advanced/refineWallLayer/Make/options +++ b/applications/utilities/mesh/advanced/refineWallLayer/Make/options @@ -1,7 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude EXE_LIBS = \ -ldynamicMesh \ + -lreconstruct \ -lmeshTools diff --git a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C index 2fc8f5ec3eae3b2b14a96915202afa263997b3c9..e8d84ab1806085ada633ed49d7f89b52f2de6e60 100644 --- a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C +++ b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -53,6 +53,7 @@ Description #include "cellCuts.H" #include "cellSet.H" #include "meshCutter.H" +#include "processorMeshes.H" using namespace Foam; @@ -257,6 +258,8 @@ int main(int argc, char *argv[]) Info<< "Writing refined mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/advanced/removeFaces/Make/options b/applications/utilities/mesh/advanced/removeFaces/Make/options index 63c5dc5d78e26d3a65c8457900aef8f007067f9c..b23c26cceb6bda74df4c93403ee4ab27459b2fbb 100644 --- a/applications/utilities/mesh/advanced/removeFaces/Make/options +++ b/applications/utilities/mesh/advanced/removeFaces/Make/options @@ -1,10 +1,12 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ -lmeshTools \ -ldynamicMesh \ -lfiniteVolume \ + -lreconstruct \ -lgenericPatchFields diff --git a/applications/utilities/mesh/advanced/removeFaces/removeFaces.C b/applications/utilities/mesh/advanced/removeFaces/removeFaces.C index ca828866011356aea446f5532f12c59ac98d058a..31989eca13154488dba178c7896d8281b8461737 100644 --- a/applications/utilities/mesh/advanced/removeFaces/removeFaces.C +++ b/applications/utilities/mesh/advanced/removeFaces/removeFaces.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -44,6 +44,7 @@ Description #include "ReadFields.H" #include "volFields.H" #include "surfaceFields.H" +#include "processorMeshes.H" using namespace Foam; @@ -179,6 +180,8 @@ int main(int argc, char *argv[]) // Take over refinement levels and write to new time directory. Pout<< "Writing mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); Pout<< "End\n" << endl; diff --git a/applications/utilities/mesh/conversion/Optional/Allwmake b/applications/utilities/mesh/conversion/Optional/Allwmake index a7a614f5cad3ab3c3253a0a6a5a0bc04433708fe..6e64d2c83485fb505552f8f6c94a6e565d26f842 100755 --- a/applications/utilities/mesh/conversion/Optional/Allwmake +++ b/applications/utilities/mesh/conversion/Optional/Allwmake @@ -11,7 +11,6 @@ cd ${0%/*} || exit 1 # Run from this directory . $WM_PROJECT_DIR/etc/config.sh/functions _foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/ccmio) -set -x # Build libccmio (.a|.so) $WM_THIRD_PARTY_DIR/makeCCMIO lib # libso diff --git a/applications/utilities/mesh/generation/blockMesh/blockMesh.C b/applications/utilities/mesh/generation/blockMesh/blockMesh.C index 4441f15e4934c61cf8135312682ea1e59c98c292..d48980cb8c06a4d15a9ea8b33e2980bbd11471e6 100644 --- a/applications/utilities/mesh/generation/blockMesh/blockMesh.C +++ b/applications/utilities/mesh/generation/blockMesh/blockMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -148,6 +148,15 @@ int main(int argc, char *argv[]) dictPath = runTime.constant() /regionPath/polyMesh::meshSubDir/dictName; + + // Warn that constant/polyMesh/blockMesh was selected instead of + // system/blockMesh + WarningIn(args[0]) + << "Using the old blockMeshDict location: " + << dictPath << nl + << " instead of the default location: " + << runTime.system()/regionPath/dictName << nl + << endl; } // Otherwise assume the dictionary is present in the system directory else diff --git a/applications/utilities/mesh/generation/extrude/extrudeMesh/Make/options b/applications/utilities/mesh/generation/extrude/extrudeMesh/Make/options index 94b355be3c8f27e97d386b914cc7e0f753f494d0..517a98473f14fddbef66f6581d0120ed8c146bfe 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeMesh/Make/options +++ b/applications/utilities/mesh/generation/extrude/extrudeMesh/Make/options @@ -4,6 +4,7 @@ EXE_INC = \ -I$(LIB_SRC)/surfMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/mesh/extrudeModel/lnInclude EXE_LIBS = \ @@ -11,4 +12,5 @@ EXE_LIBS = \ -lsurfMesh \ -lmeshTools \ -ldynamicMesh \ + -lreconstruct \ -lextrudeModel diff --git a/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C b/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C index 14b3ca71eb37cd90890403768bf931d58bf18977..26b23f691ae85553053315f6c1b7b710dce9c3e0 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C +++ b/applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C @@ -56,6 +56,7 @@ Description #include "wedgePolyPatch.H" #include "planeExtrusion.H" #include "emptyPolyPatch.H" +#include "processorMeshes.H" using namespace Foam; @@ -1058,6 +1059,8 @@ int main(int argc, char *argv[]) FatalErrorInFunction << exit(FatalError); } + // Remove any left-over files + processorMeshes::removeFiles(mesh); // Need writing cellSet label nAdded = returnReduce(addedCellsSet.size(), sumOp<label>()); diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/Make/options b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/Make/options index 49cad25f210163dffa9ff87fe916b6e6dffc4b10..c34e494c474d7a0da3fbf718ac1d12a110063436 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/Make/options +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/Make/options @@ -3,6 +3,7 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/mesh/extrudeModel/lnInclude EXE_LIBS = \ @@ -10,4 +11,5 @@ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ -ldynamicMesh \ + -lreconstruct \ -lextrudeModel diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C index e19eecd7532fc4973d68da75f2f4545089632d2f..2bbbf4a9f939521010a9afbea28e30ea5f9cb9f0 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -141,6 +141,7 @@ Notes: #include "fvMeshTools.H" #include "OBJstream.H" #include "PatchTools.H" +#include "processorMeshes.H" using namespace Foam; @@ -2646,6 +2647,8 @@ int main(int argc, char *argv[]) << " at location " << regionMesh.facesInstance() << exit(FatalError); } + topoSet::removeFiles(regionMesh); + processorMeshes::removeFiles(regionMesh); // See if we need to extrude coordinates as well @@ -2847,6 +2850,8 @@ int main(int argc, char *argv[]) << " at location " << mesh.facesInstance() << exit(FatalError); } + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); } Info << "End\n" << endl; diff --git a/applications/utilities/mesh/generation/extrude2DMesh/Allwclean b/applications/utilities/mesh/generation/extrude2DMesh/Allwclean index 48a8fb0d129e6177cb7c86595e6d4b99425baeba..71e45051eec76508e8c01b63d028ba2611500108 100755 --- a/applications/utilities/mesh/generation/extrude2DMesh/Allwclean +++ b/applications/utilities/mesh/generation/extrude2DMesh/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean libso extrude2DMesh wclean diff --git a/applications/utilities/mesh/generation/extrude2DMesh/Allwmake b/applications/utilities/mesh/generation/extrude2DMesh/Allwmake index 37a2358c583ce6a91084a83fbcfd825e8668cc3b..f8637ab7e53aa13a132944b31289c71a52025350 100755 --- a/applications/utilities/mesh/generation/extrude2DMesh/Allwmake +++ b/applications/utilities/mesh/generation/extrude2DMesh/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType extrude2DMesh wmake $targetType diff --git a/applications/utilities/mesh/generation/extrude2DMesh/Make/options b/applications/utilities/mesh/generation/extrude2DMesh/Make/options index 3be2f34c18e8d2a6bd2ab26664b25466bfa057b6..afc245ed1da0bc561a82338527ac50a1625e48ff 100644 --- a/applications/utilities/mesh/generation/extrude2DMesh/Make/options +++ b/applications/utilities/mesh/generation/extrude2DMesh/Make/options @@ -2,11 +2,14 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/surfMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -Iextrude2DMesh/lnInclude \ -I$(LIB_SRC)/mesh/extrudeModel/lnInclude EXE_LIBS = \ -lsurfMesh \ -ldynamicMesh \ + -lreconstruct \ -lextrude2DMesh \ -lextrudeModel diff --git a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshApp.C b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshApp.C index 7a7cdadbb62e94dc2ed7ab808ca14c3f1fdd24d1..f10a593a290c8305f06ab939cf4df6774ec3a1ef 100644 --- a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshApp.C +++ b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshApp.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -47,6 +47,8 @@ Note #include "addPatchCellLayer.H" #include "patchToPoly2DMesh.H" #include "globalIndex.H" +#include "topoSet.H" +#include "processorMeshes.H" using namespace Foam; @@ -323,6 +325,8 @@ int main(int argc, char *argv[]) << nl << endl; mesh().write(); + topoSet::removeFiles(mesh()); + processorMeshes::removeFiles(mesh()); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/generation/foamyMesh/Allwclean b/applications/utilities/mesh/generation/foamyMesh/Allwclean index 8fbad7478485039d9fc92137125bd1504e6ea484..725d20869ddcccc6f1b1e30705af989404d35efc 100755 --- a/applications/utilities/mesh/generation/foamyMesh/Allwclean +++ b/applications/utilities/mesh/generation/foamyMesh/Allwclean @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wclean conformalVoronoiMesh wclean conformalVoronoi2DMesh diff --git a/applications/utilities/mesh/generation/foamyMesh/Allwmake b/applications/utilities/mesh/generation/foamyMesh/Allwmake index 85f046473cbd3b9ada96efc73eaef278e9aa5be1..bea4106ad3738ae0ede63d3655f726d646ba90a3 100755 --- a/applications/utilities/mesh/generation/foamyMesh/Allwmake +++ b/applications/utilities/mesh/generation/foamyMesh/Allwmake @@ -7,8 +7,6 @@ cd ${0%/*} || exit 1 # Run from this directory if [ -f "$CGAL_ARCH_PATH/include/CGAL/version.h" ] || \ [ "${CGAL_ARCH_PATH##*-}" = system -a -f /usr/include/CGAL/version.h ] then - set -x - wmake $targetType conformalVoronoiMesh wmake $targetType conformalVoronoi2DMesh wmake foamyQuadMesh diff --git a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Allwmake b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Allwmake index 280efe9bdf96970a51bde85b283fdb5f472148ef..c3f900341ec642c9c1d12cb4d9bbf0c8e5b0f465 100755 --- a/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Allwmake +++ b/applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for compilation (at least for error catching) . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x if [ -d "${FASTDUALOCTREE_SRC_PATH}" ] then diff --git a/applications/utilities/mesh/generation/snappyHexMesh/Make/options b/applications/utilities/mesh/generation/snappyHexMesh/Make/options index 465393696a45574cb5485414c0ba1b55e5514508..40ccd9c2ce3dcc1ebeae811655d9559bfed963c4 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/Make/options +++ b/applications/utilities/mesh/generation/snappyHexMesh/Make/options @@ -9,6 +9,7 @@ EXE_INC = \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/edgeMesh/lnInclude \ -I$(LIB_SRC)/parallel/decompose/decompose/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ @@ -22,4 +23,5 @@ EXE_LIBS = \ -lfileFormats \ -ldynamicMesh \ -ldecompose \ + -lreconstruct \ -lsnappyHexMesh diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C index ed0e635787ad1906f4c0c230423caf2943fd8008..8af787b162c524aabcba383426b2ddf841d85088 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C @@ -63,6 +63,7 @@ Description #include "decompositionModel.H" #include "fvMeshTools.H" #include "profiling.H" +#include "processorMeshes.H" using namespace Foam; @@ -658,6 +659,13 @@ void writeMesh meshRefiner.printMeshInfo(debugLevel, msg); Info<< "Writing mesh to time " << meshRefiner.timeName() << endl; + processorMeshes::removeFiles(mesh); + if (!debugLevel) + { + topoSet::removeFiles(mesh); + } + refinementHistory::removeFiles(mesh); + //label flag = meshRefinement::MESH; //if (writeLevel) //{ diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index 6261216c655cca786a8818f1d050499c2d47f1c1..bf257a8ff55b8cfa687a2c9400cace03604bdc89 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -431,7 +431,11 @@ snapControls // (wip) Optional for explicit feature snapping: //- Detect baffle edges. Default is true. //detectBaffles false; - //- Erase attraction close to feature point. Default is false. + //- On any faces where points are on multiple regions (see + // multiRegionFeatureSnap) have the other points follow these points + // instead of having their own independent movement, i.e. have snapping + // to multi-region edges/points take priority. This might aid snapping + // to sharp edges that are also region edges. The default is false. //releasePoints true; //- Walk along feature edges, adding missing ones. Default is true. //stringFeatures false; diff --git a/applications/utilities/mesh/manipulation/createBaffles/Make/options b/applications/utilities/mesh/manipulation/createBaffles/Make/options index 3c8db281299ce9067f6033527fc2ee310cff3a3c..e0ff9c1f821bbec612cacb60cde355fffc9303f9 100644 --- a/applications/utilities/mesh/manipulation/createBaffles/Make/options +++ b/applications/utilities/mesh/manipulation/createBaffles/Make/options @@ -2,10 +2,12 @@ EXE_INC = \ -IfaceSelection \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ -ldynamicMesh \ -lmeshTools \ -lfiniteVolume \ + -lreconstruct \ -lgenericPatchFields diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C index 0b0c06681de5b3e9f00d67104f594b53eb6822d3..7c7e02da9613e2da5605dcf2ba828001386c521d 100644 --- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C +++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -53,6 +53,8 @@ Description #include "faceSelection.H" #include "fvMeshTools.H" +#include "topoSet.H" +#include "processorMeshes.H" using namespace Foam; @@ -978,6 +980,8 @@ int main(int argc, char *argv[]) Info<< "Writing mesh to " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/manipulation/createPatch/Make/options b/applications/utilities/mesh/manipulation/createPatch/Make/options index 73f34b0f85f190348d7b3b89bc9b39acd5ce761f..3d7ac99ffec7121e2c9fa3323b10a5e950149244 100644 --- a/applications/utilities/mesh/manipulation/createPatch/Make/options +++ b/applications/utilities/mesh/manipulation/createPatch/Make/options @@ -1,7 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ -ldynamicMesh \ + -lreconstruct \ -lmeshTools diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C index e6b2d1b733291825428df62aa5234de36dec1563..6228382d99e96247db766041f5e256b672dbfa68 100644 --- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C +++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -52,6 +52,7 @@ Description #include "polyTopoChange.H" #include "polyModifyFace.H" #include "wordReList.H" +#include "processorMeshes.H" using namespace Foam; @@ -900,6 +901,8 @@ int main(int argc, char *argv[]) // Write resulting mesh Info<< "Writing repatched mesh to " << runTime.timeName() << nl << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/Make/options b/applications/utilities/mesh/manipulation/mergeMeshes/Make/options index 21b17b14c9d7dd8ae8c0c55fdcf698ce54019fcb..74135665e25e3fb4930f25256d438bb27c8e037b 100644 --- a/applications/utilities/mesh/manipulation/mergeMeshes/Make/options +++ b/applications/utilities/mesh/manipulation/mergeMeshes/Make/options @@ -1,6 +1,9 @@ EXE_INC = \ - -I$(LIB_SRC)/dynamicMesh/lnInclude + -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude EXE_LIBS = \ -ldynamicMesh \ - -lmeshTools + -lreconstruct diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C index cb80039e79cc7e340ca6985d14e95c03e3ff5a60..67eb9f5c7b7897c5f9f258affa42862d9c639718 100644 --- a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C +++ b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -35,6 +35,8 @@ Description #include "argList.H" #include "Time.H" #include "mergePolyMesh.H" +#include "topoSet.H" +#include "processorMeshes.H" using namespace Foam; @@ -163,6 +165,8 @@ int main(int argc, char *argv[]) } masterMesh.write(); + topoSet::removeFiles(masterMesh); + processorMeshes::removeFiles(masterMesh); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/Make/options b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/Make/options index 523fc41d302a0d60aeb55dab28487c51857ecd36..6a553ef8daa7894f86e54d8dac1d0016f4a673eb 100644 --- a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/Make/options +++ b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/Make/options @@ -1,10 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude EXE_LIBS = \ - -lfiniteVolume \ -lgenericPatchFields \ - -lmeshTools \ + -lreconstruct \ -ldynamicMesh diff --git a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C index 71013769a13b163f1fdcdf92d78ce4ceaa412193..2739ecedd7d695788951fd6a9b16766236425f62 100644 --- a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C +++ b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C @@ -79,6 +79,7 @@ Note #include "ReadFields.H" #include "volFields.H" #include "surfaceFields.H" +#include "processorMeshes.H" using namespace Foam; @@ -537,6 +538,8 @@ int main(int argc, char *argv[]) Info<< "Writing mesh to time " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); // Dump duplicated points (if any) const labelList& pointMap = map().pointMap(); diff --git a/applications/utilities/mesh/manipulation/polyDualMesh/Make/options b/applications/utilities/mesh/manipulation/polyDualMesh/Make/options index f3d9c89aac6b56684dfdd770443cebf73cd14175..50005005415338bebc2fd299cf07fbad913f522e 100644 --- a/applications/utilities/mesh/manipulation/polyDualMesh/Make/options +++ b/applications/utilities/mesh/manipulation/polyDualMesh/Make/options @@ -1,10 +1,12 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude EXE_LIBS = \ -lfiniteVolume \ -lgenericPatchFields \ -ldynamicMesh \ + -lreconstruct \ -lmeshTools diff --git a/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C b/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C index 58e4499c12e2928eeaabb33b29ab1101d8ddc06b..4dcb38ae1196453c2aac70c430d70ea620b0d2f8 100644 --- a/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C +++ b/applications/utilities/mesh/manipulation/polyDualMesh/polyDualMeshApp.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -74,6 +74,8 @@ Note #include "ReadFields.H" #include "volFields.H" #include "surfaceFields.H" +#include "topoSet.H" +#include "processorMeshes.H" using namespace Foam; @@ -552,6 +554,8 @@ int main(int argc, char *argv[]) Info<< "Writing dual mesh to " << runTime.timeName() << endl; mesh.write(); + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/manipulation/renumberMesh/Allwmake b/applications/utilities/mesh/manipulation/renumberMesh/Allwmake index fae482e08b088ce26faa1f02b6e63728adb3afa8..ee135cc373cc65c1ab261367fc5aa474f7e36975 100755 --- a/applications/utilities/mesh/manipulation/renumberMesh/Allwmake +++ b/applications/utilities/mesh/manipulation/renumberMesh/Allwmake @@ -20,7 +20,6 @@ then export LINK_FLAGS="${LINK_FLAGS} -lzoltanRenumber -L${ZOLTAN_ARCH_PATH}/lib -lzoltan" fi -set -x wmake $targetType #------------------------------------------------------------------------------ diff --git a/applications/utilities/mesh/manipulation/renumberMesh/Make/options b/applications/utilities/mesh/manipulation/renumberMesh/Make/options index 49a1c3d2e33adfe98dd2cd94d352c0a78123e836..3d8b7225d9351795f2ef9b1f25560a00fa668448 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/Make/options +++ b/applications/utilities/mesh/manipulation/renumberMesh/Make/options @@ -6,7 +6,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/renumber/renumberMethods/lnInclude \ -I$(LIB_SRC)/renumber/zoltanRenumber/lnInclude \ - -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude + -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude EXE_LIBS = \ -lmeshTools \ @@ -14,5 +15,6 @@ EXE_LIBS = \ -lfiniteVolume \ -lgenericPatchFields \ -lrenumberMethods \ + -lreconstruct \ $(LINK_FLAGS) \ -ldecompositionMethods -L$(FOAM_LIBBIN)/dummy -lmetisDecomp -lscotchDecomp diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C index 1e324be2edb67e56986763f9088bf0140049be9f..fa7c026e11a2ece04c801b0814d1d9e5de123b31 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -52,6 +52,8 @@ Description #include "cellSet.H" #include "faceSet.H" #include "pointSet.H" +#include "processorMeshes.H" +#include "hexRef8.H" #ifdef FOAM_USE_ZOLTAN #include "zoltanRenumber.H" @@ -696,7 +698,6 @@ int main(int argc, char *argv[]) bool writeMaps = false; bool orderPoints = false; label blockSize = 0; - bool renumberSets = true; // Construct renumberMethod autoPtr<IOdictionary> renumberDictPtr; @@ -756,8 +757,6 @@ int main(int argc, char *argv[]) Info<< "Writing renumber maps (new to old) to polyMesh." << nl << endl; } - - renumberSets = renumberDict.lookupOrDefault("renumberSets", true); } else { @@ -884,46 +883,12 @@ int main(int argc, char *argv[]) PtrList<cellSet> cellSets; PtrList<faceSet> faceSets; PtrList<pointSet> pointSets; - if (renumberSets) { // Read sets IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); - { - IOobjectList cSets(objects.lookupClass(cellSet::typeName)); - if (cSets.size()) - { - Info<< "Reading cellSets:" << endl; - forAllConstIter(IOobjectList, cSets, iter) - { - cellSets.append(new cellSet(*iter())); - Info<< " " << cellSets.last().name() << endl; - } - } - } - { - IOobjectList fSets(objects.lookupClass(faceSet::typeName)); - if (fSets.size()) - { - Info<< "Reading faceSets:" << endl; - forAllConstIter(IOobjectList, fSets, iter) - { - faceSets.append(new faceSet(*iter())); - Info<< " " << faceSets.last().name() << endl; - } - } - } - { - IOobjectList pSets(objects.lookupClass(pointSet::typeName)); - if (pSets.size()) - { - Info<< "Reading pointSets:" << endl; - forAllConstIter(IOobjectList, pSets, iter) - { - pointSets.append(new pointSet(*iter())); - Info<< " " << pointSets.last().name() << endl; - } - } - } + ReadFields(objects, cellSets); + ReadFields(objects, faceSets); + ReadFields(objects, pointSets); } @@ -1183,6 +1148,7 @@ int main(int argc, char *argv[]) } + // Move mesh (since morphing might not do this) if (map().hasMotionPoints()) { @@ -1288,9 +1254,20 @@ int main(int argc, char *argv[]) { mesh.setInstance(oldInstance); } + else + { + mesh.setInstance(runTime.timeName()); + } + Info<< "Writing mesh to " << mesh.facesInstance() << endl; + processorMeshes::removeFiles(mesh); + hexRef8::removeFiles(mesh); + topoSet::updateMesh(mesh.facesInstance(), map(), cellSets); + topoSet::updateMesh(mesh.facesInstance(), map(), faceSets); + topoSet::updateMesh(mesh.facesInstance(), map(), pointSets); + mesh.write(); if (cellProcAddressing.headerOk()) @@ -1437,27 +1414,6 @@ int main(int argc, char *argv[]) ).write(); } - if (renumberSets) - { - forAll(cellSets, i) - { - cellSets[i].updateMesh(map()); - cellSets[i].instance() = mesh.facesInstance(); - cellSets[i].write(); - } - forAll(faceSets, i) - { - faceSets[i].updateMesh(map()); - faceSets[i].instance() = mesh.facesInstance(); - faceSets[i].write(); - } - forAll(pointSets, i) - { - pointSets[i].updateMesh(map()); - pointSets[i].instance() = mesh.facesInstance(); - pointSets[i].write(); - } - } Info<< "End\n" << endl; diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict b/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict index db31243bfe4f1fe31970770108cceeab7f094d01..c6321991cc8ce301ac84b6dc3a732689044db4ba 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMeshDict @@ -34,9 +34,6 @@ sortCoupledFaceCells false; // Optional entry: sort points into internal and boundary points //orderPoints false; -// Optional: suppress renumbering cellSets,faceSets,pointSets -//renumberSets false; - method CuthillMcKee; //method Sloan; diff --git a/applications/utilities/mesh/manipulation/setSet/Allwmake b/applications/utilities/mesh/manipulation/setSet/Allwmake index ce9bef7333f3d44613079703727885ee1916b634..49aaea637e3703769d9beb60d1e951b8471ceedc 100755 --- a/applications/utilities/mesh/manipulation/setSet/Allwmake +++ b/applications/utilities/mesh/manipulation/setSet/Allwmake @@ -11,7 +11,7 @@ unset COMP_FLAGS LINK_FLAGS # if [ -f /usr/include/readline/readline.h ] then - echo "Found <readline/readline.h> -- enabling readline support." + echo " found <readline/readline.h> -- enabling readline support." export COMP_FLAGS="-DHAS_READLINE" export LINK_FLAGS="-lreadline" fi diff --git a/applications/utilities/mesh/manipulation/splitMesh/Make/options b/applications/utilities/mesh/manipulation/splitMesh/Make/options index 73f34b0f85f190348d7b3b89bc9b39acd5ce761f..3d7ac99ffec7121e2c9fa3323b10a5e950149244 100644 --- a/applications/utilities/mesh/manipulation/splitMesh/Make/options +++ b/applications/utilities/mesh/manipulation/splitMesh/Make/options @@ -1,7 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ -ldynamicMesh \ + -lreconstruct \ -lmeshTools diff --git a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C index 536cf41c105c816f2c55f1dd998f7a634f0066c7..166ffae4f57888849701ef8e060234a0e028b501 100644 --- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C +++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -56,6 +56,7 @@ Description #include "attachPolyTopoChanger.H" #include "regionSide.H" #include "primitiveFacePatch.H" +#include "processorMeshes.H" using namespace Foam; @@ -287,6 +288,9 @@ int main(int argc, char *argv[]) << "Failed writing polyMesh." << exit(FatalError); } + topoSet::removeFiles(mesh); + processorMeshes::removeFiles(mesh); + Info<< nl << "End" << nl << endl; diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/Make/options b/applications/utilities/mesh/manipulation/splitMeshRegions/Make/options index da1b9c50167ad9f68701dbeec656bac1d2187d06..554d59b25d64feec8cbf6ce14d64c58ac00a1823 100644 --- a/applications/utilities/mesh/manipulation/splitMeshRegions/Make/options +++ b/applications/utilities/mesh/manipulation/splitMeshRegions/Make/options @@ -1,10 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ - -lfiniteVolume \ - -lgenericPatchFields \ + -lreconstruct \ -ldynamicMesh \ - -lmeshTools + -lgenericPatchFields diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C index 3c8dc794f73277a00ef8dfb04f9b009c72429311..2359e1c39cb96d37918baef50b806bca9aeb315c 100644 --- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C +++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -107,6 +107,7 @@ Description #include "mappedWallPolyPatch.H" #include "fvMeshTools.H" #include "zeroGradientFvPatchFields.H" +#include "processorMeshes.H" using namespace Foam; @@ -941,6 +942,8 @@ void createAndWriteRegion newMesh().setInstance(newMeshInstance); newMesh().write(); + topoSet::removeFiles(newMesh()); + processorMeshes::removeFiles(newMesh()); // Write addressing files like decomposePar Info<< "Writing addressing to base mesh" << endl; diff --git a/applications/utilities/mesh/manipulation/subsetMesh/Make/options b/applications/utilities/mesh/manipulation/subsetMesh/Make/options index c92e38fddf75eac3651d9187ada2231de128e2cc..a6ea0aba6c8c372acc367bab20fcfb6f28bd4d1b 100644 --- a/applications/utilities/mesh/manipulation/subsetMesh/Make/options +++ b/applications/utilities/mesh/manipulation/subsetMesh/Make/options @@ -1,9 +1,10 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude EXE_LIBS = \ -ldynamicMesh \ - -ldynamicMesh \ + -lreconstruct \ -lgenericPatchFields diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C index 7af8edb75a4f1f07f40b4b8bd51d5e9b8891a4c3..4e03eb9cc878697f3369b0ee221bc2337f94754f 100644 --- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C +++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -41,11 +41,15 @@ Description #include "fvMeshSubset.H" #include "argList.H" -#include "cellSet.H" #include "IOobjectList.H" #include "volFields.H" #include "topoDistanceData.H" #include "FaceCellWave.H" +#include "cellSet.H" +#include "faceSet.H" +#include "pointSet.H" +#include "ReadFields.H" +#include "processorMeshes.H" using namespace Foam; @@ -262,6 +266,59 @@ void subsetDimensionedFields } +template<class TopoSet> +void subsetTopoSets +( + const fvMesh& mesh, + const IOobjectList& objectsList, + const labelList& map, + const fvMesh& subMesh, + PtrList<TopoSet>& subSets +) +{ + // Read original sets + PtrList<TopoSet> sets; + ReadFields<TopoSet>(objectsList, sets); + + subSets.setSize(sets.size()); + forAll(sets, i) + { + TopoSet& set = sets[i]; + + Info<< "Subsetting " << set.type() << " " << set.name() << endl; + + // Map the data + PackedBoolList isSet(set.maxSize(mesh)); + forAllConstIter(labelHashSet, set, iter) + { + isSet[iter.key()] = true; + } + label nSet = 0; + forAll(map, i) + { + if (isSet[map[i]]) + { + nSet++; + } + } + + subSets.set + ( + i, + new TopoSet(subMesh, set.name(), nSet, IOobject::AUTO_WRITE) + ); + TopoSet& subSet = subSets[i]; + forAll(map, i) + { + if (isSet[map[i]]) + { + subSet.insert(i); + } + } + } +} + + int main(int argc, char *argv[]) { @@ -557,6 +614,43 @@ int main(int argc, char *argv[]) subsetDimensionedFields(subsetter, tensorDimNames, tensorDimFlds); + // topoSets and subset + // ~~~~~~~~~~~~~~~~~~~ + + PtrList<cellSet> cellSets; + PtrList<faceSet> faceSets; + PtrList<pointSet> pointSets; + { + IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); + objects.remove(currentSet); + subsetTopoSets + ( + mesh, + objects, + subsetter.cellMap(), + subsetter.subMesh(), + cellSets + ); + subsetTopoSets + ( + mesh, + objects, + subsetter.faceMap(), + subsetter.subMesh(), + faceSets + ); + subsetTopoSets + ( + mesh, + objects, + subsetter.pointMap(), + subsetter.subMesh(), + pointSets + ); + } + + + // Write mesh and fields to new time // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -564,15 +658,22 @@ int main(int argc, char *argv[]) { runTime.setTime(instant(fieldsInstance), 0); subsetter.subMesh().setInstance(meshInstance); + topoSet::setInstance(meshInstance, cellSets); + topoSet::setInstance(meshInstance, faceSets); + topoSet::setInstance(meshInstance, pointSets); } else { runTime++; + subsetter.subMesh().setInstance(runTime.timeName()); } + + Info<< "Writing subsetted mesh and fields to time " << runTime.timeName() << endl; subsetter.subMesh().write(); + processorMeshes::removeFiles(subsetter.subMesh()); // Subsetting adds 'subset' prefix. Rename field to be like original. diff --git a/applications/utilities/mesh/manipulation/topoSet/topoSet.C b/applications/utilities/mesh/manipulation/topoSet/topoSet.C index d5e5358bf55450000ee441cc8cf621ffcc218c00..eb03d855f1682c2e4fb7a311fb45ea845a9f8cce 100644 --- a/applications/utilities/mesh/manipulation/topoSet/topoSet.C +++ b/applications/utilities/mesh/manipulation/topoSet/topoSet.C @@ -36,9 +36,6 @@ Description #include "Time.H" #include "polyMesh.H" #include "topoSetSource.H" -#include "cellSet.H" -#include "faceSet.H" -#include "pointSet.H" #include "globalMeshData.H" #include "timeSelector.H" #include "IOobjectList.H" diff --git a/applications/utilities/mesh/manipulation/topoSet/topoSetDict b/applications/utilities/mesh/manipulation/topoSet/topoSetDict index e5b372e0c9066f0932aea06038e9ef447ceb8371..d4ea1bd2a38950cc2a717f64c031019764538c45 100644 --- a/applications/utilities/mesh/manipulation/topoSet/topoSetDict +++ b/applications/utilities/mesh/manipulation/topoSet/topoSetDict @@ -342,8 +342,12 @@ FoamFile // // cellZoneSet // ~~~~~~~~~~~ -// (mirrors operations on a cellSet into a cellZone) +// Manipulates a cellZone (as well as a cellSet) +// Takes any cellSet source. The difference with a cellSet is +// - reads the cells from the cellZone, not the cellSet +// - write to the cellZone as well as the cellSet // +// For backwards compatibility: // // Select based on cellSet // source setToCellZone; // sourceInfo @@ -355,6 +359,9 @@ FoamFile // // faceZoneSet // ~~~~~~~~~~~ +// Manipulates a faceZone (as well as a faceSet). It can only be used +// with two special sources: +// // // Select based on faceSet without orientation // source setToFaceZone; // sourceInfo @@ -394,17 +401,19 @@ FoamFile // // pointZoneSet // ~~~~~~~~~~~~ -// (mirrors operations on a pointSet into a pointZone) +// Manipulates a pointZone (as well as a pointSet) +// Takes any pointSet source. The difference with a pointSet is +// - reads the cells from the pointZone, not the pointSet +// - write to the pointZone as well as the pointSet // +// For backwards compatibility: // // Select based on pointSet // source setToPointZone; // sourceInfo // { // set p0; // name of pointSet // } -// -// -// + actions ( @@ -465,6 +474,19 @@ actions option all; } } + + + // Example: create cellZone from geometric region + { + name c0; + type cellZoneSet; + action new; + source boxToCell; + sourceInfo + { + box (0.04 0 0)(0.06 100 100); + } + } ); // ************************************************************************* // diff --git a/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C b/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C index 7cd62abbdcad8f1c456d935108a88d31bda40c0d..2528355e11756e689128d73b21d715a030d94e13 100644 --- a/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C +++ b/applications/utilities/miscellaneous/foamDictionary/foamDictionary.C @@ -57,6 +57,9 @@ Usage - \par -includes List the \c #include and \c #includeIfPresent files to standard output + - \par -disableFunctionEntries + Do not expand macros or directives (#include etc) + Example usage: - Change simulation to run for one timestep only: \verbatim @@ -97,6 +100,15 @@ Usage -entry boundaryField \endverbatim + - Change patch type: + \verbatim + foamDictionary constant/polyMesh/boundary \ + -entry entry0.fixedWalls.type -set patch + \endverbatim + This uses special parsing of Lists which stores these in the + dictionary with keyword 'entryDDD' where DDD is the position + in the dictionary (after ignoring the FoamFile entry). + \*---------------------------------------------------------------------------*/ #include "argList.H" @@ -271,6 +283,11 @@ int main(int argc, char *argv[]) "Read the specified dictionary file, expand the macros etc. and write " "the resulting dictionary to standard output" ); + argList::addBoolOption + ( + "disableFunctionEntries", + "Disable expansion of dictionary directives - #include, #codeStream etc" + ); argList args(argc, argv); @@ -281,6 +298,15 @@ int main(int argc, char *argv[]) Foam::functionEntries::includeEntry::log = true; } + const bool disableEntries = args.optionFound("disableFunctionEntries"); + if (disableEntries) + { + Info<< "Not expanding variables or dictionary directives" + << endl; + entry::disableFunctionEntries = true; + } + + fileName dictFileName(args[1]); autoPtr<IFstream> dictFile(new IFstream(dictFileName)); @@ -460,7 +486,7 @@ int main(int argc, char *argv[]) { FatalIOErrorInFunction(dictFile) << "Cannot find entry " << entryName - << exit(FatalError, 2); + << exit(FatalIOError, 2); } } } diff --git a/applications/utilities/miscellaneous/foamHelp/Allwmake b/applications/utilities/miscellaneous/foamHelp/Allwmake index 87d2293c26cdda0bec79d616720da31c23dc0194..c00e52a8980ad58c92d7ea61a7ea3bef2a87d584 100755 --- a/applications/utilities/miscellaneous/foamHelp/Allwmake +++ b/applications/utilities/miscellaneous/foamHelp/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType helpTypes wmake $targetType diff --git a/applications/utilities/miscellaneous/foamList/Make/options b/applications/utilities/miscellaneous/foamList/Make/options index 18d4dfeb9fa278a50edc2f208210e42c83e1e8b6..7eb0276c4df360166b4b2518a17d716b536bd7d7 100644 --- a/applications/utilities/miscellaneous/foamList/Make/options +++ b/applications/utilities/miscellaneous/foamList/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -DFULLDEBUG -g -O0 \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ @@ -16,11 +17,8 @@ EXE_LIBS = \ -lcoalCombustion \ -lcombustionModels \ -lcompressibleEulerianInterfacialModels \ - -lcompressibleMultiphaseEulerianInterfacialModels \ -lcompressibleTurbulenceModels \ -lCompressibleTwoPhaseMixtureTurbulenceModels \ - -lcompressibleTwoPhaseSystem \ - -lconformalVoronoiMesh \ -ldecompositionMethods \ -ldistributed \ -ldistributionModels \ @@ -54,12 +52,7 @@ EXE_LIBS = \ -lliquidPropertiesFvPatchFields \ -lliquidProperties \ -lmeshTools \ - -lmultiphaseInterFoam \ - -lmultiphaseMixtureThermo \ - -lmultiphaseReactingTurbulenceModels \ - -lmultiphaseSystem \ -lODE \ - -lOpenFOAM \ -lphaseChangeTwoPhaseMixtures \ -lphaseCompressibleTurbulenceModels \ -lphaseTemperatureChangeTwoPhaseMixtures \ @@ -67,11 +60,6 @@ EXE_LIBS = \ -lpyrolysisModels \ -lradiationModels \ -lrandomProcesses \ - -lreactingEulerianInterfacialCompositionModels \ - -lreactingEulerianInterfacialModels \ - -lreactingMultiphaseSystem \ - -lreactingPhaseSystem \ - -lreactingTwoPhaseSystem \ -lreactionThermophysicalModels \ -lregionCoupled \ -lregionCoupling \ @@ -101,5 +89,4 @@ EXE_LIBS = \ -lturbulenceModelSchemes \ -lturbulenceModels \ -ltwoPhaseProperties \ - -ltwoPhaseReactingTurbulenceModels \ -lutilityFunctionObjects diff --git a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C index cfc68418e30a4a8d3eded5349a4d6eb55abeb35d..251b6523f4e0a0fc1009be9118ac67cb940937dc 100644 --- a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C +++ b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -53,6 +53,7 @@ Description #include "fvMeshAdder.H" #include "polyTopoChange.H" #include "extrapolatedCalculatedFvPatchFields.H" +#include "topoSet.H" using namespace Foam; @@ -731,6 +732,7 @@ int main(int argc, char *argv[]) << "Failed writing polyMesh." << exit(FatalError); } + topoSet::removeFiles(masterMesh); if (writeCellDist) { diff --git a/applications/utilities/parallelProcessing/redistributePar/Make/options b/applications/utilities/parallelProcessing/redistributePar/Make/options index 08d24a07f75ec9cfff77d2bfe14ca89ab0139f5f..189902467f7ab2777e969adce463624c76ee1e15 100644 --- a/applications/utilities/parallelProcessing/redistributePar/Make/options +++ b/applications/utilities/parallelProcessing/redistributePar/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ - -I$(LIB_SRC)/dynamicMesh/lnInclude + -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/mesh/snappyHexMesh/lnInclude EXE_LIBS = \ -lfiniteVolume \ @@ -14,4 +15,5 @@ EXE_LIBS = \ -ldecompose \ -lmeshTools \ -llagrangian \ - -ldynamicMesh + -ldynamicMesh \ + -lsnappyHexMesh diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C index c21d94b3dddcff4b7ef8e45b2d9f8ee1ef3c8a9a..aee47e55fd4ad525053f67a3965e8d180c182323 100644 --- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C +++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C @@ -75,11 +75,15 @@ Usage #include "loadOrCreateMesh.H" #include "processorFvPatchField.H" #include "zeroGradientFvPatchFields.H" +#include "decompositionModel.H" +#include "topoSet.H" #include "parFvFieldReconstructor.H" #include "parLagrangianRedistributor.H" #include "unmappedPassiveParticleCloud.H" #include "hexRef8Data.H" +#include "meshRefinement.H" +#include "pointFields.H" using namespace Foam; @@ -837,6 +841,8 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite PtrList<DimensionedField<symmTensor, volMesh>> dimSymmTensorFields; PtrList<DimensionedField<tensor, volMesh>> dimTensorFields; + DynamicList<word> pointFieldNames; + if (doReadFields) { @@ -1050,6 +1056,40 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite ); + // pointFields currently not supported. Read their names so we + // can delete them. + { + // Get my objects of type + pointFieldNames.append + ( + objects.lookupClass(pointScalarField::typeName).sortedNames() + ); + pointFieldNames.append + ( + objects.lookupClass(pointVectorField::typeName).sortedNames() + ); + pointFieldNames.append + ( + objects.lookupClass + ( + pointSphericalTensorField::typeName + ).sortedNames() + ); + pointFieldNames.append + ( + objects.lookupClass + ( + pointSymmTensorField::typeName + ).sortedNames() + ); + pointFieldNames.append + ( + objects.lookupClass(pointTensorField::typeName).sortedNames() + ); + + // Make sure all processors have the same set + Pstream::scatter(pointFieldNames); + } if (Pstream::master() && decompose) { @@ -1136,6 +1176,20 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite runTime.TimePaths::caseName() = baseRunTime.caseName(); mesh.write(); + topoSet::removeFiles(mesh); + forAll(pointFieldNames, i) + { + IOobject io + ( + pointFieldNames[i], + runTime.timeName(), + mesh + ); + + fileName fieldFile(io.objectPath()); + if (topoSet::debug) DebugVar(fieldFile); + rm(fieldFile); + } // Now we've written all. Reset caseName on master Info<< "Restoring caseName to " << proc0CaseName << endl; @@ -1145,6 +1199,20 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite else { mesh.write(); + topoSet::removeFiles(mesh); + forAll(pointFieldNames, i) + { + IOobject io + ( + pointFieldNames[i], + runTime.timeName(), + mesh + ); + + fileName fieldFile(io.objectPath()); + if (topoSet::debug) DebugVar(fieldFile); + rm(fieldFile); + } } Info<< "Written redistributed mesh to " << mesh.facesInstance() << nl << endl; @@ -1180,14 +1248,18 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite { runTime.TimePaths::caseName() = proc0CaseName; } + // Make sure all processors have valid data (since only some will // read) refData.sync(io); - // Distribute refData.distribute(map); + + // Now we've read refinement data we can remove it + meshRefinement::removeFiles(mesh); + if (nDestProcs == 1) { if (Pstream::master()) @@ -1209,6 +1281,55 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite } } + //// Sets. Disabled for now. + //{ + // // Read sets + // if (Pstream::master() && decompose) + // { + // runTime.TimePaths::caseName() = baseRunTime.caseName(); + // } + // IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); + // + // PtrList<cellSet> cellSets; + // ReadFields(objects, cellSets); + // + // if (Pstream::master() && decompose) + // { + // runTime.TimePaths::caseName() = proc0CaseName; + // } + // + // forAll(cellSets, i) + // { + // cellSets[i].distribute(map); + // } + // + // if (nDestProcs == 1) + // { + // if (Pstream::master()) + // { + // Info<< "Setting caseName to " << baseRunTime.caseName() + // << " to write reconstructed refinement data." << endl; + // runTime.TimePaths::caseName() = baseRunTime.caseName(); + // + // forAll(cellSets, i) + // { + // cellSets[i].distribute(map); + // } + // + // // Now we've written all. Reset caseName on master + // Info<< "Restoring caseName to " << proc0CaseName << endl; + // runTime.TimePaths::caseName() = proc0CaseName; + // } + // } + // else + // { + // forAll(cellSets, i) + // { + // cellSets[i].distribute(map); + // } + // } + //} + return autoPtr<mapDistributePolyMesh> ( diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/Allwmake b/applications/utilities/postProcessing/dataConversion/foamToVTK/Allwmake index 150ac3019a1694c64b273db6f3595ae754d8a2f6..81e0196f99b5ec655b542da25f8471c882e135fd 100755 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/Allwmake +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType foamToVTK wmake $targetType diff --git a/applications/utilities/postProcessing/graphics/PVReaders/Allwclean b/applications/utilities/postProcessing/graphics/PVReaders/Allwclean index c8d0f03e86b020cf4afa44cf002a9cd8f9eb9d23..89cadd30408d751680cbbcc23a011129f4d5d5bb 100755 --- a/applications/utilities/postProcessing/graphics/PVReaders/Allwclean +++ b/applications/utilities/postProcessing/graphics/PVReaders/Allwclean @@ -1,6 +1,6 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x +#set -x wclean libso vtkPVReaders PVblockMeshReader/Allwclean diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwclean b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwclean index 914ce6dd4e0198c09bb30a3c8d8f2a63bc6a3464..f0cd56dee20a9f6965864c15c771caaae5ea9a5c 100755 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwclean +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwclean @@ -4,7 +4,7 @@ cd ${0%/*} || exit 1 # Run from this directory # Source the wmake functions . $WM_DIR/scripts/wmakeFunctions -set -x +#set -x # deal with client/server vs combined plugins rm -f $FOAM_LIBBIN/libPVFoamReader* 2>/dev/null diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwmake b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwmake index 296767f4a895c56e8e85e90a46e766d896d757e2..7788998933d05849534a7d11f84e35d46d0e8fc7 100755 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwmake +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/Allwmake @@ -7,29 +7,49 @@ cd ${0%/*} || exit 1 # Run from this directory # Source the wmake functions . $WM_DIR/scripts/wmakeFunctions -# ensure CMake gets the correct C/C++ compilers +# Ensure CMake gets the correct C/C++ compilers [ -n "$WM_CC" ] && export CC="$WM_CC" [ -n "$WM_CXX" ] && export CXX="$WM_CXX" -set -x -if [ -d "$ParaView_DIR" -a -r "$ParaView_DIR" ] + +# CMake into objectsDir, +# with an additional attempt if (possibly incorrect) CMakeCache.txt existed +doCmake() +{ + local sourceDir="$1" + + findObjectDir $sourceDir # Where are generated files stored? + test -f "$objectsDir/CMakeCache.txt" + retry=$? # CMakeCache.txt exists, but sources may have moved + + mkdir -p $objectsDir && \ + ( + cd $objectsDir || exit 1 + + cmake $sourceDir || { + if [ $retry -eq 0 ] + then + echo "Removing CMakeCache.txt and attempt again" + rm -f CMakeCache.txt + cmake $sourceDir + else + exit 1 + fi + } && make + ) +} + + +if [ -d "$ParaView_DIR" ] then wmake $targetType vtkPVFoam - if [ "$targetType" != "objects" ] + if [ "$targetType" != objects ] then - sourceDir=$PWD/PVFoamReader - - # Where are any generated files stored? - findObjectDir $sourceDir - ( - mkdir -p $objectsDir \ - && cd $objectsDir \ - && cmake $sourceDir \ - && make - ) || { + doCmake $PWD/PVFoamReader || { + echo + echo " WARNING: incomplete build of ParaView OpenFOAM plugin" echo - echo "WARNING: incomplete build of ParaView OpenFOAM plugin" } fi fi diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt index 7fb8a8170e7215f253058491a248bf4958f63413..49e64bf76ca0ed0959aa7fb07dfe7d97c998acaa 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/CMakeLists.txt @@ -78,9 +78,9 @@ ENDIF() TARGET_LINK_LIBRARIES( PVFoamReader_SM LINK_PUBLIC - OpenFOAM - finiteVolume vtkPVFoam + finiteVolume + OpenFOAM ) #----------------------------------------------------------------------------- diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/pqPVFoamReaderPanel.h b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/pqPVFoamReaderPanel.h index 2bdeaa6028b6c3a919309bffdea030b5dd3c8990..6ca0f3f7a5adbc8f80cfa1ba19a9752150491f86 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/pqPVFoamReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/PVFoamReader/pqPVFoamReaderPanel.h @@ -106,10 +106,6 @@ public: //- Construct from components pqPVFoamReaderPanel(pqProxy*, QWidget*); - - - //- Destructor - // virtual ~pqPVFoamReaderPanel(); }; diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/vtkPVFoam/Make/options b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/vtkPVFoam/Make/options index 9f63402d646402607cc5a547da62abbdbfabfd68..0154a3bcbacab572a9f7b553a96d81529f3a04cf 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/vtkPVFoam/Make/options +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVFoamReader/vtkPVFoam/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + ${c++LESSWARN} \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwclean b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwclean index afce206c8bed6a8c40f4dcb240378ed537e680bf..3a81901a0bb8494663a389e04c08916fefffad26 100755 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwclean +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwclean @@ -4,7 +4,7 @@ cd ${0%/*} || exit 1 # Run from this directory # Source the wmake functions . $WM_DIR/scripts/wmakeFunctions -set -x +#set -x # deal with client/server vs combined plugins rm -f $FOAM_LIBBIN/libPVblockMeshReader* 2>/dev/null diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwmake b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwmake index 5959a30fbb67fcc598e9632351829dda9450cba9..607a6cb8e3cf8da211f9ec8fa284bad83a069270 100755 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwmake +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/Allwmake @@ -11,25 +11,45 @@ cd ${0%/*} || exit 1 # Run from this directory [ -n "$WM_CC" ] && export CC="$WM_CC" [ -n "$WM_CXX" ] && export CXX="$WM_CXX" -set -x -if [ -d "$ParaView_DIR" -a -r "$ParaView_DIR" ] + +# CMake into objectsDir, +# with an additional attempt if (possibly incorrect) CMakeCache.txt existed +doCmake() +{ + local sourceDir="$1" + + findObjectDir $sourceDir # Where are generated files stored? + test -f "$objectsDir/CMakeCache.txt" + retry=$? # CMakeCache.txt exists, but sources may have moved + + mkdir -p $objectsDir && \ + ( + cd $objectsDir || exit 1 + + cmake $sourceDir || { + if [ $retry -eq 0 ] + then + echo "Removing CMakeCache.txt and attempt again" + rm -f CMakeCache.txt + cmake $sourceDir + else + exit 1 + fi + } && make + ) +} + + +if [ -d "$ParaView_DIR" ] then wmake $targetType vtkPVblockMesh - if [ "$targetType" != "objects" ] + if [ "$targetType" != objects ] then - sourceDir=$PWD/PVblockMeshReader - - # Where are any generated files stored? - findObjectDir $sourceDir - ( - mkdir -p $objectsDir \ - && cd $objectsDir \ - && cmake $sourceDir \ - && make - ) || { + doCmake $PWD/PVblockMeshReader || { + echo + echo " WARNING: incomplete build of ParaView BlockMesh plugin" echo - echo "WARNING: incomplete build of ParaView BlockMesh plugin" } fi fi diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt index aa15cc40551b587f23fffce3c78c6aa0434f9a8f..34c9353fe93d4a113802374e0db59d5be0d60344 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/CMakeLists.txt @@ -79,9 +79,9 @@ ENDIF() TARGET_LINK_LIBRARIES( PVblockMeshReader_SM LINK_PUBLIC - OpenFOAM - blockMesh vtkPVblockMesh + blockMesh + OpenFOAM ) #----------------------------------------------------------------------------- diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/PVblockMeshReader_SM.xml b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/PVblockMeshReader_SM.xml index 3a80fe5136d5529bd50aa54fe7d5fe86cc0373cd..28df8ae78bec86b37d6bf9bc5107c9bac2545227 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/PVblockMeshReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/PVblockMeshReader_SM.xml @@ -30,16 +30,17 @@ </Documentation> </IntVectorProperty> - <!-- Update GUI check box --> + <!-- Refresh button --> <IntVectorProperty - name="UpdateGUI" - command="SetUpdateGUI" + name="UiRefresh" + command="SetRefresh" number_of_elements="1" + is_internal="0" default_values="0" animateable="0"> <BooleanDomain name="bool"/> <Documentation> - A simple way to cause a reader GUI modification. + Rescan for updated blockMeshDict. </Documentation> </IntVectorProperty> @@ -102,6 +103,7 @@ <Hints> <Property name="FileName" show="0"/> + <Property name="UiRefresh" show="0"/> <Property name="UiShowPointNumbers" show="0"/> <ReaderFactory extensions="blockMesh" file_description="OpenFOAM blockMesh"/> diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.cxx index 70b1489dd049dca2c49f741fcc09143edbd47fa7..06f0db328d7ed755a3f4d1fc563b673b01db7053 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.cxx +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.cxx @@ -58,12 +58,30 @@ pqPVblockMeshReaderPanel::pqPVblockMeshReaderPanel : pqAutoGeneratedObjectPanel(proxy, p) { - // create first sublayout (at top of the panel) + // Create first sublayout (at top of the panel) QGridLayout *form = new QGridLayout(); this->PanelLayout->addLayout(form, 0, 0, 1, -1); vtkSMProperty* prop = 0; - // checkbox for showing point numbers + + // Refresh button for updating blocks + if ((prop = this->proxy()->GetProperty("UiRefresh")) != 0) + { + prop->SetImmediateUpdate(1); + QPushButton* refresh = new QPushButton("Refresh"); + refresh->setToolTip("Rescan for updated blockMeshDict."); + + form->addWidget(refresh, 0, 0, Qt::AlignLeft); + QObject::connect + ( + refresh, + SIGNAL(clicked()), + this, + SLOT(RefreshPressed()) + ); + } + + // Checkbox for showing point numbers if ((prop = this->proxy()->GetProperty("UiShowPointNumbers")) != 0) { prop->SetImmediateUpdate(true); @@ -97,7 +115,7 @@ void pqPVblockMeshReaderPanel::ShowPointNumbersToggled() this->proxy()->GetProperty("UiShowPointNumbers") )->SetElement(0, ShowPointNumbers_->isChecked()); - // update the active view + // Update the active view if (this->view()) { this->view()->render(); @@ -107,4 +125,19 @@ void pqPVblockMeshReaderPanel::ShowPointNumbersToggled() } +void pqPVblockMeshReaderPanel::RefreshPressed() +{ + // Update everything + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiRefresh") + )->Modified(); + + vtkSMSourceProxy::SafeDownCast(this->proxy())->UpdatePipeline(); + + // Render all views + pqApplicationCore::instance()->render(); +} + + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.h b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.h index f6a8acf247ac1f37be59052b0edf5cd2d92438a9..4c15bc374ea999c3c141cf694ec61de37e806bac 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/pqPVblockMeshReaderPanel.h @@ -67,6 +67,7 @@ class pqPVblockMeshReaderPanel protected slots: void ShowPointNumbersToggled(); + void RefreshPressed(); public: @@ -75,10 +76,6 @@ public: //- Construct from components pqPVblockMeshReaderPanel(pqProxy*, QWidget*); - - - //- Destructor - // virtual ~pqPVblockMeshReaderPanel(); }; diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.cxx b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.cxx index ce5b4a309afd6def23f532ff42b36be0391db6c9..6d559e7a3379b175bb22705be8db2c7610807746 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.cxx +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.cxx @@ -60,7 +60,6 @@ vtkPVblockMeshReader::vtkPVblockMeshReader() foamData_ = nullptr; ShowPointNumbers = 1; - UpdateGUI = 0; BlockSelection = vtkDataArraySelection::New(); CurvedEdgesSelection = vtkDataArraySelection::New(); @@ -97,7 +96,7 @@ vtkPVblockMeshReader::~vtkPVblockMeshReader() if (foamData_) { - // remove point numbers + // Remove point numbers updatePointNumbersView(false); delete foamData_; } @@ -117,7 +116,6 @@ vtkPVblockMeshReader::~vtkPVblockMeshReader() // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -// Do everything except set the output info int vtkPVblockMeshReader::RequestInformation ( vtkInformation* vtkNotUsed(request), @@ -158,23 +156,10 @@ int vtkPVblockMeshReader::RequestInformation foamData_->updateInfo(); } - // might need some other type of error handling - -// { -// vtkErrorMacro("could not find valid OpenFOAM blockMesh"); -// -// // delete foamData and flag it as fatal error -// delete foamData_; -// foamData_ = nullptr; -// return 0; -// } - - return 1; } -// Set the output info int vtkPVblockMeshReader::RequestData ( vtkInformation* vtkNotUsed(request), @@ -190,7 +175,7 @@ int vtkPVblockMeshReader::RequestData return 0; } - // catch previous error + // Catch previous error if (!foamData_) { vtkErrorMacro("Reader failed - perhaps no mesh?"); @@ -233,6 +218,19 @@ int vtkPVblockMeshReader::RequestData } +void vtkPVblockMeshReader::SetRefresh(int val) +{ + // Delete the current blockMesh to force re-read and update + if (foamData_) + { + updatePointNumbersView(false); + delete foamData_; + foamData_ = 0; + } + + Modified(); +} + void vtkPVblockMeshReader::SetShowPointNumbers(const int val) { @@ -248,7 +246,7 @@ void vtkPVblockMeshReader::updatePointNumbersView(const bool show) { pqApplicationCore* appCore = pqApplicationCore::instance(); - // need to check this, since our destructor calls this + // Need to check this, since our destructor calls this if (!appCore) { return; @@ -273,7 +271,7 @@ void vtkPVblockMeshReader::updatePointNumbersView(const bool show) ); } - // use refresh here? + // Use refresh here? } diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.h b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.h index a08c85acb46ed248a4401df1535828ccedd6caad..b160b7c035f5e76eaec2749e0711c1d36205920e 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.h +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/PVblockMeshReader/vtkPVblockMeshReader.h @@ -77,10 +77,8 @@ public: vtkGetMacro(ShowPointNumbers, int); // Description: - // GUI update control - vtkSetMacro(UpdateGUI, int); - vtkGetMacro(UpdateGUI, int); - + // Refresh blockMesh from changes to blockMeshDict + virtual void SetRefresh(int); // Description: // Blocks selection list control @@ -158,9 +156,6 @@ private: //- Show Point Numbers int ShowPointNumbers; - //- Dummy variable/switch to invoke a reader update - int UpdateGUI; - vtkDataArraySelection* BlockSelection; vtkDataArraySelection* CurvedEdgesSelection; diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/Make/options b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/Make/options index 9dcba4b39b761c7cff34c596e7a5b83141993cb6..79abf2d7fc4066ac9e24f917a5a381f6a771e23b 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/Make/options +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + ${c++LESSWARN} \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/fileFormats/lnInclude \ -I$(LIB_SRC)/mesh/blockMesh/lnInclude \ diff --git a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/vtkPVblockMesh.C b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/vtkPVblockMesh.C index a9932ffcc9aaba492b4f1c12a9caed3e2061f017..dd40c8e359459f850f56ca0f0fcc89db47b557b2 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/vtkPVblockMesh.C +++ b/applications/utilities/postProcessing/graphics/PVReaders/PVblockMeshReader/vtkPVblockMesh/vtkPVblockMesh.C @@ -72,12 +72,17 @@ void Foam::vtkPVblockMesh::updateInfoBlocks arrayRangeBlocks_.reset( arraySelection->GetNumberOfArrays() ); const blockMesh& blkMesh = *meshPtr_; + const int nBlocks = blkMesh.size(); for (int blockI = 0; blockI < nBlocks; ++blockI) { const blockDescriptor& blockDef = blkMesh[blockI]; - word partName = Foam::name(blockI); + // Display either blockI as a number or with its name + // (looked up from blockMeshDict) + OStringStream os; + blockDescriptor::write(os, blockI, blkMesh.meshDict()); + word partName(os.str()); // append the (optional) zone name if (!blockDef.zoneName().empty()) @@ -121,9 +126,10 @@ void Foam::vtkPVblockMesh::updateInfoEdges forAll(edges, edgeI) { OStringStream ostr; - - ostr<< edges[edgeI].start() << ":" << edges[edgeI].end() << " - " - << edges[edgeI].type(); + blockVertex::write(ostr, edges[edgeI].start(), blkMesh.meshDict()); + ostr<< ":"; + blockVertex::write(ostr, edges[edgeI].end(), blkMesh.meshDict()); + ostr << " - " << edges[edgeI].type(); // Add "beg:end - type" to GUI list arraySelection->AddArray(ostr.str().c_str()); @@ -352,7 +358,9 @@ void Foam::vtkPVblockMesh::updateFoamMesh() dictPath = dbPtr_().constant()/polyMesh::meshSubDir/dictName; } - IOdictionary meshDict + // Store dictionary since is used as database inside blockMesh class + // for names of vertices and blocks + IOdictionary* meshDictPtr = new IOdictionary ( IOobject ( @@ -360,11 +368,12 @@ void Foam::vtkPVblockMesh::updateFoamMesh() dbPtr_(), IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE, - false + true ) ); + meshDictPtr->store(); - meshPtr_ = new blockMesh(meshDict, meshRegion_); + meshPtr_ = new blockMesh(*meshDictPtr, meshRegion_); } @@ -429,15 +438,22 @@ void Foam::vtkPVblockMesh::renderPointNumbers if (show && meshPtr_) { - const pointField& cornerPts = meshPtr_->vertices(); - const scalar scaleFactor = meshPtr_->scaleFactor(); + const blockMesh& blkMesh = *meshPtr_; + const pointField& cornerPts = blkMesh.vertices(); + const scalar scaleFactor = blkMesh.scaleFactor(); pointNumberTextActorsPtrs_.setSize(cornerPts.size()); forAll(cornerPts, pointi) { vtkTextActor* txt = vtkTextActor::New(); - txt->SetInput(Foam::name(pointi).c_str()); + // Display either pointi as a number or with its name + // (looked up from blockMeshDict) + { + OStringStream os; + blockVertex::write(os, pointi, blkMesh.meshDict()); + txt->SetInput(os.str().c_str()); + } // Set text properties vtkTextProperty* tprop = txt->GetTextProperty(); diff --git a/applications/utilities/postProcessing/graphics/PVReaders/vtkPVReaders/Make/options b/applications/utilities/postProcessing/graphics/PVReaders/vtkPVReaders/Make/options index 8a80ee14970d1cb3adc50b58537e3a22c5c7d4c5..d84fae1560c139b3eb0a19d7ad4d9e67d5d2faf9 100644 --- a/applications/utilities/postProcessing/graphics/PVReaders/vtkPVReaders/Make/options +++ b/applications/utilities/postProcessing/graphics/PVReaders/vtkPVReaders/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + ${c++LESSWARN} \ -I$(ParaView_INCLUDE_DIR) \ -I$(ParaView_INCLUDE_DIR)/vtkkwiml diff --git a/applications/utilities/preProcessing/setFields/setFields.C b/applications/utilities/preProcessing/setFields/setFields.C index e30d26d0ed47bbd1cfc4561ce9e3ac5ef76bfe8a..0510d50bb9066a93178704aa95ea71806d67d73c 100644 --- a/applications/utilities/preProcessing/setFields/setFields.C +++ b/applications/utilities/preProcessing/setFields/setFields.C @@ -384,24 +384,18 @@ public: int main(int argc, char *argv[]) { + #include "addDictOption.H" #include "addRegionOption.H" #include "setRootCase.H" #include "createTime.H" #include "createNamedMesh.H" - Info<< "Reading setFieldsDict\n" << endl; + const word dictName("setFieldsDict"); + #include "setSystemMeshDictionaryIO.H" - IOdictionary setFieldsDict - ( - IOobject - ( - "setFieldsDict", - runTime.system(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ); + Info<< "Reading " << dictName << "\n" << endl; + + IOdictionary setFieldsDict(dictIO); if (setFieldsDict.found("defaultFieldValues")) { diff --git a/applications/utilities/preProcessing/wallFunctionTable/Allwmake b/applications/utilities/preProcessing/wallFunctionTable/Allwmake index 2aa17958a9516b17caef9b12382e3682eff7724e..06612a9c67435428e96cbee217ea6cb2cf385606 100755 --- a/applications/utilities/preProcessing/wallFunctionTable/Allwmake +++ b/applications/utilities/preProcessing/wallFunctionTable/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType tabulatedWallFunction wmake $targetType diff --git a/applications/utilities/surface/surfaceBooleanFeatures/Allwmake b/applications/utilities/surface/surfaceBooleanFeatures/Allwmake index 660a2e59b52039d526cc498cfab408d32a4cc953..260b46ea0bb624037067b0c3d855b67a5cd1963d 100755 --- a/applications/utilities/surface/surfaceBooleanFeatures/Allwmake +++ b/applications/utilities/surface/surfaceBooleanFeatures/Allwmake @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x unset COMPILE_FLAGS LINK_FLAGS diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/Make/options b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/Make/options index 424f89a8aba98e7eae709757dcc68d0a3471ec1e..367e9e2e3cfd19e541ae01dd4f6845665ffd157e 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/Make/options +++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/Make/options @@ -20,5 +20,6 @@ EXE_INC = \ -I/usr/include/Qt LIB_LIBS = \ + -L$(CGAL_ARCH_PATH)/lib \ -L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ -ltriSurface diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index dcbf38b8708f2a5f0e2bfbba09ffe56fff32a94f..0af29e1962e571c837062e4f77b472412a0cbe38 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -55,6 +55,7 @@ Usage #include "triangle.H" #include "triSurface.H" #include "triSurfaceSearch.H" +#include "triSurfaceTools.H" #include "argList.H" #include "OFstream.H" #include "OBJstream.H" @@ -64,79 +65,6 @@ Usage using namespace Foam; -// Does face use valid vertices? -bool validTri -( - const bool verbose, - const triSurface& surf, - const label facei -) -{ - // Simple check on indices ok. - - const labelledTri& f = surf[facei]; - - forAll(f, fp) - { - if (f[fp] < 0 || f[fp] >= surf.points().size()) - { - WarningInFunction - << "triangle " << facei << " vertices " << f - << " uses point indices outside point range 0.." - << surf.points().size()-1 << endl; - return false; - } - } - - if ((f[0] == f[1]) || (f[0] == f[2]) || (f[1] == f[2])) - { - WarningInFunction - << "triangle " << facei - << " uses non-unique vertices " << f - << " coords:" << f.points(surf.points()) - << endl; - return false; - } - - // duplicate triangle check - - const labelList& fFaces = surf.faceFaces()[facei]; - - // Check if faceNeighbours use same points as this face. - // Note: discards normal information - sides of baffle are merged. - forAll(fFaces, i) - { - label nbrFacei = fFaces[i]; - - if (nbrFacei <= facei) - { - // lower numbered faces already checked - continue; - } - - const labelledTri& nbrF = surf[nbrFacei]; - - if - ( - ((f[0] == nbrF[0]) || (f[0] == nbrF[1]) || (f[0] == nbrF[2])) - && ((f[1] == nbrF[0]) || (f[1] == nbrF[1]) || (f[1] == nbrF[2])) - && ((f[2] == nbrF[0]) || (f[2] == nbrF[1]) || (f[2] == nbrF[2])) - ) - { - WarningInFunction - << "triangle " << facei << " vertices " << f - << " has the same vertices as triangle " << nbrFacei - << " vertices " << nbrF - << " coords:" << f.points(surf.points()) - << endl; - - return false; - } - } - return true; -} - - labelList countBins ( const scalar min, @@ -377,14 +305,12 @@ int main(int argc, char *argv[]) const fileName surfFileName = args[1]; const bool checkSelfIntersect = args.optionFound("checkSelfIntersection"); - const bool verbose = args.optionFound("verbose"); const bool splitNonManifold = args.optionFound("splitNonManifold"); label outputThreshold = 10; args.optionReadIfPresent("outputThreshold", outputThreshold); Info<< "Reading surface from " << surfFileName << " ..." << nl << endl; - // Read // ~~~~ @@ -479,7 +405,7 @@ int main(int argc, char *argv[]) forAll(surf, facei) { - if (!validTri(verbose, surf, facei)) + if (!triSurfaceTools::validTri(surf, facei)) { illegalFaces.append(facei); } diff --git a/applications/utilities/surface/surfaceClean/surfaceClean.C b/applications/utilities/surface/surfaceClean/surfaceClean.C index 6c55ce14d526870093e32c43d944379ac6c0e11a..b11845df044e15bdb36cf99e3db4138245a0ee98 100644 --- a/applications/utilities/surface/surfaceClean/surfaceClean.C +++ b/applications/utilities/surface/surfaceClean/surfaceClean.C @@ -60,7 +60,7 @@ int main(int argc, char *argv[]) argList::addBoolOption ( "noClean", - "perform some surface checking/cleanup on the input surface" + "suppress surface checking/cleanup on the input surface" ); argList args(argc, argv); diff --git a/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C b/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C index bc7d50f495e3a4b3fe807d7946e84c4b9bc85615..5f1c5e9a33dbc2e94e984b654889927c1cbd41a3 100644 --- a/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C +++ b/applications/utilities/surface/surfaceMeshConvertTesting/surfaceMeshConvertTesting.C @@ -91,7 +91,11 @@ int main(int argc, char *argv[]) argList::validArgs.append("inputFile"); argList::validArgs.append("outputFile"); - argList::addBoolOption("clean"); + argList::addBoolOption + ( + "clean", + "perform some surface checking/cleanup on the input surface" + ); argList::addBoolOption ( "orient", diff --git a/bin/foamTags b/bin/foamTags index aca6e45bc3d1601b6b11fae1da5cc3f3f37db312..ec881c5eb5c4d4b7d3f96cddf4d2326ac820a9e7 100755 --- a/bin/foamTags +++ b/bin/foamTags @@ -3,7 +3,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation +# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------- # License @@ -46,8 +46,7 @@ then exit 1 fi - -for cmd in etags ectags +for cmd in etags ctags-exuberant do type $cmd >/dev/null 2>&1 || { echo "${0##*/} cannot build tag files: '$cmd' command not found" @@ -55,29 +54,16 @@ do } done - cd $WM_PROJECT_DIR || exit 1 mkdir .tags 2>/dev/null - -etagsCmd="etags --declarations -l c++ -o .tags/etags -" -#etagsDefCmd="etags -l c++ -o .tags/etagsDef -" -#etagsDecCmd="etags --declarations -l c++ -o .tags/etagsDec -" - -etagsCmd="ectags -e --extra=+fq --file-scope=no --c-kinds=+p -o .tags/etags -L -" -etagsDefCmd="ectags -e --extra=+fq --file-scope=no -o .tags/etagsDef -L -" -etagsDecCmd="ectags -e --extra=+fq --file-scope=no --c-kinds=+p -o .tags/etagsDec -L -" - -ectagsDecCmd="ectags -o .tags/ectagsDec --file-scope=no --c-kinds=+p --excmd=n --extra=+fq --fields=+afiKmnsSzt -L -" +#etagsCmd="etags --declarations -l c++ -o .tags/etags -" +etagsCmd="ctags-exuberant -e --extra=+fq --file-scope=no --c-kinds=+p -o .tags/etags -L -" find -H $WM_PROJECT_DIR \( -name "*.[HC]" -o -name lnInclude -prune -o -name Doxygen -prune \) | $etagsCmd -find -H $WM_PROJECT_DIR \( -name "*.[HC]" -o -name lnInclude -prune -o -name Doxygen -prune \) | $etagsDefCmd -find -H $WM_PROJECT_DIR \( -name "*.H" -o -name lnInclude -prune -o -name Doxygen -prune \) | $etagsDecCmd -find -H $WM_PROJECT_DIR \( -name "*.H" -o -name lnInclude -prune -o -name Doxygen -prune \) | $ectagsDecCmd - -gtags -i --gtagsconf bin/tools/gtagsrc .tags -foamEbrowse +#gtags -i --gtagsconf bin/tools/gtagsrc .tags +#foamEbrowse #------------------------------------------------------------------------------ diff --git a/bin/tools/MakefileDirs b/bin/tools/MakefileDirs index 1a0c45ba2d9985cdc78c2b1f7fd90d76b8da41f8..183c424bc4694a1aa1b3d0454dd8d4b768897fdb 100644 --- a/bin/tools/MakefileDirs +++ b/bin/tools/MakefileDirs @@ -1,8 +1,8 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation +# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------ # License diff --git a/bin/tools/foamLog.db b/bin/tools/foamLog.db index 08077630c89fbcc62a080e0d5779a30200c292b4..ed9f55c5abbab16b57c382b59cff72a3202b8719 100644 --- a/bin/tools/foamLog.db +++ b/bin/tools/foamLog.db @@ -36,8 +36,9 @@ contCumulative/time step continuity errors :/cumulative = minFu/min\(fu\) = /min(fu) = minFt/min\(ft\) = /min(ft) = -#- Execution time: +#- Timing: executionTime/ExecutionTime = /ExecutionTime = +clockTime/ClockTime = /ClockTime = #- Interface Courant no: IntCourantMax/Interface Courant Number /max: diff --git a/doc/Allwmake b/doc/Allwmake index ba28b7955fcc22fcb22b32bd8cc44555c0d388d4..f6684e337c50d0946ec6e957bddbd74d3c57bd00 100755 --- a/doc/Allwmake +++ b/doc/Allwmake @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x # fix permissions (NB: '+X' and not '+x'!) chmod a+rX $WM_PROJECT_DIR $WM_PROJECT_DIR/doc Doxygen diff --git a/doc/Doxygen/Allwmake b/doc/Doxygen/Allwmake index c065d2a9258c18d44a8cf332f4fbd18d0a941410..8ca2ed256d326b4115cdb17b208039a72bfc71de 100755 --- a/doc/Doxygen/Allwmake +++ b/doc/Doxygen/Allwmake @@ -2,9 +2,9 @@ cd ${0%/*} || exit 1 # Run from this directory [ -d "$WM_PROJECT_DIR" ] || { - echo "Error: WM_PROJECT_DIR directory does not exist" - echo " Check the OpenFOAM entries in your dot-files and source them." - echo " WM_PROJECT_DIR=$WM_PROJECT_DIR" + echo " Error: WM_PROJECT_DIR directory does not exist" + echo " Check the OpenFOAM entries in your dot-files and source them." + echo " WM_PROJECT_DIR=$WM_PROJECT_DIR" exit 1 } @@ -58,7 +58,6 @@ do done #------------------------------------------------------------------------------ -set -x rm -rf latex man diff --git a/doc/tools/find-its b/doc/tools/find-its deleted file mode 100755 index 44c85130fbf5bfe768275105b99a0a86361b2ce0..0000000000000000000000000000000000000000 --- a/doc/tools/find-its +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -#------------------------------------------------------------------------------ -# Script -# find-its -# -# Description -# Search for files with "it's" -# This contraction (== "it is") looks too much like "its" (possesive) -# and confuses non-native (and some native) English speakers. -# -#------------------------------------------------------------------------------ -set -x -cd $WM_PROJECT_DIR || exit 1 - -git grep -e "it's" - -#------------------------------------------------------------------------------ diff --git a/doc/tools/find-trailingspace b/doc/tools/find-trailingspace index a7bf8390f20a989f494130a157e55d6390e0b56a..1dfcf1ed3ebf38a6478693dcccc86b3d819a5b46 100755 --- a/doc/tools/find-trailingspace +++ b/doc/tools/find-trailingspace @@ -7,7 +7,6 @@ # Search for files with trailing whitesapce # #------------------------------------------------------------------------------ -set -x cd $WM_PROJECT_DIR || exit 1 tab=$'\t' diff --git a/etc/bashrc b/etc/bashrc index c4fc2e21dfb5afa25921fe251894b611a1997281..dd9b7807e2f0831df6a970ee5d18f77e320ad84b 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -61,7 +61,7 @@ export FOAM_INST_DIR export WM_COMPILER_TYPE=system #- Compiler: -# WM_COMPILER = Gcc | Gcc4[5-9] | Gcc5[1-4] | Gcc61 | Clang | Icc +# WM_COMPILER = Gcc | Gcc4[8-9] | Gcc5[1-4] | Gcc6[1-2] | Clang | Icc export WM_COMPILER=Gcc unset WM_COMPILER_ARCH WM_COMPILER_LIB_ARCH @@ -85,7 +85,7 @@ export WM_COMPILE_OPTION=Opt #- MPI implementation: # WM_MPLIB = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPICH | MPICH-GM | HPMPI -# | MPI | QSMPI | SGIMPI +# | MPI | FJMPI | QSMPI | SGIMPI | INTELMPI export WM_MPLIB=SYSTEMOPENMPI #- Operating System: diff --git a/etc/caseDicts/postProcessing/fields/add b/etc/caseDicts/postProcessing/fields/add new file mode 100644 index 0000000000000000000000000000000000000000..3eea74aff96977d5254964f4b945fb3253f634ed --- /dev/null +++ b/etc/caseDicts/postProcessing/fields/add @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Web: www.OpenFOAM.org + \\/ M anipulation | +------------------------------------------------------------------------------- +Description + Add a list of fields. + +\*---------------------------------------------------------------------------*/ + +type add; +libs ("libfieldFunctionObjects.so"); + +fields (<field names>); + +executeControl writeTime; +writeControl writeTime; + +// ************************************************************************* // diff --git a/etc/caseDicts/postProcessing/fields/subtract b/etc/caseDicts/postProcessing/fields/subtract new file mode 100644 index 0000000000000000000000000000000000000000..6f9126cd7de5ef78e2dd2351c25aee7fda481dd5 --- /dev/null +++ b/etc/caseDicts/postProcessing/fields/subtract @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Web: www.OpenFOAM.org + \\/ M anipulation | +------------------------------------------------------------------------------- +Description + From the first field subtract the remaining fields in the list. + +\*---------------------------------------------------------------------------*/ + +type subtract; +libs ("libfieldFunctionObjects.so"); + +fields (<field names>); + +executeControl writeTime; +writeControl writeTime; + +// ************************************************************************* // diff --git a/etc/config.csh/compiler b/etc/config.csh/compiler index bc19a6ce2a52b9b1749dc15eedb6fa35e9fa213e..751c5bada48ec69175682e7f6de0d9bf0e5fabe4 100644 --- a/etc/config.csh/compiler +++ b/etc/config.csh/compiler @@ -42,15 +42,6 @@ case ThirdParty: case Gcc48: set gcc_version=gcc-4.8.5 breaksw - case Gcc45: - set gcc_version=gcc-4.5.4 - breaksw - case Gcc46: - set gcc_version=gcc-4.6.4 - breaksw - case Gcc47: - set gcc_version=gcc-4.7.4 - breaksw case Gcc49: set gcc_version=gcc-4.9.3 breaksw @@ -69,6 +60,9 @@ case ThirdParty: case Gcc61: set gcc_version=gcc-6.1.0 breaksw + case Gcc62: + set gcc_version=gcc-6.2.0 + breaksw case Clang: set clang_version=llvm-3.7.0 # set clang_version=llvm-3.8.0 diff --git a/etc/config.csh/example/paraview b/etc/config.csh/example/paraview index 47747cafad74bf6ce0f67f6eefa5bea1331a33dc..b65dd6a07dcec007d2ffd01bee762ae537dc80c0 100644 --- a/etc/config.csh/example/paraview +++ b/etc/config.csh/example/paraview @@ -35,7 +35,7 @@ #------------------------------------------------------------------------------ # -# Use other (shipped) paraview.csh with a different ParaView_VERSION +# Use other (shipped) paraview with a different ParaView_VERSION # set foamFile=`$WM_PROJECT_DIR/bin/foamEtcFile -mode o config.csh/paraview` diff --git a/etc/config.csh/mpi b/etc/config.csh/mpi index 876357d43572a2f3b87d5aa8be0d981227b134ee..c56bbab3f922557f2a2013b88bc4b0560ead9da5 100644 --- a/etc/config.csh/mpi +++ b/etc/config.csh/mpi @@ -60,6 +60,12 @@ case OPENMPI: # Tell OpenMPI where to find its install directory setenv OPAL_PREFIX $MPI_ARCH_PATH + if ($?FOAM_VERBOSE && $?prompt) then + echo "Using OPENMPI:" + echo " OPAL_PREFIX : $OPAL_PREFIX" + echo " FOAM_MPI : $FOAM_MPI" + endif + _foamAddPath $MPI_ARCH_PATH/bin _foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH _foamAddMan $MPI_ARCH_PATH/share/man @@ -111,8 +117,8 @@ case SYSTEMMPI: case MPICH: setenv FOAM_MPI mpich2-1.1.1p1 - setenv MPI_HOME $WM_THIRD_PARTY_DIR/$FOAM_MPI setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI + setenv MPI_HOME $MPI_ARCH_PATH _foamAddPath $MPI_ARCH_PATH/bin diff --git a/etc/config.csh/paraview b/etc/config.csh/paraview index 50973a93d47b1e90eb7c7370c9091938102d81bb..1f017c8e7df7f4325a8a65bc10154a1c8dd26d16 100644 --- a/etc/config.csh/paraview +++ b/etc/config.csh/paraview @@ -41,23 +41,25 @@ # If using a central installation not located under ThirdParty, you will # need to set some environment values directly. For example, # -# setenv ParaView_DIR /opt/paraview/paraview-5.2.0 -# setenv ParaView_INCLUDE_DIR $ParaView_DIR/include/paraview-5.2 -# setenv PV_PLUGIN_PATH $FOAM_LIBBIN/paraview-5.2 +# setenv ParaView_DIR /opt/paraview/paraview-5.0.1 +# setenv ParaView_INCLUDE_DIR $ParaView_DIR/include/paraview-5.0 +# setenv PV_PLUGIN_PATH $FOAM_LIBBIN/paraview-5.0 # # setenv PATH ${ParaView_DIR}/bin:${PATH} -# setenv LD_LIBRARY_PATH ${ParaView_DIR}/lib/paraview-5.2:${LD_LIBRARY_PATH} +# setenv LD_LIBRARY_PATH ${ParaView_DIR}/lib/paraview-5.0:${LD_LIBRARY_PATH} # unsetenv ParaView_VERSION # avoid using ThirdParty settings # #------------------------------------------------------------------------------ -setenv ParaView_VERSION 5.2.0 +setenv ParaView_VERSION 5.0.1 setenv ParaView_MAJOR detect # Automatically determine major version set cmake_version=cmake-system #------------------------------------------------------------------------------ +if ( ! $?ParaView_DIR ) setenv ParaView_DIR + # Clean the PATH if ( ! $?ParaView_DIR ) setenv ParaView_DIR set cleaned=`$WM_PROJECT_DIR/bin/foamCleanPath "$PATH" "$ParaView_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/cmake- $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/paraview-"` @@ -66,7 +68,8 @@ if ( $status == 0 ) setenv PATH $cleaned # ThirdParty cmake set cmake=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cmake_version if ( -r $cmake/bin/cmake ) then - _foamAddPath $cmake/bin + # _foamAddPath not available when foamPV alias is used + setenv PATH $cmake/bin:${PATH} endif # Evaluate command-line parameters for ParaView @@ -101,12 +104,11 @@ if ( $?ParaView_VERSION ) then set pvName=ParaView-$ParaView_VERSION set pvMajor=paraview-$ParaView_MAJOR - set pvSrcDir=$WM_THIRD_PARTY_DIR/$pvName setenv ParaView_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$pvName - # Set paths if binaries or source are present - if ( -r $ParaView_DIR || -r $pvSrcDir ) then + # Set paths if binaries are present + if ( -r $ParaView_DIR ) then set pvLibDir=${ParaView_DIR}/lib/$pvMajor set pvPython=$ParaView_DIR/Utilities/VTKPythonWrapping @@ -132,13 +134,18 @@ if ( $?ParaView_VERSION ) then echo " PV_PLUGIN_PATH : $PV_PLUGIN_PATH" endif else + if ($?FOAM_VERBOSE && $?prompt) then + echo "No paraview found" + echo " ParaView_DIR : $ParaView_DIR" + endif + unsetenv ParaView_INCLUDE_DIR PV_PLUGIN_PATH setenv ParaView_DIR # Defined but empty (used by foamPV alias) endif endif -unset cleaned cmake cmake_version pvName pvMajor pvSrcDir pvLibDir pvPython -unsetenv ParaView_VERSION ParaView_MAJOR +unset cleaned cmake cmake_version pvName pvMajor pvLibDir pvPython +unsetenv ParaView_MAJOR ParaView_VERSION #------------------------------------------------------------------------------ diff --git a/etc/config.csh/unset b/etc/config.csh/unset index a1ef724b3c07f964219176f6d040f0fc8d332caa..88bdd3454eff250015cf83b34161849ee94dded9 100644 --- a/etc/config.csh/unset +++ b/etc/config.csh/unset @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | +# \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -119,7 +119,6 @@ unsetenv OPAL_PREFIX # Unset Ensight/ParaView-related environment variables unsetenv ENSIGHT9_READER -unsetenv CMAKE_HOME unsetenv ParaView_DIR unsetenv ParaView_INCLUDE_DIR unsetenv ParaView_MAJOR @@ -129,12 +128,15 @@ unsetenv PV_PLUGIN_PATH #------------------------------------------------------------------------------ # unset other ThirdParty environment variables +unsetenv ADIOS_ARCH_PATH unsetenv BOOST_ARCH_PATH unsetenv CCMIO_ARCH_PATH unsetenv CGAL_ARCH_PATH unsetenv FFTW_ARCH_PATH +unsetenv GPERFTOOLS_ARCH_PATH unsetenv GMP_ARCH_PATH unsetenv MPFR_ARCH_PATH +unsetenv METIS_ARCH_PATH unsetenv SCOTCH_ARCH_PATH #------------------------------------------------------------------------------ @@ -174,7 +176,6 @@ unalias wm32 unalias wmSP unalias wmDP -unalias wmRefresh unalias wmUnset unalias wmSchedOn @@ -191,6 +192,7 @@ unalias util unalias tut unalias run +unalias wmRefresh unalias foamVersion unalias foamPV diff --git a/etc/config.sh/compiler b/etc/config.sh/compiler index f49f2857460a5f52835421a3ccfe98ac4f0c0a34..de903a076794c4d1146f3fc20525a4ea1fdf228f 100644 --- a/etc/config.sh/compiler +++ b/etc/config.sh/compiler @@ -41,9 +41,6 @@ ThirdParty) Gcc | Gcc48) gcc_version=gcc-4.8.5 ;; - Gcc47) - gcc_version=gcc-4.7.4 - ;; Gcc49) gcc_version=gcc-4.9.3 ;; @@ -56,15 +53,15 @@ ThirdParty) Gcc53) gcc_version=gcc-5.3.0 ;; - Gcc61) - gcc_version=gcc-6.1.0 - ;; Gcc54) gcc_version=gcc-5.4.0 ;; Gcc61) gcc_version=gcc-6.1.0 ;; + Gcc62) + gcc_version=gcc-6.2.0 + ;; Clang) clang_version=llvm-3.7.0 # clang_version=llvm-3.8.0 diff --git a/etc/config.sh/gperftools b/etc/config.sh/gperftools index 06604630377dc675a9b858168757c2a7e7c05581..d42b46df21576f006843b555a39f3ab46e9ece54 100644 --- a/etc/config.sh/gperftools +++ b/etc/config.sh/gperftools @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation -# \\/ M anipulation | +# \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -25,17 +25,54 @@ # etc/config.sh/gperftools # # Description -# Setup file for gperftools binaries libraries. +# Setup file for gperftools binaries and libraries. +# Sourced from OpenFOAM-<VERSION>/etc/bashrc # +# If using system-wide installations, use the following settings: +# +# gperftools_version=gperftools-system +# +# If the system gperftools is unusable (eg, too old) and you don't +# have or want a ThirdParty installation: +# +# gperftools_version=gperftools-none +# +# If using a central installation, but not located under ThirdParty: +# - specify gperftools-system +# - provide full paths for GPERFTOOLS_ARCH_PATH +# +# Note +# When _foamAddLib is unset (eg, called from makeGperftools): +# - gperftools_version variable are retained. +# - the LD_LIBRARY_PATH and PATH are not adjusted. #------------------------------------------------------------------------------ -version=svn -gperftools_install=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER +gperftools_version=gperftools-2.5 + +GPERFTOOLS_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$gperftools_version + +#------------------------------------------------------------------------------ +if [ "$FOAM_VERBOSE" -a "$PS1" ] +then + echo "Using gperftools ($gperftools_version) -> $GPERFTOOLS_ARCH_PATH" 1>&2 +fi + +if type _foamAddLib > /dev/null 2>&1 # normal sourcing +then + + # If GPERFTOOLS_ARCH_PATH does not end with '-system' or '-none', + # it is located within ThirdParty, or a central installation + # outside of ThirdParty and must be added to the lib-path. + + ending="${GPERFTOOLS_ARCH_PATH##*-}" + if [ "$ending" != none -a "$ending" != system ] + then + _foamAddLib $GPERFTOOLS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH + _foamAddPath $GPERFTOOLS_ARCH_PATH/bin + fi -GPERFTOOLS_VERSION=gperftools-$version -GPERFTOOLS_ARCH_PATH=$gperftools_install/$GPERFTOOLS_VERSION + unset gperftools_version ending -export PATH=$GPERFTOOLS_ARCH_PATH/bin:$PATH -export LD_LIBRARY_PATH=$GPERFTOOLS_ARCH_PATH/lib:$LD_LIBRARY_PATH +fi #------------------------------------------------------------------------------ diff --git a/etc/config.sh/mpi b/etc/config.sh/mpi index d8872685888d5b9c90b127a243d55038757e59d3..757aef05ee2e8903698569980f25b2a85b2227f0 100644 --- a/etc/config.sh/mpi +++ b/etc/config.sh/mpi @@ -63,6 +63,13 @@ OPENMPI) # Tell OpenMPI where to find its install directory export OPAL_PREFIX=$MPI_ARCH_PATH + if [ "$FOAM_VERBOSE" -a "$PS1" ] + then + echo "Using OPENMPI:" 1>&2 + echo " OPAL_PREFIX : $OPAL_PREFIX" 1>&2 + echo " FOAM_MPI : $FOAM_MPI" 1>&2 + fi + _foamAddPath $MPI_ARCH_PATH/bin _foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH _foamAddMan $MPI_ARCH_PATH/share/man @@ -118,8 +125,8 @@ SYSTEMMPI) MPICH) export FOAM_MPI=mpich2-1.1.1p1 - export MPI_HOME=$WM_THIRD_PARTY_DIR/$FOAM_MPI export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI + export MPI_HOME=$MPI_ARCH_PATH _foamAddPath $MPI_ARCH_PATH/bin diff --git a/etc/config.sh/paraview b/etc/config.sh/paraview index 99a379422c78c39c09088c75f9ff8b0dead9be2b..a8df5e7d9c951d955a76cccb4c16543a64b0a601 100644 --- a/etc/config.sh/paraview +++ b/etc/config.sh/paraview @@ -41,17 +41,20 @@ # If using a central installation not located under ThirdParty, you will # need to set some environment values directly. For example, # -# export ParaView_DIR=/opt/paraview/paraview-5.2.0 -# export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-5.2 -# export PV_PLUGIN_PATH=$FOAM_LIBBIN/paraview-5.2 +# export ParaView_DIR=/opt/paraview/paraview-5.0.1 +# export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-5.0 +# export PV_PLUGIN_PATH=$FOAM_LIBBIN/paraview-5.0 # # export PATH=$ParaView_DIR/bin:$PATH -# export LD_LIBRARY_PATH=$ParaView_DIR/lib/paraview-5.2:$LD_LIBRARY_PATH +# export LD_LIBRARY_PATH=$ParaView_DIR/lib/paraview-5.0:$LD_LIBRARY_PATH # unset ParaView_VERSION # avoid using ThirdParty settings # +# Note +# When _foamAddLib is unset (eg, called from makeParaView or from foamPV): +# - the ParaView_VERSION variable is retained. #------------------------------------------------------------------------------ -ParaView_VERSION=5.2.0 +ParaView_VERSION=5.0.1 ParaView_MAJOR=detect # Automatically determine major version cmake_version=cmake-system @@ -70,7 +73,8 @@ cleaned=$($WM_PROJECT_DIR/bin/foamCleanPath "$PATH" \ cmake=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cmake_version if [ -r $cmake/bin/cmake ] then - _foamAddPath $cmake/bin + # _foamAddPath not available when foamPV function is used + PATH=$cmake/bin:$PATH fi # Evaluate command-line parameters for ParaView @@ -112,12 +116,11 @@ then pvName=ParaView-$ParaView_VERSION pvMajor=paraview-$ParaView_MAJOR - pvSrcDir=$WM_THIRD_PARTY_DIR/$pvName export ParaView_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$pvName # Set paths if binaries or source are present - if [ -r $ParaView_DIR -o -r $pvSrcDir ] + if [ -r $ParaView_DIR ] then pvLibDir=$ParaView_DIR/lib/$pvMajor pvPython=$ParaView_DIR/Utilities/VTKPythonWrapping @@ -147,13 +150,24 @@ then echo " PV_PLUGIN_PATH : $PV_PLUGIN_PATH" fi else + if [ "$FOAM_VERBOSE" -a "$PS1" ] + then + echo "No paraview found" + echo " ParaView_DIR : $ParaView_DIR" + fi + unset ParaView_DIR ParaView_INCLUDE_DIR PV_PLUGIN_PATH fi fi unset -f _foamParaviewEval -unset cleaned cmake cmake_version pvName pvMajor pvSrcDir pvLibDir pvPython -unset ParaView_VERSION ParaView_MAJOR +unset cleaned cmake cmake_version pvName pvMajor pvLibDir pvPython +unset ParaView_MAJOR + +if type _foamAddLib > /dev/null 2>&1 # normal sourcing +then + unset ParaView_VERSION +fi #------------------------------------------------------------------------------ diff --git a/etc/config.sh/unset b/etc/config.sh/unset index 114f313a3995b51dd567ed16236075000384422e..e7b834baeb784621e7d34587249c79f1b2c91e7f 100644 --- a/etc/config.sh/unset +++ b/etc/config.sh/unset @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | +# \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -115,7 +115,6 @@ fi # Unset Ensight/ParaView-related environment variables unset ENSIGHT9_READER -unset CMAKE_HOME unset ParaView_DIR unset ParaView_INCLUDE_DIR unset ParaView_MAJOR @@ -125,12 +124,15 @@ unset PV_PLUGIN_PATH #------------------------------------------------------------------------------ # unset other ThirdParty environment variables +unset ADIOS_ARCH_PATH unset BOOST_ARCH_PATH unset CCMIO_ARCH_PATH unset CGAL_ARCH_PATH unset FFTW_ARCH_PATH +unset GPERFTOOLS_ARCH_PATH unset GMP_ARCH_PATH unset MPFR_ARCH_PATH +unset METIS_ARCH_PATH unset SCOTCH_ARCH_PATH #------------------------------------------------------------------------------ diff --git a/etc/controlDict b/etc/controlDict index 1334cc1bb1e1e6128f998ecff0a75bb1f92797c1..38ebd71b95ec61e8fd6914324ccf21218aea6d8d 100644 --- a/etc/controlDict +++ b/etc/controlDict @@ -62,6 +62,15 @@ OptimisationSwitches floatTransfer 0; nProcsSimpleSum 0; + // Optional max size (bytes) for unstructured data exchanges. In some + // phases of OpenFOAM it can send over very large data chunks + // (e.g. in parallel load balancing) and some Pstream implementations have + // problems with this. Setting this variable > 0 indicates that the + // data exchange needs to be done in multiple passes, each of maxCommsSize. + // This is not switched on by default since it requires an additional + // global reduction, even if multi-pass is not needed) + maxCommsSize 0; + // Force dumping (at next timestep) upon signal (-1 to disable) writeNowSignal -1; // 10; @@ -888,7 +897,6 @@ DebugSwitches wallHeatTransfer 0; wallLayerCells 0; wallModel 0; - warnUnboundedGauss 1; waveTransmissive 0; wedge 0; weighted 0; diff --git a/etc/cshrc b/etc/cshrc index 759413c0c856cd8561c42577a113df31ef10b3cd..55f2b0174abadad779fe6903a7376351d7045c87 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -3,7 +3,7 @@ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | +# \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -43,7 +43,6 @@ setenv WM_PROJECT_VERSION plus # setenv FOAM_INST_DIR `lsof +p $$ |& grep -oE '/.*'$WM_PROJECT'[^/]*/etc/cshrc' | \ sed 's%/'$WM_PROJECT'[^/]*/etc/cshrc%%'` -echo $FOAM_INST_DIR # setenv FOAM_INST_DIR $HOME/$WM_PROJECT # setenv FOAM_INST_DIR ~$WM_PROJECT # setenv FOAM_INST_DIR /opt/$WM_PROJECT @@ -61,7 +60,7 @@ echo $FOAM_INST_DIR setenv WM_COMPILER_TYPE system #- Compiler: -# WM_COMPILER = Gcc | Gcc4[5-9] | Gcc5[1-4] | Gcc61 | Clang | Icc +# WM_COMPILER = Gcc | Gcc4[8-9] | Gcc5[1-4] | Gcc6[1-2] | Clang | Icc setenv WM_COMPILER Gcc setenv WM_COMPILER_ARCH # defined but empty unsetenv WM_COMPILER_LIB_ARCH @@ -86,7 +85,7 @@ setenv WM_COMPILE_OPTION Opt #- MPI implementation: # WM_MPLIB = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPICH | MPICH-GM | HPMPI -# | MPI | QSMPI | SGIMPI +# | MPI | FJMPI | QSMPI | SGIMPI | INTELMPI setenv WM_MPLIB SYSTEMOPENMPI #- Operating System: diff --git a/src/Allwmake b/src/Allwmake index 511c735a7e5a4174a4442b5e2d4874f5ac0e0f0d..96b82df71a96cc16414f27ef33110ac760bf5d4f 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -17,8 +17,6 @@ wmakeCheckPwd "$WM_PROJECT_DIR/src" || { exit 1 } -set -x - # Update OpenFOAM version strings if required wmakePrintBuild -check || wrmo OpenFOAM/global/global.o 2>/dev/null diff --git a/src/ODE/ODESolvers/ODESolver/ODESolver.C b/src/ODE/ODESolvers/ODESolver/ODESolver.C index 3dce5378e3982b514f9ff2cd7586656afff8288a..69d8b5879c568e633c3e89f24ead68118f9eb16e 100644 --- a/src/ODE/ODESolvers/ODESolver/ODESolver.C +++ b/src/ODE/ODESolvers/ODESolver/ODESolver.C @@ -34,7 +34,7 @@ namespace Foam } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // Foam::scalar Foam::ODESolver::normalizeError ( diff --git a/src/OSspecific/POSIX/Allwmake b/src/OSspecific/POSIX/Allwmake index bd5b6259b99029ca91e05abbd70aec45e33b8dc2..d932523c9221dfd1ea7bc6400db0c0c6d3b4fa8f 100755 --- a/src/OSspecific/POSIX/Allwmake +++ b/src/OSspecific/POSIX/Allwmake @@ -12,7 +12,7 @@ unset COMP_FLAGS LINK_FLAGS # if [ -f /usr/include/sys/inotify.h ] then - echo "Found <sys/inotify.h> -- enabling inotify for file monitoring." + echo " found <sys/inotify.h> -- enabling inotify for file monitoring." export COMP_FLAGS="-DFOAM_USE_INOTIFY" else unset COMP_FLAGS diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index 5548e5f54f38f8368d5da827eb6607164c5c0d97..790170941b9dd8029156ba8e47b1908338e7d471 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -542,6 +542,22 @@ time_t Foam::lastModified(const fileName& name, const bool followLink) } +double Foam::highResLastModified(const fileName& name) +{ + fileStat fileStatus(name); + if (fileStatus.isValid()) + { + return + fileStatus.status().st_mtime + + 1e-9*fileStatus.status().st_atim.tv_nsec; + } + else + { + return 0; + } +} + + Foam::fileNameList Foam::readDir ( const fileName& directory, diff --git a/src/OSspecific/POSIX/fileMonitor.C b/src/OSspecific/POSIX/fileMonitor.C index d3f010f0939ea645402d4248b6b3f51ba520d282..ff7deb7538a1f9f7c307c4f2212b7590c46146ae 100644 --- a/src/OSspecific/POSIX/fileMonitor.C +++ b/src/OSspecific/POSIX/fileMonitor.C @@ -126,7 +126,7 @@ namespace Foam // For stat //- From watch descriptor to modified time - DynamicList<time_t> lastMod_; + DynamicList<double> lastMod_; @@ -261,7 +261,7 @@ namespace Foam << abort(FatalError); } - lastMod_(watchFd) = lastModified(fName); + lastMod_(watchFd) = highResLastModified(fName); } return true; @@ -395,12 +395,12 @@ void Foam::fileMonitor::checkFiles() const { forAll(watcher_->lastMod_, watchFd) { - time_t oldTime = watcher_->lastMod_[watchFd]; + double oldTime = watcher_->lastMod_[watchFd]; if (oldTime != 0) { const fileName& fName = watchFile_[watchFd]; - time_t newTime = lastModified(fName); + double newTime = highResLastModified(fName); if (newTime == 0) { @@ -615,7 +615,7 @@ void Foam::fileMonitor::setUnmodified(const label watchFd) if (!useInotify_) { - watcher_->lastMod_[watchFd] = lastModified(watchFile_[watchFd]); + watcher_->lastMod_[watchFd] = highResLastModified(watchFile_[watchFd]); } } diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index 7b9f07486b3447b786999e68d3e1f9a80b8fe6b1..b5c58d172911885e4d4dc045ecf78142ca04dc29 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -39,6 +39,7 @@ $(ints)/lists/labelListIOList.C primitives/Scalar/doubleScalar/doubleScalar.C primitives/Scalar/floatScalar/floatScalar.C primitives/Scalar/scalar/scalar.C +primitives/Scalar/scalar/invIncGamma.C primitives/Scalar/lists/scalarList.C primitives/Scalar/lists/scalarIOList.C primitives/Scalar/lists/scalarListIOList.C @@ -187,6 +188,10 @@ dictionaryEntry = $(dictionary)/dictionaryEntry $(dictionaryEntry)/dictionaryEntry.C $(dictionaryEntry)/dictionaryEntryIO.C +dictionaryListEntry = $(dictionary)/dictionaryListEntry +$(dictionaryListEntry)/dictionaryListEntry.C +$(dictionaryListEntry)/dictionaryListEntryIO.C + functionEntries = $(dictionary)/functionEntries $(functionEntries)/calcEntry/calcEntry.C $(functionEntries)/codeStream/codeStream.C diff --git a/src/OpenFOAM/algorithms/indexedOctree/indexedOctree.H b/src/OpenFOAM/algorithms/indexedOctree/indexedOctree.H index 0fb024f2d182688ce4ffab7c6e3b8d23e9e4a2a1..1d4c7d844f46b7079f4b64b724865749ce1448f7 100644 --- a/src/OpenFOAM/algorithms/indexedOctree/indexedOctree.H +++ b/src/OpenFOAM/algorithms/indexedOctree/indexedOctree.H @@ -119,7 +119,7 @@ private: // Static data - //- Relative peturbation tolerance. Determines when point is + //- Relative perturbation tolerance. Determines when point is // considered to be close to face/edge of bb of node. // The tolerance is relative to the bounding box of the smallest // node. diff --git a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.C b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.C index d54b7fb3900499d2b47a6a6d48cce1038ec1a8cb..60b390223c2651a0d3e4d126582939ea16d382a5 100644 --- a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.C +++ b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.C @@ -25,7 +25,7 @@ License #include "DictionaryBase.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class IDLListType, class T> void Foam::DictionaryBase<IDLListType, T>::addEntries() diff --git a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBaseIO.C b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBaseIO.C index 24027496c7e96ba3b1050d1b69173a1713e32bec..1970653b5bc26ff33828c43b324bdf271ac83380 100644 --- a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBaseIO.C +++ b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBaseIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -62,6 +62,4 @@ Foam::Ostream& Foam::operator<< } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/List/List.H b/src/OpenFOAM/containers/Lists/List/List.H index 448e4604ae8b1e108f57a9a51fcfc44f0ed5e2cc..fdb4559bf75ec8abed82d79bd914775871290cea 100644 --- a/src/OpenFOAM/containers/Lists/List/List.H +++ b/src/OpenFOAM/containers/Lists/List/List.H @@ -76,8 +76,6 @@ template<class T> class IndirectList; template<class T> class UIndirectList; template<class T> class BiIndirectList; -typedef UList<label> unallocLabelList; - /*---------------------------------------------------------------------------*\ Class List Declaration \*---------------------------------------------------------------------------*/ diff --git a/src/OpenFOAM/db/IOobjectList/IOobjectList.C b/src/OpenFOAM/db/IOobjectList/IOobjectList.C index 007b56dc0bfbde9fbcb24598d4cf1e3d5cd8f6fd..f58bab42140d96864c9a0eae8b0e1b2648e547a8 100644 --- a/src/OpenFOAM/db/IOobjectList/IOobjectList.C +++ b/src/OpenFOAM/db/IOobjectList/IOobjectList.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,6 +27,7 @@ License #include "Time.H" #include "OSspecific.H" #include "IOList.H" +#include "stringListOps.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -228,7 +229,10 @@ Foam::wordList Foam::IOobjectList::sortedNames() const } -Foam::wordList Foam::IOobjectList::names(const word& ClassName) const +Foam::wordList Foam::IOobjectList::names +( + const word& ClassName +) const { wordList objectNames(size()); @@ -247,7 +251,34 @@ Foam::wordList Foam::IOobjectList::names(const word& ClassName) const } -Foam::wordList Foam::IOobjectList::sortedNames(const word& ClassName) const +Foam::wordList Foam::IOobjectList::names +( + const word& ClassName, + const wordRe& matcher +) const +{ + wordList objNames = names(ClassName); + + return wordList(objNames, findStrings(matcher, objNames)); +} + + +Foam::wordList Foam::IOobjectList::names +( + const word& ClassName, + const wordReList& matcher +) const +{ + wordList objNames = names(ClassName); + + return wordList(objNames, findStrings(matcher, objNames)); +} + + +Foam::wordList Foam::IOobjectList::sortedNames +( + const word& ClassName +) const { wordList sortedLst = names(ClassName); sort(sortedLst); @@ -256,4 +287,30 @@ Foam::wordList Foam::IOobjectList::sortedNames(const word& ClassName) const } +Foam::wordList Foam::IOobjectList::sortedNames +( + const word& ClassName, + const wordRe& matcher +) const +{ + wordList sortedLst = names(ClassName, matcher); + sort(sortedLst); + + return sortedLst; +} + + +Foam::wordList Foam::IOobjectList::sortedNames +( + const word& ClassName, + const wordReList& matcher +) const +{ + wordList sortedLst = names(ClassName, matcher); + sort(sortedLst); + + return sortedLst; +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/db/IOobjectList/IOobjectList.H b/src/OpenFOAM/db/IOobjectList/IOobjectList.H index 5a0177d197d5c2e2bcb1ab15c08c9b6bbff9b0e6..926135222fd8686869c881496c1537da01b13592 100644 --- a/src/OpenFOAM/db/IOobjectList/IOobjectList.H +++ b/src/OpenFOAM/db/IOobjectList/IOobjectList.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -55,7 +55,7 @@ class IOobjectList // Private Member Functions //- Disallow default bitwise assignment - void operator=(const IOobjectList&); + void operator=(const IOobjectList&) = delete; public: @@ -104,17 +104,35 @@ public: //- Return the list for all IOobjects of a given class IOobjectList lookupClass(const word& className) const; - //- Return the list of names of the IOobjects - wordList names() const; - //- Return the sorted list of names of the IOobjects - wordList sortedNames() const; + //- A list of names of the IOobjects + wordList names() const; - //- Return the list of names of the IOobjects of given class + //- A list of names of IOobjects of the given class wordList names(const word& className) const; - //- Return the sorted list of names of the IOobjects of given class + //- A list of names of IOobjects of the given class, + // and that also satisfy the input matcher + wordList names(const word& className, const wordRe&) const; + + //- A list of names of IOobjects of the given class, + // and that also satisfy the input matchers + wordList names(const word& className, const wordReList&) const; + + + //- A sorted list of names of the IOobjects + wordList sortedNames() const; + + //- A sorted list of names of IOobjects of given class wordList sortedNames(const word& className) const; + + //- A sorted list of names of IOobjects of the given class, + // and that also satisfy the input matcher + wordList sortedNames(const word& className, const wordRe&) const; + + //- A sorted list of names of IOobjects of the given class, + // and that also satisfy the input matchers + wordList sortedNames(const word& className, const wordReList&) const; }; diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H index e2ec02e88beef62e46d97efb72cb2758a0201ae9..2e2f015403742b44b68f4e90d97e1e583e0fef18 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H +++ b/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -55,6 +55,37 @@ class Pstream : public UPstream { + // Private Static Functions + + //- Exchange contiguous data. Sends sendData, receives into + // recvData. If block=true will wait for all transfers to finish. + // Data provided and received as container. + template<class Container, class T> + static void exchangeContainer + ( + const UList<Container>& sendBufs, + const labelUList& recvSizes, + List<Container>& recvBufs, + const int tag, + const label comm, + const bool block + ); + + //- Exchange contiguous data. Sends sendData, receives into + // recvData. If block=true will wait for all transfers to finish. + // Data provided and received as pointers. + template<class T> + static void exchangeBuf + ( + const labelUList& sendSizes, // number of T, not number of char + const UList<const char*>& sendBufs, + const labelUList& recvSizes, // number of T, not number of char + List<char*>& recvBufs, + const int tag, + const label comm, + const bool block + ); + protected: @@ -63,6 +94,7 @@ protected: //- Transfer buffer DynamicList<char> buf_; + public: // Declare name of the class and its debug switch diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamReduceOps.H b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamReduceOps.H index 53c4b6f344d847bed4582e98d1ad923d319540aa..51fb00060b8d4cd2917db6fe1f6073efb4fddccd 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamReduceOps.H +++ b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamReduceOps.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -32,7 +32,6 @@ Description #ifndef PstreamReduceOps_H #define PstreamReduceOps_H -#include "Pstream.H" #include "ops.H" #include "vector2D.H" diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.C b/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.C index d8954cb1c9e8168ec79a121ac83da42508815bed..77692890b3216362ed086740da3050d3aa1d89db 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.C +++ b/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.C @@ -464,4 +464,16 @@ registerOptSwitch ); +int Foam::UPstream::maxCommsSize +( + Foam::debug::optimisationSwitch("maxCommsSize", 0) +); +registerOptSwitch +( + "maxCommsSize", + int, + Foam::UPstream::maxCommsSize +); + + // ************************************************************************* // diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H index 609155d492618139b54d6848a4e2678d0a09bb07..513c9fe0366ad0f39da3a5b2c97811792e993939 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H +++ b/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H @@ -238,6 +238,7 @@ private: const label index ); + protected: // Protected data @@ -268,6 +269,9 @@ public: //- Number of polling cycles in processor updates static int nPollProcInterfaces; + //- Optional maximum message size (bytes) + static int maxCommsSize; + //- Default communicator (all processors) static label worldComm; diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C b/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C index 3a3436cf27c6dc6030c6a86b7290328d8c77a4ec..34114a29a4f2556bf7ebcb371c6e389f9e5c4baa 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C +++ b/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,11 +28,157 @@ Description #include "Pstream.H" #include "contiguous.H" -#include "PstreamCombineReduceOps.H" -#include "UPstream.H" +#include "PstreamReduceOps.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class Container, class T> +void Foam::Pstream::exchangeContainer +( + const UList<Container>& sendBufs, + const labelUList& recvSizes, + List<Container>& recvBufs, + const int tag, + const label comm, + const bool block +) +{ + label startOfRequests = Pstream::nRequests(); + + // Set up receives + // ~~~~~~~~~~~~~~~ + + forAll(recvSizes, proci) + { + if (proci != Pstream::myProcNo(comm) && recvSizes[proci] > 0) + { + UIPstream::read + ( + UPstream::nonBlocking, + proci, + reinterpret_cast<char*>(recvBufs[proci].begin()), + recvSizes[proci]*sizeof(T), + tag, + comm + ); + } + } + + + // Set up sends + // ~~~~~~~~~~~~ + + forAll(sendBufs, proci) + { + if (proci != Pstream::myProcNo(comm) && sendBufs[proci].size() > 0) + { + if + ( + !UOPstream::write + ( + UPstream::nonBlocking, + proci, + reinterpret_cast<const char*>(sendBufs[proci].begin()), + sendBufs[proci].size()*sizeof(T), + tag, + comm + ) + ) + { + FatalErrorInFunction + << "Cannot send outgoing message. " + << "to:" << proci << " nBytes:" + << label(sendBufs[proci].size()*sizeof(T)) + << Foam::abort(FatalError); + } + } + } + + + // Wait for all to finish + // ~~~~~~~~~~~~~~~~~~~~~~ + + if (block) + { + Pstream::waitRequests(startOfRequests); + } +} + + +template<class T> +void Foam::Pstream::exchangeBuf +( + const labelUList& sendSizes, + const UList<const char*>& sendBufs, + const labelUList& recvSizes, + List<char*>& recvBufs, + const int tag, + const label comm, + const bool block +) +{ + label startOfRequests = Pstream::nRequests(); + + // Set up receives + // ~~~~~~~~~~~~~~~ + + forAll(recvSizes, proci) + { + if (proci != Pstream::myProcNo(comm) && recvSizes[proci] > 0) + { + UIPstream::read + ( + UPstream::nonBlocking, + proci, + recvBufs[proci], + recvSizes[proci]*sizeof(T), + tag, + comm + ); + } + } + + + // Set up sends + // ~~~~~~~~~~~~ + + forAll(sendBufs, proci) + { + if (proci != Pstream::myProcNo(comm) && sendSizes[proci] > 0) + { + if + ( + !UOPstream::write + ( + UPstream::nonBlocking, + proci, + sendBufs[proci], + sendSizes[proci]*sizeof(T), + tag, + comm + ) + ) + { + FatalErrorInFunction + << "Cannot send outgoing message. " + << "to:" << proci << " nBytes:" + << label(sendSizes[proci]*sizeof(T)) + << Foam::abort(FatalError); + } + } + } + + + // Wait for all to finish + // ~~~~~~~~~~~~~~~~~~~~~~ + + if (block) + { + Pstream::waitRequests(startOfRequests); + } +} + + template<class Container, class T> void Foam::Pstream::exchange ( @@ -63,11 +209,7 @@ void Foam::Pstream::exchange if (UPstream::parRun() && UPstream::nProcs(comm) > 1) { - label startOfRequests = Pstream::nRequests(); - - // Set up receives - // ~~~~~~~~~~~~~~~ - + // Presize all receive buffers forAll(recvSizes, proci) { label nRecv = recvSizes[proci]; @@ -75,55 +217,121 @@ void Foam::Pstream::exchange if (proci != Pstream::myProcNo(comm) && nRecv > 0) { recvBufs[proci].setSize(nRecv); - UIPstream::read - ( - UPstream::nonBlocking, - proci, - reinterpret_cast<char*>(recvBufs[proci].begin()), - nRecv*sizeof(T), - tag, - comm - ); } } - - // Set up sends - // ~~~~~~~~~~~~ - - forAll(sendBufs, proci) + if (Pstream::maxCommsSize <= 0) { - if (proci != Pstream::myProcNo(comm) && sendBufs[proci].size() > 0) + // Do the exchanging in one go + exchangeContainer<Container, T> + ( + sendBufs, + recvSizes, + recvBufs, + tag, + comm, + block + ); + } + else + { + // Determine the number of chunks to send. Note that we + // only have to look at the sending data since we are + // guaranteed that some processor's sending size is some other + // processor's receive size. Also we can ignore any local comms. + + label maxNSend = 0; + forAll(sendBufs, proci) { - if - ( - !UOPstream::write - ( - UPstream::nonBlocking, - proci, - reinterpret_cast<const char*>(sendBufs[proci].begin()), - sendBufs[proci].size()*sizeof(T), - tag, - comm - ) - ) + if (proci != Pstream::myProcNo(comm)) { - FatalErrorInFunction - << "Cannot send outgoing message. " - << "to:" << proci << " nBytes:" - << label(sendBufs[proci].size()*sizeof(T)) - << Foam::abort(FatalError); + maxNSend = max(maxNSend, sendBufs[proci].size()); } } - } + const label maxNBytes = sizeof(T)*maxNSend; - // Wait for all to finish - // ~~~~~~~~~~~~~~~~~~~~~~ + // We need to send maxNBytes bytes so the number of iterations: + // maxNBytes iterations + // --------- ---------- + // 0 0 + // 1..maxCommsSize 1 + // maxCommsSize+1..2*maxCommsSize 2 + // etc. - if (block) - { - Pstream::waitRequests(startOfRequests); + label nIter; + if (maxNBytes == 0) + { + nIter = 0; + } + else + { + nIter = (maxNBytes-1)/Pstream::maxCommsSize+1; + } + reduce(nIter, maxOp<label>(), tag, comm); + + + List<const char*> charSendBufs(sendBufs.size()); + List<char*> charRecvBufs(sendBufs.size()); + + labelList nRecv(sendBufs.size()); + labelList startRecv(sendBufs.size(), 0); + labelList nSend(sendBufs.size()); + labelList startSend(sendBufs.size(), 0); + + for (label iter = 0; iter < nIter; iter++) + { + forAll(sendBufs, proci) + { + nSend[proci] = min + ( + Pstream::maxCommsSize, + sendBufs[proci].size()-startSend[proci] + ); + charSendBufs[proci] = + ( + nSend[proci] > 0 + ? reinterpret_cast<const char*> + ( + &(sendBufs[proci][startSend[proci]]) + ) + : nullptr + ); + + nRecv[proci] = min + ( + Pstream::maxCommsSize, + recvBufs[proci].size()-startRecv[proci] + ); + + charRecvBufs[proci] = + ( + nRecv[proci] > 0 + ? reinterpret_cast<char*> + ( + &(recvBufs[proci][startRecv[proci]]) + ) + : nullptr + ); + } + + exchangeBuf<T> + ( + nSend, + charSendBufs, + nRecv, + charRecvBufs, + tag, + comm, + block + ); + + forAll(nSend, proci) + { + startSend[proci] += nSend[proci]; + startRecv[proci] += nRecv[proci]; + } + } } } diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C index 5ddb36617b4d29204362a557716550caa99ecb28..6aa26c2f7bc74f8f2795903b80fd09503924dca8 100644 --- a/src/OpenFOAM/db/Time/Time.C +++ b/src/OpenFOAM/db/Time/Time.C @@ -80,7 +80,7 @@ const int Foam::Time::maxPrecision_(3 - log10(SMALL)); Foam::word Foam::Time::controlDictName("controlDict"); -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::Time::adjustDeltaT() { diff --git a/src/OpenFOAM/db/Time/Time.H b/src/OpenFOAM/db/Time/Time.H index 027288b193ce2d763429de7322ffb527764b5898..d6869a208f0233c5b05fbec9046d9ed95e721bbc 100644 --- a/src/OpenFOAM/db/Time/Time.H +++ b/src/OpenFOAM/db/Time/Time.H @@ -59,6 +59,7 @@ SourceFiles namespace Foam { + // Forward declaration of classes class argList; @@ -86,6 +87,7 @@ class Time //- The controlDict unwatchedIOdictionary controlDict_; + public: //- Write control options diff --git a/src/OpenFOAM/db/Time/TimeIO.C b/src/OpenFOAM/db/Time/TimeIO.C index 7022f1c919c6bd1c4e7e6d05fa3f058f6dd10fb4..7179fff46401bc7e460cff8662b53cf1d45343a4 100644 --- a/src/OpenFOAM/db/Time/TimeIO.C +++ b/src/OpenFOAM/db/Time/TimeIO.C @@ -439,7 +439,7 @@ void Foam::Time::readModifiedObjects() bool Foam::Time::writeTimeDict() const { - addProfiling(writing, "objectRegistry::writeObject"); + addProfiling(writing, "objectRegistry::writeObject"); const word tmName(timeName()); diff --git a/src/OpenFOAM/db/dictionary/dictionary.C b/src/OpenFOAM/db/dictionary/dictionary.C index fcd2255caf3618d723630c8f2125e082cb064242..ea449f50e6dc5911a018b6e8df161300cbc45303 100644 --- a/src/OpenFOAM/db/dictionary/dictionary.C +++ b/src/OpenFOAM/db/dictionary/dictionary.C @@ -46,6 +46,131 @@ namespace Foam // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +const Foam::entry* Foam::dictionary::lookupScopedSubEntryPtr +( + const word& keyword, + bool recursive, + bool patternMatch +) const +{ + string::size_type dotPos = keyword.find('.'); + + if (dotPos == string::npos) + { + // Non-scoped lookup + return lookupEntryPtr(keyword, recursive, patternMatch); + } + else + { + if (dotPos == 0) + { + // Starting with a '.'. Go up for every 2nd '.' found + + const dictionary* dictPtr = this; + + string::size_type begVar = dotPos + 1; + string::const_iterator iter = keyword.begin() + begVar; + string::size_type endVar = begVar; + while (iter != keyword.end() && *iter == '.') + { + ++iter; + ++endVar; + + // Go to parent + if (&dictPtr->parent_ == &dictionary::null) + { + FatalIOErrorInFunction + ( + *this + ) << "No parent of current dictionary" + << " when searching for " + << keyword.substr(begVar, keyword.size()-begVar) + << exit(FatalIOError); + } + dictPtr = &dictPtr->parent_; + } + + return dictPtr->lookupScopedSubEntryPtr + ( + keyword.substr(endVar), + false, + patternMatch + ); + } + else + { + // Extract the first word + word firstWord = keyword.substr(0, dotPos); + + const entry* entPtr = lookupScopedSubEntryPtr + ( + firstWord, + false, //recursive + patternMatch + ); + + if (!entPtr) + { + // Fall back to finding key with '.' so e.g. if keyword is + // a.b.c.d it would try + // a.b, a.b.c, a.b.c.d + + string::size_type nextDotPos = keyword.find + ( + '.', + dotPos+1 + ); + + while (true) + { + const entry* subEntPtr = lookupEntryPtr + ( + keyword.substr(0, nextDotPos), + false, //recursive, + patternMatch + ); + if (nextDotPos == string::npos) + { + // Parsed the whole word. Return entry or null. + return subEntPtr; + } + + if (subEntPtr && subEntPtr->isDict()) + { + return subEntPtr->dict().lookupScopedSubEntryPtr + ( + keyword.substr + ( + nextDotPos, + keyword.size()-nextDotPos + ), + false, + patternMatch + ); + } + + nextDotPos = keyword.find('.', nextDotPos+1); + } + } + + if (entPtr->isDict()) + { + return entPtr->dict().lookupScopedSubEntryPtr + ( + keyword.substr(dotPos, keyword.size()-dotPos), + false, + patternMatch + ); + } + else + { + return nullptr; + } + } + } +} + + bool Foam::dictionary::findInPatterns ( const bool patternMatch, @@ -473,7 +598,7 @@ const Foam::entry* Foam::dictionary::lookupScopedEntryPtr } // At top. Recurse to find entries - return dictPtr->lookupScopedEntryPtr + return dictPtr->lookupScopedSubEntryPtr ( keyword.substr(1, keyword.size()-1), false, @@ -482,93 +607,12 @@ const Foam::entry* Foam::dictionary::lookupScopedEntryPtr } else { - string::size_type dotPos = keyword.find('.'); - - if (dotPos == string::npos) - { - // Non-scoped lookup - return lookupEntryPtr(keyword, recursive, patternMatch); - } - else - { - if (dotPos == 0) - { - // Starting with a '.'. Go up for every 2nd '.' found - - const dictionary* dictPtr = this; - - string::size_type begVar = dotPos + 1; - string::const_iterator iter = keyword.begin() + begVar; - string::size_type endVar = begVar; - while - ( - iter != keyword.end() - && *iter == '.' - ) - { - ++iter; - ++endVar; - - // Go to parent - if (&dictPtr->parent_ == &dictionary::null) - { - FatalIOErrorInFunction - ( - *this - ) << "No parent of current dictionary" - << " when searching for " - << keyword.substr(begVar, keyword.size()-begVar) - << exit(FatalIOError); - } - dictPtr = &dictPtr->parent_; - } - - return dictPtr->lookupScopedEntryPtr - ( - keyword.substr(endVar), - false, - patternMatch - ); - } - else - { - // Extract the first word - word firstWord = keyword.substr(0, dotPos); - - const entry* entPtr = lookupScopedEntryPtr - ( - firstWord, - false, //recursive - patternMatch - ); - - if (!entPtr) - { - FatalIOErrorInFunction - ( - *this - ) << "keyword " << firstWord - << " is undefined in dictionary " - << name() << endl - << "Valid keywords are " << keys() - << exit(FatalIOError); - } - - if (entPtr->isDict()) - { - return entPtr->dict().lookupScopedEntryPtr - ( - keyword.substr(dotPos, keyword.size()-dotPos), - false, - patternMatch - ); - } - else - { - return nullptr; - } - } - } + return lookupScopedSubEntryPtr + ( + keyword, + recursive, + patternMatch + ); } } @@ -628,6 +672,21 @@ const Foam::dictionary* Foam::dictionary::subDictPtr(const word& keyword) const } +Foam::dictionary* Foam::dictionary::subDictPtr(const word& keyword) +{ + entry* entryPtr = lookupEntryPtr(keyword, false, true); + + if (entryPtr) + { + return &entryPtr->dict(); + } + else + { + return nullptr; + } +} + + const Foam::dictionary& Foam::dictionary::subDict(const word& keyword) const { const entry* entryPtr = lookupEntryPtr(keyword, false, true); diff --git a/src/OpenFOAM/db/dictionary/dictionary.H b/src/OpenFOAM/db/dictionary/dictionary.H index 4a7c72843715d93358aac1d92195376a9453250e..6f03c6babcaf9152fc7b5db5ebfc3043ea28a2b0 100644 --- a/src/OpenFOAM/db/dictionary/dictionary.H +++ b/src/OpenFOAM/db/dictionary/dictionary.H @@ -161,6 +161,15 @@ class dictionary // Private Member Functions + //- Find and return an entry data stream pointer if present + // otherwise return nullptr. Allows scoping using '.' + const entry* lookupScopedSubEntryPtr + ( + const word&, + bool recursive, + bool patternMatch + ) const; + //- Search patterns table for exact match or regular expression match bool findInPatterns ( @@ -364,7 +373,8 @@ public: ) const; //- Find and return an entry data stream pointer if present - // otherwise return nullptr. Allows scoping using '.' + // otherwise return nullptr. Allows scoping using '.'. + // Special handling for ':' at start of keyword and '..'. const entry* lookupScopedEntryPtr ( const word&, @@ -379,6 +389,10 @@ public: // otherwise return nullptr. const dictionary* subDictPtr(const word&) const; + //- Find and return a sub-dictionary pointer if present + // otherwise return nullptr. + dictionary* subDictPtr(const word&); + //- Find and return a sub-dictionary const dictionary& subDict(const word&) const; diff --git a/src/mesh/blockMesh/block/block.C b/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntry.C similarity index 63% rename from src/mesh/blockMesh/block/block.C rename to src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntry.C index 1722b0095ee0f51b8df67362ea10459fff768e9a..055a55b59de65fa61790c626cc5ac8d006d60d68 100644 --- a/src/mesh/blockMesh/block/block.C +++ b/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,44 +23,18 @@ License \*---------------------------------------------------------------------------*/ -#include "block.H" +#include "dictionaryListEntry.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::block::block +Foam::dictionaryListEntry::dictionaryListEntry ( - const pointField& vertices, - const blockEdgeList& edges, - const blockFaceList& faces, - Istream& is + const dictionary& parentDict, + const dictionaryListEntry& dictEnt ) : - blockDescriptor(vertices, edges, faces, is) -{ - createPoints(); - createBoundary(); -} - - -Foam::block::block(const blockDescriptor& blockDesc) -: - blockDescriptor(blockDesc) -{ - createPoints(); - createBoundary(); -} - - -// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // - -Foam::Ostream& Foam::operator<<(Ostream& os, const block& b) -{ - os << b.points() << nl - << b.cells() << nl - << b.boundaryPatches() << endl; - - return os; -} + dictionaryEntry(parentDict, dictEnt) +{} // ************************************************************************* // diff --git a/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntry.H b/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntry.H new file mode 100644 index 0000000000000000000000000000000000000000..762bfaad9be35336718c98b676258f048425acab --- /dev/null +++ b/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntry.H @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::dictionaryListEntry + +Description + Read/write List of dictionaries. + + The List entries get stored in a + dictionary which itself is stored in the parent dictionary with + keyword 'entryDDD' where DDD is the position in the parent dictionary. + The printing is again in List format - the keyword is only printed as + comment. Can be used to e.g. manipulate polyMesh/boundary files. + +SourceFiles + dictionaryListEntry.C + dictionaryListEntryIO.C + +\*---------------------------------------------------------------------------*/ + +#ifndef dictionaryListEntry_H +#define dictionaryListEntry_H + +#include "dictionaryEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of friend functions and operators + +class dictionaryListEntry; + +Ostream& operator<<(Ostream&, const dictionaryListEntry&); + + +/*---------------------------------------------------------------------------*\ + Class dictionaryListEntry Declaration +\*---------------------------------------------------------------------------*/ + +class dictionaryListEntry +: + public dictionaryEntry +{ + // Private Member Functions + + //- Returns size of dictionary without FoamFile + static label realSize(const dictionary&); + + //- Dissallow bitwise copy + dictionaryListEntry(const dictionary&); + + +public: + + // Constructors + + //- Construct from the parent dictionary and Istream + dictionaryListEntry(const dictionary& parentDict, Istream&); + + //- Construct as copy for the given parent dictionary + dictionaryListEntry + ( + const dictionary& parentDict, + const dictionaryListEntry& + ); + + autoPtr<entry> clone(const dictionary& parentDict) const + { + return autoPtr<entry>(new dictionaryListEntry(parentDict, *this)); + } + + + // Member functions + + //- Write + virtual void write(Ostream&) const; + + //- Return info proxy. + // Used to print token information to a stream + InfoProxy<dictionaryListEntry> info() const + { + return *this; + } + + + // Ostream operator + + friend Ostream& operator<<(Ostream&, const dictionaryListEntry&); +}; + + +template<> +Ostream& operator<<(Ostream&, const InfoProxy<dictionaryListEntry>&); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntryIO.C b/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntryIO.C new file mode 100644 index 0000000000000000000000000000000000000000..7d31932e9a106fbd4aa04bc958a44aa4c03dd64d --- /dev/null +++ b/src/OpenFOAM/db/dictionary/dictionaryListEntry/dictionaryListEntryIO.C @@ -0,0 +1,147 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "dictionaryListEntry.H" +#include "keyType.H" +#include "IOstreams.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +Foam::label Foam::dictionaryListEntry::realSize(const dictionary& dict) +{ + if (dict.size() < 1 || dict.first()->keyword() != "FoamFile") + { + return dict.size(); + } + else + { + return dict.size() - 1; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::dictionaryListEntry::dictionaryListEntry +( + const dictionary& parentDict, + Istream& is +) +: + dictionaryEntry + ( + word("entry" + Foam::name(realSize(parentDict))), + parentDict, + dictionary::null + ) +{ + token firstToken(is); + if (firstToken.isLabel()) + { + label s = firstToken.labelToken(); + + is.readBeginList("List"); + + for (label i=0; i<s; i++) + { + entry::New(*this, is); + } + is.readEndList("List"); + } + else if + ( + firstToken.isPunctuation() + && firstToken.pToken() == token::BEGIN_LIST + ) + { + while (true) + { + token nextToken(is); + if + ( + nextToken.isPunctuation() + && nextToken.pToken() == token::END_LIST + ) + { + break; + } + is.putBack(nextToken); + entry::New(*this, is); + } + } + else + { + FatalIOErrorInFunction(is) + << "incorrect first token, expected <int> or '(', found " + << firstToken.info() + << exit(FatalIOError); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::dictionaryListEntry::write(Ostream& os) const +{ + os << nl << indent << size() + << token::SPACE << "// " << keyword() << nl + << indent << token::BEGIN_LIST << incrIndent << nl; + + // Write contents + dictionary::write(os, false); + + // Write end delimiter + os << decrIndent << indent << token::END_LIST << nl; + + // Check state of IOstream + os.check("Ostream& operator<<(Ostream&, const dictionaryListEntry&)"); +} + + +// * * * * * * * * * * * * * * Ostream operator * * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const dictionaryListEntry& de) +{ + de.write(os); + return os; +} + + +template<> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const InfoProxy<dictionaryListEntry>& ip +) +{ + const dictionaryListEntry& e = ip.t_; + + os << " dictionaryListEntry '" << e.keyword() << "'" << endl; + + return os; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/db/dictionary/entry/entry.H b/src/OpenFOAM/db/dictionary/entry/entry.H index 00373cb8da4890e63d4df6a12ecf80c6a3bfdc07..c37809927a6509034f4ecc3cda14958441bf20b5 100644 --- a/src/OpenFOAM/db/dictionary/entry/entry.H +++ b/src/OpenFOAM/db/dictionary/entry/entry.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -75,6 +75,9 @@ class entry // Private Member Functions + //- Get the next valid keyword. Return true if is valid keyType. + static bool getKeyword(keyType&, token&, Istream&); + //- Get the next valid keyword otherwise return false static bool getKeyword(keyType&, Istream&); diff --git a/src/OpenFOAM/db/dictionary/entry/entryIO.C b/src/OpenFOAM/db/dictionary/entry/entryIO.C index 48b539588be249c97711670afaeb89b79f544078..2a10aee4b89c73a6154fbc4483ccb83b9322bbbb 100644 --- a/src/OpenFOAM/db/dictionary/entry/entryIO.C +++ b/src/OpenFOAM/db/dictionary/entry/entryIO.C @@ -23,21 +23,19 @@ License \*---------------------------------------------------------------------------*/ +#include "entry.H" #include "primitiveEntry.H" #include "dictionaryEntry.H" #include "functionEntry.H" #include "includeEntry.H" #include "inputModeEntry.H" #include "stringOps.H" +#include "dictionaryListEntry.H" -#include "IOstreams.H" +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -bool Foam::entry::getKeyword(keyType& keyword, Istream& is) +bool Foam::entry::getKeyword(keyType& keyword, token& keywordToken, Istream& is) { - token keywordToken; - // Read the next valid token discarding spurious ';'s do { @@ -65,25 +63,43 @@ bool Foam::entry::getKeyword(keyType& keyword, Istream& is) keyword = keywordToken.stringToken(); return true; } - // If it is the end of the dictionary or file return false... - else if (keywordToken == token::END_BLOCK || is.eof()) + else { return false; } - // Otherwise the token is invalid +} + + +bool Foam::entry::getKeyword(keyType& keyword, Istream& is) +{ + token keywordToken; + bool ok = getKeyword(keyword, keywordToken, is); + + if (ok) + { + return true; + } else { - cerr<< "--> FOAM Warning : " << std::endl - << " From function " - << "entry::getKeyword(keyType&, Istream&)" << std::endl - << " in file " << __FILE__ - << " at line " << __LINE__ << std::endl - << " Reading " << is.name().c_str() << std::endl - << " found " << keywordToken << std::endl - << " expected either " << token::END_BLOCK << " or EOF" - << std::endl; - - return false; + // Do some more checking + if (keywordToken == token::END_BLOCK || is.eof()) + { + return false; + } + else + { + // Otherwise the token is invalid + cerr<< "--> FOAM Warning : " << std::endl + << " From function " + << "entry::getKeyword(keyType&, Istream&)" << std::endl + << " in file " << __FILE__ + << " at line " << __LINE__ << std::endl + << " Reading " << is.name().c_str() << std::endl + << " found " << keywordToken << std::endl + << " expected either " << token::END_BLOCK << " or EOF" + << std::endl; + return false; + } } } @@ -93,22 +109,68 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is) is.fatalCheck("entry::New(const dictionary& parentDict, Istream&)"); keyType keyword; + token keyToken; - // Get the next keyword and if invalid return false - if (!getKeyword(keyword, is)) + // Get the next keyword and if a valid keyword return true + bool valid = getKeyword(keyword, keyToken, is); + + if (!valid) { - return false; + // Do some more checking + if (keyToken == token::END_BLOCK || is.eof()) + { + return false; + } + else if + ( + keyToken.isLabel() + || (keyToken.isPunctuation() && keyToken.pToken() == token::BEGIN_LIST) + ) + { + is.putBack(keyToken); + return parentDict.add + ( + new dictionaryListEntry(parentDict, is), + false + ); + } + else + { + // Otherwise the token is invalid + cerr<< "--> FOAM Warning : " << std::endl + << " From function " + << "entry::getKeyword(keyType&, Istream&)" << std::endl + << " in file " << __FILE__ + << " at line " << __LINE__ << std::endl + << " Reading " << is.name().c_str() << std::endl + << " found " << keyToken << std::endl + << " expected either " << token::END_BLOCK << " or EOF" + << std::endl; + return false; + } } else // Keyword starts entry ... { - if - ( - !disableFunctionEntries - && keyword[0] == '#' - ) // ... Function entry + if (keyword[0] == '#') // ... Function entry { word functionName = keyword(1, keyword.size()-1); - return functionEntry::execute(functionName, parentDict, is); + if (disableFunctionEntries) + { + return parentDict.add + ( + new functionEntry + ( + keyword, + parentDict, + is + ), + false + ); + } + else + { + return functionEntry::execute(functionName, parentDict, is); + } } else if ( diff --git a/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C index a758de39a4ce4ef614bfb3eacdfd9df41ce2e5df..5837bd5773133b5f82e009fdbe3f5e5623cc10a5 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "functionEntry.H" +#include "IOstreams.H" +#include "ISstream.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,6 +47,34 @@ namespace Foam } +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +Foam::token Foam::functionEntry::readLine(const word& key, Istream& is) +{ + string s; + dynamic_cast<ISstream&>(is).getLine(s); + + return token(string(key+s), is.lineNumber()); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionEntry::functionEntry +( + const word& key, + const dictionary& dict, + Istream& is +) +: + primitiveEntry + ( + word(key+dict.name()+Foam::name(is.lineNumber())), + readLine(key, is) + ) +{} + + // * * * * * * * * * * * * Member Function Selectors * * * * * * * * * * * * // bool Foam::functionEntry::execute @@ -132,4 +162,17 @@ bool Foam::functionEntry::execute } +void Foam::functionEntry::write(Ostream& os) const +{ + // Contents should be single string token + const token& t = operator[](0); + const string& s = t.stringToken(); + + for (size_t i = 0; i < s.size(); i++) + { + os.write(s[i]); + } +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.H index 8c67c5440338b7b6c691bedc643547491186e8ed..0c9bd6604e5ebc18b23cd365215ba335da1fb025 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.H +++ b/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.H @@ -48,13 +48,13 @@ SourceFiles #include "word.H" #include "memberFunctionSelectionTables.H" +#include "primitiveEntry.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -class primitiveEntry; class dictionary; /*---------------------------------------------------------------------------*\ @@ -62,9 +62,14 @@ class dictionary; \*---------------------------------------------------------------------------*/ class functionEntry +: + public primitiveEntry { // Private Member Functions + //- Read line as string token + static token readLine(const word& key, Istream& is); + //- Disallow default bitwise copy construct functionEntry(const functionEntry&); @@ -74,6 +79,12 @@ class functionEntry public: + // Constructors + + //- Construct from keyword, parent dictionary and Istream + functionEntry(const word&, const dictionary&, Istream&); + + // Member Function Selectors declareMemberFunctionSelectionTable @@ -119,6 +130,9 @@ public: primitiveEntry&, Istream& ); + + //- Write + virtual void write(Ostream&) const; }; diff --git a/src/OpenFOAM/db/dynamicLibrary/codedBase/codedBase.C b/src/OpenFOAM/db/dynamicLibrary/codedBase/codedBase.C index 5fcaf92d352db8d947a8ebb07df877c8d7c4c1bc..753de34bbee78f4942db1cd343ed6c2c00c8bd5d 100644 --- a/src/OpenFOAM/db/dynamicLibrary/codedBase/codedBase.C +++ b/src/OpenFOAM/db/dynamicLibrary/codedBase/codedBase.C @@ -28,6 +28,7 @@ License #include "dynamicCode.H" #include "dynamicCodeContext.H" #include "dlLibraryTable.H" +#include "Pstream.H" #include "PstreamReduceOps.H" #include "OSspecific.H" #include "Ostream.H" @@ -316,6 +317,8 @@ void Foam::codedBase::createLibrary } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + void Foam::codedBase::updateLibrary ( const word& name @@ -388,7 +391,4 @@ Foam::codedBase::~codedBase() {} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H b/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H index 97d94cadfd10d5145cbc2b9a77ffaa2e1d0f3b17..9c7d56a340d99c9a9bebecdc29ee1ea7329ff5dc 100644 --- a/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H +++ b/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H @@ -64,24 +64,25 @@ Description libs | Libraries containing implementation | yes | region | Name of region for multi-region cases | no | enabled | On/off switch | no | yes + log | Log information to standard output | no | yes timeStart| Start time | no | timeEnd | End time | no | - evaluateControl | See time controls below | no | timeStep - evaluateInterval | Steps between output | no | - writeControl | See time controls below | no | timeStep - writeInterval | Steps between output | no | + executeControl | See time controls below | no | timeStep + executeInterval | Steps between each execute phase | no | + writeControl | See time controls below | no | timeStep + writeInterval | Steps between each write phase | no | \endtable Time controls: \table Option | Description - timeStep | Execute/write every 'writeInterval' time-steps - writeTime | Execute/write every 'writeInterval' output times - adjustableRunTime | Execute/write every 'writeInterval' run time period - runTime | Execute/write every 'writeInterval' run time period - clockTime | Execute/write every 'writeInterval' clock time period - cpuTime | Execute/write every 'writeInterval' CPU time period - none | Execute/write every time-step + timeStep | Execute/write every 'Interval' time-steps + writeTime | Execute/write every 'Interval' output times + adjustableRunTime | Execute/write every 'Interval' run time period + runTime | Execute/write every 'Interval' run time period + clockTime | Execute/write every 'Interval' clock time period + cpuTime | Execute/write every 'Interval' CPU time period + none | Execute/write disabled \endtable The sub-dictionary name \c \<functionObjectName\> is chosen by the user, and @@ -91,6 +92,14 @@ Description libraries and the \c libs entry is used to specify which library should be loaded. + Each function object has two separate run phases: + + - The \c execute phase is meant to be used for updating calculations + or for management tasks. + - The \c write phase is meant for writing the calculated data to disk. + + For each phase the respective time controls are provided, as listed above. + Class Foam::functionObject diff --git a/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.C b/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.C index 6fdfe07eb1d78d9073ed5d6e81e98404f50e2ccb..b1d9f5f59f3f0f8ecc9fc2fbbad88b78769574c3 100644 --- a/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.C +++ b/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -40,19 +40,46 @@ namespace functionObjects // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // +const Foam::objectRegistry& +Foam::functionObjects::regionFunctionObject::whichSubRegistry +( + const objectRegistry& obr, + const dictionary& dict +) +{ + word subName; + if (dict.readIfPresent("subRegion", subName)) + { + return obr.lookupObject<objectRegistry>(subName); + } + else + { + return obr; + } +} + + +const Foam::objectRegistry& +Foam::functionObjects::regionFunctionObject::obr() const +{ + return subObr_; +} + + bool Foam::functionObjects::regionFunctionObject::writeObject ( const word& fieldName ) { - if (obr_.foundObject<regIOobject>(fieldName)) - { - const regIOobject& field = obr_.lookupObject<regIOobject>(fieldName); + const regIOobject* objPtr = + this->lookupObjectPtr<regIOobject>(fieldName); + if (objPtr) + { Log << " functionObjects::" << type() << " " << name() - << " writing field: " << field.name() << endl; + << " writing field: " << objPtr->name() << endl; - field.write(); + objPtr->write(); return true; } @@ -68,13 +95,12 @@ bool Foam::functionObjects::regionFunctionObject::clearObject const word& fieldName ) { - if (foundObject<regIOobject>(fieldName)) + regIOobject* objPtr = lookupObjectRefPtr<regIOobject>(fieldName); + if (objPtr) { - const regIOobject& resultObject = lookupObject<regIOobject>(fieldName); - - if (resultObject.ownedByRegistry()) + if (objPtr->ownedByRegistry()) { - return const_cast<regIOobject&>(resultObject).checkOut(); + return objPtr->checkOut(); } else { @@ -104,7 +130,8 @@ Foam::functionObjects::regionFunctionObject::regionFunctionObject ( dict.lookupOrDefault("region", polyMesh::defaultRegion) ) - ) + ), + subObr_(whichSubRegistry(obr_, dict)) {} @@ -116,7 +143,8 @@ Foam::functionObjects::regionFunctionObject::regionFunctionObject ) : stateFunctionObject(name, obr.time()), - obr_(obr) + obr_(obr), + subObr_(whichSubRegistry(obr_, dict)) {} diff --git a/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.H b/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.H index e9be6e3487ee72f6ad37584d6b7461ead5b9381c..70be4fccfe2d50267f0c4f9112be21a0fbbc2864 100644 --- a/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.H +++ b/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObject.H @@ -27,6 +27,8 @@ Class Description Specialization of Foam::functionObject for a region and providing a reference to the region Foam::objectRegistry. + Also provides support for referencing a sub-region, which is typically + needed when dealing with surfMesh and their fields. See also Foam::functionObjects::stateFunctionObject @@ -68,18 +70,51 @@ protected: //- Reference to the region objectRegistry const objectRegistry& obr_; + //- Optional reference to the sub-region objectRegistry. + // If a sub-region is not in effect, this reference is identical + // to the usual region objectRegistry. + const objectRegistry& subObr_; + // Protected member functions - //- Find field in the objectRegistry + //- Selector for alternative sub-registry, + // when the keyword %subRegion is present in the dictionary + static const objectRegistry& whichSubRegistry + ( + const objectRegistry& obr, + const dictionary& dict + ); + + //- The region or sub-region registry being used + const objectRegistry& obr() const; + + + //- Find object (eg, a field) in the (sub) objectRegistry template<class ObjectType> bool foundObject(const word& fieldName) const; - //- Lookup field from the objectRegistry + //- Lookup and return object (eg, a field) from the (sub) objectRegistry template<class ObjectType> const ObjectType& lookupObject(const word& fieldName) const; - //- Store the given field in the objectRegistry under the given name + //- Lookup and return object (eg, a field) from the (sub) objectRegistry + template<class ObjectType> + ObjectType& lookupObjectRef(const word& fieldName) const; + + //- Lookup and return pointer to the object, + // otherwise nullptr if the object was not found, + // or had the incorrect type. + template<class ObjectType> + const ObjectType* lookupObjectPtr(const word& fieldName) const; + + //- Lookup and return non-const pointer to the object, + // otherwise nullptr if the object was not found, + // or had the incorrect type. + template<class ObjectType> + ObjectType* lookupObjectRefPtr(const word& fieldName) const; + + //- Store the given field in the (sub) objectRegistry under the given name // Note: sets the fieldName to tfield().name() if not already set template<class ObjectType> bool store @@ -89,10 +124,10 @@ protected: bool cacheable = false ); - //- Write field if present in objectRegistry + //- Write field if present in the (sub) objectRegistry bool writeObject(const word& fieldName); - //- Clear field from the objectRegistry if present + //- Clear field from the (sub) objectRegistry if present bool clearObject(const word& fieldName); @@ -101,10 +136,10 @@ private: // Private Member Functions //- Disallow default bitwise copy construct - regionFunctionObject(const regionFunctionObject&); + regionFunctionObject(const regionFunctionObject&) = delete; //- Disallow default bitwise assignment - void operator=(const regionFunctionObject&); + void operator=(const regionFunctionObject&) = delete; public: diff --git a/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObjectTemplates.C b/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObjectTemplates.C index 5c803a73df2089628b03d1b24e36fb790d12c76e..a18bff7070c76e3cac602392969e2c70045f55d2 100644 --- a/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObjectTemplates.C +++ b/src/OpenFOAM/db/functionObjects/regionFunctionObject/regionFunctionObjectTemplates.C @@ -34,7 +34,7 @@ bool Foam::functionObjects::regionFunctionObject::foundObject const word& fieldName ) const { - return obr_.foundObject<ObjectType>(fieldName); + return obr().foundObject<ObjectType>(fieldName); } @@ -44,7 +44,37 @@ const ObjectType& Foam::functionObjects::regionFunctionObject::lookupObject const word& fieldName ) const { - return obr_.lookupObject<ObjectType>(fieldName); + return obr().lookupObject<ObjectType>(fieldName); +} + + +template<class ObjectType> +ObjectType& Foam::functionObjects::regionFunctionObject::lookupObjectRef +( + const word& fieldName +) const +{ + return obr().lookupObjectRef<ObjectType>(fieldName); +} + + +template<class ObjectType> +const ObjectType* Foam::functionObjects::regionFunctionObject::lookupObjectPtr +( + const word& fieldName +) const +{ + return obr().lookupObjectPtr<ObjectType>(fieldName); +} + + +template<class ObjectType> +ObjectType* Foam::functionObjects::regionFunctionObject::lookupObjectRefPtr +( + const word& fieldName +) const +{ + return obr().lookupObjectRefPtr<ObjectType>(fieldName); } @@ -59,7 +89,7 @@ bool Foam::functionObjects::regionFunctionObject::store if (cacheable && fieldName == tfield().name()) { WarningInFunction - << "Cannot store cache-able field with the named used in the cache." + << "Cannot store cache-able field with the name used in the cache." << nl << " Either choose a different name or cache the field" << " and use the 'writeObjects' functionObject." @@ -72,8 +102,8 @@ bool Foam::functionObjects::regionFunctionObject::store { const ObjectType& field = lookupObject<ObjectType>(fieldName); - // If there is a result field already registered assign to the new - // result field otherwise transfer ownership of the new result field to + // If there is a result field already registered, assign to the new + // result field. Otherwise transfer ownership of the new result field to // the object registry if (&field != &tfield()) { @@ -81,7 +111,7 @@ bool Foam::functionObjects::regionFunctionObject::store } else { - obr_.objectRegistry::store(tfield.ptr()); + obr().objectRegistry::store(tfield.ptr()); } } else @@ -95,7 +125,7 @@ bool Foam::functionObjects::regionFunctionObject::store fieldName = tfield().name(); } - obr_.objectRegistry::store(tfield.ptr()); + obr().objectRegistry::store(tfield.ptr()); } return true; diff --git a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C index 1f179698d100fa4bab81c26e9705793aee40614b..8251159d02f7ad1bfaf1e04fc8f25ae350b76216 100644 --- a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C +++ b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.C @@ -77,7 +77,8 @@ Foam::functionObjects::timeControl::timeControl ), executeControl_(t, dict, "execute"), writeControl_(t, dict, "write"), - foPtr_(functionObject::New(name, t, dict_)) + foPtr_(functionObject::New(name, t, dict_)), + executeTimeIndex_(-1) { readControls(); } @@ -89,6 +90,7 @@ bool Foam::functionObjects::timeControl::execute() { if (active() && (postProcess || executeControl_.execute())) { + executeTimeIndex_ = time_.timeIndex(); foPtr_->execute(); } @@ -100,6 +102,13 @@ bool Foam::functionObjects::timeControl::write() { if (active() && (postProcess || writeControl_.execute())) { + // Ensure written results reflect the current state + if (executeTimeIndex_ != time_.timeIndex()) + { + executeTimeIndex_ = time_.timeIndex(); + foPtr_->execute(); + } + foPtr_->write(); } diff --git a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H index e256144f6b21a8e3f99e5fdbde4322c924e48cba..d019a7e8b64bb36808d841c6449bf5a2986c9bd9 100644 --- a/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H +++ b/src/OpenFOAM/db/functionObjects/timeControl/timeControlFunctionObject.H @@ -99,6 +99,9 @@ class timeControl //- The functionObject to execute autoPtr<functionObject> foPtr_; + //- Time index of the last execute call + label executeTimeIndex_; + // Private Member Functions diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C index 84df1a647023255b17fb86b0d6a5f819390cc19a..d72efda11cab30f7eecb11dbc88e7b807150af8a 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C +++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -155,12 +155,13 @@ Foam::wordList Foam::objectRegistry::sortedNames(const word& ClassName) const const Foam::objectRegistry& Foam::objectRegistry::subRegistry ( const word& name, - const bool forceCreate + const bool forceCreate, + const bool recursive ) const { - if (forceCreate && !foundObject<objectRegistry>(name)) + if (forceCreate && !foundObject<objectRegistry>(name, recursive)) { - objectRegistry* fieldsCachePtr = new objectRegistry + objectRegistry* subObr = new objectRegistry ( IOobject ( @@ -171,9 +172,10 @@ const Foam::objectRegistry& Foam::objectRegistry::subRegistry IOobject::NO_WRITE ) ); - fieldsCachePtr->store(); + subObr->store(); } - return lookupObject<objectRegistry>(name); + + return lookupObject<objectRegistry>(name, recursive); } diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.H b/src/OpenFOAM/db/objectRegistry/objectRegistry.H index bae145b04196885c76a128cdffa3e4a4cd77fe10..16dc0e17780da30f9381c0e8035b73d0e99125b5 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistry.H +++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -29,6 +29,7 @@ Description SourceFiles objectRegistry.C + objectRegistryTemplates.C \*---------------------------------------------------------------------------*/ @@ -75,10 +76,10 @@ class objectRegistry bool parentNotTime() const; //- Disallow Copy constructor - objectRegistry(const objectRegistry&); + objectRegistry(const objectRegistry&) = delete; //- Disallow default bitwise copy construct and assignment - void operator=(const objectRegistry&); + void operator=(const objectRegistry&) = delete; public: @@ -132,38 +133,58 @@ public: return dbDir_; } - //- Return the list of names of the IOobjects + //- A list of names of the objects wordList names() const; - //- Return the sorted list of names of the IOobjects + //- A sorted list of names of the objects wordList sortedNames() const; - //- Return the list of names of IOobjects of given class name + //- A list of names of objects that have the given class name wordList names(const word& className) const; - //- Return the sorted list of names of IOobjects of given class name + //- A sorted list of names of objects that have the given class name wordList sortedNames(const word& className) const; - //- Return the list of names of the IOobjects of given type + //- A list of names of objects that have the given type template<class Type> wordList names() const; - //- Return the list of objects whose name matches the input regExp + //- A list of names of objects that have the given type, + // and that also satisfy the input matcher template<class Type> - wordList names(const wordRe& name) const; + wordList names(const wordRe&) const; - //- Return the list of objects whose name matches the input regExp + //- A list of names for objects that have the given type, + // and that also satisfy the input matchers template<class Type> - wordList names(const wordReList& name) const; + wordList names(const wordReList&) const; - //- Lookup and return a const sub-objectRegistry. Optionally create - // it if it does not exist. + //- A sorted list of names of objects that have the given type + template<class Type> + wordList sortedNames() const; + + //- A sorted list of names of objects that have the given type, + // and that also satisfy the input matcher + template<class Type> + wordList sortedNames(const wordRe&) const; + + //- A sorted list of names of objects that have the given type, + // and that also satisfy the input matchers + template<class Type> + wordList sortedNames(const wordReList&) const; + + + //- Lookup and return a const sub-objectRegistry. + // Optionally create it if it does not exist. + // If recursive, search parent registries. const objectRegistry& subRegistry ( const word& name, - const bool forceCreate = false + const bool forceCreate = false, + const bool recursive = false ) const; + //- Lookup and return all objects of the given Type template<class Type> HashTable<const Type*> lookupClass(const bool strict = false) const; @@ -173,12 +194,56 @@ public: HashTable<Type*> lookupClass(const bool strict = false); //- Is the named Type found? + // If recursive, search parent registries. template<class Type> - bool foundObject(const word& name) const; + bool foundObject + ( + const word& name, + const bool recursive = false + ) const; - //- Lookup and return the object of the given Type + //- Lookup and return the object of the given Type. + // If recursive, search parent registries. template<class Type> - const Type& lookupObject(const word& name) const; + const Type& lookupObject + ( + const word& name, + const bool recursive = false + ) const; + + //- Lookup and return the object of the given Type. + // If recursive, search parent registries. + template<class Type> + Type& lookupObjectRef + ( + const word& name, + const bool recursive = false + ) const; + + //- Lookup and return pointer to the object of the given Type, + // otherwise nullptr if the object was not found, + // or had the incorrect type. + // If recursive, search parent registries. + template<class Type> + const Type* lookupObjectPtr + ( + const word& name, + const bool recursive = false + ) const; + + + //- Lookup and return non-const pointer to the object + // of the given Type, + // otherwise nullptr if the object was not found, + // or had the incorrect type. + // If recursive, search parent registries. + template<class Type> + Type* lookupObjectRefPtr + ( + const word& name, + const bool recursive = false + ) const; + //- Return new event number. label getEvent() const; @@ -195,6 +260,7 @@ public: //- Remove an regIOobject from registry bool checkOut(regIOobject&) const; + // Reading //- Return true if any of the object's files have been modified diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C b/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C index 0c26009482ef8adad9d3bd3eb5e7f0f3fc29cdf2..c5c583ad2666e24f3b6f37f5415c79d65e3923a8 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C +++ b/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -49,7 +49,7 @@ Foam::wordList Foam::objectRegistry::names() const template<class Type> -Foam::wordList Foam::objectRegistry::names(const wordRe& name) const +Foam::wordList Foam::objectRegistry::names(const wordRe& matcher) const { wordList objectNames(size()); @@ -60,7 +60,7 @@ Foam::wordList Foam::objectRegistry::names(const wordRe& name) const { const word& objectName = iter()->name(); - if (name.match(objectName)) + if (matcher.match(objectName)) { objectNames[count++] = objectName; } @@ -74,11 +74,46 @@ Foam::wordList Foam::objectRegistry::names(const wordRe& name) const template<class Type> -Foam::wordList Foam::objectRegistry::names(const wordReList& patterns) const +Foam::wordList Foam::objectRegistry::names(const wordReList& matcher) const { wordList names(this->names<Type>()); - return wordList(names, findStrings(patterns, names)); + return wordList(names, findStrings(matcher, names)); +} + + +template<class Type> +Foam::wordList Foam::objectRegistry::sortedNames() const +{ + wordList sorted(this->names<Type>()); + sort(sorted); + + return sorted; +} + +template<class Type> +Foam::wordList Foam::objectRegistry::sortedNames +( + const wordRe& match +) const +{ + wordList sorted(this->names<Type>(match)); + sort(sorted); + + return sorted; +} + + +template<class Type> +Foam::wordList Foam::objectRegistry::sortedNames +( + const wordReList& matcher +) const +{ + wordList sorted(this->names<Type>(matcher)); + sort(sorted); + + return sorted; } @@ -92,11 +127,7 @@ Foam::HashTable<const Type*> Foam::objectRegistry::lookupClass forAllConstIter(HashTable<regIOobject*>, *this, iter) { - if - ( - (strict && isType<Type>(*iter())) - || (!strict && isA<Type>(*iter())) - ) + if (strict ? isType<Type>(*iter()) : isA<Type>(*iter())) { objectsOfClass.insert ( @@ -120,11 +151,7 @@ Foam::HashTable<Type*> Foam::objectRegistry::lookupClass forAllIter(HashTable<regIOobject*>, *this, iter) { - if - ( - (strict && isType<Type>(*iter())) - || (!strict && isA<Type>(*iter())) - ) + if (strict ? isType<Type>(*iter()) : isA<Type>(*iter())) { objectsOfClass.insert ( @@ -139,40 +166,41 @@ Foam::HashTable<Type*> Foam::objectRegistry::lookupClass template<class Type> -bool Foam::objectRegistry::foundObject(const word& name) const +bool Foam::objectRegistry::foundObject +( + const word& name, + const bool recursive +) const { - const_iterator iter = find(name); + const Type* ptr = this->lookupObjectPtr<Type>(name, recursive); - if (iter != end()) + if (ptr) { - const Type* vpsiPtr_ = dynamic_cast<const Type*>(iter()); - - if (vpsiPtr_) - { - return true; - } + return true; } - else if (this->parentNotTime()) + else { - return parent_.foundObject<Type>(name); + return false; } - - return false; } template<class Type> -const Type& Foam::objectRegistry::lookupObject(const word& name) const +const Type& Foam::objectRegistry::lookupObject +( + const word& name, + const bool recursive +) const { const_iterator iter = find(name); if (iter != end()) { - const Type* vpsiPtr_ = dynamic_cast<const Type*>(iter()); + const Type* ptr = dynamic_cast<const Type*>(iter()); - if (vpsiPtr_) + if (ptr) { - return *vpsiPtr_; + return *ptr; } FatalErrorInFunction @@ -183,24 +211,75 @@ const Type& Foam::objectRegistry::lookupObject(const word& name) const << ", it is a " << iter()->type() << abort(FatalError); } - else + else if (recursive && this->parentNotTime()) + { + return parent_.lookupObject<Type>(name, recursive); + } + + FatalErrorInFunction + << nl + << " request for " << Type::typeName + << " " << name << " from objectRegistry " << this->name() + << " failed\n available objects of type " << Type::typeName + << " are" << nl + << names<Type>() + << abort(FatalError); + + return NullObjectRef<Type>(); +} + + +template<class Type> +Type& Foam::objectRegistry::lookupObjectRef +( + const word& name, + const bool recursive +) const +{ + const Type& ref = this->lookupObject<Type>(name, recursive); + // The above will already fail if things didn't work + + return const_cast<Type&>(ref); +} + + +template<class Type> +const Type* Foam::objectRegistry::lookupObjectPtr +( + const word& name, + const bool recursive +) const +{ + const_iterator iter = find(name); + + if (iter != end()) { - if (this->parentNotTime()) + const Type* ptr = dynamic_cast<const Type*>(iter()); + + if (ptr) { - return parent_.lookupObject<Type>(name); + return ptr; } - - FatalErrorInFunction - << nl - << " request for " << Type::typeName - << " " << name << " from objectRegistry " << this->name() - << " failed\n available objects of type " << Type::typeName - << " are" << nl - << names<Type>() - << abort(FatalError); + } + else if (recursive && this->parentNotTime()) + { + return parent_.lookupObjectPtr<Type>(name, recursive); } - return NullObjectRef<Type>(); + return nullptr; +} + + +template<class Type> +Type* Foam::objectRegistry::lookupObjectRefPtr +( + const word& name, + const bool recursive +) const +{ + const Type* ptr = this->lookupObjectPtr<Type>(name, recursive); + + return const_cast<Type*>(ptr); } diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C index 724e1ef1dac345bbcfdefa3f02dea73b36cb4218..5a6177c3914bc9a1f8ead582f840cfa6d6a6ed15 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.C +++ b/src/OpenFOAM/db/regIOobject/regIOobject.C @@ -35,14 +35,14 @@ namespace Foam defineTypeNameAndDebug(regIOobject, 0); } -int Foam::regIOobject::fileModificationSkew +float Foam::regIOobject::fileModificationSkew ( - Foam::debug::optimisationSwitch("fileModificationSkew", 30) + Foam::debug::floatOptimisationSwitch("fileModificationSkew", 30) ); registerOptSwitch ( "fileModificationSkew", - int, + float, Foam::regIOobject::fileModificationSkew ); diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.H b/src/OpenFOAM/db/regIOobject/regIOobject.H index 718dd432d1905a8cfcf06de8d4ce1cbc2861ed34..d345dc860244163eaa648ca14a7f7a58b0db66ee 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.H +++ b/src/OpenFOAM/db/regIOobject/regIOobject.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -130,7 +130,7 @@ public: //- Runtime type information TypeName("regIOobject"); - static int fileModificationSkew; + static float fileModificationSkew; // Constructors diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C index f5381ef91e05712331a226d15542f99f301508d8..dca595c6a3e3ef4b34f26669c5c68f3726c21b19 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -169,6 +169,18 @@ Foam::dimensioned<Type>::dimensioned {} +template<class Type> +Foam::dimensioned<Type>::dimensioned +( + const dimensionSet& dimSet +) +: + name_("0"), + dimensions_(dimSet), + value_(Zero) +{} + + // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // template<class Type> diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H index fe817e4afec8bbdf6a67bd6599be20fb06a8ed87..fde67a1fc1eb626f6f66670a662f5ef71699f750 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -117,9 +117,12 @@ public: //- Construct from dictionary lookup with a given name and dimensions dimensioned(const word&, const dimensionSet&, const dictionary&); - //- Null constructor + //- Null constructor - a dimensionless Zero, named "undefined" dimensioned(); + //- A dimensioned Zero, named "0" + explicit dimensioned(const dimensionSet&); + // Static member functions diff --git a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraint.H b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraint.H index 9696efeed2d6cda72d9e3ae8ce914fb88c41068d..ae8235eec33e27c4163a445a61923b89e24bfb36 100644 --- a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraint.H +++ b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraint.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -87,6 +87,9 @@ public: //- Return the accumulated unconstrained directions. Directions // coded as first n rows of tensor. inline void unconstrainedDirections(label& n, tensor& vecs) const; + + //- Constrain a displacement + inline vector constrainDisplacement(const vector& disp) const; }; @@ -103,7 +106,7 @@ inline pointConstraint transform(const tensor& tt, const pointConstraint& v); //- contiguous template<class T> bool contiguous(); template<> -inline bool contiguous<pointConstraint>() {return true;} +inline bool contiguous<pointConstraint>() {return true;} diff --git a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraintI.H b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraintI.H index 27aa1debf411b77b5cfe902d57fd0123fad0d57e..0a3d14d2ddfd1d38ab1a2a70058e15462e8faf05 100644 --- a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraintI.H +++ b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointConstraint/pointConstraintI.H @@ -45,7 +45,7 @@ inline Foam::pointConstraint::pointConstraint(Istream& is) // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::pointConstraint::applyConstraint(const vector& cd) +inline void Foam::pointConstraint::applyConstraint(const vector& cd) { if (first() == 0) { @@ -74,7 +74,7 @@ void Foam::pointConstraint::applyConstraint(const vector& cd) } -void Foam::pointConstraint::combine(const pointConstraint& pc) +inline void Foam::pointConstraint::combine(const pointConstraint& pc) { if (first() == 0) { @@ -115,7 +115,7 @@ void Foam::pointConstraint::combine(const pointConstraint& pc) } -Foam::tensor Foam::pointConstraint::constraintTransformation() const +inline Foam::tensor Foam::pointConstraint::constraintTransformation() const { if (first() == 0) { @@ -136,8 +136,11 @@ Foam::tensor Foam::pointConstraint::constraintTransformation() const } -void Foam::pointConstraint::unconstrainedDirections(label& n, tensor& tt) -const +inline void Foam::pointConstraint::unconstrainedDirections +( + label& n, + tensor& tt +) const { n = 3-first(); @@ -179,7 +182,36 @@ const } -void Foam::combineConstraintsEqOp::operator() +inline Foam::vector Foam::pointConstraint::constrainDisplacement +( + const vector& d +) const +{ + vector cd; + + if (first() == 0) + { + cd = d; + } + else if (first() == 1) + { + // Remove plane normal + cd = d-(d&second())*second(); + } + else if (first() == 2) + { + // Keep line direction only + cd = (d&second())*second(); + } + else + { + cd = Zero; + } + return cd; +} + + +inline void Foam::combineConstraintsEqOp::operator() ( pointConstraint& x, const pointConstraint& y @@ -189,7 +221,7 @@ void Foam::combineConstraintsEqOp::operator() } -Foam::pointConstraint Foam::transform +inline Foam::pointConstraint Foam::transform ( const tensor& tt, const pointConstraint& v diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index 5ab933097287d48961903fff47257b4d2290cac8..f645a7ef352a8b9c17b78a89f9dfc9024d221dc1 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -909,8 +909,23 @@ void Foam::argList::parse << regIOobject::fileCheckTypesNames [ regIOobject::fileModificationChecking - ] - << endl; + ]; + if + ( + ( + regIOobject::fileModificationChecking + == regIOobject::timeStamp + ) + || ( + regIOobject::fileModificationChecking + == regIOobject::timeStampMaster + ) + ) + { + Info<< " (fileModificationSkew " + << regIOobject::fileModificationSkew << ")"; + } + Info<< endl; Info<< "allowSystemOperations : "; if (dynamicCode::allowSystemOperations) diff --git a/src/OpenFOAM/global/constants/mathematical/mathematicalConstants.H b/src/OpenFOAM/global/constants/mathematical/mathematicalConstants.H index d286493919b2769958a6d878055648b94c24eaa2..fa4850fb5a98ec9728bfcb70087bb22272ed1f5f 100644 --- a/src/OpenFOAM/global/constants/mathematical/mathematicalConstants.H +++ b/src/OpenFOAM/global/constants/mathematical/mathematicalConstants.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,6 +52,9 @@ namespace mathematical const scalar twoPi(2*pi); const scalar piByTwo(0.5*pi); + //- Euler's constant + const scalar Eu(0.57721566490153286060651209); + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace mathematical diff --git a/src/OpenFOAM/global/debug/debug.C b/src/OpenFOAM/global/debug/debug.C index 279be7409036dbd379aea47946ebb8fe8dbde3bb..bdf1698d07c08da045afec641a24c8dd81af8b15 100644 --- a/src/OpenFOAM/global/debug/debug.C +++ b/src/OpenFOAM/global/debug/debug.C @@ -190,6 +190,19 @@ int Foam::debug::optimisationSwitch(const char* name, const int defaultValue) } +float Foam::debug::floatOptimisationSwitch +( + const char* name, + const float defaultValue +) +{ + return optimisationSwitches().lookupOrAddDefault + ( + name, defaultValue, false, false + ); +} + + void Foam::debug::addDebugObject(const char* name, simpleRegIOobject* obj) { simpleObjectRegistryEntry* ptr = debugObjects().lookupPtr(name); diff --git a/src/OpenFOAM/global/debug/debug.H b/src/OpenFOAM/global/debug/debug.H index 4eeb8cbb534fdce73c32d73f109cf145571c661d..190f73be3029b485e9947a1dc9615edd89134328 100644 --- a/src/OpenFOAM/global/debug/debug.H +++ b/src/OpenFOAM/global/debug/debug.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -74,6 +74,13 @@ namespace debug //- Lookup optimisation switch or add default value. int optimisationSwitch(const char* name, const int defaultValue=0); + //- Lookup optimisation switch or add default value. + float floatOptimisationSwitch + ( + const char* name, + const float defaultValue=0 + ); + //- Internal function to lookup a sub-dictionary from controlDict. dictionary& switchSet(const char* subDictName, dictionary*& subDictPtr); diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H index 8cf277cd70eb3fb1ce35e34d0f5527baab6964a2..4b47e344258060a68671a6b0f347d503de972b1a 100644 --- a/src/OpenFOAM/include/OSspecific.H +++ b/src/OpenFOAM/include/OSspecific.H @@ -133,6 +133,9 @@ off_t fileSize(const fileName&, const bool followLink=true); //- Return time of last file modification time_t lastModified(const fileName&, const bool followLink=true); +//- Return time of last file modification +double highResLastModified(const fileName&); + //- Read a directory and return the entries as a string list fileNameList readDir ( diff --git a/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixATmul.C b/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixATmul.C index eeb3618c2aa3c4c9d4633e2f1fd1370ee66bf2a3..0aa6d2606376533bf82f50d605b3c94eb2d6009e 100644 --- a/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixATmul.C +++ b/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixATmul.C @@ -202,7 +202,7 @@ void Foam::LduMatrix<Type, DType, LUType>::sumA { if (interfaces_.set(patchi)) { - const unallocLabelList& pa = lduAddr().patchAddr(patchi); + const labelUList& pa = lduAddr().patchAddr(patchi); const Field<LUType>& pCoeffs = interfacesUpper_[patchi]; forAll(pa, face) diff --git a/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixOperations.C b/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixOperations.C index 6d5f5be9c064b6b268303e3bc0e7be4f6d6b2338..f13202a69c6af35bd997ce55d2ad0f6dc708d3e1 100644 --- a/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixOperations.C +++ b/src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixOperations.C @@ -34,8 +34,8 @@ void Foam::LduMatrix<Type, DType, LUType>::sumDiag() const Field<LUType>& Upper = const_cast<const LduMatrix&>(*this).upper(); Field<DType>& Diag = diag(); - const unallocLabelList& l = lduAddr().lowerAddr(); - const unallocLabelList& u = lduAddr().upperAddr(); + const labelUList& l = lduAddr().lowerAddr(); + const labelUList& u = lduAddr().upperAddr(); for (label face=0; face<l.size(); face++) { @@ -52,8 +52,8 @@ void Foam::LduMatrix<Type, DType, LUType>::negSumDiag() const Field<LUType>& Upper = const_cast<const LduMatrix&>(*this).upper(); Field<DType>& Diag = diag(); - const unallocLabelList& l = lduAddr().lowerAddr(); - const unallocLabelList& u = lduAddr().upperAddr(); + const labelUList& l = lduAddr().lowerAddr(); + const labelUList& u = lduAddr().upperAddr(); for (label face=0; face<l.size(); face++) { @@ -72,8 +72,8 @@ void Foam::LduMatrix<Type, DType, LUType>::sumMagOffDiag const Field<LUType>& Lower = const_cast<const LduMatrix&>(*this).lower(); const Field<LUType>& Upper = const_cast<const LduMatrix&>(*this).upper(); - const unallocLabelList& l = lduAddr().lowerAddr(); - const unallocLabelList& u = lduAddr().upperAddr(); + const labelUList& l = lduAddr().lowerAddr(); + const labelUList& u = lduAddr().upperAddr(); for (label face = 0; face < l.size(); face++) { @@ -135,9 +135,9 @@ Foam::LduMatrix<Type, DType, LUType>::faceH(const Field<Type>& psi) const const Field<LUType>& Lower = const_cast<const LduMatrix&>(*this).lower(); const Field<LUType>& Upper = const_cast<const LduMatrix&>(*this).upper(); - // Take refereces to addressing - const unallocLabelList& l = lduAddr().lowerAddr(); - const unallocLabelList& u = lduAddr().upperAddr(); + // Take references to addressing + const labelUList& l = lduAddr().lowerAddr(); + const labelUList& u = lduAddr().upperAddr(); tmp<Field<Type>> tfaceHpsi(new Field<Type> (Lower.size())); Field<Type> & faceHpsi = tfaceHpsi(); @@ -413,8 +413,8 @@ void Foam::LduMatrix<Type, DType, LUType>::operator*= Field<LUType>& upper = this->upper(); Field<LUType>& lower = this->lower(); - const unallocLabelList& l = lduAddr().lowerAddr(); - const unallocLabelList& u = lduAddr().upperAddr(); + const labelUList& l = lduAddr().lowerAddr(); + const labelUList& u = lduAddr().upperAddr(); for (label face=0; face<upper.size(); face++) { diff --git a/src/OpenFOAM/matrices/Matrix/Matrix.H b/src/OpenFOAM/matrices/Matrix/Matrix.H index 884979f3d85103ae72ad45b91bec9df254a3e180..cad1c85aa967a2a058b11f470f504b64497f3307 100644 --- a/src/OpenFOAM/matrices/Matrix/Matrix.H +++ b/src/OpenFOAM/matrices/Matrix/Matrix.H @@ -298,7 +298,7 @@ public: mType& ); - // Write Matrix to Ostream. + //- Write Matrix to Ostream. friend Ostream& operator<< <Form, Type> ( Ostream&, diff --git a/src/OpenFOAM/matrices/Matrix/MatrixIO.C b/src/OpenFOAM/matrices/Matrix/MatrixIO.C index b965bb37d75c71ec1b99a94ea671e8160a63e2cc..fc315f4ca46ed33c11456c0801520cbbc313bd02 100644 --- a/src/OpenFOAM/matrices/Matrix/MatrixIO.C +++ b/src/OpenFOAM/matrices/Matrix/MatrixIO.C @@ -29,7 +29,7 @@ License #include "token.H" #include "contiguous.H" -// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class Form, class Type> Foam::Matrix<Form, Type>::Matrix(Istream& is) diff --git a/src/OpenFOAM/matrices/SymmetricSquareMatrix/SymmetricSquareMatrix.H b/src/OpenFOAM/matrices/SymmetricSquareMatrix/SymmetricSquareMatrix.H index 543d16b8482fe16846cd03a2e3dc12278a1ec367..6da53ea3efae262b2379bc9f971f21e7bd4de070 100644 --- a/src/OpenFOAM/matrices/SymmetricSquareMatrix/SymmetricSquareMatrix.H +++ b/src/OpenFOAM/matrices/SymmetricSquareMatrix/SymmetricSquareMatrix.H @@ -108,7 +108,7 @@ Type det(const SymmetricSquareMatrix<Type>&); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - #include "SymmetricSquareMatrixI.H" +#include "SymmetricSquareMatrixI.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C index 65898e9c1344f2a3d953123f3b173b2469e4b5de..21520669da5467b972f404b4e547b2233bcf0825 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGAgglomerations/GAMGAgglomeration/GAMGAgglomeration.C @@ -43,7 +43,7 @@ namespace Foam } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::GAMGAgglomeration::compactLevels(const label nCreatedLevels) { diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C b/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C index ff7c0cddd595ca97ad60cb23bb2967c561ba6222..f73bf0fbb6a46ae5ae48f192c1f46cb4afb8b08f 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCGStab/PBiCGStab.C @@ -223,7 +223,7 @@ Foam::solverPerformance Foam::PBiCGStab::solve // --- Calculate omega from tA and sA // (cheaper than using zA with preconditioned tA) - omega = gSumProd(tA, sA)/tAtA; + omega = gSumProd(tA, sA, matrix().mesh().comm())/tAtA; // --- Update solution and residual for (label cell=0; cell<nCells; cell++) diff --git a/src/OpenFOAM/memory/tmp/tmpI.H b/src/OpenFOAM/memory/tmp/tmpI.H index 70a4dc2b7f02ab75f2f71632e5e76b1052851756..7e5800dcbbf30a5110b1d726fdfbc4996d982b23 100644 --- a/src/OpenFOAM/memory/tmp/tmpI.H +++ b/src/OpenFOAM/memory/tmp/tmpI.H @@ -384,20 +384,4 @@ inline void Foam::tmp<T>::operator=(const tmp<T>& t) } -//- Return the const reference of the non-const reference argument -template<class T> -inline const T& Const(T& t) -{ - return t; -} - - -//- Return the const reference of the non-const rvalue reference argument -template<class T> -inline const T& Const(T&& t) -{ - return t; -} - - // ************************************************************************* // diff --git a/src/OpenFOAM/memory/tmpNrc/tmpNrcI.H b/src/OpenFOAM/memory/tmpNrc/tmpNrcI.H index 75f66f44e8a5dd109e0f4ea1736c9ec29fe0170f..00af03f8528c938dec7c11f261406a4cba3f2080 100644 --- a/src/OpenFOAM/memory/tmpNrc/tmpNrcI.H +++ b/src/OpenFOAM/memory/tmpNrc/tmpNrcI.H @@ -301,20 +301,4 @@ inline void Foam::tmpNrc<T>::operator=(const tmpNrc<T>& t) } -//- Return the const reference of the non-const reference argument -template<class T> -inline const T& Const(T& t) -{ - return t; -} - - -//- Return the const reference of the non-const rvalue reference argument -template<class T> -inline const T& Const(T&& t) -{ - return t; -} - - // ************************************************************************* // diff --git a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C index 88c3f2d788f98a66ef09b0fd7cddf07694a01c77..d9179f42748bb4b1763183e056ec596c2e556896 100644 --- a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C +++ b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C @@ -41,7 +41,7 @@ Foam::surfZoneIdentifier::surfZoneIdentifier() {} -Foam::surfZoneIdentifier::surfZoneIdentifier(label index) +Foam::surfZoneIdentifier::surfZoneIdentifier(const label index) : name_(), index_(index), diff --git a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H index ff75b56afa566d0935d1cf25be468deb2c81b560..a084e0196a3145d550df311ef9f9cc38d4e8fb08 100644 --- a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H +++ b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H @@ -86,10 +86,7 @@ public: surfZoneIdentifier(); //- Construct null with specified index - explicit surfZoneIdentifier - ( - const label index - ); + explicit surfZoneIdentifier(const label index); //- Construct from components surfZoneIdentifier diff --git a/src/OpenFOAM/meshes/meshShapes/cellShape/cellShape.H b/src/OpenFOAM/meshes/meshShapes/cellShape/cellShape.H index 371d95a0632d1a0de12d9b91109eef9de8eb9c4d..653da9c46d48e8f4a6937d1f9251ec56681d37bb 100644 --- a/src/OpenFOAM/meshes/meshShapes/cellShape/cellShape.H +++ b/src/OpenFOAM/meshes/meshShapes/cellShape/cellShape.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -92,6 +92,14 @@ public: const bool doCollapse = false ); + //- Construct from components + inline cellShape + ( + const word& model, + const labelList&, + const bool doCollapse = false + ); + //- Construct from Istream inline cellShape(Istream& is); diff --git a/src/OpenFOAM/meshes/meshShapes/cellShape/cellShapeI.H b/src/OpenFOAM/meshes/meshShapes/cellShape/cellShapeI.H index 5120cd4dfa51234fc24eee1dc019a24430b90ad2..42055e04c9229190799ceb06d9b0149972ee7e26 100644 --- a/src/OpenFOAM/meshes/meshShapes/cellShape/cellShapeI.H +++ b/src/OpenFOAM/meshes/meshShapes/cellShape/cellShapeI.H @@ -25,6 +25,7 @@ License #include "Istream.H" #include "cell.H" +#include "cellModeller.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -51,6 +52,23 @@ inline Foam::cellShape::cellShape } +inline Foam::cellShape::cellShape +( + const word& model, + const labelList& l, + const bool doCollapse +) +: + labelList(l), + m(cellModeller::lookup(model)) +{ + if (doCollapse) + { + collapse(); + } +} + + inline Foam::cellShape::cellShape(Istream& is) { is >> *this; diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistributeBase.C b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistributeBase.C index a3f7b4689702c7be3b5c8d968d292d799a590167..8f4866269d05f88169e11b37f5c01fdf3ffc2690 100644 --- a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistributeBase.C +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistributeBase.C @@ -33,11 +33,11 @@ License namespace Foam { -defineTypeNameAndDebug(mapDistributeBase, 0); + defineTypeNameAndDebug(mapDistributeBase, 0); } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // Foam::List<Foam::labelPair> Foam::mapDistributeBase::schedule ( diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C index 3c8819d6429ab96d7d7971aa5d4c6fb45faa53af..343461da4230dd7193b5024db39e522162eed0d5 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C @@ -51,7 +51,7 @@ namespace Foam } -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::coupledPolyPatch::writeOBJ(Ostream& os, const point& pt) { diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.C index e59c5220be8e7580a7899a2c9cc251de09fb2a05..5e5821b4a7fe2040064797c41082c9c856e158e9 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.C @@ -38,7 +38,8 @@ namespace Foam addToRunTimeSelectionTable(polyPatch, wedgePolyPatch, dictionary); } -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::wedgePolyPatch::calcGeometry(PstreamBuffers&) { diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C index 7e557268a6e240441f334fef53e415567807dbaa..9a6238c73354bc891e2683adcd61a8625bfb6f5a 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C @@ -43,7 +43,8 @@ namespace Foam const char* const Foam::faceZone::labelsName = "faceLabels"; -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::faceZone::calcFaceZonePatch() const { diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H index 690c49e0314e16594393ce1b8047d227d5480b7d..253c78e1da51048ae001101adefb4db6065051f8 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H @@ -113,9 +113,6 @@ protected: //- Build primitive patch void calcFaceZonePatch() const; - //- Return map of local face indices - const Map<label>& faceLookupMap() const; - //- Calculate master and slave face layer void calcCellLayers() const; diff --git a/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H b/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H index 27db3cc56d87dacdc2484d4995650299a040e083..924a97db55d8c5a75d341a35bb55b25ab7a6090c 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -79,9 +79,6 @@ protected: // Protected Member Functions - //- Return a reference to the look-up map - const Map<label>& lookupMap() const; - //- Construct the look-up map void calcLookupMap() const; @@ -164,6 +161,9 @@ public: return index_; } + //- Return a reference to the look-up map + const Map<label>& lookupMap() const; + //- Clear addressing virtual void clearAddressing(); diff --git a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H index ca4d7ef0f16c605cd845aeda1f772161c8471cc6..958d17d32d3fa6ea7e8b7af383cc8057cfad3330 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H +++ b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H @@ -137,7 +137,7 @@ public: ); //- Construct from three points in plane - explicit plane + plane ( const point& point1, const point& point2, diff --git a/src/OpenFOAM/primitives/Scalar/Scalar.H b/src/OpenFOAM/primitives/Scalar/Scalar.H index 6b2213fa6ac7730c3c8481f778d18e4eef88a889..0641bc1257ef80724f8f6424e4f3c3655d9cdd32 100644 --- a/src/OpenFOAM/primitives/Scalar/Scalar.H +++ b/src/OpenFOAM/primitives/Scalar/Scalar.H @@ -144,6 +144,7 @@ transFunc(atanh) transFunc(erf) transFunc(erfc) transFunc(lgamma) +transFunc(tgamma) transFunc(j0) transFunc(j1) @@ -312,11 +313,18 @@ inline Scalar cmptAv(const Scalar s) } +inline Scalar cmptSqr(const Scalar s) +{ + return sqr(s); +} + + inline Scalar cmptMag(const Scalar s) { return mag(s); } + inline Scalar sqrtSumSqr(const Scalar a, const Scalar b) { Scalar maga = mag(a); @@ -333,7 +341,7 @@ inline Scalar sqrtSumSqr(const Scalar a, const Scalar b) } -// Stabilisation around zero for division +//- Stabilisation around zero for division inline Scalar stabilise(const Scalar s, const Scalar small) { if (s >= 0) diff --git a/src/OpenFOAM/primitives/Scalar/scalar/invIncGamma.C b/src/OpenFOAM/primitives/Scalar/scalar/invIncGamma.C new file mode 100644 index 0000000000000000000000000000000000000000..aa44c195df20212f13f610895ada934b2f46316b --- /dev/null +++ b/src/OpenFOAM/primitives/Scalar/scalar/invIncGamma.C @@ -0,0 +1,316 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Global + Foam::invIncGamma + +Description + Function to calculate the inverse of the + normalized incomplete gamma function. + + The algorithm is described in detain in reference: + \verbatim + DiDonato, A. R., & Morris Jr, A. H. (1986). + Computation of the incomplete gamma function ratios and their inverse. + ACM Transactions on Mathematical Software (TOMS), 12(4), 377-393. + \endverbatim + + All equation numbers in the following code refer to the above text and + the algorithm in the function 'invIncGamma' is described in section 4. + +\*---------------------------------------------------------------------------*/ + +#include "mathematicalConstants.H" +using namespace Foam::constant::mathematical; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +static scalar minimaxs(const scalar P) +{ + // Eqn. 32 + + static const scalar a[] = + { + 3.31125922108741, + 11.6616720288968, + 4.28342155967104, + 0.213623493715853 + }; + + static const scalar b[] = + { + 6.61053765625462, + 6.40691597760039, + 1.27364489782223, + 0.03611708101884203 + }; + + const scalar t = P < 0.5 ? sqrt(-2*log(P)) : sqrt(-2*log(1 - P)); + + const scalar s = + t + - (a[0] + t*(a[1] + t*(a[2] + t*a[3]))) + /(1 + t*(b[0] + t*(b[1] + t*(b[2] + t*b[3])))); + + return P < 0.5 ? -s : s; +} + + +static scalar Sn(const scalar a, const scalar x) +{ + //- Eqn. 34 + + scalar Sn = 1; + scalar Si = 1; + + for (int i=1; i<100; i++) + { + Si *= x/(a + i); + Sn += Si; + + if (Si < 1e-4) break; + } + + return Sn; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +//- Inverse normalized incomplete gamma function +Foam::scalar Foam::invIncGamma(const scalar a, const scalar P) +{ + const scalar Q = 1 - P; + + if (a == 1) + { + return -log(Q); + } + else if (a < 1) + { + const scalar Ga = tgamma(a); + const scalar B = Q*Ga; + + if (B > 0.6 || (B >= 0.45 && a >= 0.3)) + { + // Eqn. 21 + const scalar u = + (B*Q > 1e-8) ? pow(P*Ga*a, 1/a) : exp((-Q/a) - Eu); + + return u/(1 - (u/(a + 1))); + } + else if (a < 0.3 && B >= 0.35) + { + // Eqn. 22 + const scalar t = exp(-Eu - B); + const scalar u = t*exp(t); + + return t*exp(u); + } + else if (B > 0.15 || a >= 0.3) + { + // Eqn. 23 + const scalar y = -log(B); + const scalar u = y - (1 - a)*log(y); + + return y - (1 - a)*log(u) - log(1 + (1 - a)/(1 + u)); + } + else if (B > 0.1) + { + // Eqn. 24 + const scalar y = -log(B); + const scalar u = y - (1 - a)*log(y); + + return y + - (1 - a)*log(u) + - log + ( + (sqr(u) + 2*(3 - a)*u + (2 - a)*(3 - a)) + /(sqr(u) + (5 - a)*u + 2) + ); + } + else + { + // Eqn. 25: + const scalar y = -log(B); + const scalar c1 = (a - 1)*log(y); + const scalar c12 = c1*c1; + const scalar c13 = c12*c1; + const scalar c14 = c12*c12; + const scalar a2 = a*a; + const scalar a3 = a2*a; + const scalar c2 = (a - 1)*(1 + c1); + const scalar c3 = (a - 1)*(-(c12/2) + (a - 2)*c1 + (3*a - 5)/2); + const scalar c4 = + (a - 1) + *( + (c13/3) + - (3*a - 5)*c12/2 + + (a2 - 6*a + 7)*c1 + + (11*a2 - 46*a + 47)/6 + ); + const scalar c5 = + (a - 1)*(-(c14/4) + + (11*a - 17)*c13/6 + + (-3*a2 + 13*a - 13)*c12 + + (2*a3 - 25*a2 + 72*a - 61)*c1/2 + + (25*a3 - 195*a2 + 477*a - 379)/12); + const scalar y2 = y*y; + const scalar y3 = y2*y; + const scalar y4 = y2*y2; + + return y + c1 + (c2/y) + (c3/y2) + (c4/y3) + (c5/y4); + } + } + else + { + // Eqn. 31: + scalar s = minimaxs(P); + + const scalar s2 = sqr(s); + const scalar s3 = s*s2; + const scalar s4 = s2*s2; + const scalar s5 = s*s4; + const scalar sqrta = sqrt(a); + + const scalar w = + a + s*sqrta + (s2 - 1)/3 + + (s3 - 7*s)/(36*sqrta) + - (3*s4 + 7*s2 - 16)/(810*a) + + (9*s5 + 256*s3 - 433*s)/(38880*a*sqrta); + + if (a >= 500 && mag(1 - w/a) < 1e-6) + { + return w; + } + else if (P > 0.5) + { + if (w < 3*a) + { + return w; + } + else + { + const scalar D = max(scalar(2), scalar(a*(a - 1))); + const scalar lnGa = lgamma(a); + const scalar lnB = log(Q) + lnGa; + + if (lnB < -2.3*D) + { + // Eqn. 25: + const scalar y = -lnB; + const scalar c1 = (a - 1)*log(y); + const scalar c12 = c1*c1; + const scalar c13 = c12*c1; + const scalar c14 = c12*c12; + const scalar a2 = a*a; + const scalar a3 = a2*a; + + const scalar c2 = (a - 1)*(1 + c1); + const scalar c3 = + (a - 1) + *( + - (c12/2) + + (a - 2)*c1 + + (3*a - 5)/2 + ); + const scalar c4 = + (a - 1) + *( + (c13/3) + - (3*a - 5)*c12/2 + + (a2 - 6*a + 7)*c1 + + (11*a2 - 46*a + 47)/6 + ); + const scalar c5 = + (a - 1) + *( + - (c14/4) + + (11*a - 17)*c13/6 + + (-3*a2 + 13*a - 13)*c12 + + (2*a3 - 25*a2 + 72*a - 61)*c1/2 + + (25*a3 - 195*a2 + 477*a - 379)/12 + ); + + const scalar y2 = y*y; + const scalar y3 = y2*y; + const scalar y4 = y2*y2; + + return y + c1 + (c2/y) + (c3/y2) + (c4/y3) + (c5/y4); + } + else + { + // Eqn. 33 + const scalar u = + -lnB + (a - 1)*log(w) - log(1 + (1 - a)/(1 + w)); + + return -lnB + (a - 1)*log(u) - log(1 + (1 - a)/(1 + u)); + } + } + } + else + { + scalar z = w; + const scalar ap1 = a + 1; + + if (w < 0.15*ap1) + { + // Eqn. 35 + const scalar ap2 = a + 2; + const scalar v = log(P) + lgamma(ap1); + z = exp((v + w)/a); + s = log1p(z/ap1*(1 + z/ap2)); + z = exp((v + z - s)/a); + s = log1p(z/ap1*(1 + z/ap2)); + z = exp((v + z - s)/a); + s = log1p(z/ap1*(1 + z/ap2*(1 + z/(a + 3)))); + z = exp((v + z - s)/a); + } + + if (z <= 0.01*ap1 || z > 0.7*ap1) + { + return z; + } + else + { + // Eqn. 36 + const scalar lnSn = log(Sn(a, z)); + const scalar v = log(P) + lgamma(ap1); + z = exp((v + z - lnSn)/a); + + return z*(1 - (a*log(z) - z - v + lnSn)/(a - z)); + } + } + } +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H index f4a4a0f63ba27fc969d3c6e09dcf4ed85d8db4d7..7c7c00cefc268c6a606c3f3c2d349744217bbe3e 100644 --- a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H +++ b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -81,6 +81,14 @@ namespace Foam #endif +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Additional transcendental functions + +namespace Foam +{ + //- Inverse normalized incomplete gamma function + scalar invIncGamma(const scalar a, const scalar P); +} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H b/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H index 9fb6f3f1dcea6cfeeaf5df9dd468d690cae4c750..c83ca715b24f80e49ee381dfa451611bce705852 100644 --- a/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H +++ b/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H @@ -106,7 +106,7 @@ inline const Cmpt& VectorSpace<Form, Cmpt, Ncmpts>::component if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << " out of range" + << "index out of range" << abort(FatalError); } #endif @@ -125,7 +125,7 @@ inline Cmpt& VectorSpace<Form, Cmpt, Ncmpts>::component if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << "out of range" + << "index out of range" << abort(FatalError); } #endif @@ -145,7 +145,7 @@ inline void VectorSpace<Form, Cmpt, Ncmpts>::component if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << " out of range" + << "index out of range" << abort(FatalError); } #endif @@ -165,7 +165,7 @@ inline void VectorSpace<Form, Cmpt, Ncmpts>::replace if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << " out of range" + << "index out of range" << abort(FatalError); } #endif @@ -205,7 +205,7 @@ inline const Cmpt& VectorSpace<Form, Cmpt, Ncmpts>::operator[] if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << " out of range" + << "index out of range" << abort(FatalError); } #endif @@ -224,7 +224,7 @@ inline Cmpt& VectorSpace<Form, Cmpt, Ncmpts>::operator[] if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << " out of range" + << "index out of range" << abort(FatalError); } #endif @@ -246,7 +246,7 @@ ConstBlock<SubVector, BStart>::operator[] if (d >= Ncmpts) { FatalErrorInFunction - << "index " << d << " out of range" + << "index out of range" << abort(FatalError); } #endif @@ -276,7 +276,7 @@ ConstBlock<SubVector, BStart>::operator() if (j != 0) { FatalErrorInFunction - << "j != 0" + << "index " << j << " != 0" << abort(FatalError); } #endif @@ -537,6 +537,18 @@ inline Cmpt cmptProduct } +template<class Form, class Cmpt, direction Ncmpts> +inline Form cmptSqr +( + const VectorSpace<Form, Cmpt, Ncmpts>& vs +) +{ + Form v; + VectorSpaceOps<Ncmpts,0>::eqOp(v, vs, eqSqrOp<Cmpt>()); + return v; +} + + template<class Form, class Cmpt, direction Ncmpts> inline Form cmptMag ( diff --git a/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.C b/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.C index 9d2d8581744257db01d59e0f56e0f717ac34a068..b82b4d30102d192a255567e8364dd29222a41829 100644 --- a/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.C +++ b/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.C @@ -204,7 +204,8 @@ Foam::Function1Types::CSV<Type>::CSV ( const word& entryName, const dictionary& dict, - const word& ext + const word& ext, + const fileName& fName ) : TableBase<Type>(entryName, dict.subDict(entryName + ext)), @@ -214,7 +215,7 @@ Foam::Function1Types::CSV<Type>::CSV componentColumns_(coeffs_.lookup("componentColumns")), separator_(coeffs_.lookupOrDefault<string>("separator", string(","))[0]), mergeSeparators_(readBool(coeffs_.lookup("mergeSeparators"))), - fName_(coeffs_.lookup("fileName")) + fName_(fName != fileName::null ? fName : coeffs_.lookup("fileName")) { if (componentColumns_.size() != pTraits<Type>::nComponents) { diff --git a/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H b/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H index 97e0047a2b70a422c3f4e5b59aeaafa050b3c515..ddba48afa5ed32519fa9d56e588eea5b828cff62 100644 --- a/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H +++ b/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H @@ -122,7 +122,8 @@ public: ( const word& entryName, const dictionary& dict, - const word& ext = "Coeffs" + const word& ext = "Coeffs", + const fileName& fName = fileName::null ); //- Copy constructor diff --git a/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C b/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C index a4f83a039c782b6ac1f6242a9e96c9c6ba848d8b..95a5fce3e449af529ffb6c00b85f4128c6f04702 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C +++ b/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C @@ -27,7 +27,7 @@ License #include "Time.H" #include "interpolationWeights.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type> const Foam::interpolationWeights& diff --git a/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.H b/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.H index 1c2eef7f3a1ae182df27bd6dc75167a566ff90bb..95c610902671d4ced217694f7233c8ddb00c5a18 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.H +++ b/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.H @@ -104,6 +104,9 @@ protected: //- Return (demand driven) interpolator const interpolationWeights& interpolator() const; + +private: + //- Disallow default bitwise assignment void operator=(const TableBase<Type>&); diff --git a/src/OpenFOAM/primitives/ops/ops.H b/src/OpenFOAM/primitives/ops/ops.H index 0db26d0026109fe49f2e008d85aa96de1c3c88a8..664947870ec9efdaa9244734ac9d440c5cec2e7f 100644 --- a/src/OpenFOAM/primitives/ops/ops.H +++ b/src/OpenFOAM/primitives/ops/ops.H @@ -72,6 +72,7 @@ EqOp(plusEq, x += y) EqOp(minusEq, x -= y) EqOp(multiplyEq, x *= y) EqOp(divideEq, x /= y) +EqOp(eqSqr, x = sqr(y)) EqOp(eqMag, x = mag(y)) EqOp(plusEqMagSqr, x += magSqr(y)) EqOp(maxEq, x = max(x, y)) diff --git a/src/Pstream/Allwclean b/src/Pstream/Allwclean index df3ca316d4b3dcc8c6ee910bd22bf1e4edea9790..2650e4e38a912031c1ddf8c8e6afcdbf584787a5 100755 --- a/src/Pstream/Allwclean +++ b/src/Pstream/Allwclean @@ -5,7 +5,6 @@ cd ${0%/*} || exit 1 # Run from this directory # clean the qualified directory wcleanMpiLib() { - set +x for libName do ( @@ -13,15 +12,12 @@ wcleanMpiLib() wclean $libName ) done - set -x } -set -x wclean dummy case "$WM_MPLIB" in *MPI*) - set +x wcleanMpiLib mpi ;; esac diff --git a/src/Pstream/dummy/UPstream.C b/src/Pstream/dummy/UPstream.C index 124e22a0c5decb5e9ba3eea68630c0ef1b0d56ff..4d14c2727a73fb43f129f8b456fa34134f6a022b 100644 --- a/src/Pstream/dummy/UPstream.C +++ b/src/Pstream/dummy/UPstream.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -23,7 +23,7 @@ License \*---------------------------------------------------------------------------*/ -#include "UPstream.H" +#include "Pstream.H" #include "PstreamReduceOps.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/Pstream/mpi/UPstream.C b/src/Pstream/mpi/UPstream.C index 4e105aa7677916c13554691106eb7f4fdd41a3d2..1f6ebca09ae3b9c6d10078187c2a819ec801b099 100644 --- a/src/Pstream/mpi/UPstream.C +++ b/src/Pstream/mpi/UPstream.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -23,7 +23,7 @@ License \*---------------------------------------------------------------------------*/ -#include "UPstream.H" +#include "Pstream.H" #include "PstreamReduceOps.H" #include "OSspecific.H" #include "PstreamGlobals.H" diff --git a/src/TurbulenceModels/Allwmake b/src/TurbulenceModels/Allwmake index a0ab46241fe8b7337e1aedd902af1a6679d58feb..ddd0bb1ca57786032fb0de15c78c7046776d4a31 100755 --- a/src/TurbulenceModels/Allwmake +++ b/src/TurbulenceModels/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType turbulenceModels wmake $targetType incompressible diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C index bf6be9f3b5de0b5e25fdee29e5f493f5e197106b..ab1abe4657f9a378dd3bc4869e3ee490e1cc077d 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C @@ -27,7 +27,6 @@ License #include "addToRunTimeSelectionTable.H" #include "fvPatchFieldMapper.H" #include "volFields.H" -#include "mappedPatchBase.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.C index 55a81ea6ecdf488cce355e281e2238e6725d611f..d495bdbb8cff642095ef58361e527c3124613439 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.C @@ -42,8 +42,8 @@ outletMappedUniformInletHeatAdditionFvPatchField outletPatchName_(), phiName_("phi"), Q_(0), - minTempLimit_(0), - maxTempLimit_(5000) + TMin_(0), + TMax_(5000) {} @@ -60,8 +60,8 @@ outletMappedUniformInletHeatAdditionFvPatchField outletPatchName_(ptf.outletPatchName_), phiName_(ptf.phiName_), Q_(ptf.Q_), - minTempLimit_(ptf.minTempLimit_), - maxTempLimit_(ptf.maxTempLimit_) + TMin_(ptf.TMin_), + TMax_(ptf.TMax_) {} @@ -77,8 +77,8 @@ outletMappedUniformInletHeatAdditionFvPatchField outletPatchName_(dict.lookup("outletPatch")), phiName_(dict.lookupOrDefault<word>("phi", "phi")), Q_(readScalar(dict.lookup("Q"))), - minTempLimit_(dict.lookupOrDefault<scalar>("minTempLimit", 0)), - maxTempLimit_(dict.lookupOrDefault<scalar>("maxTempLimit", 5000)) + TMin_(dict.lookupOrDefault<scalar>("TMin", 0)), + TMax_(dict.lookupOrDefault<scalar>("TMax", 5000)) {} @@ -93,8 +93,8 @@ outletMappedUniformInletHeatAdditionFvPatchField outletPatchName_(ptf.outletPatchName_), phiName_(ptf.phiName_), Q_(ptf.Q_), - minTempLimit_(ptf.minTempLimit_), - maxTempLimit_(ptf.maxTempLimit_) + TMin_(ptf.TMin_), + TMax_(ptf.TMax_) {} @@ -110,8 +110,8 @@ outletMappedUniformInletHeatAdditionFvPatchField outletPatchName_(ptf.outletPatchName_), phiName_(ptf.phiName_), Q_(ptf.Q_), - minTempLimit_(ptf.minTempLimit_), - maxTempLimit_(ptf.maxTempLimit_) + TMin_(ptf.TMin_), + TMax_(ptf.TMax_) {} @@ -125,18 +125,15 @@ void Foam::outletMappedUniformInletHeatAdditionFvPatchField::updateCoeffs() return; } - const GeometricField<scalar, fvPatchField, volMesh>& f + const volScalarField& vsf = ( - dynamic_cast<const GeometricField<scalar, fvPatchField, volMesh>&> - ( - this->internalField() - ) + dynamic_cast<const volScalarField&>(this->internalField()) ); - const fvPatch& p = this->patch(); + const fvPatch& fvp = this->patch(); label outletPatchID = - p.patch().boundaryMesh().findPatchID(outletPatchName_); + fvp.patch().boundaryMesh().findPatchID(outletPatchName_); if (outletPatchID < 0) { @@ -145,16 +142,13 @@ void Foam::outletMappedUniformInletHeatAdditionFvPatchField::updateCoeffs() << abort(FatalError); } - const fvPatch& outletPatch = p.boundaryMesh()[outletPatchID]; + const fvPatch& outletPatch = fvp.boundaryMesh()[outletPatchID]; const fvPatchField<scalar>& outletPatchField = - f.boundaryField()[outletPatchID]; + vsf.boundaryField()[outletPatchID]; const surfaceScalarField& phi = - this->db().lookupObject<surfaceScalarField> - ( - phiName_ - ); + db().lookupObject<surfaceScalarField>(phiName_); const scalarField& outletPatchPhi = phi.boundaryField()[outletPatchID]; scalar sumOutletPatchPhi = gSum(outletPatchPhi); @@ -162,27 +156,19 @@ void Foam::outletMappedUniformInletHeatAdditionFvPatchField::updateCoeffs() if (sumOutletPatchPhi > SMALL) { const basicThermo& thermo = - this->db().lookupObject<basicThermo>(basicThermo::dictName); + db().lookupObject<basicThermo>(basicThermo::dictName); + + const scalarField& pp = thermo.p().boundaryField()[outletPatchID]; + const scalarField& pT = thermo.T().boundaryField()[outletPatchID]; scalar averageOutletField = gSum(outletPatchPhi*outletPatchField)/sumOutletPatchPhi; - const scalarField Cpf(thermo.Cp()().boundaryField()[outletPatchID]); + const scalarField Cpf(thermo.Cp(pp, pT, outletPatchID)); scalar totalPhiCp = gSum(outletPatchPhi)*gAverage(Cpf); - operator== - ( - min - ( - max - ( - averageOutletField + Q_/totalPhiCp, - minTempLimit_ - ), - maxTempLimit_ - ) - ); + operator==(min(max(averageOutletField + Q_/totalPhiCp, TMin_), TMax_)); } else { @@ -205,14 +191,10 @@ void Foam::outletMappedUniformInletHeatAdditionFvPatchField::write fvPatchScalarField::write(os); os.writeKeyword("outletPatch") << outletPatchName_ << token::END_STATEMENT << nl; - writeEntryIfDifferent<word>(os, "phi", "phi", phiName_); - os.writeKeyword("Q") << Q_ << token::END_STATEMENT << nl; - os.writeKeyword("minTempLimit") - << minTempLimit_ << token::END_STATEMENT << nl; - os.writeKeyword("maxTempLimit") - << maxTempLimit_ << token::END_STATEMENT << nl; + os.writeKeyword("TMin") << TMin_ << token::END_STATEMENT << nl; + os.writeKeyword("TMax") << TMax_ << token::END_STATEMENT << nl; this->writeEntry("value", os); } diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.H index 4dcd68855558e700609db1481f81b92f74c171fb..bf38df03a1f77dd7da17a895c3dfa03102dcef41 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/outletMappedUniformInletHeatAddition/outletMappedUniformInletHeatAdditionFvPatchField.H @@ -28,20 +28,21 @@ Group grpInletBoundaryConditions Description - This temperature boundary conditon averages the temperature over the - "outlet" patch specified by name "outletPatch" and applies an extra + + This temperature boundary condition averages the temperature over the + "outlet" patch specified by name "outletPatchName" and applies an extra heat source. This is set as a uniform temperature value on this patch. - Additionally minTempLimit/maxTempLimit limits can be applied + Additionally TMin/TMax limits can be applied \heading Patch usage \table - Property | Description | Required | Default value - outletPatch | name of outlet patch | yes | - Q | Heat addition | yes - phi | flux field name | no | phi - minTempLimit | min temperature limit | no | 0.0 - maxTempLimit | max temperature limit | no | 5000.0 + Property | Description | Required | Default value + outletPatch | name of outlet patch | yes | + Q | Heat addition | yes + phi | flux field name | no | phi + TMin | min temperature limit | no | 0.0 + TMax | max temperature limit | no | 5000.0 \endtable Example of the boundary condition specification: @@ -95,10 +96,10 @@ class outletMappedUniformInletHeatAdditionFvPatchField scalar Q_; //- Minimum Temperature Limit - scalar minTempLimit_; + scalar TMin_; //- Maxmum Temperature Limit - scalar maxTempLimit_; + scalar TMax_; public: diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C index afbad9981437e7426d31d1f24bb1c207069610c7..71c695e80de410e9e1d6ef6a9405a6f7040ae6e8 100644 --- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C @@ -25,7 +25,6 @@ License #include "volFields.H" #include "surfaceFields.H" -#include "mappedPatchBase.H" #include "turbulentFluidThermoModel.H" #include "mapDistribute.H" @@ -298,6 +297,8 @@ void thermalBaffle1DFvPatchScalarField<solidType>::autoMap const fvPatchFieldMapper& m ) { + mappedPatchBase::clearOut(); + mixedFvPatchScalarField::autoMap(m); if (this->owner()) diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H index 4080ecbcdc5427d479653ad356d5b7cb34aea917..f17734962a9c930c2aedba9dfabbf11d9fd80003 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -112,7 +112,7 @@ class kkLOmega : public eddyViscosity<incompressible::RASModel> { - // Private memmber functions + // Private member functions tmp<volScalarField> fv(const volScalarField& Ret) const; diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C index f5b587385af6dea8538da3d51b5ba044d7bc7895..a55f8d78e5559e6af3f77ae9563d5f8a57efe6ac 100644 --- a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C @@ -41,7 +41,7 @@ namespace RASModels defineTypeNameAndDebug(qZeta, 0); addToRunTimeSelectionTable(RASModel, qZeta, dictionary); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // tmp<volScalarField> qZeta::fMu() const { diff --git a/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C b/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C index da70b0cc1805d19f9556962e59864fd79d15791a..3694be51a512044d127d2d9446da777f516b03ea 100644 --- a/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C +++ b/src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.C @@ -32,7 +32,7 @@ License namespace Foam { -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // template<class BasicEddyViscosityModel> tmp<volScalarField> kOmegaSSTBase<BasicEddyViscosityModel>::F1 diff --git a/src/TurbulenceModels/turbulenceModels/DES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C b/src/TurbulenceModels/turbulenceModels/DES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C index 99a884e2f9601b387ede1bf5eaf15c232efdf59c..06208c288e11689c898854191427ec4845793b60 100644 --- a/src/TurbulenceModels/turbulenceModels/DES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C +++ b/src/TurbulenceModels/turbulenceModels/DES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C @@ -104,8 +104,6 @@ tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::rd } -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - template<class BasicTurbulenceModel> tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::fdt ( @@ -116,6 +114,8 @@ tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::fdt } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + template<class BasicTurbulenceModel> tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::dTilda ( diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H index d0238d8dfd9e126037961c1a86a0528888819f5c..916049ea462cecb2950a8bbc2ae1896ff5b88b15 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -63,9 +63,6 @@ class cubeRootVolDelta cubeRootVolDelta(const cubeRootVolDelta&); void operator=(const cubeRootVolDelta&); - // Calculate the delta values - void calcDelta(); - public: @@ -91,6 +88,10 @@ public: // Member Functions + + //- Calculate the delta values + void calcDelta(); + //- Read the LESdelta dictionary virtual void read(const dictionary&); diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H index 8fd626654728db6006e53f642c56d2bad2861cc6..de439813221efc3f63d1f5793a3a761fcf942d8f 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -67,9 +67,6 @@ class maxDeltaxyz maxDeltaxyz(const maxDeltaxyz&); void operator=(const maxDeltaxyz&); - // Calculate the delta values - void calcDelta(); - public: @@ -95,6 +92,9 @@ public: // Member Functions + //- Calculate the delta values + void calcDelta(); + //- Read the LESdelta dictionary virtual void read(const dictionary&); diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.C new file mode 100644 index 0000000000000000000000000000000000000000..fdf70f10af3bb162df76ed692866870f85dacf6d --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.C @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "maxDeltaxyzCubeRootLESDelta.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace LESModels +{ + defineTypeNameAndDebug(maxDeltaxyzCubeRootLESDelta, 0); + addToRunTimeSelectionTable + ( + LESdelta, + maxDeltaxyzCubeRootLESDelta, + dictionary + ); +} +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::LESModels::maxDeltaxyzCubeRootLESDelta::calcDelta() +{ + maxDeltaxyz_.calcDelta(); + cubeRootVolDelta_.calcDelta(); + + delta_ = + max + ( + static_cast<const volScalarField&>(maxDeltaxyz_), + static_cast<const volScalarField&>(cubeRootVolDelta_) + ); + + // Handle coupled boundaries + delta_.correctBoundaryConditions(); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::LESModels::maxDeltaxyzCubeRootLESDelta::maxDeltaxyzCubeRootLESDelta +( + const word& name, + const turbulenceModel& turbulence, + const dictionary& dict +) +: + LESdelta(name, turbulence), + maxDeltaxyz_(name, turbulence, dict.subDict(typeName + "Coeffs")), + cubeRootVolDelta_(name, turbulence, dict.subDict(typeName + "Coeffs")) +{ + calcDelta(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::LESModels::maxDeltaxyzCubeRootLESDelta::read(const dictionary& dict) +{ + maxDeltaxyz_.read(dict.subDict(typeName + "Coeffs")); + cubeRootVolDelta_.read(dict.subDict(typeName + "Coeffs")); + + calcDelta(); +} + + +void Foam::LESModels::maxDeltaxyzCubeRootLESDelta::correct() +{ + if (turbulenceModel_.mesh().changing()) + { + calcDelta(); + } +} + + +// ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.H new file mode 100644 index 0000000000000000000000000000000000000000..a52fe7b78fd641675503f95b281fd200e888ea01 --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.H @@ -0,0 +1,116 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::maxDeltaxyzCubeRootLESDelta + +Description + Maximum delta between maxDeltaxyz and cubeRootVolDelta. + +SourceFiles + maxDeltaxyzCubeRootLESDelta.C + +\*---------------------------------------------------------------------------*/ + +#ifndef maxDeltaxyzCubeRootLESDelta_H +#define maxDeltaxyzCubeRootLESDelta_H + +#include "LESdelta.H" +#include "maxDeltaxyz.H" +#include "cubeRootVolDelta.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace LESModels +{ + +/*---------------------------------------------------------------------------*\ + Class maxDeltaxyzCubeRootLESDelta Declaration +\*---------------------------------------------------------------------------*/ + +class maxDeltaxyzCubeRootLESDelta +: + public LESdelta +{ + + // Private Member Functions + + //- Disallow default bitwise copy construct and assignment + maxDeltaxyzCubeRootLESDelta(const maxDeltaxyzCubeRootLESDelta&); + void operator=(const maxDeltaxyzCubeRootLESDelta&); + + // Calculate the delta values + void calcDelta(); + + //- maxDeltaxyz model + maxDeltaxyz maxDeltaxyz_; + + //- cubeRootVolDelta model + cubeRootVolDelta cubeRootVolDelta_; + + +public: + + //- Runtime type information + TypeName("maxDeltaxyzCubeRoot"); + + + // Constructors + + //- Construct from name, turbulenceModel and dictionary + maxDeltaxyzCubeRootLESDelta + ( + const word& name, + const turbulenceModel& turbulence, + const dictionary& + ); + + + //- Destructor + virtual ~maxDeltaxyzCubeRootLESDelta() + {} + + + // Member Functions + + //- Read the LESdelta dictionary + virtual void read(const dictionary&); + + // Correct values + virtual void correct(); + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace LESModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C index f4be29d738effa28d84f238f58663cc7add10ef9..dae06399ba2c9e3811afea709ec9f152d6bad3ea 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C +++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicKEqn/dynamicKEqn.C @@ -33,7 +33,7 @@ namespace Foam namespace LESModels { -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class BasicTurbulenceModel> volScalarField dynamicKEqn<BasicTurbulenceModel>::Ck diff --git a/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C index 8e9cc672800730b210db7fefa47be6a8e21d7622..9a4e218d07b8e2cbb70f6e5738783e0b830c1492 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C +++ b/src/TurbulenceModels/turbulenceModels/LES/dynamicLagrangian/dynamicLagrangian.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ namespace Foam namespace LESModels { -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class BasicTurbulenceModel> void dynamicLagrangian<BasicTurbulenceModel>::correctNut diff --git a/src/TurbulenceModels/turbulenceModels/Make/files b/src/TurbulenceModels/turbulenceModels/Make/files index 4afb141beac6534cabe4eb184629d63923c7a79e..2123e373e8887e0485320cabfce4ccf11a644468 100644 --- a/src/TurbulenceModels/turbulenceModels/Make/files +++ b/src/TurbulenceModels/turbulenceModels/Make/files @@ -10,6 +10,7 @@ $(LESdelta)/vanDriestDelta/vanDriestDelta.C $(LESdelta)/smoothDelta/smoothDelta.C $(LESdelta)/maxDeltaxyz/maxDeltaxyz.C $(LESdelta)/IDDESDelta/IDDESDelta.C +$(LESdelta)/maxDeltaxyzCubeRootLESDelta/maxDeltaxyzCubeRootLESDelta.C LESfilters = LES/LESfilters diff --git a/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C b/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C index e1f6790583baefcb205f1d9912d0b9ee965b6dbf..77d01435f645ef11e125948051fe799b47945ea0 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/realizableKE/realizableKE.C @@ -34,7 +34,7 @@ namespace Foam namespace RASModels { -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // template<class BasicTurbulenceModel> tmp<volScalarField> realizableKE<BasicTurbulenceModel>::rCmu diff --git a/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C b/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C index 3ce9875ba688a4d7f4a5df889d5e4ef6d2365950..65330eee0505e8ef8078e26dd6059896825f19fa 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/v2f/v2f.C @@ -34,7 +34,7 @@ namespace Foam namespace RASModels { -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class BasicTurbulenceModel> tmp<volScalarField> v2f<BasicTurbulenceModel>::Ts() const diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C index ab0830a20323790b72bba12f4bc82988bb8a2cef..b9f91bd1807a6ea47055a17ed475946931a47476 100644 --- a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C +++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C @@ -89,16 +89,13 @@ void Foam::ReynoldsStress<BasicTurbulenceModel>::correctWallShearStress forAll(curPatch, facei) { // Calculate near-wall velocity gradient - tensor gradUw + const tensor gradUw = (faceAreas[facei]/magFaceAreas[facei])*snGradU[facei]; - // Calculate near-wall shear-stress tensor - tensor tauw = -nutw[facei]*2*dev(symm(gradUw)); - - // Reset the shear components of the stress tensor - Rw[facei].xy() = tauw.xy(); - Rw[facei].xz() = tauw.xz(); - Rw[facei].yz() = tauw.yz(); + // Set the wall Reynolds-stress to the near-wall shear-stress + // Note: the spherical part of the normal stress is included in + // the pressure + Rw[facei] = -nutw[facei]*2*dev(symm(gradUw)); } } } @@ -230,9 +227,11 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::devRhoReff() const template<class BasicTurbulenceModel> +template<class RhoFieldType> Foam::tmp<Foam::fvVectorMatrix> -Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff +Foam::ReynoldsStress<BasicTurbulenceModel>::DivDevRhoReff ( + const RhoFieldType& rho, volVectorField& U ) const { @@ -242,19 +241,19 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff ( fvc::laplacian ( - (1.0 - couplingFactor_)*this->alpha_*this->rho_*this->nut(), + (1.0 - couplingFactor_)*this->alpha_*rho*this->nut(), U, "laplacian(nuEff,U)" ) + fvc::div ( - this->alpha_*this->rho_*R_ + this->alpha_*rho*R_ + couplingFactor_ - *this->alpha_*this->rho_*this->nut()*fvc::grad(U), + *this->alpha_*rho*this->nut()*fvc::grad(U), "div(devRhoReff)" ) - - fvc::div(this->alpha_*this->rho_*this->nu()*dev2(T(fvc::grad(U)))) - - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) + - fvc::div(this->alpha_*rho*this->nu()*dev2(T(fvc::grad(U)))) + - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) ); } else @@ -263,21 +262,26 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff ( fvc::laplacian ( - this->alpha_*this->rho_*this->nut(), + this->alpha_*rho*this->nut(), U, "laplacian(nuEff,U)" ) - + fvc::div(this->alpha_*this->rho_*R_) - - fvc::div(this->alpha_*this->rho_*this->nu()*dev2(T(fvc::grad(U)))) - - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) + + fvc::div(this->alpha_*rho*R_) + - fvc::div(this->alpha_*rho*this->nu()*dev2(T(fvc::grad(U)))) + - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) ); } +} - return - ( - - fvc::div((this->alpha_*this->rho_*this->nuEff())*dev2(T(fvc::grad(U)))) - - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) - ); + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff +( + volVectorField& U +) const +{ + return DivDevRhoReff(this->rho_, U); } @@ -289,11 +293,7 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff volVectorField& U ) const { - return - ( - - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U)))) - - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) - ); + return DivDevRhoReff(rho, U); } diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H index e29c447459f1a87793414bc840ff043523968cd0..084830b0d6d3d7192d985bc574b587c75a0d4f9e 100644 --- a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H +++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H @@ -75,6 +75,14 @@ protected: //- Update the eddy-viscosity virtual void correctNut() = 0; + //- Return the source term for the momentum equation + template<class RhoFieldType> + tmp<fvVectorMatrix> DivDevRhoReff + ( + const RhoFieldType& rho, + volVectorField& U + ) const; + public: diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C index 03db4555a91a87f603d64978bfed2b62469d7fea..11873820e05d08bd3e884fec76cfc4ac5710c2d8 100644 --- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C @@ -35,7 +35,7 @@ License namespace Foam { -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void kLowReWallFunctionFvPatchScalarField::checkType() { @@ -51,8 +51,6 @@ void kLowReWallFunctionFvPatchScalarField::checkType() } -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - scalar kLowReWallFunctionFvPatchScalarField::yPlusLam ( const scalar kappa, diff --git a/src/combustionModels/FSD/FSD.C b/src/combustionModels/FSD/FSD.C index dd275c4e6738753f9fa86d17b4f1e7ba17de7351..25ed498fce6ed287f19093bde285c5ac5f998d02 100644 --- a/src/combustionModels/FSD/FSD.C +++ b/src/combustionModels/FSD/FSD.C @@ -41,6 +41,7 @@ FSD<CombThermoType, ThermoType>::FSD ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : @@ -48,6 +49,7 @@ FSD<CombThermoType, ThermoType>::FSD ( modelType, mesh, + combustionProperties, phaseName ), reactionRateFlameArea_ diff --git a/src/combustionModels/FSD/FSD.H b/src/combustionModels/FSD/FSD.H index 2d4e17b63725c8a3a684c92679834346aff689cf..590c9ae91c621419f14c051ded40c4f6b50b32a6 100644 --- a/src/combustionModels/FSD/FSD.H +++ b/src/combustionModels/FSD/FSD.H @@ -139,21 +139,24 @@ public: // Constructors //- Construct from components - FSD(const word& modelType, const fvMesh& mesh, const word& phaseName); + FSD + ( + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName + ); - // Destructor - virtual ~FSD(); + //- Destructor + virtual ~FSD(); - // Evolution + // Member Functions //- Correct combustion rate virtual void correct(); - - // IO - //- Update properties virtual bool read(); }; diff --git a/src/combustionModels/Make/files b/src/combustionModels/Make/files index e04239c47b13faa16915f251a336fe16277c9f6a..09844f061e9966cbbe7b044f8120f051d1f3823b 100644 --- a/src/combustionModels/Make/files +++ b/src/combustionModels/Make/files @@ -29,6 +29,8 @@ FSD/FSDs.C diffusionMulticomponent/diffusionMulticomponents.C +zoneCombustion/zoneCombustions.C + noCombustion/noCombustions.C LIB = $(FOAM_LIBBIN)/libcombustionModels diff --git a/src/combustionModels/PaSR/PaSR.C b/src/combustionModels/PaSR/PaSR.C index 581e1556719aacdde5d25556dbb32dc4b638c487..5fd8fdf1044f81a3bd5e287968fab1aed88600c5 100644 --- a/src/combustionModels/PaSR/PaSR.C +++ b/src/combustionModels/PaSR/PaSR.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,10 +33,11 @@ Foam::combustionModels::PaSR<Type>::PaSR ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : - laminar<Type>(modelType, mesh, phaseName), + laminar<Type>(modelType, mesh, combustionProperties, phaseName), Cmix_(readScalar(this->coeffs().lookup("Cmix"))), turbulentReaction_(this->coeffs().lookup("turbulentReaction")), kappa_ diff --git a/src/combustionModels/PaSR/PaSR.H b/src/combustionModels/PaSR/PaSR.H index cbcb37bc835f81e8f39d7fa86771bae3ed58fd95..085d7245ee606011f5682b42d6e30bfcd7802a73 100644 --- a/src/combustionModels/PaSR/PaSR.H +++ b/src/combustionModels/PaSR/PaSR.H @@ -89,7 +89,13 @@ public: // Constructors //- Construct from components - PaSR(const word& modelType, const fvMesh& mesh, const word& phaseName); + PaSR + ( + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName + ); //- Destructor @@ -98,25 +104,20 @@ public: // Member Functions - // Evolution + //- Correct combustion rate + virtual void correct(); - //- Correct combustion rate - virtual void correct(); + //- Fuel consumption rate matrix. + virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; - //- Fuel consumption rate matrix. - virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; + //- Heat release rate calculated from fuel consumption rate matrix + virtual tmp<volScalarField> dQ() const; - //- Heat release rate calculated from fuel consumption rate matrix - virtual tmp<volScalarField> dQ() const; + //- Return source for enthalpy equation [kg/m/s3] + virtual tmp<volScalarField> Sh() const; - //- Return source for enthalpy equation [kg/m/s3] - virtual tmp<volScalarField> Sh() const; - - - // IO - - //- Update properties from given dictionary - virtual bool read(); + //- Update properties from given dictionary + virtual bool read(); }; diff --git a/src/combustionModels/combustionModel/combustionModel.C b/src/combustionModels/combustionModel/combustionModel.C index 21e81beb912794593b4db9c3f67e4139a93e2a71..b27a5f232001ed7d24f1404f7b00aa7f6535ccea 100644 --- a/src/combustionModels/combustionModel/combustionModel.C +++ b/src/combustionModels/combustionModel/combustionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,12 +32,19 @@ namespace Foam defineTypeNameAndDebug(combustionModel, 0); } +const Foam::word Foam::combustionModel::combustionPropertiesName +( + "combustionProperties" +); + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::combustionModel::combustionModel ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : @@ -45,7 +52,7 @@ Foam::combustionModel::combustionModel ( IOobject ( - IOobject::groupName("combustionProperties", phaseName), + IOobject::groupName(combustionProperties, phaseName), mesh.time().constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, diff --git a/src/combustionModels/combustionModel/combustionModel.H b/src/combustionModels/combustionModel/combustionModel.H index 8a0d0cd68ab6ed70a1a91d4fc32fb03d21741069..d428e27a78b00a883c03ddac656f28d114d9697e 100644 --- a/src/combustionModels/combustionModel/combustionModel.H +++ b/src/combustionModels/combustionModel/combustionModel.H @@ -91,6 +91,9 @@ public: //- Runtime type information TypeName("combustionModel"); + //- Default combustionProperties dictionary name + static const word combustionPropertiesName; + // Constructors @@ -99,6 +102,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties=combustionPropertiesName, const word& phaseName=word::null ); @@ -109,31 +113,26 @@ public: // Member Functions - // Access - - //- Return const access to the mesh database - inline const fvMesh& mesh() const; - - //- Set turbulence - inline void setTurbulence(compressibleTurbulenceModel& turbModel); + //- Return const access to the mesh database + inline const fvMesh& mesh() const; - //- Return access to turbulence - inline const compressibleTurbulenceModel& turbulence() const; + //- Set turbulence + inline void setTurbulence(compressibleTurbulenceModel& turbModel); - //- Return const access to rho - inline const volScalarField& rho() const; + //- Return access to turbulence + inline const compressibleTurbulenceModel& turbulence() const; - //- Return const access to phi - inline tmp<surfaceScalarField> phi() const; + //- Return const access to rho + inline const volScalarField& rho() const; - //- Is combustion active? - inline const Switch& active() const; + //- Return const access to phi + inline tmp<surfaceScalarField> phi() const; - //- Return const dictionary of the model - inline const dictionary& coeffs() const; + //- Is combustion active? + inline const Switch& active() const; - - // Evolution + //- Return const dictionary of the model + inline const dictionary& coeffs() const; //- Correct combustion rate virtual void correct() = 0; @@ -147,9 +146,6 @@ public: //- Return source for enthalpy equation [kg/m/s3] virtual tmp<volScalarField> Sh() const; - - // IO - //- Update properties from given dictionary virtual bool read(); }; diff --git a/src/combustionModels/diffusion/diffusion.C b/src/combustionModels/diffusion/diffusion.C index f78194cc494d63b229e93c6f8a8c54d7881f26d7..ca6f896067d835ca6c45d8ca627fbb4441c837bd 100644 --- a/src/combustionModels/diffusion/diffusion.C +++ b/src/combustionModels/diffusion/diffusion.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,6 +38,7 @@ diffusion<CombThermoType, ThermoType>::diffusion ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : @@ -45,6 +46,7 @@ diffusion<CombThermoType, ThermoType>::diffusion ( modelType, mesh, + combustionProperties, phaseName ), C_(readScalar(this->coeffs().lookup("C"))), diff --git a/src/combustionModels/diffusion/diffusion.H b/src/combustionModels/diffusion/diffusion.H index 59b6ecda4d24eef701436f84cff98c36e91e4e8f..2a01905b0c1e18188f7bc698495b92c15990c795 100644 --- a/src/combustionModels/diffusion/diffusion.H +++ b/src/combustionModels/diffusion/diffusion.H @@ -89,6 +89,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); @@ -99,16 +100,11 @@ public: // Member Functions - // Evolution + //- Correct combustion rate + virtual void correct(); - //- Correct combustion rate - virtual void correct(); - - - // IO - - //- Update properties - virtual bool read(); + //- Update properties + virtual bool read(); }; diff --git a/src/combustionModels/diffusion/diffusions.C b/src/combustionModels/diffusion/diffusions.C index e358c96d34d96666711f0c51f523e87dac734de9..68ec7b73ae4a7e106ad8964bd77128560d35f4ce 100644 --- a/src/combustionModels/diffusion/diffusions.C +++ b/src/combustionModels/diffusion/diffusions.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,7 +65,8 @@ makeCombustionTypesThermo rhoCombustionModel ); - // Combustion models based on sensibleInternalEnergy + +// Combustion models based on sensibleInternalEnergy makeCombustionTypesThermo ( diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C index 9fd6314bfee874d353dac1b7e40175cba5a33096..aa2bfdb754ac24aeff12d481ad2695550601a39d 100644 --- a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C +++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C @@ -125,10 +125,13 @@ template<class CombThermoType, class ThermoType> Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>:: diffusionMulticomponent ( - const word& modelType, const fvMesh& mesh, const word& phaseName + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName ) : - CombThermoType(modelType, mesh, phaseName), + CombThermoType(modelType, mesh, combustionProperties, phaseName), reactions_ ( dynamic_cast<const reactingMixture<ThermoType>&>(this->thermo()) diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H index 6d849cfe9bcfb04fe3b25cd7ddf2b3e1f65e0c77..48af00efd9fe57717b6d926b90a91adf35c52a4b 100644 --- a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H +++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H @@ -171,6 +171,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); diff --git a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.C b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.C index 9c4500269943fc72126fb24e09b20389b38b1bbd..6484cce9518881a57083997d58a8ef70bb094e6c 100644 --- a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.C +++ b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.C @@ -35,13 +35,17 @@ template<class CombThermoType, class ThermoType> eddyDissipationDiffusionModel<CombThermoType, ThermoType>:: eddyDissipationDiffusionModel ( - const word& modelType, const fvMesh& mesh, const word& phaseName + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName ) : eddyDissipationModelBase<CombThermoType, ThermoType> ( modelType, mesh, + combustionProperties, phaseName ), Cd_(readScalar(this->coeffs().lookup("Cd"))) diff --git a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H index ed3641f7d724fc277714ef3eb3cd75c907160888..62e802e20c8902ddb989e1ac15f6a3df4e1a7c73 100644 --- a/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H +++ b/src/combustionModels/eddyDissipationDiffusionModel/eddyDissipationDiffusionModel.H @@ -45,7 +45,7 @@ namespace combustionModels { /*---------------------------------------------------------------------------*\ - Class eddyDissipationDiffusionModel Declaration + Class eddyDissipationDiffusionModel Declaration \*---------------------------------------------------------------------------*/ template<class CombThermoType, class ThermoType> @@ -81,6 +81,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); diff --git a/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.C b/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.C index 0387661354ddafd6ad8f6794177b68dce61a9b0a..caf0b623b4231a6d73211941a05f092f6bfb6d62 100644 --- a/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.C +++ b/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.C @@ -35,13 +35,17 @@ namespace combustionModels template<class CombThermoType, class ThermoType> eddyDissipationModelBase<CombThermoType, ThermoType>::eddyDissipationModelBase ( - const word& modelType, const fvMesh& mesh, const word& phaseName + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName ) : singleStepCombustion<CombThermoType, ThermoType> ( modelType, mesh, + combustionProperties, phaseName ), CEDC_(readScalar(this->coeffs().lookup("CEDC"))) diff --git a/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.H b/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.H index 56ce52e75f607e37fd1a9e686958c38efaa5f4e0..e9361925d84ba19a057cc93ef6f584d6a2ebf9d5 100644 --- a/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.H +++ b/src/combustionModels/eddyDissipationModelBase/eddyDissipationModelBase.H @@ -80,6 +80,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); diff --git a/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C b/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C index 62626826188e7a5a0d0bc4aee6b078981bd38cd4..49c0d60e353a57171d5e03be10cd06e715ba07eb 100644 --- a/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C +++ b/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,6 +37,7 @@ infinitelyFastChemistry<CombThermoType, ThermoType>::infinitelyFastChemistry ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : @@ -44,6 +45,7 @@ infinitelyFastChemistry<CombThermoType, ThermoType>::infinitelyFastChemistry ( modelType, mesh, + combustionProperties, phaseName ), C_(readScalar(this->coeffs().lookup("C"))) diff --git a/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H b/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H index 16a89b9cee7c602f11833c3a958316c01d506cb1..8c899b76d5b3234922a506f8fa6f70680a0d4388 100644 --- a/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H +++ b/src/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H @@ -86,6 +86,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); @@ -96,16 +97,11 @@ public: // Member Functions - // Evolution + //- Correct combustion rate + virtual void correct(); - //- Correct combustion rate - virtual void correct(); - - - // IO - - //- Update properties - virtual bool read(); + //- Update properties + virtual bool read(); }; diff --git a/src/combustionModels/laminar/laminar.C b/src/combustionModels/laminar/laminar.C index 155c8bf01e3d43d0bf905b84c30687ceef089bdb..dcf9c6450c46fe2adb8f44e769536b23bb7436b8 100644 --- a/src/combustionModels/laminar/laminar.C +++ b/src/combustionModels/laminar/laminar.C @@ -34,10 +34,11 @@ Foam::combustionModels::laminar<Type>::laminar ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : - Type(modelType, mesh, phaseName), + Type(modelType, mesh, combustionProperties, phaseName), integrateReactionRate_ ( this->coeffs().lookupOrDefault("integrateReactionRate", true) diff --git a/src/combustionModels/laminar/laminar.H b/src/combustionModels/laminar/laminar.H index 605850bef793831b47e65e6db07bee053762516b..7c882c8bbbb92c8d2d231cb782e3c1d41cbbaed0 100644 --- a/src/combustionModels/laminar/laminar.H +++ b/src/combustionModels/laminar/laminar.H @@ -91,6 +91,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); @@ -101,25 +102,20 @@ public: // Member Functions - // Evolution + //- Correct combustion rate + virtual void correct(); - //- Correct combustion rate - virtual void correct(); + //- Fuel consumption rate matrix. + virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; - //- Fuel consumption rate matrix. - virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; + //- Heat release rate calculated from fuel consumption rate matrix + virtual tmp<volScalarField> dQ() const; - //- Heat release rate calculated from fuel consumption rate matrix - virtual tmp<volScalarField> dQ() const; + //- Return source for enthalpy equation [kg/m/s3] + virtual tmp<volScalarField> Sh() const; - //- Return source for enthalpy equation [kg/m/s3] - virtual tmp<volScalarField> Sh() const; - - - // IO - - //- Update properties from given dictionary - virtual bool read(); + //- Update properties from given dictionary + virtual bool read(); }; diff --git a/src/combustionModels/noCombustion/noCombustion.C b/src/combustionModels/noCombustion/noCombustion.C index f5947759179dc5aa8bd4682f33e0bb986b0c7721..7caeac0fe4bb3af5ca249c9c5f1fa27ec10ae6d6 100644 --- a/src/combustionModels/noCombustion/noCombustion.C +++ b/src/combustionModels/noCombustion/noCombustion.C @@ -33,6 +33,7 @@ Foam::combustionModels::noCombustion<CombThermoType>::noCombustion ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : diff --git a/src/combustionModels/noCombustion/noCombustion.H b/src/combustionModels/noCombustion/noCombustion.H index 641970fd6ff0840bea6d0506e4e4e6b2e48c9229..74711d613ca70e3b41536114f7ab4c737896cdd7 100644 --- a/src/combustionModels/noCombustion/noCombustion.H +++ b/src/combustionModels/noCombustion/noCombustion.H @@ -75,6 +75,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); @@ -85,24 +86,20 @@ public: // Member Functions - // Evolution + //- Correct combustion rate + virtual void correct(); - //- Correct combustion rate - virtual void correct(); + //- Fuel consumption rate matrix + virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; - //- Fuel consumption rate matrix - virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; + //- Heat release rate calculated from fuel consumption rate matrix + virtual tmp<volScalarField> dQ() const; - //- Heat release rate calculated from fuel consumption rate matrix - virtual tmp<volScalarField> dQ() const; + //- Return source for enthalpy equation [kg/m/s3] + virtual tmp<volScalarField> Sh() const; - //- Return source for enthalpy equation [kg/m/s3] - virtual tmp<volScalarField> Sh() const; - - // IO - - //- Update properties from given dictionary - virtual bool read(); + //- Update properties from given dictionary + virtual bool read(); }; diff --git a/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.C b/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.C index b28116706e30ce5ab3916d0b998a64b3a3dbd3ea..032a0632354326049633ac1eb0dd9dab0ed1fadf 100644 --- a/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.C +++ b/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.C @@ -31,10 +31,11 @@ Foam::combustionModels::psiChemistryCombustion::psiChemistryCombustion ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : - psiCombustionModel(modelType, mesh, phaseName), + psiCombustionModel(modelType, mesh, combustionProperties, phaseName), chemistryPtr_(psiChemistryModel::New(mesh, phaseName)) {} diff --git a/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.H b/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.H index 5c16c8ad8e778d011b9232c65359a08eb2b0c223..6da4496659782889ee6b9fcb0aed18653d15aa1e 100644 --- a/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.H +++ b/src/combustionModels/psiCombustionModel/psiChemistryCombustion/psiChemistryCombustion.H @@ -80,6 +80,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); diff --git a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.C b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.C index 1ecc201dd310879282bb8d727819fa5e2317bf0e..36d78166b792b86198d475e8b58de23e7273eebc 100644 --- a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.C +++ b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,10 +42,11 @@ Foam::combustionModels::psiCombustionModel::psiCombustionModel ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : - combustionModel(modelType, mesh, phaseName) + combustionModel(modelType, mesh, combustionProperties, phaseName) {} diff --git a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.H b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.H index 36bd824f416151dd54125a55a2f314400b9eae32..ae4a75c41b6d1cebeabeb604906ecf29e880f67d 100644 --- a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.H +++ b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModel.H @@ -57,7 +57,6 @@ class psiCombustionModel : public combustionModel { - // Private Member Functions //- Construct as copy (not implemented) @@ -69,6 +68,9 @@ class psiCombustionModel public: + typedef psiReactionThermo ReactionThermo; + + //- Runtime type information TypeName("psiCombustionModel"); @@ -82,9 +84,10 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ), - (modelType, mesh, phaseName) + (modelType, mesh, combustionProperties, phaseName) ); @@ -95,17 +98,18 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); - - //- Selector - static autoPtr<psiCombustionModel> New - ( - const fvMesh& mesh, - const word& phaseName=word::null - ); + //- Selector + static autoPtr<psiCombustionModel> New + ( + const fvMesh& mesh, + const word& combustionProperties=combustionPropertiesName, + const word& phaseName=word::null + ); //- Destructor diff --git a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C index 59789b48410b5af1a27aa1c57dc46961668c0f11..6c06cf881d958a73a874b5ce302483fc23bba3ad 100644 --- a/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C +++ b/src/combustionModels/psiCombustionModel/psiCombustionModel/psiCombustionModelNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,6 +31,7 @@ Foam::autoPtr<Foam::combustionModels::psiCombustionModel> Foam::combustionModels::psiCombustionModel::New ( const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) { @@ -40,7 +41,7 @@ Foam::combustionModels::psiCombustionModel::New ( IOobject ( - IOobject::groupName("combustionProperties", phaseName), + IOobject::groupName(combustionProperties, phaseName), mesh.time().constant(), mesh, IOobject::MUST_READ, @@ -65,11 +66,12 @@ Foam::combustionModels::psiCombustionModel::New << exit(FatalError); } - const label tempOpen = combModelName.find('<'); + const word className = combModelName(0, combModelName.find('<')); - const word className = combModelName(0, tempOpen); - - return autoPtr<psiCombustionModel>(cstrIter()(className, mesh, phaseName)); + return autoPtr<psiCombustionModel> + ( + cstrIter()(className, mesh, combustionProperties, phaseName) + ); } diff --git a/src/combustionModels/psiCombustionModel/psiThermoCombustion/psiThermoCombustion.C b/src/combustionModels/psiCombustionModel/psiThermoCombustion/psiThermoCombustion.C index 25450e2473f49753fcccba7816b792994f3dbbf0..e2b2440b5a4176cab0a1767fd3895f05e93c5991 100644 --- a/src/combustionModels/psiCombustionModel/psiThermoCombustion/psiThermoCombustion.C +++ b/src/combustionModels/psiCombustionModel/psiThermoCombustion/psiThermoCombustion.C @@ -34,7 +34,7 @@ Foam::combustionModels::psiThermoCombustion::psiThermoCombustion const word& phaseName ) : - psiCombustionModel(modelType, mesh, phaseName), + psiCombustionModel(modelType, mesh, combustionPropertiesName, phaseName), thermoPtr_(psiReactionThermo::New(mesh, phaseName)) {} diff --git a/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.C b/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.C index b6d1ac1172348089d68a7863318288404342a8d7..4d977c7fd51e621f8a3b2442d2e8fd2a8fcb3358 100644 --- a/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.C +++ b/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.C @@ -31,10 +31,11 @@ Foam::combustionModels::rhoChemistryCombustion::rhoChemistryCombustion ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : - rhoCombustionModel(modelType, mesh, phaseName), + rhoCombustionModel(modelType, mesh, combustionProperties, phaseName), chemistryPtr_(rhoChemistryModel::New(mesh, phaseName)) {} diff --git a/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.H b/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.H index c8389c0ea534a9388a14e8f9da61cef218172d67..93d4731026c620ece08f80140c3ed39b255649e3 100644 --- a/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.H +++ b/src/combustionModels/rhoCombustionModel/rhoChemistryCombustion/rhoChemistryCombustion.H @@ -80,6 +80,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); diff --git a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.C b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.C index 531b169d7d46fbe4d5b904097fa59e08df566291..bcc0b18c3ffc21e327fe2ede2bbaa2932fe76386 100644 --- a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.C +++ b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,10 +42,11 @@ Foam::combustionModels::rhoCombustionModel::rhoCombustionModel ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : - combustionModel(modelType, mesh, phaseName) + combustionModel(modelType, mesh, combustionProperties, phaseName) {} diff --git a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.H b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.H index 0266c74b3e05f8c3deb89ff30b24845874c59b20..2e261a5b98c0f3ca708f713fbf25c31029c27c3f 100644 --- a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.H +++ b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModel.H @@ -69,6 +69,9 @@ class rhoCombustionModel public: + typedef rhoReactionThermo ReactionThermo; + + //- Runtime type information TypeName("rhoCombustionModel"); @@ -82,9 +85,10 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ), - (modelType, mesh, phaseName) + (modelType, mesh, combustionProperties, phaseName) ); @@ -96,6 +100,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); @@ -105,6 +110,7 @@ public: static autoPtr<rhoCombustionModel> New ( const fvMesh& mesh, + const word& combustionProperties=combustionPropertiesName, const word& phaseName=word::null ); diff --git a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C index 4a23b500d5e9044b7070e54f0d7b97a8de71459b..e179f04141b59b6e3f2fb6725a22a9a9eae643e2 100644 --- a/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C +++ b/src/combustionModels/rhoCombustionModel/rhoCombustionModel/rhoCombustionModelNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,6 +31,7 @@ Foam::autoPtr<Foam::combustionModels::rhoCombustionModel> Foam::combustionModels::rhoCombustionModel::New ( const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) { @@ -40,7 +41,7 @@ Foam::combustionModels::rhoCombustionModel::New ( IOobject ( - IOobject::groupName("combustionProperties", phaseName), + IOobject::groupName(combustionProperties, phaseName), mesh.time().constant(), mesh, IOobject::MUST_READ, @@ -69,7 +70,10 @@ Foam::combustionModels::rhoCombustionModel::New const word className = combTypeName(0, tempOpen); - return autoPtr<rhoCombustionModel> (cstrIter()(className, mesh, phaseName)); + return autoPtr<rhoCombustionModel> + ( + cstrIter()(className, mesh, combustionProperties, phaseName) + ); } diff --git a/src/combustionModels/rhoCombustionModel/rhoThermoCombustion/rhoThermoCombustion.C b/src/combustionModels/rhoCombustionModel/rhoThermoCombustion/rhoThermoCombustion.C index aa645f0898acd048d59c51cc9f0c9b4cf8db02fb..a4a5be12c5a1100ad94e6e3efacafd9a310ea059 100644 --- a/src/combustionModels/rhoCombustionModel/rhoThermoCombustion/rhoThermoCombustion.C +++ b/src/combustionModels/rhoCombustionModel/rhoThermoCombustion/rhoThermoCombustion.C @@ -34,7 +34,7 @@ Foam::combustionModels::rhoThermoCombustion::rhoThermoCombustion const word& phaseName ) : - rhoCombustionModel(modelType, mesh, phaseName), + rhoCombustionModel(modelType, mesh, combustionPropertiesName, phaseName), thermoPtr_(rhoReactionThermo::New(mesh, phaseName)) {} diff --git a/src/combustionModels/singleStepCombustion/singleStepCombustion.C b/src/combustionModels/singleStepCombustion/singleStepCombustion.C index a8296fffb3541c8229c5e6c5dae39693d806350a..c2a243747bb4ebe11b11ff6f18568ddd1031343f 100644 --- a/src/combustionModels/singleStepCombustion/singleStepCombustion.C +++ b/src/combustionModels/singleStepCombustion/singleStepCombustion.C @@ -38,6 +38,7 @@ singleStepCombustion<CombThermoType, ThermoType>::singleStepCombustion ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ) : diff --git a/src/combustionModels/singleStepCombustion/singleStepCombustion.H b/src/combustionModels/singleStepCombustion/singleStepCombustion.H index 4a17add9f13a0f4cde35c48af247d07e92750838..bb31657cf8687261f6de27124ae3accecd7277fd 100644 --- a/src/combustionModels/singleStepCombustion/singleStepCombustion.H +++ b/src/combustionModels/singleStepCombustion/singleStepCombustion.H @@ -88,6 +88,7 @@ public: ( const word& modelType, const fvMesh& mesh, + const word& combustionProperties, const word& phaseName ); @@ -98,22 +99,17 @@ public: // Member Functions - // Evolution + //- Fuel consumption rate matrix + virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; - //- Fuel consumption rate matrix - virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; + //- Heat release rate calculated from fuel consumption rate matrix + virtual tmp<volScalarField> dQ() const; - //- Heat release rate calculated from fuel consumption rate matrix - virtual tmp<volScalarField> dQ() const; + //- Sensible enthalpy source term + virtual tmp<volScalarField> Sh() const; - //- Sensible enthalpy source term - virtual tmp<volScalarField> Sh() const; - - - // IO - - //- Update properties from given dictionary - virtual bool read(); + //- Update properties from given dictionary + virtual bool read(); }; diff --git a/src/combustionModels/zoneCombustion/zoneCombustion.C b/src/combustionModels/zoneCombustion/zoneCombustion.C new file mode 100644 index 0000000000000000000000000000000000000000..3cec4e1197a0fa50b4e668fafc718d9ea7899b79 --- /dev/null +++ b/src/combustionModels/zoneCombustion/zoneCombustion.C @@ -0,0 +1,197 @@ +/*---------------------------------------------------------------------------* \ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "zoneCombustion.H" + +// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // + +template<class Type> +Foam::tmp<Foam::fvScalarMatrix> +Foam::combustionModels::zoneCombustion<Type>::filter +( + const tmp<fvScalarMatrix>& tR +) const +{ + fvScalarMatrix& R = tR.ref(); + scalarField& Su = R.source(); + scalarField filteredField(Su.size(), 0); + + forAll(zoneNames_, zonei) + { + const labelList& cells = this->mesh().cellZones()[zoneNames_[zonei]]; + + forAll(cells, i) + { + filteredField[cells[i]] = Su[cells[i]]; + } + } + + Su = filteredField; + + if (R.hasDiag()) + { + scalarField& Sp = R.diag(); + + forAll(zoneNames_, zonei) + { + const labelList& cells = + this->mesh().cellZones()[zoneNames_[zonei]]; + + forAll(cells, i) + { + filteredField[cells[i]] = Sp[cells[i]]; + } + } + + Sp = filteredField; + } + + return tR; +} + + +template<class Type> +Foam::tmp<Foam::volScalarField> +Foam::combustionModels::zoneCombustion<Type>::filter +( + const tmp<volScalarField>& tS +) const +{ + scalarField& S = tS.ref(); + scalarField filteredField(S.size(), 0); + + forAll(zoneNames_, zonei) + { + const labelList& cells = this->mesh().cellZones()[zoneNames_[zonei]]; + + forAll(cells, i) + { + filteredField[cells[i]] = S[cells[i]]; + } + } + + S = filteredField; + + return tS; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +Foam::combustionModels::zoneCombustion<Type>::zoneCombustion +( + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName +) +: + Type(modelType, mesh, combustionProperties, phaseName), + combustionModelPtr_ + ( + Type::New + ( + mesh, + "zoneCombustionProperties", + phaseName + ) + ), + zoneNames_(this->coeffs().lookup("zones")) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class Type> +Foam::combustionModels::zoneCombustion<Type>::~zoneCombustion() +{} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +template<class Type> +typename Type::ReactionThermo& +Foam::combustionModels::zoneCombustion<Type>::thermo() +{ + return combustionModelPtr_->thermo(); +} + + +template<class Type> +const typename Type::ReactionThermo& +Foam::combustionModels::zoneCombustion<Type>::thermo() const +{ + return combustionModelPtr_->thermo(); +} + + +template<class Type> +void Foam::combustionModels::zoneCombustion<Type>::correct() +{ + combustionModelPtr_->correct(); +} + + +template<class Type> +Foam::tmp<Foam::fvScalarMatrix> +Foam::combustionModels::zoneCombustion<Type>::R(volScalarField& Y) const +{ + return filter(combustionModelPtr_->R(Y)); +} + + +template<class Type> +Foam::tmp<Foam::volScalarField> +Foam::combustionModels::zoneCombustion<Type>::dQ() const +{ + return filter(combustionModelPtr_->dQ()); +} + + +template<class Type> +Foam::tmp<Foam::volScalarField> +Foam::combustionModels::zoneCombustion<Type>::Sh() const +{ + return filter(combustionModelPtr_->Sh()); +} + + +template<class Type> +bool Foam::combustionModels::zoneCombustion<Type>::read() +{ + if (Type::read()) + { + combustionModelPtr_->read(); + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/combustionModels/zoneCombustion/zoneCombustion.H b/src/combustionModels/zoneCombustion/zoneCombustion.H new file mode 100644 index 0000000000000000000000000000000000000000..ca014f98dd5f56c55fc1ef0cc2b277f12bb01882 --- /dev/null +++ b/src/combustionModels/zoneCombustion/zoneCombustion.H @@ -0,0 +1,143 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::combustionModels::zoneCombustion + +Description + Zone-filtered combustion model. + + Enable the reactions within the specified list of cell-zones and set + to zero elsewhere. + +SourceFiles + zoneCombustion.C + +\*---------------------------------------------------------------------------*/ + +#ifndef zoneCombustion_H +#define zoneCombustion_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace combustionModels +{ + +/*---------------------------------------------------------------------------*\ + Class zoneCombustion Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class zoneCombustion +: + public Type +{ + // Private data + + //- The combustion model to be zone-filtered + autoPtr<Type> combustionModelPtr_; + + //- List of zone names in which the reactions are active + wordList zoneNames_; + + + // Private Member Functions + + //- Filter the reaction-rate matrix on the cellZones + tmp<fvScalarMatrix> filter(const tmp<fvScalarMatrix>& tR) const; + + //- Filter the given field on the cellZones + tmp<volScalarField> filter(const tmp<volScalarField>& tS) const; + + //- Disallow copy construct + zoneCombustion(const zoneCombustion&); + + //- Disallow default bitwise assignment + void operator=(const zoneCombustion&); + + +public: + + //- Runtime type information + TypeName("zoneCombustion"); + + + // Constructors + + //- Construct from components + zoneCombustion + ( + const word& modelType, + const fvMesh& mesh, + const word& combustionProperties, + const word& phaseName + ); + + + //- Destructor + virtual ~zoneCombustion(); + + + // Member Functions + + //- Return access to the thermo package + virtual typename Type::ReactionThermo& thermo(); + + //- Return const access to the thermo package + virtual const typename Type::ReactionThermo& thermo() const; + + //- Correct combustion rate + virtual void correct(); + + //- Fuel consumption rate matrix. + virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; + + //- Heat release rate calculated from fuel consumption rate matrix + virtual tmp<volScalarField> dQ() const; + + //- Return source for enthalpy equation [kg/m/s3] + virtual tmp<volScalarField> Sh() const; + + //- Update properties from given dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace combustionModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "zoneCombustion.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/combustionModels/zoneCombustion/zoneCombustions.C b/src/combustionModels/zoneCombustion/zoneCombustions.C new file mode 100644 index 0000000000000000000000000000000000000000..9c0c9279f7e9c5acabc0613083c052b72b4fe6f8 --- /dev/null +++ b/src/combustionModels/zoneCombustion/zoneCombustions.C @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "makeCombustionTypes.H" + +#include "psiCombustionModel.H" +#include "rhoCombustionModel.H" +#include "zoneCombustion.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makeCombustionTypes(zoneCombustion, psiCombustionModel, psiCombustionModel); +makeCombustionTypes(zoneCombustion, rhoCombustionModel, rhoCombustionModel); + +// ************************************************************************* // diff --git a/src/conversion/Allwmake b/src/conversion/Allwmake index 3187320a6796462cce366fa3845a669791b2042c..568603325386866b7dfb104d55ed9ba305a5b421 100755 --- a/src/conversion/Allwmake +++ b/src/conversion/Allwmake @@ -4,7 +4,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType diff --git a/src/conversion/common/reader/meshReader.H b/src/conversion/common/reader/meshReader.H index b53d0c1e4dfbcdd93da2f09f35b3e47f1b177a7c..623a3f4110116c040fbdca0ce7047818e88f7bfa 100644 --- a/src/conversion/common/reader/meshReader.H +++ b/src/conversion/common/reader/meshReader.H @@ -202,7 +202,7 @@ private: protected: - // Protected data + // Protected member data //- Pointers to cell shape models static const cellModel* unknownModel; @@ -259,11 +259,12 @@ protected: cellTable cellTable_; - // Member Functions + // Protected member functions //- Subclasses are required to supply this information virtual bool readGeometry(const scalar scaleFactor = 1.0) = 0; + public: // Static Members diff --git a/src/conversion/ensight/mesh/ensightMesh.C b/src/conversion/ensight/mesh/ensightMesh.C index c10721d51e8799a33aa47b672eac769ad09a010a..72c785620186b60396d1941fcce843c138438697 100644 --- a/src/conversion/ensight/mesh/ensightMesh.C +++ b/src/conversion/ensight/mesh/ensightMesh.C @@ -258,9 +258,9 @@ void Foam::ensightMesh::correct() Foam::sort(selectZones); // Count face types in each selected faceZone - forAll(selectZones, zoneI) + forAll(selectZones, zonei) { - const word& zoneName = selectZones[zoneI]; + const word& zoneName = selectZones[zonei]; const label zoneID = mesh_.faceZones().findZoneID(zoneName); const faceZone& fz = mesh_.faceZones()[zoneID]; @@ -342,12 +342,12 @@ void Foam::ensightMesh::write(ensightGeoFile& os) const ( pp.meshPoints(), pp.meshPointMap(), - pointToGlobal, - uniqueMeshPointLabels + pointToGlobal, // local patch point to unique global index + uniqueMeshPointLabels // unique global points ); - pointField uniquePoints(mesh_.points(), uniqueMeshPointLabels); - // Renumber the patch faces + // Renumber the patch faces, + // from local patch indexing to unique global index faceList patchFaces(pp.localFaces()); forAll(patchFaces, i) { @@ -359,7 +359,7 @@ void Foam::ensightMesh::write(ensightGeoFile& os) const ensFaces.index(), patchName, globalPointsPtr().size(), - uniquePoints, + pointField(mesh_.points(), uniqueMeshPointLabels), os ); @@ -391,30 +391,28 @@ void Foam::ensightMesh::write(ensightGeoFile& os) const uniqueMeshPointLabels ); - pointField uniquePoints(mesh_.points(), uniqueMeshPointLabels); - - primitiveFacePatch facePatch + // Make a copy in the proper order + primitiveFacePatch pp ( faceList(mesh_.faces(), ensFaces.faceIds()), mesh_.points() ); const boolList& flip = ensFaces.flipMap(); - forAll(facePatch[faceI], faceI) + forAll(pp, facei) { - if (flip[faceI]) + if (flip[facei]) { - facePatch[faceI].flip(); + pp[facei].flip(); } } - // Faces belonging to the faceZone, in local numbering - faceList localFaces(facePatch.localFaces()); - - // Renumber the faceZone master faces - forAll(localFaces, i) + // Renumber the faces belonging to the faceZone, + // from local numbering to unique global index + faceList patchFaces(pp.localFaces()); + forAll(patchFaces, i) { - inplaceRenumber(pointToGlobal, localFaces[i]); + inplaceRenumber(pointToGlobal, patchFaces[i]); } writeAllPoints @@ -422,11 +420,11 @@ void Foam::ensightMesh::write(ensightGeoFile& os) const ensFaces.index(), zoneName, globalPointsPtr().size(), - uniquePoints, + pointField(mesh_.points(), uniqueMeshPointLabels), os ); - writeFaceConnectivity(ensFaces, localFaces, os, true); + writeFaceConnectivity(ensFaces, patchFaces, os, true); } } diff --git a/src/conversion/ensight/mesh/ensightMeshIO.C b/src/conversion/ensight/mesh/ensightMeshIO.C index 406697d94296f5ea076f3edd14115c08d2891742..f8bc9230c2585331d8abd0a69dfda8ea762ca4a2 100644 --- a/src/conversion/ensight/mesh/ensightMeshIO.C +++ b/src/conversion/ensight/mesh/ensightMeshIO.C @@ -452,24 +452,21 @@ void Foam::ensightMesh::writeCellConnectivity ensightCells::NFACED }; - for (int i=0; i < 5; ++i) + for (label typei=0; typei < ensightCells::nTypes; ++typei) { - const ensightCells::elemType& what = oldOrder[i]; + const ensightCells::elemType& what = oldOrder[typei]; writeCellConnectivity(what, ensCells, pointToGlobal, os); } + + return; } - else - { - const List<ensightCells::elemType> enums = - ensightCells::elemEnum.enums(); - forAllConstIter(List<ensightCells::elemType>, enums, iter) - { - const ensightCells::elemType what = *iter; + for (label typei=0; typei < ensightCells::nTypes; ++typei) + { + const ensightCells::elemType what = ensightCells::elemType(typei); - writeCellConnectivity(what, ensCells, pointToGlobal, os); - } + writeCellConnectivity(what, ensCells, pointToGlobal, os); } } @@ -614,13 +611,11 @@ void Foam::ensightMesh::writeFaceConnectivity const bool raw ) const { - const List<ensightFaces::elemType> enums = ensightFaces::elemEnum.enums(); - if (raw) { - forAllConstIter(List<ensightFaces::elemType>, enums, iter) + for (label typei=0; typei < ensightFaces::nTypes; ++typei) { - const ensightFaces::elemType what = *iter; + const ensightFaces::elemType what = ensightFaces::elemType(typei); writeFaceConnectivity ( @@ -638,9 +633,9 @@ void Foam::ensightMesh::writeFaceConnectivity } else { - forAllConstIter(List<ensightFaces::elemType>, enums, iter) + for (label typei=0; typei < ensightFaces::nTypes; ++typei) { - const ensightFaces::elemType what = *iter; + const ensightFaces::elemType what = ensightFaces::elemType(typei); writeFaceConnectivity ( diff --git a/src/conversion/ensight/output/ensightOutput.H b/src/conversion/ensight/output/ensightOutput.H index 5fec26bbf8c35c1c804070522fe3dc14b296bb45..1f33b3f83041f43aca5c813e73498a7a6b802aec 100644 --- a/src/conversion/ensight/output/ensightOutput.H +++ b/src/conversion/ensight/output/ensightOutput.H @@ -55,27 +55,42 @@ class ensightOutput { // Private Methods - template<class Type> - static void writeField + //- Write field content (component-wise) for the given ensight element type + template<template<typename> class FieldContainer, class Type> + static void writeFieldContent ( const char* key, + const FieldContainer<Type>& fld, + ensightFile& os + ); + + //- Write a field of faces values as an indirect list, + // using the face ids from ensightFaces + template<class Type> + static bool writeFaceField + ( const Field<Type>& fld, + const ensightFaces&, ensightFile& os ); + //- Write a field of faces values as a sublist, + // using the sublist sizes ensightFaces template<class Type> - static bool writePatchField + static bool writeFaceSubField ( - const Field<Type>& pf, - const ensightFaces& ensFaces, + const Field<Type>& fld, + const ensightFaces&, ensightFile& os ); + //- Write a field of cell values as an indirect list, + // using the cell ids from ensightCells template<class Type> - static bool writeVolField + static bool writeCellField ( - const Field<Type>& vf, - const ensightCells& ensCells, + const Field<Type>& fld, + const ensightCells&, ensightFile& os, const bool deprecatedOrder = false ); diff --git a/src/conversion/ensight/output/ensightOutputTemplates.C b/src/conversion/ensight/output/ensightOutputTemplates.C index a68058faf76a904ca823a167a091752c49f9e05d..65ce0098af1b3522fc3838c9be254fe080aee437 100644 --- a/src/conversion/ensight/output/ensightOutputTemplates.C +++ b/src/conversion/ensight/output/ensightOutputTemplates.C @@ -41,11 +41,11 @@ License // * * * * * * * * * * Static Private Member Functions * * * * * * * * * * * // -template<class Type> -void Foam::ensightOutput::writeField +template<template<typename> class FieldContainer, class Type> +void Foam::ensightOutput::writeFieldContent ( const char* key, - const Field<Type>& fld, + const FieldContainer<Type>& fld, ensightFile& os ) { @@ -85,7 +85,7 @@ void Foam::ensightOutput::writeField template<class Type> -bool Foam::ensightOutput::writePatchField +bool Foam::ensightOutput::writeFaceField ( const Field<Type>& pf, const ensightFaces& ensFaces, @@ -99,14 +99,12 @@ bool Foam::ensightOutput::writePatchField os.beginPart(ensFaces.index()); } - const List<ensightFaces::elemType> enums = - ensightFaces::elemEnum.enums(); - - forAllConstIter(List<ensightFaces::elemType>, enums, iter) + for (label typei=0; typei < ensightFaces::nTypes; ++typei) { - const ensightFaces::elemType& what = *iter; + const ensightFaces::elemType what = + ensightFaces::elemType(typei); - writeField + writeFieldContent ( ensightFaces::key(what), Field<Type>(pf, ensFaces.faceIds(what)), @@ -124,7 +122,47 @@ bool Foam::ensightOutput::writePatchField template<class Type> -bool Foam::ensightOutput::writeVolField +bool Foam::ensightOutput::writeFaceSubField +( + const Field<Type>& pf, + const ensightFaces& ensFaces, + Foam::ensightFile& os +) +{ + if (ensFaces.total()) + { + if (Pstream::master()) + { + os.beginPart(ensFaces.index()); + } + + label start = 0; // start of sublist + for (label typei=0; typei < ensightFaces::nTypes; ++typei) + { + const ensightFaces::elemType what = ensightFaces::elemType(typei); + const label size = ensFaces.faceIds(what).size(); + + writeFieldContent + ( + ensightFaces::key(what), + SubField<Type>(pf, size, start), + os + ); + + start += size; // start of next sublist + } + + return true; + } + else + { + return false; + } +} + + +template<class Type> +bool Foam::ensightOutput::writeCellField ( const Field<Type>& vf, const ensightCells& ensCells, @@ -151,34 +189,30 @@ bool Foam::ensightOutput::writeVolField ensightCells::NFACED }; - for (int i=0; i < 5; ++i) + for (label typei=0; typei < ensightCells::nTypes; ++typei) { - const ensightCells::elemType& what = oldOrder[i]; + const ensightCells::elemType& what = oldOrder[typei]; - writeField + writeFieldContent ( ensightCells::key(what), Field<Type>(vf, ensCells.cellIds(what)), os ); } + return true; } - else - { - const List<ensightCells::elemType> enums = - ensightCells::elemEnum.enums(); - forAllConstIter(List<ensightCells::elemType>, enums, iter) - { - const ensightCells::elemType& what = *iter; + for (label typei=0; typei < ensightCells::nTypes; ++typei) + { + const ensightCells::elemType what = ensightCells::elemType(typei); - writeField - ( - ensightCells::key(what), - Field<Type>(vf, ensCells.cellIds(what)), - os - ); - } + writeFieldContent + ( + ensightCells::key(what), + Field<Type>(vf, ensCells.cellIds(what)), + os + ); } return true; @@ -209,7 +243,7 @@ bool Foam::ensightOutput::writeField // if (ensMesh.useInternalMesh()) { - writeVolField(vf, meshCells, os, ensMesh.deprecatedOrder()); + writeCellField(vf, meshCells, os, ensMesh.deprecatedOrder()); } // @@ -223,7 +257,7 @@ bool Foam::ensightOutput::writeField const word& patchName = patchLookup[listi]; const ensightFaces& ensFaces = patchFaces[patchName]; - writePatchField + writeFaceField ( vf.boundaryField()[patchId], ensFaces, @@ -303,7 +337,9 @@ bool Foam::ensightOutput::writeField ); } - writePatchField(values, ensFaces, os); + // The field is already copied in the proper order + // - just need its corresponding sub-fields + writeFaceSubField(values, ensFaces, os); } } @@ -335,7 +371,7 @@ bool Foam::ensightOutput::ensightPointField os.beginPart(0); // 0 = internalMesh } - writeField + writeFieldContent ( "coordinates", Field<Type>(pf.internalField(), ensMesh.uniquePointMap()), @@ -373,7 +409,7 @@ bool Foam::ensightOutput::ensightPointField os.beginPart(ensFaces.index()); } - writeField + writeFieldContent ( "coordinates", Field<Type>(pf.internalField(), uniqueMeshPointLabels), @@ -417,7 +453,7 @@ bool Foam::ensightOutput::ensightPointField os.beginPart(ensFaces.index()); } - writeField + writeFieldContent ( "coordinates", Field<Type>(pf.internalField(), uniqueMeshPointLabels), diff --git a/src/conversion/ensight/output/ensightSerialOutput.H b/src/conversion/ensight/output/ensightSerialOutput.H index 8fcbc3025fe6fd0370e03a9762121ad7744e39e8..823c7ba5bf3b42333d5ffd796916d5394e7df1f7 100644 --- a/src/conversion/ensight/output/ensightSerialOutput.H +++ b/src/conversion/ensight/output/ensightSerialOutput.H @@ -55,12 +55,12 @@ class ensightSerialOutput { // Private Methods - //- Write field component-wise - template<class Type> - static void writeField + //- Write field content (component-wise) for the given ensight element type + template<template<typename> class FieldContainer, class Type> + static void writeFieldContent ( const word& key, - const Field<Type>& field, + const FieldContainer<Type>& fld, ensightFile& os ); diff --git a/src/conversion/ensight/output/ensightSerialOutputTemplates.C b/src/conversion/ensight/output/ensightSerialOutputTemplates.C index 31f4ad9370d9669bbd9a2ba4a8d1a576912671dc..ae15572f4c8f50f35287f5c3fd845298bcfb94d1 100644 --- a/src/conversion/ensight/output/ensightSerialOutputTemplates.C +++ b/src/conversion/ensight/output/ensightSerialOutputTemplates.C @@ -31,11 +31,11 @@ License // * * * * * * * * * * Static Private Member Functions * * * * * * * * * * * // -template<class Type> -void Foam::ensightSerialOutput::writeField +template<template<typename> class FieldContainer, class Type> +void Foam::ensightSerialOutput::writeFieldContent ( const word& key, - const Field<Type>& fld, + const FieldContainer<Type>& fld, ensightFile& os ) { @@ -82,14 +82,12 @@ bool Foam::ensightSerialOutput::writeField { os.beginPart(part.index()); - const List<ensightFaces::elemType> enums = - ensightFaces::elemEnum.enums(); - - forAllConstIter(List<ensightFaces::elemType>, enums, iter) + for (label typei=0; typei < ensightFaces::nTypes; ++typei) { - const ensightFaces::elemType what = *iter; + const ensightFaces::elemType what = + ensightFaces::elemType(typei); - writeField + writeFieldContent ( ensightFaces::key(what), Field<Type>(fld, part.faceIds(what)), @@ -115,14 +113,11 @@ bool Foam::ensightSerialOutput::writeField { os.beginPart(part.index()); - const List<ensightCells::elemType> enums = - ensightCells::elemEnum.enums(); - - forAllConstIter(List<ensightCells::elemType>, enums, iter) + for (label typei=0; typei < ensightCells::nTypes; ++typei) { - const ensightCells::elemType what = *iter; + const ensightCells::elemType what = ensightCells::elemType(typei); - writeField + writeFieldContent ( ensightCells::key(what), Field<Type>(fld, part.cellIds(what)), diff --git a/src/conversion/ensight/part/ensightPartCells.C b/src/conversion/ensight/part/ensightPartCells.C index cfd5c9482fc84ccde70aced8fcc826e7b63995de..b4fc02ad6a4d6d0fe28669a10f8bf0ac418cf9e4 100644 --- a/src/conversion/ensight/part/ensightPartCells.C +++ b/src/conversion/ensight/part/ensightPartCells.C @@ -263,12 +263,9 @@ void Foam::ensightPartCells::write } // write each element type - const List<ensightCells::elemType> enums = - ensightCells::elemEnum.enums(); - - forAllConstIter(List<ensightCells::elemType>, enums, iter) + for (label typei=0; typei < ensightCells::nTypes; ++typei) { - const ensightCells::elemType what = *iter; + const ensightCells::elemType what = ensightCells::elemType(typei); writeConnectivity ( @@ -308,10 +305,9 @@ void Foam::ensightPartCells::dumpInfo(Ostream& os) const os.writeEntry("name", name()); os.writeEntry("size", size()); - const List<ensightCells::elemType> enums = ensightCells::elemEnum.enums(); - forAllConstIter(List<ensightCells::elemType>, enums, iter) + for (label typei=0; typei < ensightCells::nTypes; ++typei) { - const ensightCells::elemType what = *iter; + const ensightCells::elemType what = ensightCells::elemType(typei); const labelUList& addr = this->cellIds(what); os.writeKeyword(ensightCells::key(what)); diff --git a/src/conversion/ensight/part/ensightPartFaces.C b/src/conversion/ensight/part/ensightPartFaces.C index 4875b19cfbfcce79779f6666f37bf012f5ba8cf2..e0ed197639ce366beedbb9ef5397e0b24f0aa15a 100644 --- a/src/conversion/ensight/part/ensightPartFaces.C +++ b/src/conversion/ensight/part/ensightPartFaces.C @@ -48,10 +48,10 @@ Foam::ensightPart::localPoints Foam::ensightPartFaces::calcLocalPoints() const labelList& usedPoints = ptList.list; label nPoints = 0; - // add all points from faces + // Add all points from faces const labelUList& idList = this->faceIds(); - // add all points from faces + // Add all points from faces forAll(idList, i) { const label id = idList[i] + start_; @@ -67,7 +67,7 @@ Foam::ensightPart::localPoints Foam::ensightPartFaces::calcLocalPoints() const } - // this is not absolutely necessary, but renumber anyhow + // This is not absolutely necessary, but renumber anyhow nPoints = 0; forAll(usedPoints, ptI) { @@ -101,7 +101,7 @@ Foam::ensightPartFaces::ensightPartFaces points_(points), contiguousPoints_(contiguousPoints) { - // classify the face shapes + // Classify the face shapes classify(faces); } @@ -121,7 +121,7 @@ Foam::ensightPartFaces::ensightPartFaces points_(mesh.points()), contiguousPoints_(false) { - // classify the face shapes + // Classify the face shapes classify(patch); } @@ -149,10 +149,10 @@ void Foam::ensightPartFaces::writeConnectivity os.write(idList.size()); os.newline(); - // write (polygon) face sizes + // Write (polygon) face sizes if (key == "nsided") { - // write the number of points per face + // Write the number of points per face forAll(idList, i) { const label id = idList[i] + start_; @@ -163,13 +163,13 @@ void Foam::ensightPartFaces::writeConnectivity } } - // write the points describing the face + // Write the points describing the face forAll(idList, i) { const label id = idList[i] + start_; const face& f = faces[id]; - // convert global -> local index + // Convert global -> local index // (note: Ensight indices start with 1) forAll(f, fp) { @@ -205,7 +205,7 @@ void Foam::ensightPartFaces::write const pointField& points ) const { - if (ensightPart::size()) + if (size()) { const localPoints ptList = calcLocalPoints(); const labelUList& pointMap = ptList.list; @@ -226,12 +226,9 @@ void Foam::ensightPartFaces::write } // write part - const List<ensightFaces::elemType> enums = - ensightFaces::elemEnum.enums(); - - forAllConstIter(List<ensightFaces::elemType>, enums, iter) + for (label typei=0; typei < ensightFaces::nTypes; ++typei) { - const ensightFaces::elemType what = *iter; + const ensightFaces::elemType what = ensightFaces::elemType(typei); writeConnectivity ( @@ -273,10 +270,9 @@ void Foam::ensightPartFaces::dumpInfo(Ostream& os) const os.writeEntry("start", start_); os.writeEntry("size", size()); - const List<ensightFaces::elemType> enums = ensightFaces::elemEnum.enums(); - forAllConstIter(List<ensightFaces::elemType>, enums, iter) + for (label typei=0; typei < ensightFaces::nTypes; ++typei) { - const ensightFaces::elemType what = *iter; + const ensightFaces::elemType what = ensightFaces::elemType(typei); const labelUList& addr = this->faceIds(what); os.writeKeyword(ensightFaces::key(what)); diff --git a/src/conversion/ensight/part/ensightPartFaces.H b/src/conversion/ensight/part/ensightPartFaces.H index 974ca68a055783cb702077a64320b59becbe9ff2..bdb6c062c8b4824d8fc0a70c603e5822e49c193c 100644 --- a/src/conversion/ensight/part/ensightPartFaces.H +++ b/src/conversion/ensight/part/ensightPartFaces.H @@ -138,44 +138,43 @@ public: // Member Functions - // Access + // Access - //- Part index (0-based) - virtual label index() const - { - return ensightFaces::index(); - } + //- Part index (0-based) + virtual label index() const + { + return ensightFaces::index(); + } - //- Number of elements in this part - virtual label size() const - { - return ensightFaces::size(); - } + //- Number of elements in this part + virtual label size() const + { + return ensightFaces::size(); + } - //- Return the patch index, -1 when not in use. - inline label patchIndex() const - { - return patchIndex_; - } + //- Return the patch index, -1 when not in use. + inline label patchIndex() const + { + return patchIndex_; + } - // Output + // Output - //- Write summary information about the object - virtual void writeSummary(Ostream&) const; + //- Write summary information about the object + virtual void writeSummary(Ostream&) const; - //- Write geometry - virtual void write(ensightGeoFile&) const; + //- Write geometry + virtual void write(ensightGeoFile&) const; - //- Helper: write geometry given the pointField - virtual void write(ensightGeoFile&, const pointField&) const; + //- Helper: write geometry given the pointField + virtual void write(ensightGeoFile&, const pointField&) const; - //- Print various types of debugging information - virtual void dumpInfo(Ostream&) const; - + //- Print various types of debugging information + virtual void dumpInfo(Ostream&) const; }; diff --git a/src/dummyThirdParty/Allwmake b/src/dummyThirdParty/Allwmake index e67e3de741f7c98aed7bf43e297dee3fd7bcba59..3dac95f4106ee4aa1fdb1c3f869f769b1b5a99b9 100755 --- a/src/dummyThirdParty/Allwmake +++ b/src/dummyThirdParty/Allwmake @@ -3,12 +3,10 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType scotchDecomp wmake $targetType ptscotchDecomp wmake $targetType metisDecomp wmake $targetType MGridGen - #------------------------------------------------------------------------------ diff --git a/src/dynamicFvMesh/Make/files b/src/dynamicFvMesh/Make/files index 0403ea42edff6119dd4e0982c708a6ef2a9cb901..7f579610835e19fd6234d84bef01ebde4bf4020b 100644 --- a/src/dynamicFvMesh/Make/files +++ b/src/dynamicFvMesh/Make/files @@ -2,22 +2,9 @@ dynamicFvMesh/dynamicFvMesh.C dynamicFvMesh/dynamicFvMeshNew.C staticFvMesh/staticFvMesh.C dynamicMotionSolverFvMesh/dynamicMotionSolverFvMesh.C +dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.C dynamicInkJetFvMesh/dynamicInkJetFvMesh.C dynamicRefineFvMesh/dynamicRefineFvMesh.C - -solidBodyMotionFvMesh/solidBodyMotionFvMesh.C -solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.C -solidBodyMotionFunctions = solidBodyMotionFvMesh/solidBodyMotionFunctions -$(solidBodyMotionFunctions)/solidBodyMotionFunction/solidBodyMotionFunction.C -$(solidBodyMotionFunctions)/solidBodyMotionFunction/solidBodyMotionFunctionNew.C -$(solidBodyMotionFunctions)/SDA/SDA.C -$(solidBodyMotionFunctions)/tabulated6DoFMotion/tabulated6DoFMotion.C -$(solidBodyMotionFunctions)/linearMotion/linearMotion.C -$(solidBodyMotionFunctions)/rotatingMotion/rotatingMotion.C -$(solidBodyMotionFunctions)/axisRotationMotion/axisRotationMotion.C -$(solidBodyMotionFunctions)/multiMotion/multiMotion.C -$(solidBodyMotionFunctions)/oscillatingLinearMotion/oscillatingLinearMotion.C -$(solidBodyMotionFunctions)/oscillatingRotatingMotion/oscillatingRotatingMotion.C -solidBodyMotionFvMesh/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.C +dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C LIB = $(FOAM_LIBBIN)/libdynamicFvMesh diff --git a/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C b/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C new file mode 100644 index 0000000000000000000000000000000000000000..2b75caa5fce6edc6d4cbb3288c62208151f1e3ee --- /dev/null +++ b/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "dynamicMotionSolverListFvMesh.H" +#include "addToRunTimeSelectionTable.H" +#include "motionSolver.H" +#include "pointMesh.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(dynamicMotionSolverListFvMesh, 0); + addToRunTimeSelectionTable + ( + dynamicFvMesh, + dynamicMotionSolverListFvMesh, + IOobject + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::dynamicMotionSolverListFvMesh::dynamicMotionSolverListFvMesh +( + const IOobject& io +) +: + dynamicFvMesh(io), + motionSolvers_ + ( + IOdictionary + ( + IOobject + ( + "dynamicMeshDict", + time().constant(), + *this, + IOobject::MUST_READ_IF_MODIFIED, + IOobject::AUTO_WRITE + ) + ).lookup("solvers"), + motionSolver::iNew(*this) + ) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::dynamicMotionSolverListFvMesh::~dynamicMotionSolverListFvMesh() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::dynamicMotionSolverListFvMesh::update() +{ + if (motionSolvers_.size()) + { + // Accumulated displacement + pointField disp(motionSolvers_[0].newPoints() - fvMesh::points()); + + for (label i = 1; i < motionSolvers_.size(); i++) + { + disp += motionSolvers_[i].newPoints() - fvMesh::points(); + } + + fvMesh::movePoints(points() + disp); + + if (foundObject<volVectorField>("U")) + { + const_cast<volVectorField&>(lookupObject<volVectorField>("U")) + .correctBoundaryConditions(); + } + } + + return true; +} + + +// ************************************************************************* // diff --git a/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.H b/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.H new file mode 100644 index 0000000000000000000000000000000000000000..e638bf63b4e52848a2ef2c38ccd551f6405f0ae0 --- /dev/null +++ b/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.H @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::dynamicMotionSolverListFvMesh + +Description + Foam::dynamicMotionSolverListFvMesh + +SourceFiles + dynamicMotionSolverListFvMesh.C + +\*---------------------------------------------------------------------------*/ + +#ifndef dynamicMotionSolverListFvMesh_H +#define dynamicMotionSolverListFvMesh_H + +#include "dynamicFvMesh.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class motionSolver; + +/*---------------------------------------------------------------------------*\ + Class dynamicMotionSolverListFvMesh Declaration +\*---------------------------------------------------------------------------*/ + +class dynamicMotionSolverListFvMesh +: + public dynamicFvMesh +{ + // Private data + + PtrList<motionSolver> motionSolvers_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + dynamicMotionSolverListFvMesh(const dynamicMotionSolverListFvMesh&); + + //- Disallow default bitwise assignment + void operator=(const dynamicMotionSolverListFvMesh&); + + +public: + + //- Runtime type information + TypeName("dynamicMotionSolverListFvMesh"); + + + // Constructors + + //- Construct from IOobject + dynamicMotionSolverListFvMesh(const IOobject& io); + + + //- Destructor + ~dynamicMotionSolverListFvMesh(); + + + // Member Functions + + //- Dummy update function which does not change the mesh + virtual bool update(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.C b/src/dynamicFvMesh/dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.C similarity index 58% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.C rename to src/dynamicFvMesh/dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.C index f2a06887f90e981bca031cc6e1d7f7897bd9b13e..1309e0e99ed89198fd3278ef3aa0180441b37cb8 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.C +++ b/src/dynamicFvMesh/dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,11 +23,9 @@ License \*---------------------------------------------------------------------------*/ -#include "multiSolidBodyMotionFvMesh.H" +#include "dynamicMultiMotionSolverFvMesh.H" #include "addToRunTimeSelectionTable.H" #include "volFields.H" -#include "transformField.H" -#include "cellZoneMesh.H" #include "boolList.H" #include "syncTools.H" @@ -35,11 +33,11 @@ License namespace Foam { - defineTypeNameAndDebug(multiSolidBodyMotionFvMesh, 0); + defineTypeNameAndDebug(dynamicMultiMotionSolverFvMesh, 0); addToRunTimeSelectionTable ( dynamicFvMesh, - multiSolidBodyMotionFvMesh, + dynamicMultiMotionSolverFvMesh, IOobject ); } @@ -47,77 +45,63 @@ namespace Foam // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::multiSolidBodyMotionFvMesh::multiSolidBodyMotionFvMesh(const IOobject& io) +Foam::dynamicMultiMotionSolverFvMesh::dynamicMultiMotionSolverFvMesh +( + const IOobject& io +) : - dynamicFvMesh(io), - dynamicMeshCoeffs_ - ( - IOdictionary - ( - IOobject - ( - "dynamicMeshDict", - io.time().constant(), - *this, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).subDict(typeName + "Coeffs") - ), - undisplacedPoints_ + dynamicFvMesh(io) +{ + IOdictionary dynDict ( IOobject ( - "points", + "dynamicMeshDict", io.time().constant(), - meshSubDir, *this, - IOobject::MUST_READ, + IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE, false ) - ) -{ - if (undisplacedPoints_.size() != nPoints()) - { - FatalIOErrorInFunction - ( - dynamicMeshCoeffs_ - ) << "Read " << undisplacedPoints_.size() - << " undisplaced points from " << undisplacedPoints_.objectPath() - << " but the current mesh has " << nPoints() - << exit(FatalIOError); - } - + ); + const dictionary& dynamicMeshCoeffs = dynDict.subDict(typeName + "Coeffs"); - zoneIDs_.setSize(dynamicMeshCoeffs_.size()); - SBMFs_.setSize(dynamicMeshCoeffs_.size()); - pointIDs_.setSize(dynamicMeshCoeffs_.size()); + zoneIDs_.setSize(dynamicMeshCoeffs.size()); + motionPtr_.setSize(dynamicMeshCoeffs.size()); + pointIDs_.setSize(dynamicMeshCoeffs.size()); label zoneI = 0; - forAllConstIter(dictionary, dynamicMeshCoeffs_, iter) + forAllConstIter(dictionary, dynamicMeshCoeffs, iter) { if (iter().isDict()) { - zoneIDs_[zoneI] = cellZones().findZoneID(iter().keyword()); + const dictionary& subDict = iter().dict(); + + word zoneName(subDict.lookup("cellZone")); + + zoneIDs_[zoneI] = cellZones().findZoneID(zoneName); if (zoneIDs_[zoneI] == -1) { FatalIOErrorInFunction ( - dynamicMeshCoeffs_ - ) << "Cannot find cellZone named " << iter().keyword() + dynamicMeshCoeffs + ) << "Cannot find cellZone named " << zoneName << ". Valid zones are " << cellZones().names() << exit(FatalIOError); } - const dictionary& subDict = iter().dict(); + IOobject io(dynDict); + io.readOpt() = IOobject::NO_READ; - SBMFs_.set + motionPtr_.set ( zoneI, - solidBodyMotionFunction::New(subDict, io.time()) + motionSolver::New + ( + *this, + IOdictionary(io, subDict) + ) ); // Collect points of cell zone. @@ -127,15 +111,15 @@ Foam::multiSolidBodyMotionFvMesh::multiSolidBodyMotionFvMesh(const IOobject& io) forAll(cz, i) { - label celli = cz[i]; - const cell& c = cells()[celli]; + label cellI = cz[i]; + const cell& c = cells()[cellI]; forAll(c, j) { const face& f = faces()[c[j]]; forAll(f, k) { - label pointi = f[k]; - movePts[pointi] = true; + label pointI = f[k]; + movePts[pointI] = true; } } } @@ -153,47 +137,49 @@ Foam::multiSolidBodyMotionFvMesh::multiSolidBodyMotionFvMesh(const IOobject& io) pointIDs_[zoneI].transfer(ptIDs); - Info<< "Applying solid body motion " << SBMFs_[zoneI].type() - << " to " << pointIDs_[zoneI].size() << " points of cellZone " - << iter().keyword() << endl; + Info<< "Applying motionSolver " << motionPtr_[zoneI].type() + << " to " + << returnReduce(pointIDs_[zoneI].size(), sumOp<label>()) + << " points of cellZone " << zoneName << endl; zoneI++; } } zoneIDs_.setSize(zoneI); - SBMFs_.setSize(zoneI); + motionPtr_.setSize(zoneI); pointIDs_.setSize(zoneI); } // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::multiSolidBodyMotionFvMesh::~multiSolidBodyMotionFvMesh() +Foam::dynamicMultiMotionSolverFvMesh::~dynamicMultiMotionSolverFvMesh() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool Foam::multiSolidBodyMotionFvMesh::update() +bool Foam::dynamicMultiMotionSolverFvMesh::update() { - static bool hasWarned = false; - - pointField transformedPts(undisplacedPoints_); + pointField transformedPts(points()); - forAll(zoneIDs_, i) + forAll(motionPtr_, zoneI) { - const labelList& zonePoints = pointIDs_[i]; + tmp<pointField> tnewPoints(motionPtr_[zoneI].newPoints()); + const pointField& newPoints = tnewPoints(); - UIndirectList<point>(transformedPts, zonePoints) = - transformPoints - ( - SBMFs_[i].transformation(), - pointField(transformedPts, zonePoints) - ); + const labelList& zonePoints = pointIDs_[zoneI]; + forAll(zonePoints, i) + { + label pointI = zonePoints[i]; + transformedPts[pointI] = newPoints[pointI]; + } } fvMesh::movePoints(transformedPts); + static bool hasWarned = false; + if (foundObject<volVectorField>("U")) { const_cast<volVectorField&>(lookupObject<volVectorField>("U")) diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.H b/src/dynamicFvMesh/dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.H similarity index 69% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.H rename to src/dynamicFvMesh/dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.H index 3c36131d975dffe606323581040d6c42591adb05..d4906ed40d9d00f32a71d55098ec8d34b0d5ddc8 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/multiSolidBodyMotionFvMesh.H +++ b/src/dynamicFvMesh/dynamicMultiMotionSolverFvMesh/dynamicMultiMotionSolverFvMesh.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,24 +22,22 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::multiSolidBodyMotionFvMesh + Foam::dynamicMultiMotionSolverFvMesh Description - Solid-body motion of the mesh specified by a run-time selectable - motion function. + Mesh motion described per cellZone. Individual motion solvers solve + over whole domain but are only applied per cellZone. SourceFiles - multiSolidBodyMotionFvMesh.C + dynamicMultiMotionSolverFvMesh.C \*---------------------------------------------------------------------------*/ -#ifndef multiSolidBodyMotionFvMesh_H -#define multiSolidBodyMotionFvMesh_H +#ifndef dynamicMultiMotionSolverFvMesh_H +#define dynamicMultiMotionSolverFvMesh_H #include "dynamicFvMesh.H" -#include "dictionary.H" -#include "pointIOField.H" -#include "solidBodyMotionFunction.H" +#include "motionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,23 +45,17 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class multiSolidBodyMotionFvMesh Declaration + Class dynamicMultiMotionSolverFvMesh Declaration \*---------------------------------------------------------------------------*/ -class multiSolidBodyMotionFvMesh +class dynamicMultiMotionSolverFvMesh : public dynamicFvMesh { // Private data - //- Dictionary of motion control parameters - const dictionary dynamicMeshCoeffs_; - //- The motion control function - PtrList<solidBodyMotionFunction> SBMFs_; - - //- The reference points which are transformed - pointIOField undisplacedPoints_; + PtrList<motionSolver> motionPtr_; //- Specified cellZones labelList zoneIDs_; @@ -75,26 +67,26 @@ class multiSolidBodyMotionFvMesh // Private Member Functions //- Disallow default bitwise copy construct - multiSolidBodyMotionFvMesh(const multiSolidBodyMotionFvMesh&); + dynamicMultiMotionSolverFvMesh(const dynamicMultiMotionSolverFvMesh&); //- Disallow default bitwise assignment - void operator=(const multiSolidBodyMotionFvMesh&); + void operator=(const dynamicMultiMotionSolverFvMesh&); public: //- Runtime type information - TypeName("multiSolidBodyMotionFvMesh"); + TypeName("dynamicMultiMotionSolverFvMesh"); // Constructors //- Construct from IOobject - multiSolidBodyMotionFvMesh(const IOobject& io); + dynamicMultiMotionSolverFvMesh(const IOobject& io); //- Destructor - ~multiSolidBodyMotionFvMesh(); + ~dynamicMultiMotionSolverFvMesh(); // Member Functions diff --git a/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.C b/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.C index fa1b100678a921e3ed35b358e1c0c03478c2f933..6ef49e4951f06db6817eaa1c008d10688d85ac2b 100644 --- a/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.C +++ b/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.C @@ -42,10 +42,8 @@ namespace Foam addToRunTimeSelectionTable(dynamicFvMesh, dynamicRefineFvMesh, IOobject); } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -// the PackedBoolList::count method would probably be faster -// since we are only checking for 'true' anyhow Foam::label Foam::dynamicRefineFvMesh::count ( const PackedBoolList& l, @@ -250,10 +248,10 @@ Foam::dynamicRefineFvMesh::refine } } -// // Remove the stored tet base points -// tetBasePtIsPtr_.clear(); -// // Remove the cell tree -// cellTreePtr_.clear(); + // // Remove the stored tet base points + // tetBasePtIsPtr_.clear(); + // // Remove the cell tree + // cellTreePtr_.clear(); // Update fields updateMesh(map); @@ -463,8 +461,6 @@ Foam::dynamicRefineFvMesh::refine } -// Combines previously split cells, maps fields and recalculates -// (an approximate) flux Foam::autoPtr<Foam::mapPolyMesh> Foam::dynamicRefineFvMesh::unrefine ( @@ -646,7 +642,6 @@ Foam::dynamicRefineFvMesh::unrefine } -// Get max of connected point Foam::scalarField Foam::dynamicRefineFvMesh::maxPointField(const scalarField& pFld) const { @@ -665,7 +660,6 @@ Foam::dynamicRefineFvMesh::maxPointField(const scalarField& pFld) const } -// Get max of connected cell Foam::scalarField Foam::dynamicRefineFvMesh::maxCellField(const volScalarField& vFld) const { @@ -684,7 +678,6 @@ Foam::dynamicRefineFvMesh::maxCellField(const volScalarField& vFld) const } -// Simple (non-parallel) interpolation by averaging. Foam::scalarField Foam::dynamicRefineFvMesh::cellToPoint(const scalarField& vFld) const { @@ -705,7 +698,6 @@ Foam::dynamicRefineFvMesh::cellToPoint(const scalarField& vFld) const } -// Calculate error. Is < 0 or distance to minLevel, maxLevel Foam::scalarField Foam::dynamicRefineFvMesh::error ( const scalarField& fld, diff --git a/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.H b/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.H index fc4db3bf70272b79bd6fd7ad50044aad87ff45e0..1700732d530456f8ab47f63af1f64418019146a3 100644 --- a/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.H +++ b/src/dynamicFvMesh/dynamicRefineFvMesh/dynamicRefineFvMesh.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -104,7 +104,7 @@ protected: PackedBoolList protectedCell_; - // Private Member Functions + // Protected Member Functions //- Count set/unset elements in packedlist. static label count(const PackedBoolList&, const unsigned int); diff --git a/src/dynamicMesh/Make/files b/src/dynamicMesh/Make/files index de8f61296cd77d4c7d1a774f90da81716deffefc..c1de4266ad1d0126ff242365d8cd338e566b7a58 100644 --- a/src/dynamicMesh/Make/files +++ b/src/dynamicMesh/Make/files @@ -100,12 +100,32 @@ motionSmoother/polyMeshGeometry/polyMeshGeometry.C motionSmoother/badQualityToCell/badQualityToCell.C motionSmoother/badQualityToFace/badQualityToFace.C -motionSolver/motionSolver/motionSolver.C -motionSolver/displacement/displacementMotionSolver.C -motionSolver/componentDisplacement/componentDisplacementMotionSolver.C -motionSolver/velocity/velocityMotionSolver.C -motionSolver/velocityDisplacement/velocityDisplacementMotionSolver.C -motionSolver/componentVelocity/componentVelocityMotionSolver.C +motionSolvers/motionSolver/motionSolver.C +motionSolvers/displacement/points0/points0MotionSolver.C +motionSolvers/displacement/displacement/displacementMotionSolver.C +motionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.C +motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C +motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C +motionSolvers/componentDisplacement/componentDisplacementMotionSolver.C +motionSolvers/velocity/velocityMotionSolver.C +motionSolvers/velocity/velocityDisplacement/velocityDisplacementMotionSolver.C +motionSolvers/componentVelocity/componentVelocityMotionSolver.C +motionSolvers/displacement/solidBody/solidBodyMotionSolver.C +motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C + +solidBodyMotionFunctions = motionSolvers/displacement/solidBody/solidBodyMotionFunctions +$(solidBodyMotionFunctions)/solidBodyMotionFunction/solidBodyMotionFunction.C +$(solidBodyMotionFunctions)/solidBodyMotionFunction/solidBodyMotionFunctionNew.C +$(solidBodyMotionFunctions)/SDA/SDA.C +$(solidBodyMotionFunctions)/tabulated6DoFMotion/tabulated6DoFMotion.C +$(solidBodyMotionFunctions)/linearMotion/linearMotion.C +$(solidBodyMotionFunctions)/rotatingMotion/rotatingMotion.C +$(solidBodyMotionFunctions)/axisRotationMotion/axisRotationMotion.C +$(solidBodyMotionFunctions)/multiMotion/multiMotion.C +$(solidBodyMotionFunctions)/oscillatingLinearMotion/oscillatingLinearMotion.C +$(solidBodyMotionFunctions)/oscillatingRotatingMotion/oscillatingRotatingMotion.C + +motionSolvers/displacement/solidBody/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.C createShellMesh/createShellMesh.C diff --git a/src/dynamicMesh/boundaryMesh/boundaryMesh.H b/src/dynamicMesh/boundaryMesh/boundaryMesh.H index d63de47cb14ad7e7463286eee42cb5d9f1b507a5..4e07939dd20bc05c6f1189e6e12d5a464d43de5f 100644 --- a/src/dynamicMesh/boundaryMesh/boundaryMesh.H +++ b/src/dynamicMesh/boundaryMesh/boundaryMesh.H @@ -70,6 +70,7 @@ class boundaryMesh // the largest distance from face centre to one of its vertices. static const scalar distanceTol_; + // Private data //- All boundary mesh data. Reconstructed every time faces are repatched diff --git a/src/dynamicMesh/meshCut/cellLooper/cellLooper.C b/src/dynamicMesh/meshCut/cellLooper/cellLooper.C index 26353dafb2e0dbb2708f4ca1c4653a4c518c7c47..cf34d6eb70c76a9fbd49b57d71bb8b2f9b12f0a1 100644 --- a/src/dynamicMesh/meshCut/cellLooper/cellLooper.C +++ b/src/dynamicMesh/meshCut/cellLooper/cellLooper.C @@ -62,9 +62,8 @@ Foam::autoPtr<Foam::cellLooper> Foam::cellLooper::New } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -// Get faces (on cell) connected to vertI which are not using edgeI Foam::labelList Foam::cellLooper::getVertFacesNonEdge ( const label celli, @@ -101,7 +100,6 @@ Foam::labelList Foam::cellLooper::getVertFacesNonEdge } -// Get first edge connected to vertI and on facei Foam::label Foam::cellLooper::getFirstVertEdge ( const label facei, @@ -131,7 +129,6 @@ Foam::label Foam::cellLooper::getFirstVertEdge } -// Get edges (on cell) connected to vertI which are not on facei Foam::labelList Foam::cellLooper::getVertEdgesNonFace ( const label celli, @@ -166,8 +163,6 @@ Foam::labelList Foam::cellLooper::getVertEdgesNonFace } -// Return edge from cellEdges that is most perpendicular -// to refinement direction. Foam::label Foam::cellLooper::getMisAlignedEdge ( const vector& refDir, diff --git a/src/dynamicMesh/meshCut/cellLooper/cellLooper.H b/src/dynamicMesh/meshCut/cellLooper/cellLooper.H index 2642fd641f62f4165dbeb20e2540b69c684e1b11..065edef71f921a52ceb2ee3516e8a160b8096e01 100644 --- a/src/dynamicMesh/meshCut/cellLooper/cellLooper.H +++ b/src/dynamicMesh/meshCut/cellLooper/cellLooper.H @@ -71,8 +71,6 @@ class cellLooper : public edgeVertex { - // Private data - protected: @@ -105,6 +103,7 @@ protected: // to refinement direction. label getMisAlignedEdge(const vector& refDir, const label celli) const; + private: // Private Member Functions diff --git a/src/dynamicMesh/motionSolver/componentDisplacement/componentDisplacementMotionSolver.C b/src/dynamicMesh/motionSolvers/componentDisplacement/componentDisplacementMotionSolver.C similarity index 100% rename from src/dynamicMesh/motionSolver/componentDisplacement/componentDisplacementMotionSolver.C rename to src/dynamicMesh/motionSolvers/componentDisplacement/componentDisplacementMotionSolver.C diff --git a/src/dynamicMesh/motionSolver/componentDisplacement/componentDisplacementMotionSolver.H b/src/dynamicMesh/motionSolvers/componentDisplacement/componentDisplacementMotionSolver.H similarity index 98% rename from src/dynamicMesh/motionSolver/componentDisplacement/componentDisplacementMotionSolver.H rename to src/dynamicMesh/motionSolvers/componentDisplacement/componentDisplacementMotionSolver.H index 9a773a755b18e3d9bb84ef4cf886b55efeca5161..8f960cbb8e6ebb4ba74ef0a43c170b7953867c17 100644 --- a/src/dynamicMesh/motionSolver/componentDisplacement/componentDisplacementMotionSolver.H +++ b/src/dynamicMesh/motionSolvers/componentDisplacement/componentDisplacementMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,6 +72,7 @@ protected: //- Point motion field mutable pointScalarField pointDisplacement_; + private: // Private Member Functions @@ -88,6 +89,7 @@ private: //- Disallow default bitwise assignment void operator=(const componentDisplacementMotionSolver&); + public: //- Runtime type information diff --git a/src/dynamicMesh/motionSolver/componentVelocity/componentVelocityMotionSolver.C b/src/dynamicMesh/motionSolvers/componentVelocity/componentVelocityMotionSolver.C similarity index 97% rename from src/dynamicMesh/motionSolver/componentVelocity/componentVelocityMotionSolver.C rename to src/dynamicMesh/motionSolvers/componentVelocity/componentVelocityMotionSolver.C index 7d38bcfa5415b25ec5f1ac9c9b1359dbf48e2e9f..04afe757684105ebe7c29b47f1924f532e36f56c 100644 --- a/src/dynamicMesh/motionSolver/componentVelocity/componentVelocityMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/componentVelocity/componentVelocityMotionSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicMesh/motionSolver/componentVelocity/componentVelocityMotionSolver.H b/src/dynamicMesh/motionSolvers/componentVelocity/componentVelocityMotionSolver.H similarity index 98% rename from src/dynamicMesh/motionSolver/componentVelocity/componentVelocityMotionSolver.H rename to src/dynamicMesh/motionSolvers/componentVelocity/componentVelocityMotionSolver.H index 10449407774ff6c906b615e20d042dea8c4149b9..cbc7ab3a9ee36a9befc9ff3f35cbb933291f721e 100644 --- a/src/dynamicMesh/motionSolver/componentVelocity/componentVelocityMotionSolver.H +++ b/src/dynamicMesh/motionSolvers/componentVelocity/componentVelocityMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -69,6 +69,7 @@ protected: //- Point motion field mutable pointScalarField pointMotionU_; + private: // Private Member Functions @@ -85,6 +86,7 @@ private: //- Disallow default bitwise assignment void operator=(const componentVelocityMotionSolver&); + public: //- Runtime type information diff --git a/src/dynamicMesh/motionSolvers/displacement/displacement/displacementMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/displacement/displacementMotionSolver.C new file mode 100644 index 0000000000000000000000000000000000000000..a8797b3cd973d06f15679e1094a273ad34225b9c --- /dev/null +++ b/src/dynamicMesh/motionSolvers/displacement/displacement/displacementMotionSolver.C @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "displacementMotionSolver.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(displacementMotionSolver, 0); + defineRunTimeSelectionTable(displacementMotionSolver, displacement); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::displacementMotionSolver::displacementMotionSolver +( + const polyMesh& mesh, + const IOdictionary& dict, + const word& type +) +: + points0MotionSolver(mesh, dict, type), + pointDisplacement_ + ( + IOobject + ( + "pointDisplacement", + time().timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + pointMesh::New(mesh) + ) +{} + + +Foam::displacementMotionSolver::displacementMotionSolver +( + const polyMesh& mesh, + const IOdictionary& dict, + const pointVectorField& pointDisplacement, + const pointIOField& points0, + const word& type +) +: + points0MotionSolver(mesh, dict, points0, type), + pointDisplacement_ + ( + IOobject(pointDisplacement, "pointDisplacement"), + pointDisplacement + ) +{} + + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::displacementMotionSolver> +Foam::displacementMotionSolver::New +( + const word& solverTypeName, + const polyMesh& mesh, + const IOdictionary& solverDict, + const pointVectorField& pointDisplacement, + const pointIOField& points0 +) +{ + //const word solverTypeName(solverDict.lookup("solver")); + + Info<< "Selecting motion solver: " << solverTypeName << endl; + + const_cast<Time&>(mesh.time()).libs().open + ( + solverDict, + "motionSolverLibs", + displacementConstructorTablePtr_ + ); + + if (!displacementConstructorTablePtr_) + { + FatalErrorInFunction + << "solver table is empty" + << exit(FatalError); + } + + displacementConstructorTable::iterator cstrIter = + displacementConstructorTablePtr_->find(solverTypeName); + + if (cstrIter == displacementConstructorTablePtr_->end()) + { + FatalErrorInFunction + << "Unknown solver type " + << solverTypeName << nl << nl + << "Valid solver types are:" << endl + << displacementConstructorTablePtr_->sortedToc() + << exit(FatalError); + } + + return autoPtr<displacementMotionSolver> + ( + cstrIter() + ( + mesh, + solverDict, + pointDisplacement, + points0 + ) + ); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::displacementMotionSolver::~displacementMotionSolver() +{} + + +// ************************************************************************* // diff --git a/src/dynamicMesh/motionSolver/displacement/displacementMotionSolver.H b/src/dynamicMesh/motionSolvers/displacement/displacement/displacementMotionSolver.H similarity index 82% rename from src/dynamicMesh/motionSolver/displacement/displacementMotionSolver.H rename to src/dynamicMesh/motionSolvers/displacement/displacement/displacementMotionSolver.H index 1162c1309a166ecb98581dc029fe773f1f8c1efd..eb6e585f29e0dd6998287d6a8cf6f9f7b8cc342c 100644 --- a/src/dynamicMesh/motionSolver/displacement/displacementMotionSolver.H +++ b/src/dynamicMesh/motionSolvers/displacement/displacement/displacementMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,24 +38,20 @@ SourceFiles #ifndef displacementMotionSolver_H #define displacementMotionSolver_H -#include "motionSolver.H" -#include "pointFields.H" -#include "pointIOField.H" +#include "points0MotionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -class mapPolyMesh; - /*---------------------------------------------------------------------------*\ - Class displacementMotionSolver Declaration + Class displacementMotionSolver Declaration \*---------------------------------------------------------------------------*/ class displacementMotionSolver : - public motionSolver + public points0MotionSolver { protected: @@ -64,9 +60,6 @@ protected: //- Point motion field mutable pointVectorField pointDisplacement_; - //- Starting points - pointIOField points0_; - private: @@ -101,11 +94,6 @@ public: (mesh, dict, pointDisplacement, points0) ); - // Static Member Functions - - //- Return IO object for points0 - static IOobject points0IO(const polyMesh& mesh); - // Selectors @@ -148,18 +136,6 @@ public: // Member Functions - //- Return reference to the reference field - pointField& points0() - { - return points0_; - } - - //- Return reference to the reference field - const pointField& points0() const - { - return points0_; - } - //- Return reference to the point motion displacement field pointVectorField& pointDisplacement() { @@ -171,12 +147,6 @@ public: { return pointDisplacement_; } - - //- Update local data for geometry changes - virtual void movePoints(const pointField&); - - //- Update local data for topology changes - virtual void updateMesh(const mapPolyMesh&); }; diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.C similarity index 100% rename from src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.C rename to src/dynamicMesh/motionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.C diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.H b/src/dynamicMesh/motionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.H similarity index 100% rename from src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.H rename to src/dynamicMesh/motionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.H diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C similarity index 100% rename from src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C rename to src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.H b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.H similarity index 100% rename from src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.H rename to src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.H diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C similarity index 95% rename from src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C rename to src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C index a2ab64d1dee4ad441e5193bf0d4b9a570f53dd80..5bb626935b1c3608772599df3aaba8089598ea45 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C +++ b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H similarity index 100% rename from src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H rename to src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalkI.H b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalkI.H similarity index 100% rename from src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalkI.H rename to src/dynamicMesh/motionSolvers/displacement/layeredSolver/pointEdgeStructuredWalkI.H diff --git a/src/dynamicMesh/motionSolver/displacement/displacementMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/points0/points0MotionSolver.C similarity index 68% rename from src/dynamicMesh/motionSolver/displacement/displacementMotionSolver.C rename to src/dynamicMesh/motionSolvers/displacement/points0/points0MotionSolver.C index bb35968a42a15dc548af58e12b48b36ba7093ee8..f8a006d6fee0e422e826cc6172dafa10184c2317 100644 --- a/src/dynamicMesh/motionSolver/displacement/displacementMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/displacement/points0/points0MotionSolver.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -23,21 +23,20 @@ License \*---------------------------------------------------------------------------*/ -#include "displacementMotionSolver.H" +#include "points0MotionSolver.H" #include "mapPolyMesh.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(displacementMotionSolver, 0); - defineRunTimeSelectionTable(displacementMotionSolver, displacement); + defineTypeNameAndDebug(points0MotionSolver, 0); } // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // -Foam::IOobject Foam::displacementMotionSolver::points0IO(const polyMesh& mesh) +Foam::IOobject Foam::points0MotionSolver::points0IO(const polyMesh& mesh) { const word instance = mesh.time().findInstance @@ -56,7 +55,7 @@ Foam::IOobject Foam::displacementMotionSolver::points0IO(const polyMesh& mesh) ( "points0", instance, - mesh.meshDir(), + polyMesh::meshSubDir, mesh, IOobject::MUST_READ, IOobject::NO_WRITE, @@ -65,13 +64,13 @@ Foam::IOobject Foam::displacementMotionSolver::points0IO(const polyMesh& mesh) } else { - // check that points0 are actually in constant directory + // Check that points0 are actually in constant directory IOobject io ( "points0", instance, - mesh.meshDir(), + polyMesh::meshSubDir, mesh, IOobject::MUST_READ, IOobject::NO_WRITE, @@ -84,14 +83,14 @@ Foam::IOobject Foam::displacementMotionSolver::points0IO(const polyMesh& mesh) } else { - // copy of original mesh points + // Copy of original mesh points return IOobject ( "points", instance, - mesh.meshDir(), + polyMesh::meshSubDir, mesh, IOobject::MUST_READ, IOobject::NO_WRITE, @@ -104,7 +103,7 @@ Foam::IOobject Foam::displacementMotionSolver::points0IO(const polyMesh& mesh) // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::displacementMotionSolver::displacementMotionSolver +Foam::points0MotionSolver::points0MotionSolver ( const polyMesh& mesh, const IOdictionary& dict, @@ -112,18 +111,6 @@ Foam::displacementMotionSolver::displacementMotionSolver ) : motionSolver(mesh, dict, type), - pointDisplacement_ - ( - IOobject - ( - "pointDisplacement", - time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - pointMesh::New(mesh) - ), points0_(pointIOField(points0IO(mesh))) { if (points0_.size() != mesh.nPoints()) @@ -138,7 +125,7 @@ Foam::displacementMotionSolver::displacementMotionSolver ( "points", time().constant(), - mesh.meshDir(), + polyMesh::meshSubDir, mesh, IOobject::MUST_READ, IOobject::NO_WRITE, @@ -150,21 +137,15 @@ Foam::displacementMotionSolver::displacementMotionSolver } -Foam::displacementMotionSolver::displacementMotionSolver +Foam::points0MotionSolver::points0MotionSolver ( const polyMesh& mesh, const IOdictionary& dict, - const pointVectorField& pointDisplacement, const pointIOField& points0, const word& type ) : motionSolver(mesh, dict, type), - pointDisplacement_ - ( - IOobject(pointDisplacement, "pointDisplacement"), - pointDisplacement - ), points0_(points0) { if (points0_.size() != mesh.nPoints()) @@ -178,77 +159,19 @@ Foam::displacementMotionSolver::displacementMotionSolver } -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // - -Foam::autoPtr<Foam::displacementMotionSolver> -Foam::displacementMotionSolver::New -( - const word& solverTypeName, - const polyMesh& mesh, - const IOdictionary& solverDict, - const pointVectorField& pointDisplacement, - const pointIOField& points0 -) -{ - //const word solverTypeName(solverDict.lookup("solver")); - - Info<< "Selecting motion solver: " << solverTypeName << endl; - - const_cast<Time&>(mesh.time()).libs().open - ( - solverDict, - "motionSolverLibs", - displacementConstructorTablePtr_ - ); - - if (!displacementConstructorTablePtr_) - { - FatalErrorInFunction - << "solver table is empty" - << exit(FatalError); - } - - displacementConstructorTable::iterator cstrIter = - displacementConstructorTablePtr_->find(solverTypeName); - - if (cstrIter == displacementConstructorTablePtr_->end()) - { - FatalErrorInFunction - << "Unknown solver type " - << solverTypeName << nl << nl - << "Valid solver types are:" << endl - << displacementConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<displacementMotionSolver> - ( - cstrIter() - ( - mesh, - solverDict, - pointDisplacement, - points0 - ) - ); -} - - // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::displacementMotionSolver::~displacementMotionSolver() +Foam::points0MotionSolver::~points0MotionSolver() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::displacementMotionSolver::movePoints(const pointField&) -{ - // No local data to update -} +void Foam::points0MotionSolver::movePoints(const pointField&) +{} -void Foam::displacementMotionSolver::updateMesh(const mapPolyMesh& mpm) +void Foam::points0MotionSolver::updateMesh(const mapPolyMesh& mpm) { // pointMesh already updates pointFields diff --git a/src/dynamicMesh/motionSolvers/displacement/points0/points0MotionSolver.H b/src/dynamicMesh/motionSolvers/displacement/points0/points0MotionSolver.H new file mode 100644 index 0000000000000000000000000000000000000000..18041f268f3aff098d636aa329bf74f024860355 --- /dev/null +++ b/src/dynamicMesh/motionSolvers/displacement/points0/points0MotionSolver.H @@ -0,0 +1,140 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::points0MotionSolver + +Description + Virtual base class for displacement motion solvers, where the point + motion is relative to a set of fixed points (points0). + +SourceFiles + points0MotionSolver.C + +\*---------------------------------------------------------------------------*/ + +#ifndef points0MotionSolver_H +#define points0MotionSolver_H + +#include "motionSolver.H" +#include "pointFields.H" +#include "pointIOField.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class mapPolyMesh; + +/*---------------------------------------------------------------------------*\ + Class points0MotionSolver Declaration +\*---------------------------------------------------------------------------*/ + +class points0MotionSolver +: + public motionSolver +{ +protected: + + // Protected data + + //- Starting points + pointIOField points0_; + + +private: + + // Private Member Functions + + //- Disallow default bitwise copy construct + points0MotionSolver(const points0MotionSolver&); + + //- Disallow default bitwise assignment + void operator=(const points0MotionSolver&); + + +public: + + //- Runtime type information + TypeName("points0MotionSolver"); + + + // Constructors + + //- Construct from mesh and dictionary + points0MotionSolver + ( + const polyMesh&, + const IOdictionary&, + const word& type + ); + + //- Construct from mesh and dictionary + points0MotionSolver + ( + const polyMesh&, + const IOdictionary&, + const pointIOField& points0, + const word& type + ); + + + //- Destructor + virtual ~points0MotionSolver(); + + + // Member Functions + + //- Return IO object for points0 + static IOobject points0IO(const polyMesh& mesh); + + //- Return reference to the reference field + pointField& points0() + { + return points0_; + } + + //- Return reference to the reference field + const pointField& points0() const + { + return points0_; + } + + //- Update local data for geometry changes + virtual void movePoints(const pointField&); + + //- Update local data for topology changes + virtual void updateMesh(const mapPolyMesh&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C new file mode 100644 index 0000000000000000000000000000000000000000..6992db05b0798c045f30437d875383fe1b9817e9 --- /dev/null +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "multiSolidBodyMotionSolver.H" +#include "addToRunTimeSelectionTable.H" +#include "transformField.H" +#include "cellZoneMesh.H" +#include "boolList.H" +#include "syncTools.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(multiSolidBodyMotionSolver, 0); + addToRunTimeSelectionTable + ( + motionSolver, + multiSolidBodyMotionSolver, + dictionary + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::multiSolidBodyMotionSolver::multiSolidBodyMotionSolver +( + const polyMesh& mesh, + const IOdictionary& dict +) +: + points0MotionSolver(mesh, dict, typeName) +{ + zoneIDs_.setSize(coeffDict().size()); + SBMFs_.setSize(coeffDict().size()); + pointIDs_.setSize(coeffDict().size()); + label zonei = 0; + + forAllConstIter(dictionary, coeffDict(), iter) + { + if (iter().isDict()) + { + zoneIDs_[zonei] = mesh.cellZones().findZoneID(iter().keyword()); + + if (zoneIDs_[zonei] == -1) + { + FatalIOErrorInFunction + ( + coeffDict() + ) << "Cannot find cellZone named " << iter().keyword() + << ". Valid zones are " << mesh.cellZones().names() + << exit(FatalIOError); + } + + const dictionary& subDict = iter().dict(); + + SBMFs_.set + ( + zonei, + solidBodyMotionFunction::New(subDict, mesh.time()) + ); + + // Collect points of cell zone. + const cellZone& cz = mesh.cellZones()[zoneIDs_[zonei]]; + + boolList movePts(mesh.nPoints(), false); + + forAll(cz, i) + { + label celli = cz[i]; + const cell& c = mesh.cells()[celli]; + forAll(c, j) + { + const face& f = mesh.faces()[c[j]]; + forAll(f, k) + { + label pointi = f[k]; + movePts[pointi] = true; + } + } + } + + syncTools::syncPointList(mesh, movePts, orEqOp<bool>(), false); + + DynamicList<label> ptIDs(mesh.nPoints()); + forAll(movePts, i) + { + if (movePts[i]) + { + ptIDs.append(i); + } + } + + pointIDs_[zonei].transfer(ptIDs); + + Info<< "Applying solid body motion " << SBMFs_[zonei].type() + << " to " << pointIDs_[zonei].size() << " points of cellZone " + << iter().keyword() << endl; + + zonei++; + } + } + zoneIDs_.setSize(zonei); + SBMFs_.setSize(zonei); + pointIDs_.setSize(zonei); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::multiSolidBodyMotionSolver::~multiSolidBodyMotionSolver() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp<Foam::pointField> Foam::multiSolidBodyMotionSolver::curPoints() const +{ + tmp<pointField> ttransformedPts(new pointField(mesh().points())); + pointField& transformedPts = ttransformedPts.ref(); + + forAll(zoneIDs_, i) + { + const labelList& zonePoints = pointIDs_[i]; + + UIndirectList<point>(transformedPts, zonePoints) = transformPoints + ( + SBMFs_[i].transformation(), + pointField(points0_, zonePoints) + ); + } + + return ttransformedPts; +} + + +// ************************************************************************* // diff --git a/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.H new file mode 100644 index 0000000000000000000000000000000000000000..14232574ac14ef5fcbda21d82958776a0278af3d --- /dev/null +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.H @@ -0,0 +1,115 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::multiSolidBodyMotionSolver + +Description + Solid-body motion of the mesh specified by a run-time selectable + motion function. + +SourceFiles + multiSolidBodyMotionSolver.C + +\*---------------------------------------------------------------------------*/ + +#ifndef multiSolidBodyMotionSolver_H +#define multiSolidBodyMotionSolver_H + +#include "points0MotionSolver.H" +#include "solidBodyMotionFunction.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class multiSolidBodyMotionSolver Declaration +\*---------------------------------------------------------------------------*/ + +class multiSolidBodyMotionSolver +: + public points0MotionSolver +{ + // Private data + + //- The motion control function + PtrList<solidBodyMotionFunction> SBMFs_; + + //- Specified cellZones + labelList zoneIDs_; + + //- Points to move per cellZone + labelListList pointIDs_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + multiSolidBodyMotionSolver(const multiSolidBodyMotionSolver&); + + //- Disallow default bitwise assignment + void operator=(const multiSolidBodyMotionSolver&); + + +public: + + //- Runtime type information + TypeName("multiSolidBodyMotionSolver"); + + + // Constructors + + //- Construct from mesh and dictionary + multiSolidBodyMotionSolver + ( + const polyMesh&, + const IOdictionary& + ); + + + //- Destructor + ~multiSolidBodyMotionSolver(); + + + // Member Functions + + //- Return point location obtained from the current motion field + virtual tmp<pointField> curPoints() const; + + //- Solve for motion + virtual void solve() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.H similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/pointPatchFields/derived/solidBodyMotionDisplacement/solidBodyMotionDisplacementPointPatchVectorField.H diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/SDA/SDA.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/SDA/SDA.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/SDA/SDA.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/SDA/SDA.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/SDA/SDA.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/SDA/SDA.H similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/SDA/SDA.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/SDA/SDA.H diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H index 9f78e72d1b0cb9a8af27d05f1d0da82fbea5bba3..8cbd3e8ce68f853fc278a87e2c2f323a4133de1a 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/axisRotationMotion/axisRotationMotion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/linearMotion/linearMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/linearMotion/linearMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/linearMotion/linearMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/linearMotion/linearMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/linearMotion/linearMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/linearMotion/linearMotion.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/linearMotion/linearMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/linearMotion/linearMotion.H index 036ed957b63a48c9dbe2ff1e19a5d8786e61fc8d..afc90d74422b0d1c782e2e15374a40ac64c96801 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/linearMotion/linearMotion.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/linearMotion/linearMotion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/multiMotion/multiMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/multiMotion/multiMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/multiMotion/multiMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/multiMotion/multiMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/multiMotion/multiMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/multiMotion/multiMotion.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/multiMotion/multiMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/multiMotion/multiMotion.H index 93eb8dd8e53b6a465ef44f732045d266c1601e49..47ce23cc5ab8b7a1f0151caaaddebcb3c2489ccd 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/multiMotion/multiMotion.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/multiMotion/multiMotion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.H index d080f486ef414c9027f6c40ff010e4f06320e02e..ef0ea54fd8c5e9c0873b9d57fd819135332ecaec 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingLinearMotion/oscillatingLinearMotion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.H index 60692b98f2f8bfe0cf5f7dddb141b86a8def077a..198796c61331b1a6af1641311176e4555884af61 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.H similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/rotatingMotion/rotatingMotion.H diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.H index 1e0ed0363b2f38930def43c529408be25267da0a..232ce1b4ccdf5f051a5a94b5daf25c0320690bd3 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C similarity index 97% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C index b0f0921750a8c0ff9fe091fbf497a7bb63500cc7..dfb9d5e1f37fe98ff810baa23610ca7587282714 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C similarity index 100% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H similarity index 98% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H index 0a5bfc736f7dcdef46f3ed6eeee632f655317b63..4c6c05b4f1f25add3947619eb9964367ea5b3c34 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFvMesh.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C similarity index 51% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFvMesh.C rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C index b4a993f11c62f685e229cfa802d2b5739560bdb5..d14e87ce9cd22fe68298e8f6a46eb73cf12e64b1 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFvMesh.C +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,9 +23,8 @@ License \*---------------------------------------------------------------------------*/ -#include "solidBodyMotionFvMesh.H" +#include "solidBodyMotionSolver.H" #include "addToRunTimeSelectionTable.H" -#include "volFields.H" #include "transformField.H" #include "cellZoneMesh.H" #include "cellSet.H" @@ -36,91 +35,61 @@ License namespace Foam { - defineTypeNameAndDebug(solidBodyMotionFvMesh, 0); - addToRunTimeSelectionTable(dynamicFvMesh, solidBodyMotionFvMesh, IOobject); + defineTypeNameAndDebug(solidBodyMotionSolver, 0); + addToRunTimeSelectionTable + ( + motionSolver, + solidBodyMotionSolver, + dictionary + ); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::solidBodyMotionFvMesh::solidBodyMotionFvMesh(const IOobject& io) +Foam::solidBodyMotionSolver::solidBodyMotionSolver +( + const polyMesh& mesh, + const IOdictionary& dict +) : - dynamicFvMesh(io), - dynamicMeshCoeffs_ - ( - IOdictionary - ( - IOobject - ( - "dynamicMeshDict", - io.time().constant(), - *this, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).subDict(typeName + "Coeffs") - ), - SBMFPtr_(solidBodyMotionFunction::New(dynamicMeshCoeffs_, io.time())), - undisplacedPoints_ - ( - IOobject - ( - "points", - io.time().constant(), - meshSubDir, - *this, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ) - ), + points0MotionSolver(mesh, dict, typeName), + SBMFPtr_(solidBodyMotionFunction::New(coeffDict(), mesh.time())), pointIDs_(), - moveAllCells_(false), - UName_(dynamicMeshCoeffs_.lookupOrDefault<word>("U", "U")) + moveAllCells_(false) { - if (undisplacedPoints_.size() != nPoints()) - { - FatalIOErrorInFunction(dynamicMeshCoeffs_) - << "Read " << undisplacedPoints_.size() - << " undisplaced points from " << undisplacedPoints_.objectPath() - << " but the current mesh has " << nPoints() - << exit(FatalIOError); - } - word cellZoneName = - dynamicMeshCoeffs_.lookupOrDefault<word>("cellZone", "none"); + coeffDict().lookupOrDefault<word>("cellZone", "none"); word cellSetName = - dynamicMeshCoeffs_.lookupOrDefault<word>("cellSet", "none"); + coeffDict().lookupOrDefault<word>("cellSet", "none"); if ((cellZoneName != "none") && (cellSetName != "none")) { - FatalIOErrorInFunction(dynamicMeshCoeffs_) + FatalIOErrorInFunction(coeffDict()) << "Either cellZone OR cellSet can be supplied, but not both. " << "If neither is supplied, all cells will be included" << exit(FatalIOError); } - labelList cellIDs; if (cellZoneName != "none") { Info<< "Applying solid body motion to cellZone " << cellZoneName << endl; - label zoneID = cellZones().findZoneID(cellZoneName); + label zoneID = mesh.cellZones().findZoneID(cellZoneName); if (zoneID == -1) { FatalErrorInFunction << "Unable to find cellZone " << cellZoneName << ". Valid cellZones are:" - << cellZones().names() + << mesh.cellZones().names() << exit(FatalError); } - cellIDs = cellZones()[zoneID]; + cellIDs = mesh.cellZones()[zoneID]; } if (cellSetName != "none") @@ -128,7 +97,7 @@ Foam::solidBodyMotionFvMesh::solidBodyMotionFvMesh(const IOobject& io) Info<< "Applying solid body motion to cellSet " << cellSetName << endl; - cellSet set(*this, cellSetName); + cellSet set(mesh, cellSetName); cellIDs = set.toc(); } @@ -144,15 +113,15 @@ Foam::solidBodyMotionFvMesh::solidBodyMotionFvMesh(const IOobject& io) { // collect point IDs of points in cell zone - boolList movePts(nPoints(), false); + boolList movePts(mesh.nPoints(), false); forAll(cellIDs, i) { label celli = cellIDs[i]; - const cell& c = cells()[celli]; + const cell& c = mesh.cells()[celli]; forAll(c, j) { - const face& f = faces()[c[j]]; + const face& f = mesh.faces()[c[j]]; forAll(f, k) { label pointi = f[k]; @@ -161,9 +130,9 @@ Foam::solidBodyMotionFvMesh::solidBodyMotionFvMesh(const IOobject& io) } } - syncTools::syncPointList(*this, movePts, orEqOp<bool>(), false); + syncTools::syncPointList(mesh, movePts, orEqOp<bool>(), false); - DynamicList<label> ptIDs(nPoints()); + DynamicList<label> ptIDs(mesh.nPoints()); forAll(movePts, i) { if (movePts[i]) @@ -179,59 +148,31 @@ Foam::solidBodyMotionFvMesh::solidBodyMotionFvMesh(const IOobject& io) // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::solidBodyMotionFvMesh::~solidBodyMotionFvMesh() +Foam::solidBodyMotionSolver::~solidBodyMotionSolver() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool Foam::solidBodyMotionFvMesh::update() +Foam::tmp<Foam::pointField> Foam::solidBodyMotionSolver::curPoints() const { - static bool hasWarned = false; - if (moveAllCells_) { - fvMesh::movePoints - ( - transformPoints - ( - SBMFPtr_().transformation(), - undisplacedPoints_ - ) - ); + return transformPoints(SBMFPtr_().transformation(), points0_); } else { - pointField transformedPts(undisplacedPoints_); + tmp<pointField> ttransformedPts(new pointField(mesh().points())); + pointField& transformedPts = ttransformedPts.ref(); - UIndirectList<point>(transformedPts, pointIDs_) = - transformPoints - ( - SBMFPtr_().transformation(), - pointField(transformedPts, pointIDs_) - ); - - fvMesh::movePoints(transformedPts); - } - - - if (foundObject<volVectorField>(UName_)) - { - const volVectorField& U = lookupObject<volVectorField>(UName_); - - const_cast<volVectorField&>(U).correctBoundaryConditions(); - } - else if (!hasWarned) - { - hasWarned = true; + UIndirectList<point>(transformedPts, pointIDs_) = transformPoints + ( + SBMFPtr_().transformation(), + pointField(points0_, pointIDs_) + ); - WarningInFunction - << "Did not find volVectorField " << UName_ - << " Not updating " << UName_ << "boundary conditions." - << endl; + return ttransformedPts; } - - return true; } diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFvMesh.H b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.H similarity index 69% rename from src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFvMesh.H rename to src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.H index d7d8bf4680815161e0dced4010f3009a0b0273cb..4b36558c2c3083feded2084c9e06164893f10689 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFvMesh.H +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,23 +22,21 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::solidBodyMotionFvMesh + Foam::solidBodyMotionSolver Description Solid-body motion of the mesh specified by a run-time selectable motion function. SourceFiles - solidBodyMotionFvMesh.C + solidBodyMotionSolver.C \*---------------------------------------------------------------------------*/ -#ifndef solidBodyMotionFvMesh_H -#define solidBodyMotionFvMesh_H +#ifndef solidBodyMotionSolver_H +#define solidBodyMotionSolver_H -#include "dynamicFvMesh.H" -#include "dictionary.H" -#include "pointIOField.H" +#include "points0MotionSolver.H" #include "solidBodyMotionFunction.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,63 +45,62 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class solidBodyMotionFvMesh Declaration + Class solidBodyMotionSolver Declaration \*---------------------------------------------------------------------------*/ -class solidBodyMotionFvMesh +class solidBodyMotionSolver : - public dynamicFvMesh + public points0MotionSolver { // Private data - //- Dictionary of motion control parameters - const dictionary dynamicMeshCoeffs_; - //- The motion control function autoPtr<solidBodyMotionFunction> SBMFPtr_; - //- The reference points which are transformed - pointIOField undisplacedPoints_; - //- Points to move when cell zone is supplied labelList pointIDs_; //- Flag to indicate whether all cells should move bool moveAllCells_; - //- Name of velocity field - word UName_; - // Private Member Functions //- Disallow default bitwise copy construct - solidBodyMotionFvMesh(const solidBodyMotionFvMesh&); + solidBodyMotionSolver(const solidBodyMotionSolver&); //- Disallow default bitwise assignment - void operator=(const solidBodyMotionFvMesh&); + void operator=(const solidBodyMotionSolver&); public: //- Runtime type information - TypeName("solidBodyMotionFvMesh"); + TypeName("solidBody"); // Constructors - //- Construct from IOobject - solidBodyMotionFvMesh(const IOobject& io); + //- Construct from mesh and dictionary + solidBodyMotionSolver + ( + const polyMesh&, + const IOdictionary& + ); //- Destructor - ~solidBodyMotionFvMesh(); + ~solidBodyMotionSolver(); // Member Functions - //- Update the mesh for both mesh motion and topology change - virtual bool update(); + //- Return point location obtained from the current motion field + virtual tmp<pointField> curPoints() const; + + //- Solve for motion + virtual void solve() + {} }; diff --git a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.C b/src/dynamicMesh/motionSolvers/motionSolver/motionSolver.C similarity index 87% rename from src/dynamicMesh/motionSolver/motionSolver/motionSolver.C rename to src/dynamicMesh/motionSolvers/motionSolver/motionSolver.C index efcaab60e1e415fbf759365dcaa07675e2d63cf2..a637338472ef24de23fdf26fa5ff6122fe9ed6db 100644 --- a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.C +++ b/src/dynamicMesh/motionSolvers/motionSolver/motionSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -89,6 +89,13 @@ Foam::motionSolver::motionSolver {} +Foam::autoPtr<Foam::motionSolver> Foam::motionSolver::clone() const +{ + NotImplemented; + return autoPtr<motionSolver>(nullptr); +} + + // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // Foam::autoPtr<Foam::motionSolver> Foam::motionSolver::New @@ -150,6 +157,36 @@ Foam::autoPtr<Foam::motionSolver> Foam::motionSolver::New(const polyMesh& mesh) } +Foam::motionSolver::iNew::iNew(const polyMesh& mesh) +: + mesh_(mesh) +{} + + +Foam::autoPtr<Foam::motionSolver> Foam::motionSolver::iNew::operator() +( + Istream& is +) const +{ + dictionaryEntry dict(dictionary::null, is); + + return motionSolver::New + ( + mesh_, + IOdictionary + ( + IOobject + ( + dict.name() + ":meshSolver", + mesh_.time().constant(), + mesh_ + ), + dict + ) + ); +} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::motionSolver::~motionSolver() diff --git a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.H b/src/dynamicMesh/motionSolvers/motionSolver/motionSolver.H similarity index 90% rename from src/dynamicMesh/motionSolver/motionSolver/motionSolver.H rename to src/dynamicMesh/motionSolvers/motionSolver/motionSolver.H index a252436b168184b5b9176fe4203386ceca45a8c0..b0349cdc1ba8f00bd3128e3d3938cb154eb09455 100644 --- a/src/dynamicMesh/motionSolver/motionSolver/motionSolver.H +++ b/src/dynamicMesh/motionSolvers/motionSolver/motionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,6 +38,10 @@ SourceFiles #include "IOdictionary.H" #include "pointField.H" +#include "Time.H" +#include "polyMesh.H" +#include "dictionaryEntry.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -55,9 +59,6 @@ class motionSolver : public IOdictionary { - -private: - // Private data //- Reference to mesh @@ -74,6 +75,7 @@ protected: //- De-register object if registered and assign to current static IOobject stealRegistration(const IOdictionary& dict); + public: //- Runtime type information @@ -101,6 +103,19 @@ public: // was registered this will 'steal' that registration. static autoPtr<motionSolver> New(const polyMesh&, const IOdictionary&); + //- Class used for the construction of PtrLists of motionSolvers + class iNew + { + const polyMesh& mesh_; + + public: + + iNew(const polyMesh& mesh); + + autoPtr<motionSolver> operator()(Istream& is) const; + }; + + // Constructors @@ -115,6 +130,9 @@ public: const word& type ); + //- Clone function + virtual autoPtr<motionSolver> clone() const; + //- Destructor virtual ~motionSolver(); diff --git a/src/dynamicMesh/motionSolver/velocityDisplacement/velocityDisplacementMotionSolver.C b/src/dynamicMesh/motionSolvers/velocity/velocityDisplacement/velocityDisplacementMotionSolver.C similarity index 98% rename from src/dynamicMesh/motionSolver/velocityDisplacement/velocityDisplacementMotionSolver.C rename to src/dynamicMesh/motionSolvers/velocity/velocityDisplacement/velocityDisplacementMotionSolver.C index 8c8848bae5fdb1048f7c71ed36d106199a43f648..cc51e8ef74ab7e80a31383b4f97a64edbfed63d0 100644 --- a/src/dynamicMesh/motionSolver/velocityDisplacement/velocityDisplacementMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/velocity/velocityDisplacement/velocityDisplacementMotionSolver.C @@ -75,7 +75,7 @@ Foam::velocityDisplacementMotionSolver::velocityDisplacementMotionSolver velocityMotionSolver(mesh, dict, typeName), displacementMotionSolverPtr_() { - pointIOField points0(displacementMotionSolver::points0IO(mesh)); + pointIOField points0(points0MotionSolver::points0IO(mesh)); pointVectorField pointDisplacement ( diff --git a/src/dynamicMesh/motionSolver/velocityDisplacement/velocityDisplacementMotionSolver.H b/src/dynamicMesh/motionSolvers/velocity/velocityDisplacement/velocityDisplacementMotionSolver.H similarity index 100% rename from src/dynamicMesh/motionSolver/velocityDisplacement/velocityDisplacementMotionSolver.H rename to src/dynamicMesh/motionSolvers/velocity/velocityDisplacement/velocityDisplacementMotionSolver.H diff --git a/src/dynamicMesh/motionSolver/velocity/velocityMotionSolver.C b/src/dynamicMesh/motionSolvers/velocity/velocityMotionSolver.C similarity index 96% rename from src/dynamicMesh/motionSolver/velocity/velocityMotionSolver.C rename to src/dynamicMesh/motionSolvers/velocity/velocityMotionSolver.C index 35f9924b497e7a97f000b05bc23562e2acfe67b7..a6c2604bea55409f3a9e5eaf815123673024a0ad 100644 --- a/src/dynamicMesh/motionSolver/velocity/velocityMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/velocity/velocityMotionSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicMesh/motionSolver/velocity/velocityMotionSolver.H b/src/dynamicMesh/motionSolvers/velocity/velocityMotionSolver.H similarity index 97% rename from src/dynamicMesh/motionSolver/velocity/velocityMotionSolver.H rename to src/dynamicMesh/motionSolvers/velocity/velocityMotionSolver.H index a9a5c160d1afc4d29949930ef3de8fdd56d1cf84..e675b87d73b9538ec63c8398e03b5c28f83713b3 100644 --- a/src/dynamicMesh/motionSolver/velocity/velocityMotionSolver.H +++ b/src/dynamicMesh/motionSolvers/velocity/velocityMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C index 9aceb0b45923c185fcf9895f624c98f867054d04..259f747bc868ad7f58c21b3475bcbc8cc22b3e28 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -5751,9 +5751,42 @@ bool Foam::hexRef8::write() const { writeOk = writeOk && history_.write(); } + else + { + refinementHistory::removeFiles(mesh_); + } return writeOk; } +void Foam::hexRef8::removeFiles(const polyMesh& mesh) +{ + IOobject io + ( + "dummy", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ); + fileName setsDir(io.path()); + + if (topoSet::debug) DebugVar(setsDir); + + if (exists(setsDir/"cellLevel")) + { + rm(setsDir/"cellLevel"); + } + if (exists(setsDir/"pointLevel")) + { + rm(setsDir/"pointLevel"); + } + if (exists(setsDir/"level0Edge")) + { + rm(setsDir/"level0Edge"); + } + refinementHistory::removeFiles(mesh); +} + + // ************************************************************************* // diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.H index 09694f7a414f99e3929aa3dfdcddd6ae7464c09d..e14e9761c762bac03c912bc021a9e6dc415ca2c9 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -568,6 +568,9 @@ public: //- Force writing refinement+history to polyMesh directory. bool write() const; + //- Helper: remove all relevant files from mesh instance + static void removeFiles(const polyMesh&); + }; diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.C index 1a76ea75b48df72176c25d422cc330050745cd27..fb4254a4e279682a0aea729877dfd9d7f3890a59 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,6 +28,7 @@ License #include "mapDistributePolyMesh.H" #include "polyMesh.H" #include "syncTools.H" +#include "topoSet.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -1736,6 +1737,26 @@ bool Foam::refinementHistory::writeData(Ostream& os) const } +void Foam::refinementHistory::removeFiles(const polyMesh& mesh) +{ + IOobject io + ( + "dummy", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ); + fileName setsDir(io.path()); + + if (topoSet::debug) DebugVar(setsDir); + + if (exists(setsDir/typeName)) + { + rm(setsDir/typeName); + } +} + + // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // Foam::Istream& Foam::operator>>(Istream& is, refinementHistory& rh) diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.H index 88874be430a5ee32a55e7a2e168895976cf1f553..1a883bc5da85b0738590f6e38d640966848c4405 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/refinementHistory.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -87,7 +87,7 @@ namespace Foam // Forward declaration of classes class mapPolyMesh; class mapDistributePolyMesh; - +class polyMesh; // Forward declaration of friend functions and operators @@ -401,6 +401,10 @@ public: ) const; + //- Helper: remove all sets files from mesh instance + static void removeFiles(const polyMesh&); + + // IOstream Operators //- Istream operator. Note: does not do a reduction - does not set diff --git a/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.C b/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.C index 9a002009a1c84f0bb88d4bf32134570edc983f5a..2d6e658d88afe46e4961f670088b84f0d8f9a263 100644 --- a/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.C +++ b/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.C @@ -56,7 +56,7 @@ inline void Foam::fileFormats::STARCDedgeFormat::writeLines } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::fileFormats::STARCDedgeFormat::writeCase ( diff --git a/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.H b/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.H index d4c2206ff6c31e0c3dc16144d8ed149168d5edb9..295cbebfbc354cd7cb047dbb27693021ad0fd7d4 100644 --- a/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.H +++ b/src/edgeMesh/edgeMeshFormats/starcd/STARCDedgeFormat.H @@ -87,6 +87,7 @@ protected: const label nEdges ); + public: // Constructors diff --git a/src/edgeMesh/edgeMeshFormats/vtk/VTKedgeFormat.C b/src/edgeMesh/edgeMeshFormats/vtk/VTKedgeFormat.C index 01e792e2cee195153f80c10389d73aa7993c9724..fe18c897f497378d3d3efac1895ca2087295f3dd 100644 --- a/src/edgeMesh/edgeMeshFormats/vtk/VTKedgeFormat.C +++ b/src/edgeMesh/edgeMeshFormats/vtk/VTKedgeFormat.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,7 +30,7 @@ License #include "vtkUnstructuredReader.H" #include "Time.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::fileFormats::VTKedgeFormat::writeHeader ( diff --git a/src/edgeMesh/edgeMeshI.H b/src/edgeMesh/edgeMeshI.H index 4c808c239d56fd837048ba218bc81fca4e2febc6..5ccff22321492bc97d18f82c77e527954bbebadd 100644 --- a/src/edgeMesh/edgeMeshI.H +++ b/src/edgeMesh/edgeMeshI.H @@ -23,6 +23,20 @@ License \*---------------------------------------------------------------------------*/ +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +inline Foam::pointField& Foam::edgeMesh::storedPoints() +{ + return points_; +} + + +inline Foam::edgeList& Foam::edgeMesh::storedEdges() +{ + return edges_; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // inline Foam::edgeMesh::edgeMesh(const edgeMesh& em) @@ -58,18 +72,6 @@ inline const Foam::labelListList& Foam::edgeMesh::pointEdges() const } -inline Foam::pointField& Foam::edgeMesh::storedPoints() -{ - return points_; -} - - -inline Foam::edgeList& Foam::edgeMesh::storedEdges() -{ - return edges_; -} - - // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // void Foam::edgeMesh::operator=(const edgeMesh& rhs) diff --git a/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C b/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C index 136d0eb198d6af0c45e6bb6d86458b0f48801e22..49e240abdfe253a14d4cba5e510beeb12eb50b62 100644 --- a/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C +++ b/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C @@ -169,7 +169,7 @@ bool Foam::extendedEdgeMesh::canRead } -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // Foam::extendedEdgeMesh::pointStatus Foam::extendedEdgeMesh::classifyFeaturePoint diff --git a/src/fileFormats/ensight/part/ensightCells.C b/src/fileFormats/ensight/part/ensightCells.C index 8db55a927ab557891357aa8726d9cfb3e0b8484d..d08996ad85764bfda0c2616a51c0dbc2e2abc01f 100644 --- a/src/fileFormats/ensight/part/ensightCells.C +++ b/src/fileFormats/ensight/part/ensightCells.C @@ -49,41 +49,25 @@ const Foam::NamedEnum<Foam::ensightCells::elemType, 5> // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -inline Foam::label Foam::ensightCells::offset -( - const enum elemType what, - const label i -) const -{ - label n = i; - for (label typeI = 0; typeI < label(what); ++typeI) - { - n += sizes_[typeI]; - } - - return n; -} - - -void Foam::ensightCells::resize() +void Foam::ensightCells::resizeAll() { // overall required size label n = 0; - forAll(sizes_, typeI) + forAll(sizes_, typei) { - n += sizes_[typeI]; + n += sizes_[typei]; } address_.setSize(n, Zero); // assign corresponding sub-lists n = 0; - forAll(sizes_, typeI) + forAll(sizes_, typei) { - deleteDemandDrivenData(lists_[typeI]); + deleteDemandDrivenData(lists_[typei]); - lists_[typeI] = new SubList<label>(address_, sizes_[typeI], n); + lists_[typei] = new SubList<label>(address_, sizes_[typei], n); - n += sizes_[typeI]; + n += sizes_[typei]; } } @@ -98,12 +82,12 @@ Foam::ensightCells::ensightCells(const label partIndex) lists_() { // Ensure sub-lists are properly initialized to nullptr - forAll(lists_, typeI) + forAll(lists_, typei) { - lists_[typeI] = nullptr; + lists_[typei] = nullptr; } - resize(); // adjust allocation + resizeAll(); // adjust allocation } @@ -115,9 +99,9 @@ Foam::ensightCells::ensightCells(const ensightCells& obj) lists_() { // Ensure sub-lists are properly initialized to nullptr - forAll(lists_, typeI) + forAll(lists_, typei) { - lists_[typeI] = nullptr; + lists_[typei] = nullptr; } // Total (reduced) sizes @@ -126,7 +110,7 @@ Foam::ensightCells::ensightCells(const ensightCells& obj) // Local sizes this->sizes_ = obj.sizes(); - resize(); // adjust allocation + resizeAll(); // adjust allocation // Restore total (reduced) sizes this->sizes_ = totSizes; @@ -137,9 +121,9 @@ Foam::ensightCells::ensightCells(const ensightCells& obj) Foam::ensightCells::~ensightCells() { - forAll(lists_, typeI) + forAll(lists_, typei) { - deleteDemandDrivenData(lists_[typeI]); + deleteDemandDrivenData(lists_[typei]); } address_.clear(); } @@ -150,21 +134,33 @@ Foam::ensightCells::~ensightCells() Foam::FixedList<Foam::label, 5> Foam::ensightCells::sizes() const { FixedList<label, 5> count; - forAll(lists_, typeI) + forAll(lists_, typei) { - count[typeI] = lists_[typeI]->size(); + count[typei] = lists_[typei]->size(); } return count; } +Foam::label Foam::ensightCells::offset(const enum elemType what) const +{ + label n = 0; + for (label typei = 0; typei < label(what); ++typei) + { + n += lists_[typei]->size(); + } + + return n; +} + + Foam::label Foam::ensightCells::total() const { label n = 0; - forAll(sizes_, typeI) + forAll(sizes_, typei) { - n += sizes_[typeI]; + n += sizes_[typei]; } return n; } @@ -173,28 +169,25 @@ Foam::label Foam::ensightCells::total() const void Foam::ensightCells::clear() { sizes_ = Zero; // reset sizes - resize(); + resizeAll(); } void Foam::ensightCells::reduce() { - forAll(sizes_, typeI) + forAll(sizes_, typei) { - sizes_[typeI] = lists_[typeI]->size(); - Foam::reduce(sizes_[typeI], sumOp<label>()); + sizes_[typei] = lists_[typei]->size(); + Foam::reduce(sizes_[typei], sumOp<label>()); } } void Foam::ensightCells::sort() { - forAll(lists_, typeI) + forAll(lists_, typei) { - if (lists_[typeI]) - { - Foam::sort(*(lists_[typeI])); - } + Foam::sort(*(lists_[typei])); } } @@ -220,9 +213,9 @@ void Foam::ensightCells::classify // Can avoid double looping, but only at the expense of allocation sizes_ = Zero; // reset sizes - for (label listI = 0; listI < sz; ++listI) + for (label listi = 0; listi < sz; ++listi) { - const label id = indirect ? addressing[listI] : listI; + const label id = indirect ? addressing[listi] : listi; const cellModel& model = shapes[id].model(); enum elemType what = NFACED; @@ -246,13 +239,13 @@ void Foam::ensightCells::classify sizes_[what]++; } - resize(); // adjust allocation + resizeAll(); // adjust allocation sizes_ = Zero; // reset sizes // Assign cell-id per shape type - for (label listI = 0; listI < sz; ++listI) + for (label listi = 0; listi < sz; ++listi) { - const label id = indirect ? addressing[listI] : listI; + const label id = indirect ? addressing[listi] : listi; const cellModel& model = shapes[id].model(); enum elemType what = NFACED; @@ -279,10 +272,4 @@ void Foam::ensightCells::classify } -Foam::label Foam::ensightCells::offset(const enum elemType what) const -{ - return offset(what, 0); -} - - // ************************************************************************* // diff --git a/src/fileFormats/ensight/part/ensightCells.H b/src/fileFormats/ensight/part/ensightCells.H index a84de2ce9c27ea66951c84932976f079b8e20b42..33bc98a2f4710835ee61e5dba40f3b9107e46f4f 100644 --- a/src/fileFormats/ensight/part/ensightCells.H +++ b/src/fileFormats/ensight/part/ensightCells.H @@ -89,21 +89,19 @@ private: //- Linear list of ids, sub-sectioned per element type via SubLists labelList address_; - //- List of sizes for each element type + //- List of global sizes for each element type. + // Used temporarily for local sizes when building the element lists. FixedList<label, 5> sizes_; - //- List of ids for each element type + //- List of ids for each element type. // Managed via pointers, since a SubList cannot be relocated/resized. FixedList<SubList<label>*, 5> lists_; // Private Member Functions - //- Low-level offset routine - inline label offset(const enum elemType what, const label i) const; - - //- Use current sizes to redimension the element lists - void resize(); + //- Use temporarily stored sizes to redimension the element lists + void resizeAll(); //- Disallow default bitwise assignment void operator=(const ensightCells&) = delete; @@ -126,7 +124,7 @@ public: // Member Functions - // Access + // Access //- The index in a list. inline label index() const; @@ -145,13 +143,15 @@ public: // This value is only meaningful after a reduce operation. label total() const; - //- The processor local sizes per element type. - FixedList<label, 5> sizes() const; - //- The global numbers per element type. // This value is only meaningful after a reduce operation. inline const FixedList<label, 5>& totals() const; + //- The processor local sizes per element type. + FixedList<label, 5> sizes() const; + + //- Processor local starting offset of element type. + label offset(const enum elemType what) const; //- Return the (local) cell ids of the specified element type inline const labelUList& cellIds(const enum elemType) const; @@ -159,9 +159,6 @@ public: //- Return the cell ids of all elements inline const labelUList& cellIds() const; - //- Starting offset of element type. - label offset(const enum elemType what) const; - // Edit diff --git a/src/fileFormats/ensight/part/ensightFaces.C b/src/fileFormats/ensight/part/ensightFaces.C index e1e67153fdb6206d9dc69fe1b963816df376e74b..65117d3cd60d56a36de7ed381f49d654778f50cc 100644 --- a/src/fileFormats/ensight/part/ensightFaces.C +++ b/src/fileFormats/ensight/part/ensightFaces.C @@ -74,52 +74,36 @@ inline void Foam::ensightFaces::add { const enum elemType what = whatType(f); - label n = sizes_[what]++; - lists_[what]->operator[](n) = id; + // linear addressing: + const label index = offset(what) + sizes_[what]++; + address_[index] = id; if (flipMap_.size()) { - flipMap_[offset(what, n)] = flip; + flipMap_[index] = flip; } } -// only used in this file-scope -inline Foam::label Foam::ensightFaces::offset -( - const enum elemType what, - const label i -) const -{ - label n = i; - for (label typeI = 0; typeI < label(what); ++typeI) - { - n += sizes_[typeI]; - } - - return n; -} - - -void Foam::ensightFaces::resize() +void Foam::ensightFaces::resizeAll() { // overall required size label n = 0; - forAll(sizes_, typeI) + forAll(sizes_, typei) { - n += sizes_[typeI]; + n += sizes_[typei]; } address_.setSize(n, Zero); // assign corresponding sub-lists n = 0; - forAll(sizes_, typeI) + forAll(sizes_, typei) { - deleteDemandDrivenData(lists_[typeI]); + deleteDemandDrivenData(lists_[typei]); - lists_[typeI] = new SubList<label>(address_, sizes_[typeI], n); + lists_[typei] = new SubList<label>(address_, sizes_[typei], n); - n += sizes_[typeI]; + n += sizes_[typei]; } // normally assume no flipMap @@ -138,12 +122,12 @@ Foam::ensightFaces::ensightFaces(label partIndex) lists_() { // Ensure sub-lists are properly initialized to nullptr - forAll(lists_, typeI) + forAll(lists_, typei) { - lists_[typeI] = nullptr; + lists_[typei] = nullptr; } - resize(); // adjust allocation + resizeAll(); // adjust allocation } @@ -156,9 +140,9 @@ Foam::ensightFaces::ensightFaces(const ensightFaces& obj) lists_() { // Ensure sub-lists are properly initialized to nullptr - forAll(lists_, typeI) + forAll(lists_, typei) { - lists_[typeI] = nullptr; + lists_[typei] = nullptr; } // Total (reduced) sizes @@ -167,7 +151,7 @@ Foam::ensightFaces::ensightFaces(const ensightFaces& obj) // Local sizes this->sizes_ = obj.sizes(); - resize(); // adjust allocation + resizeAll(); // adjust allocation // Restore total (reduced) sizes this->sizes_ = totSizes; @@ -178,9 +162,9 @@ Foam::ensightFaces::ensightFaces(const ensightFaces& obj) Foam::ensightFaces::~ensightFaces() { - forAll(lists_, typeI) + forAll(lists_, typei) { - deleteDemandDrivenData(lists_[typeI]); + deleteDemandDrivenData(lists_[typei]); } address_.clear(); flipMap_.clear(); @@ -192,21 +176,33 @@ Foam::ensightFaces::~ensightFaces() Foam::FixedList<Foam::label, 3> Foam::ensightFaces::sizes() const { FixedList<label, 3> count; - forAll(lists_, typeI) + forAll(lists_, typei) { - count[typeI] = lists_[typeI]->size(); + count[typei] = lists_[typei]->size(); } return count; } +Foam::label Foam::ensightFaces::offset(const enum elemType what) const +{ + label n = 0; + for (label typei = 0; typei < label(what); ++typei) + { + n += lists_[typei]->size(); + } + + return n; +} + + Foam::label Foam::ensightFaces::total() const { label n = 0; - forAll(sizes_, typeI) + forAll(sizes_, typei) { - n += sizes_[typeI]; + n += sizes_[typei]; } return n; } @@ -215,16 +211,16 @@ Foam::label Foam::ensightFaces::total() const void Foam::ensightFaces::clear() { sizes_ = Zero; // reset sizes - resize(); + resizeAll(); } void Foam::ensightFaces::reduce() { - forAll(sizes_, typeI) + forAll(sizes_, typei) { - sizes_[typeI] = lists_[typeI]->size(); - Foam::reduce(sizes_[typeI], sumOp<label>()); + sizes_[typei] = lists_[typei]->size(); + Foam::reduce(sizes_[typei], sumOp<label>()); } } @@ -233,46 +229,36 @@ void Foam::ensightFaces::sort() { if (flipMap_.size() == address_.size()) { - // sort flip too + // sort flip map too labelList order; label start = 0; - forAll(lists_, typeI) + forAll(lists_, typei) { - if (lists_[typeI]) - { - SubList<label>& idLst = *(lists_[typeI]); - const label sz = idLst.size(); + SubList<label>& idLst = *(lists_[typei]); + const label sz = idLst.size(); - if (sz) - { - SubList<bool> flip(flipMap_, sz, start); - start += sz; // for next sub-list + if (sz) + { + SubList<bool> flip(flipMap_, sz, start); + start += sz; // for next sub-list - sortedOrder(idLst, order); + Foam::sortedOrder(idLst, order); - idLst = reorder<labelList>(order, idLst); - flip = reorder<boolList>(order, flip); - } + idLst = reorder<labelList>(order, idLst); + flip = reorder<boolList>(order, flip); } } } else { // no flip-maps, simpler to sort - forAll(lists_, typeI) + forAll(lists_, typei) { - if (lists_[typeI]) - { - SubList<label>& idLst = *(lists_[typeI]); - const label sz = idLst.size(); - if (sz) - { - Foam::sort(idLst); - } - } + Foam::sort(*(lists_[typei])); } + flipMap_.clear(); // for safety } } @@ -285,19 +271,19 @@ void Foam::ensightFaces::classify(const faceList& faces) // Can avoid double looping, but only at the expense of allocation sizes_ = Zero; // reset sizes - for (label listI = 0; listI < sz; ++listI) + for (label listi = 0; listi < sz; ++listi) { - const enum elemType what = whatType(faces[listI]); + const enum elemType what = whatType(faces[listi]); sizes_[what]++; } - resize(); // adjust allocation + resizeAll(); // adjust allocation sizes_ = Zero; // reset sizes // Assign face-id per shape type - for (label listI = 0; listI < sz; ++listI) + for (label listi = 0; listi < sz; ++listi) { - add(faces[listI], listI); + add(faces[listi], listi); } } @@ -320,9 +306,9 @@ void Foam::ensightFaces::classify // Can avoid double looping, but only at the expense of allocation sizes_ = Zero; // reset sizes - for (label listI = 0; listI < sz; ++listI) + for (label listi = 0; listi < sz; ++listi) { - const label faceId = addressing[listI]; + const label faceId = addressing[listi]; if (!exclude[faceId]) { @@ -331,7 +317,7 @@ void Foam::ensightFaces::classify } } - resize(); // adjust allocation + resizeAll(); // adjust allocation sizes_ = Zero; // reset sizes if (useFlip) @@ -341,10 +327,10 @@ void Foam::ensightFaces::classify } // Assign face-id per shape type - for (label listI = 0; listI < sz; ++listI) + for (label listi = 0; listi < sz; ++listi) { - const label faceId = addressing[listI]; - const bool flip = useFlip && flipMap[listI]; + const label faceId = addressing[listi]; + const bool flip = useFlip && flipMap[listi]; if (!exclude[faceId]) { @@ -353,11 +339,4 @@ void Foam::ensightFaces::classify } } - -Foam::label Foam::ensightFaces::offset(const enum elemType what) const -{ - return offset(what, 0); -} - - // ************************************************************************* // diff --git a/src/fileFormats/ensight/part/ensightFaces.H b/src/fileFormats/ensight/part/ensightFaces.H index dfb16859c0732da4edb5efa1b54231da46978a46..844a03e9b357f874cb297c0f893958d69bac5c5d 100644 --- a/src/fileFormats/ensight/part/ensightFaces.H +++ b/src/fileFormats/ensight/part/ensightFaces.H @@ -89,7 +89,8 @@ private: //- Linear list of face-flips boolList flipMap_; - //- List of global sizes for each element type + //- List of global sizes for each element type. + // Used temporarily for local sizes when building the element lists. FixedList<label, 3> sizes_; //- SubLists of ids for each element type. @@ -102,14 +103,11 @@ private: //- Simple classifier inline static elemType whatType(const face&); - //- Low-level addition routine + //- Low-level internal addition routine inline void add(const face&, const label id, const bool flip = false); - //- Low-level offset routine - inline label offset(const enum elemType what, const label i) const; - - //- Use current sizes to redimension the element lists - void resize(); + //- Use temporarily stored sizes to redimension the element lists + void resizeAll(); //- Disallow default bitwise assignment void operator=(const ensightFaces&) = delete; @@ -132,7 +130,7 @@ public: // Member Functions - // Access + // Access //- The index in a list. inline label index() const; @@ -151,30 +149,27 @@ public: // This value is only meaningful after a reduce operation. label total() const; + //- The global numbers per element type. + // This value is only meaningful after a reduce operation. + inline const FixedList<label, 3>& totals() const; //- The processor local sizes per element type. FixedList<label, 3> sizes() const; - //- The global numbers per element type. - // This value is only meaningful after a reduce operation. - const FixedList<label, 3>& totals() const; - + //- Processor local starting offset of element type. + label offset(const enum elemType what) const; //- Return the (local) face ids of the specified element type inline const labelUList& faceIds(const enum elemType) const; - //- Return the face ids of all elements + //- Return the processor local face ids of all elements inline const labelUList& faceIds() const; - //- Return the flip-map of all elements + //- Return the processor local flip-map of all elements inline const boolList& flipMap() const; - //- Starting offset of element type. - label offset(const enum elemType what) const; - - - // Edit + // Edit //- Classify the face types, set element list. void classify(const faceList& faces); @@ -208,7 +203,6 @@ public: //- Return element from linear-list. inline label operator[](const label i) const; - }; diff --git a/src/fileFormats/sampledSetWriters/writer.C b/src/fileFormats/sampledSetWriters/writer.C index 036de180bae294eddaa35f64397348772ea5570c..afc3603dabd3372b49e2629d47fa2a1a9a6712c2 100644 --- a/src/fileFormats/sampledSetWriters/writer.C +++ b/src/fileFormats/sampledSetWriters/writer.C @@ -53,7 +53,7 @@ Foam::autoPtr<Foam::writer<Type>> Foam::writer<Type>::New } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type> Foam::fileName Foam::writer<Type>::getBaseName diff --git a/src/fileFormats/vtk/format/foamVtkOutputOptions.C b/src/fileFormats/vtk/format/foamVtkOutputOptions.C index 816cbe90b906762658ce94dac8db39f39c9d7e86..39f11a432e8e65e90660d21cbb7d18af22b56fee 100644 --- a/src/fileFormats/vtk/format/foamVtkOutputOptions.C +++ b/src/fileFormats/vtk/format/foamVtkOutputOptions.C @@ -39,15 +39,13 @@ License Foam::foamVtkOutputOptions::foamVtkOutputOptions() : type_(ASCII), - style_(NONE), precision_(IOstream::defaultPrecision()) {} // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // -Foam::autoPtr<Foam::foamVtkFormatter> -Foam::foamVtkOutputOptions::newFormatter +Foam::autoPtr<Foam::foamVtkFormatter> Foam::foamVtkOutputOptions::newFormatter ( std::ostream& os ) const @@ -188,8 +186,7 @@ void Foam::foamVtkOutputOptions::precision(unsigned val) const } -Foam::Ostream& -Foam::foamVtkOutputOptions::info(Ostream& os) const +Foam::Ostream& Foam::foamVtkOutputOptions::info(Ostream& os) const { os << "type: " << type_; diff --git a/src/fileFormats/vtk/format/foamVtkOutputOptions.H b/src/fileFormats/vtk/format/foamVtkOutputOptions.H index 43a3ee0918e89350419ab3fda802fb18fb8c3acc..a5f59de5144e91e0ec16b296a036d1bbc39fc82e 100644 --- a/src/fileFormats/vtk/format/foamVtkOutputOptions.H +++ b/src/fileFormats/vtk/format/foamVtkOutputOptions.H @@ -73,10 +73,6 @@ class foamVtkOutputOptions //- The output format type unsigned short type_; - //- The output style tuning - unsigned short style_; - - //- ASCII write precision mutable unsigned precision_; diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C index bcda0985249ec9c7efc555bd243fff21278d8c1e..b1f64847c586cf1c038cea5b1f40ff248f93e6ac 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C @@ -405,6 +405,11 @@ void Foam::MRFZone::addCoriolis void Foam::MRFZone::makeRelative(volVectorField& U) const { + if (cellZoneID_ == -1) + { + return; + } + const volVectorField& C = mesh_.C(); const vector Omega = this->Omega(); @@ -474,6 +479,11 @@ void Foam::MRFZone::makeRelative void Foam::MRFZone::makeAbsolute(volVectorField& U) const { + if (cellZoneID_ == -1) + { + return; + } + const volVectorField& C = mesh_.C(); const vector Omega = this->Omega(); @@ -530,6 +540,11 @@ void Foam::MRFZone::makeAbsolute void Foam::MRFZone::correctBoundaryVelocity(volVectorField& U) const { + if (!active_) + { + return; + } + const vector Omega = this->Omega(); // Included patches diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C b/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C index a5feb783deefefd670eab8bfba13d37444989618..0a591035d6d3305a5bd8af6486006470a93fcff7 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C @@ -38,6 +38,11 @@ void Foam::MRFZone::makeRelativeRhoFlux surfaceScalarField& phi ) const { + if (!active_) + { + return; + } + const surfaceVectorField& Cf = mesh_.Cf(); const surfaceVectorField& Sf = mesh_.Sf(); @@ -65,6 +70,11 @@ void Foam::MRFZone::makeRelativeRhoFlux FieldField<fvsPatchField, scalar>& phi ) const { + if (!active_) + { + return; + } + const surfaceVectorField& Cf = mesh_.Cf(); const surfaceVectorField& Sf = mesh_.Sf(); @@ -105,6 +115,11 @@ void Foam::MRFZone::makeRelativeRhoFlux const label patchi ) const { + if (!active_) + { + return; + } + const surfaceVectorField& Cf = mesh_.Cf(); const surfaceVectorField& Sf = mesh_.Sf(); @@ -138,6 +153,11 @@ void Foam::MRFZone::makeAbsoluteRhoFlux surfaceScalarField& phi ) const { + if (!active_) + { + return; + } + const surfaceVectorField& Cf = mesh_.Cf(); const surfaceVectorField& Sf = mesh_.Sf(); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/advective/advectiveFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/advective/advectiveFvPatchField.H index e5caf978687183b07362d80d54449371490a7c94..7a2f84166409a4280dd23dd5c4b614fe09b73154 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/advective/advectiveFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/advective/advectiveFvPatchField.H @@ -29,7 +29,8 @@ Group Description This boundary condition provides an advective outflow condition, based on - solving DDt(psi, U) = 0 at the boundary. + solving DDt(W, field) = 0 at the boundary where \c W is the wave velocity + and \c field is the field to which this boundary condition is applied. The standard (Euler, backward, CrankNicolson, localEuler) time schemes are supported. Additionally an optional mechanism to relax the value at @@ -37,7 +38,7 @@ Description switched on by specifying the relaxation length-scale \c lInf and the far-field value \c fieldInf. - The flow/wave speed at the outlet is provided by the virtual function + The flow/wave speed \c (w) at the outlet is provided by the virtual function advectionSpeed() the default implementation of which requires the name of the flux field \c (phi) and optionally the density \c (rho) if the mass-flux rather than the volumetric-flux is given. diff --git a/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.C index dafc629b50608c1f5fd1470a751b664db3b3b8c8..3dff767145ec5af98ee80e81d5a938006cd9f407 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.C @@ -138,6 +138,27 @@ Foam::mappedFieldFvPatchField<Type>::mappedFieldFvPatchField // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class Type> +void Foam::mappedFieldFvPatchField<Type>::autoMap +( + const fvPatchFieldMapper& m +) +{ + mappedPatchBase::clearOut(); +} + + +template<class Type> +void Foam::mappedFieldFvPatchField<Type>::rmap +( + const fvPatchField<Type>& ptf, + const labelList& addr +) +{ + mappedPatchBase::clearOut(); +} + + template<class Type> void Foam::mappedFieldFvPatchField<Type>::updateCoeffs() { diff --git a/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.H index 2c2026545e51cb0e5036e278c00f60e6d376c372..59af6f564c162982bba18dd89bfe4449ba2db888 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/mappedField/mappedFieldFvPatchField.H @@ -193,6 +193,22 @@ public: // Member functions + // Mapping functions + + //- Map (and resize as needed) from self given a mapping object + virtual void autoMap + ( + const fvPatchFieldMapper& + ); + + //- Reverse map the given fvPatchField onto this fvPatchField + virtual void rmap + ( + const fvPatchField<Type>&, + const labelList& + ); + + // Evaluation functions //- Update the coefficients associated with the patch field diff --git a/src/finiteVolume/fields/fvPatchFields/derived/mappedFixedValue/mappedFixedValueFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/mappedFixedValue/mappedFixedValueFvPatchField.C index 13e09b1d8ff05de08fcb4295be9a3fbc89eb8e3d..9754e04a6af7b2d10d8dae0381b840b019b34a63 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/mappedFixedValue/mappedFixedValueFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/mappedFixedValue/mappedFixedValueFvPatchField.C @@ -24,7 +24,6 @@ License \*---------------------------------------------------------------------------*/ #include "mappedFixedValueFvPatchField.H" -#include "mappedPatchBase.H" #include "volFields.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceNormalFixedValue/surfaceNormalFixedValueFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/surfaceNormalFixedValue/surfaceNormalFixedValueFvPatchVectorField.C index dc37c38a43e20bc0122f10e9d2c9b3caf3a8c09e..42dec49fc3b1160a3c99e4449a4a4185f29ec2b7 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceNormalFixedValue/surfaceNormalFixedValueFvPatchVectorField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceNormalFixedValue/surfaceNormalFixedValueFvPatchVectorField.C @@ -67,18 +67,13 @@ surfaceNormalFixedValueFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - refValue_(ptf.refValue_, mapper) + refValue_(ptf.refValue_, mapper, 0.0) { - // Note: calculate product only on ptf to avoid multiplication on - // unset values in reconstructPar. - fvPatchVectorField::operator= - ( - vectorField - ( - ptf.refValue_*ptf.patch().nf(), - mapper - ) - ); + // Note: refValue_ will have default value 0.0 for unmapped faces. This + // can temporarily happen during e.g. redistributePar. We should not + // access ptf.patch() instead since redistributePar has destroyed this + // at the time of mapping. + fvPatchVectorField::operator=(refValue_*patch().nf()); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.H index 63865c88922b3f8a4a50c64246be60db5416fbd9..07a8783354ee2fe390b41f7c5b52c7adf692a89c 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/waveTransmissive/waveTransmissiveFvPatchField.H @@ -29,18 +29,19 @@ Group Description This boundary condition provides a wave transmissive outflow condition, - based onsolving DDt(psi, U) = 0 at the boundary. + based on solving DDt(W, field) = 0 at the boundary \c W is the wave velocity + and \c field is the field to which this boundary condition is applied. The wave speed is calculated using: \f[ - x_p = \frac{\phi_p}{|Sf|} + \sqrt{\frac{\gamma}{\psi_p}} + w_p = \frac{\phi_p}{|Sf|} + \sqrt{\frac{\gamma}{\psi_p}} \f] where \vartable - x_p | patch values + w_p | patch wave speed \phi_p | patch face flux \psi_p | patch compressibility Sf | patch face area vector diff --git a/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.H b/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.H index fb90de654fe2c35905d4d4a8b2d7aa39ff884975..20f2034181563ed47d32d5dbdb668c2aaf7d07df 100644 --- a/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.H +++ b/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.H @@ -39,7 +39,6 @@ SourceFiles #define gaussConvectionScheme_H #include "convectionScheme.H" -#include "etcFiles.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,10 +50,6 @@ namespace Foam namespace fv { -//- Temporary debug switch to provide warning about backward-compatibility -// issue with setting div schemes for steady-state -extern int warnUnboundedGauss; - /*---------------------------------------------------------------------------*\ Class gaussConvectionScheme Declaration \*---------------------------------------------------------------------------*/ @@ -111,29 +106,7 @@ public: ( surfaceInterpolationScheme<Type>::New(mesh, faceFlux, is) ) - { - is.rewind(); - word bounded(is); - - if - ( - warnUnboundedGauss - && word(mesh.ddtScheme("default")) == "steadyState" - && bounded != "bounded" - ) - { - fileNameList controlDictFiles(findEtcFiles("controlDict")); - - IOWarningInFunction(is) - << "Unbounded 'Gauss' div scheme used in " - "steady-state solver, use 'bounded Gauss' " - "to ensure boundedness.\n" - << " To remove this warning switch off " - << "'warnUnboundedGauss' in " - << controlDictFiles[controlDictFiles.size()-1] - << endl; - } - } + {} // Member Functions diff --git a/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionSchemes.C b/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionSchemes.C index 65386824bc1dd3ccd3190ad1cf3f1c86f61a1d02..c5ac92905fe401701551ff9575227d76ce391b46 100644 --- a/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionSchemes.C +++ b/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionSchemes.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -28,11 +28,6 @@ License // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -int Foam::fv::warnUnboundedGauss -( - Foam::debug::debugSwitch("warnUnboundedGauss", true) -); - makeFvConvectionScheme(gaussConvectionScheme) // ************************************************************************* // diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C b/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C index 3ac77ae34c758e7c999fe6875d3007b4445086fa..2fd8acaea7a6e69f3b3801f7b60b7ea469edf38a 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C +++ b/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.C @@ -317,6 +317,33 @@ EulerDdtScheme<Type>::fvcDdt } +template<class Type> +tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> +EulerDdtScheme<Type>::fvcDdt +( + const GeometricField<Type, fvsPatchField, surfaceMesh>& sf +) +{ + dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT(); + + IOobject ddtIOobject + ( + "ddt("+sf.name()+')', + mesh().time().timeName(), + mesh() + ); + + return tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> + ( + new GeometricField<Type, fvsPatchField, surfaceMesh> + ( + ddtIOobject, + rDeltaT*(sf - sf.oldTime()) + ) + ); +} + + template<class Type> tmp<fvMatrix<Type>> EulerDdtScheme<Type>::fvmDdt diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.H b/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.H index 385063f97c5a957e21fd3de7e11dc64b16b50306..e83543364baaaabf6472666a344949f55209cecd 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.H +++ b/src/finiteVolume/finiteVolume/ddtSchemes/EulerDdtScheme/EulerDdtScheme.H @@ -127,6 +127,11 @@ public: const GeometricField<Type, fvPatchField, volMesh>& psi ); + tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> fvcDdt + ( + const GeometricField<Type, fvsPatchField, surfaceMesh>& + ); + tmp<fvMatrix<Type>> fvmDdt ( const GeometricField<Type, fvPatchField, volMesh>& diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.C b/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.C index 41024f831ca3e90b8e48b153b4df60d737154584..98d0ec1057b7ff7c957521d2f1bc36f640bfe38f 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.C +++ b/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.C @@ -132,6 +132,22 @@ tmp<fvMatrix<Type>> ddtScheme<Type>::fvmDdt } +template<class Type> +tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> ddtScheme<Type>::fvcDdt +( + const GeometricField<Type, fvsPatchField, surfaceMesh>& sf +) +{ + NotImplemented; + + return tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> + ( + GeometricField<Type, fvsPatchField, surfaceMesh>::null() + ); +} + + + template<class Type> tmp<surfaceScalarField> ddtScheme<Type>::fvcDdtPhiCoeff ( diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.H b/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.H index ed9cccf55d8581098b6b2b8f37e00d737a13a751..e2d1ca5c7bb3f27892f5b9f99b23f3d538ccd198 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.H +++ b/src/finiteVolume/finiteVolume/ddtSchemes/ddtScheme/ddtScheme.H @@ -170,6 +170,11 @@ public: const GeometricField<Type, fvPatchField, volMesh>& ) = 0; + virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> fvcDdt + ( + const GeometricField<Type, fvsPatchField, surfaceMesh>& + ); + virtual tmp<fvMatrix<Type>> fvmDdt ( const GeometricField<Type, fvPatchField, volMesh>& diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdt.C b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdt.C index 0d607c86b4b53442eade3a65c0d9ab841cfc55e5..3d09e85917f3b5510a4cb535242ed79d11bffd35 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdt.C +++ b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdt.C @@ -29,6 +29,7 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // Foam::word Foam::fv::localEulerDdt::rDeltaTName("rDeltaT"); +Foam::word Foam::fv::localEulerDdt::rDeltaTfName("rDeltaTf"); Foam::word Foam::fv::localEulerDdt::rSubDeltaTName("rSubDeltaT"); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -53,6 +54,18 @@ const Foam::volScalarField& Foam::fv::localEulerDdt::localRDeltaT } +const Foam::surfaceScalarField& Foam::fv::localEulerDdt::localRDeltaTf +( + const fvMesh& mesh +) +{ + return mesh.objectRegistry::lookupObject<surfaceScalarField> + ( + rDeltaTfName + ); +} + + Foam::tmp<Foam::volScalarField> Foam::fv::localEulerDdt::localRSubDeltaT ( const fvMesh& mesh, diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C index 2dcdb83bb6583e6af85e08ae4089046c01f1d141..cad1b1aa902b1adf3c4d9f96c71fb7ddad149423 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C +++ b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C @@ -46,6 +46,13 @@ const volScalarField& localEulerDdtScheme<Type>::localRDeltaT() const } +template<class Type> +const surfaceScalarField& localEulerDdtScheme<Type>::localRDeltaTf() const +{ + return localEulerDdt::localRDeltaTf(mesh()); +} + + template<class Type> tmp<GeometricField<Type, fvPatchField, volMesh>> localEulerDdtScheme<Type>::fvcDdt @@ -333,6 +340,33 @@ localEulerDdtScheme<Type>::fvcDdt } +template<class Type> +tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> +localEulerDdtScheme<Type>::fvcDdt +( + const GeometricField<Type, fvsPatchField, surfaceMesh>& sf +) +{ + const surfaceScalarField& rDeltaT = localRDeltaTf(); + + IOobject ddtIOobject + ( + "ddt("+sf.name()+')', + mesh().time().timeName(), + mesh() + ); + + return tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> + ( + new GeometricField<Type, fvsPatchField, surfaceMesh> + ( + ddtIOobject, + rDeltaT*(sf - sf.oldTime()) + ) + ); +} + + template<class Type> tmp<fvMatrix<Type>> localEulerDdtScheme<Type>::fvmDdt diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H index fb256d799a8ac1b5a86374ae567be0dc46866d2e..1d6841aaa18c2dbaa56da5c0840d34fa6c969b8c 100644 --- a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H +++ b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H @@ -72,6 +72,9 @@ public: //- Name of the reciprocal local time-step field static word rDeltaTName; + //- Name of the reciprocal local face time-step field + static word rDeltaTfName; + //- Name of the reciprocal local sub-cycling time-step field static word rSubDeltaTName; @@ -91,6 +94,10 @@ public: // looked-up from the objectRegistry static const volScalarField& localRDeltaT(const fvMesh& mesh); + //- Return the reciprocal of the local face time-step + // looked-up from the objectRegistry + static const surfaceScalarField& localRDeltaTf(const fvMesh& mesh); + //- Calculate and return the reciprocal of the local sub-cycling // time-step static tmp<volScalarField> localRSubDeltaT @@ -122,6 +129,9 @@ class localEulerDdtScheme //- Return the reciprocal of the local time-step const volScalarField& localRDeltaT() const; + //- Return the reciprocal of the local face time-step + const surfaceScalarField& localRDeltaTf() const; + public: @@ -181,6 +191,11 @@ public: const GeometricField<Type, fvPatchField, volMesh>& psi ); + tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> fvcDdt + ( + const GeometricField<Type, fvsPatchField, surfaceMesh>& + ); + tmp<fvMatrix<Type>> fvmDdt ( const GeometricField<Type, fvPatchField, volMesh>& diff --git a/src/finiteVolume/finiteVolume/fvc/fvcDdt.C b/src/finiteVolume/finiteVolume/fvc/fvcDdt.C index 391da38be341ef0760a8d700941eef98c7ebad19..6087724834f4e863d116f9bd822799e0d646e63e 100644 --- a/src/finiteVolume/finiteVolume/fvc/fvcDdt.C +++ b/src/finiteVolume/finiteVolume/fvc/fvcDdt.C @@ -125,6 +125,21 @@ ddt } +template<class Type> +tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> +ddt +( + const GeometricField<Type, fvsPatchField, surfaceMesh>& sf +) +{ + return fv::ddtScheme<Type>::New + ( + sf.mesh(), + sf.mesh().ddtScheme("ddt(" + sf.name() + ')') + ).ref().fvcDdt(sf); +} + + template<class Type> tmp<GeometricField<Type, fvPatchField, volMesh>> ddt diff --git a/src/finiteVolume/finiteVolume/fvc/fvcDdt.H b/src/finiteVolume/finiteVolume/fvc/fvcDdt.H index c164445ebf4e743e3a3e2e57e7ac486fe9b9ccfc..0c6ee4b35a8cbf5bac2d4e22073273653a01953b 100644 --- a/src/finiteVolume/finiteVolume/fvc/fvcDdt.H +++ b/src/finiteVolume/finiteVolume/fvc/fvcDdt.H @@ -88,6 +88,12 @@ namespace fvc const GeometricField<Type, fvPatchField, volMesh>& ); + template<class Type> + tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> ddt + ( + const GeometricField<Type, fvsPatchField, surfaceMesh>& + ); + template<class Type> tmp<GeometricField<Type, fvPatchField, volMesh>> ddt ( diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H index ce30f2b290a43292f32ce270e1e50b30af4b7a81..80ca7f4f172e8b94ee5d332d0776d1158fcdcd8f 100644 --- a/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H +++ b/src/finiteVolume/finiteVolume/snGradSchemes/orthogonalSnGrad/orthogonalSnGrad.H @@ -28,7 +28,8 @@ Group grpFvSnGradSchemes Description - Simple central-difference snGrad scheme without non-orthogonal correction. + Simple central-difference snGrad scheme using the cell-centre to cell-centre + delta-coefficients. SourceFiles orthogonalSnGrad.C diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H index 0f587e827edfed97194595bf9884992b6fe075c1..ea903ad96856fa5197db0f28a59b22a128036000 100644 --- a/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H +++ b/src/finiteVolume/finiteVolume/snGradSchemes/uncorrectedSnGrad/uncorrectedSnGrad.H @@ -28,7 +28,8 @@ Group grpFvSnGradSchemes Description - Simple central-difference snGrad scheme without non-orthogonal correction. + Simple central-difference snGrad scheme using the non-orthogonal mesh + delta-coefficients but without non-orthogonal correction. SourceFiles uncorrectedSnGrad.C diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 16270c07d5e5bf154bbda4427cbb25a86f76fcef..4c2ffb5a1f18bc3f11a3f0be6a21833d98738ec2 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -30,7 +30,7 @@ License #include "coupledFvPatchFields.H" #include "UIndirectList.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type> template<class Type2> diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToCell/globalIndexStencils/cellToCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/globalIndexStencils/cellToCellStencil.C index ce21c3a6d27eb53b1d0153c0ad5d2e6be365a192..b6820ee887cb58c3a2a7a7f4d75958698b3dd1c2 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToCell/globalIndexStencils/cellToCellStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/globalIndexStencils/cellToCellStencil.C @@ -28,7 +28,7 @@ License #include "SortableList.H" #include "emptyPolyPatch.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::cellToCellStencil::merge ( diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C index d0534ea014665cea0b6e2e65d04d19d6a98cb8af..26713fdcfbe296618df9c070559832fc7c154d98 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C @@ -32,11 +32,11 @@ License namespace Foam { -defineTypeNameAndDebug(extendedCellToFaceStencil, 0); + defineTypeNameAndDebug(extendedCellToFaceStencil, 0); } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::extendedCellToFaceStencil::writeStencilStats ( diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H index c3c57bc7fd4a50963c359d9f52879b6b5b686e09..13852515ff5b171ce88dd557adf8fff150cffaf2 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H @@ -72,7 +72,7 @@ protected: const polyMesh& mesh_; -protected: + // Protected member functions //- Write some statistics about stencil static void writeStencilStats @@ -82,6 +82,7 @@ protected: const mapDistribute& map ); + public: // Declare name of the class and its debug switch diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/globalIndexStencils/cellToFaceStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/globalIndexStencils/cellToFaceStencil.C index 2016ada0620a3e7ad3e8799df23ee06c3baac4c9..4b0aa39c00acbfec7fd7a2fd5182a5ce91ad5601 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/globalIndexStencils/cellToFaceStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/globalIndexStencils/cellToFaceStencil.C @@ -29,7 +29,7 @@ License #include "syncTools.H" #include "dummyTransform.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::cellToFaceStencil::merge ( diff --git a/src/finiteVolume/fvMesh/fvBoundaryMesh/fvBoundaryMesh.C b/src/finiteVolume/fvMesh/fvBoundaryMesh/fvBoundaryMesh.C index 27d76e2df029b997338368932cdb12afb862df26..dd33d2368b8b36cc079d679785b7a4bac5880007 100644 --- a/src/finiteVolume/fvMesh/fvBoundaryMesh/fvBoundaryMesh.C +++ b/src/finiteVolume/fvMesh/fvBoundaryMesh/fvBoundaryMesh.C @@ -131,6 +131,8 @@ Foam::lduInterfacePtrsList Foam::fvBoundaryMesh::interfaces() const } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + void Foam::fvBoundaryMesh::readUpdate(const polyBoundaryMesh& basicBdry) { clear(); diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C index 58c36623015c51c184e24f6757795475dbb84931..218644c3617e4cda730f4bacc6180e70a6c3bd66 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C @@ -33,7 +33,7 @@ int Foam::cellPointWeight::debug(debug::debugSwitch("cellPointWeight", 0)); Foam::scalar Foam::cellPointWeight::tol(SMALL); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::cellPointWeight::findTetrahedron ( diff --git a/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/pointMVCWeight.C b/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/pointMVCWeight.C index 1a556ae56bae81d839d04253f72505413cd292a2..064bf94aea345e9fe3a4fa89faac176d326a89ef 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/pointMVCWeight.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/pointMVCWeight.C @@ -36,7 +36,7 @@ namespace Foam Foam::scalar Foam::pointMVCWeight::tol(SMALL); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::pointMVCWeight::calcWeights ( diff --git a/src/functionObjects/Allwmake b/src/functionObjects/Allwmake index 56315084bb7d56a04059550aabca0c62a96d217b..073a57e3f5b06a60136b976379a54ceb65b6709e 100755 --- a/src/functionObjects/Allwmake +++ b/src/functionObjects/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType field wmake $targetType forces diff --git a/src/functionObjects/field/MachNo/MachNo.C b/src/functionObjects/field/MachNo/MachNo.C index b3fbccee6fa12e3637212a624ffa85d2233279f4..190496e0713faa67183aa3dd40812e1de520fef4 100644 --- a/src/functionObjects/field/MachNo/MachNo.C +++ b/src/functionObjects/field/MachNo/MachNo.C @@ -52,11 +52,11 @@ bool Foam::functionObjects::MachNo::calc() if ( foundObject<volVectorField>(fieldName_) - && mesh_.foundObject<fluidThermo>(fluidThermo::dictName) + && foundObject<fluidThermo>(fluidThermo::dictName) ) { const fluidThermo& thermo = - mesh_.lookupObject<fluidThermo>(fluidThermo::dictName); + lookupObject<fluidThermo>(fluidThermo::dictName); const volVectorField& U = lookupObject<volVectorField>(fieldName_); diff --git a/src/functionObjects/field/Make/files b/src/functionObjects/field/Make/files index 517a274821b962aeae5d3327be56983ce0c1a8bf..f1e9aad9953d9046fff86555ffcede397dc54595 100644 --- a/src/functionObjects/field/Make/files +++ b/src/functionObjects/field/Make/files @@ -51,6 +51,10 @@ blendingFactor/blendingFactor.C pressure/pressure.C MachNo/MachNo.C +fieldsExpression/fieldsExpression.C +add/add.C +subtract/subtract.C + turbulenceFields/turbulenceFields.C yPlus/yPlus.C wallShearStress/wallShearStress.C diff --git a/src/functionObjects/field/PecletNo/PecletNo.C b/src/functionObjects/field/PecletNo/PecletNo.C index da4018b54b3aa19be1dcb4ccc7e44cc55693a26c..c8eb2e8f67a66683e14c72d7f0f214f5f58f8f97 100644 --- a/src/functionObjects/field/PecletNo/PecletNo.C +++ b/src/functionObjects/field/PecletNo/PecletNo.C @@ -157,7 +157,7 @@ Foam::functionObjects::PecletNo::~PecletNo() bool Foam::functionObjects::PecletNo::read(const dictionary& dict) { - dict.readIfPresent("rho", rhoName_); + rhoName_ = dict.lookupOrDefault<word>("rho", "rho"); return true; } diff --git a/src/functionObjects/field/add/add.C b/src/functionObjects/field/add/add.C new file mode 100644 index 0000000000000000000000000000000000000000..88be04e7a6290b35edccfd3210a216cfc59ad12e --- /dev/null +++ b/src/functionObjects/field/add/add.C @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "add.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + defineTypeNameAndDebug(add, 0); + addToRunTimeSelectionTable(functionObject, add, dictionary); +} +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +bool Foam::functionObjects::add::calc() +{ + return calcAllTypes(*this); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionObjects::add::add +( + const word& name, + const Time& runTime, + const dictionary& dict +) +: + fieldsExpression(name, runTime, dict) +{ + setResultName("add"); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::functionObjects::add::~add() +{} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/add/add.H b/src/functionObjects/field/add/add.H new file mode 100644 index 0000000000000000000000000000000000000000..1198c2b0df0eb7c7fe521979a1d2125a44b2b2c1 --- /dev/null +++ b/src/functionObjects/field/add/add.H @@ -0,0 +1,129 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::functionObjects::add + +Group + grpFieldFunctionObjects + +Description + Add a list of fields. + + The operation can be applied to any volume or surface fields generating a + volume or surface scalar field. + + Example of function object specification: + \verbatim + Ttot + { + type add; + libs ("libfieldFunctionObjects.so"); + fields (T Tdelta); + result Ttot; + executeControl writeTime; + writeControl writeTime; + } + \endverbatim + +See also + Foam::functionObjects::fieldsExpression + Foam::functionObjects::fvMeshFunctionObject + +SourceFiles + add.C + +\*---------------------------------------------------------------------------*/ + +#ifndef functionObjects_add_H +#define functionObjects_add_H + +#include "fieldsExpression.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + +/*---------------------------------------------------------------------------*\ + Class add Declaration +\*---------------------------------------------------------------------------*/ + +class add +: + public fieldsExpression +{ + // Private Member Functions + + //- Add the list of fields of the specified type + // and return the result + template<class GeoFieldType> + tmp<GeoFieldType> calcFieldType() const; + + //- Add the list of fields and return true if successful + virtual bool calc(); + + +public: + + friend class fieldsExpression; + + + //- Runtime type information + TypeName("add"); + + + // Constructors + + //- Construct from Time and dictionary + add + ( + const word& name, + const Time& runTime, + const dictionary& dict + ); + + + //- Destructor + virtual ~add(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace functionObjects +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "addTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/functionObjects/field/add/addTemplates.C b/src/functionObjects/field/add/addTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..13b81af0efefe7a6af270e58ceaba513e0367beb --- /dev/null +++ b/src/functionObjects/field/add/addTemplates.C @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class GeoFieldType> +Foam::tmp<GeoFieldType> +Foam::functionObjects::add::calcFieldType() const +{ + tmp<GeoFieldType> tresult + ( + lookupObject<GeoFieldType>(fieldNames_[0]) + + lookupObject<GeoFieldType>(fieldNames_[1]) + ); + + for (label i=2; i<fieldNames_.size(); i++) + { + tresult.ref() += lookupObject<GeoFieldType>(fieldNames_[i]); + } + + return tresult; +} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/blendingFactor/blendingFactor.C b/src/functionObjects/field/blendingFactor/blendingFactor.C index 3861e809a2d0382108fcd105a326233164d7b4b9..f46374f29c6f2ef6f928b465f1774805966e0a50 100644 --- a/src/functionObjects/field/blendingFactor/blendingFactor.C +++ b/src/functionObjects/field/blendingFactor/blendingFactor.C @@ -117,8 +117,13 @@ bool Foam::functionObjects::blendingFactor::read(const dictionary& dict) writeFile::read(dict); phiName_ = dict.lookupOrDefault<word>("phi", "phi"); - dict.readIfPresent("tolerance", tolerance_); - if ((tolerance_ < 0) || (tolerance_ > 1)) + + tolerance_ = 0.001; + if + ( + dict.readIfPresent("tolerance", tolerance_) + && (tolerance_ < 0 || tolerance_ > 1) + ) { FatalErrorInFunction << "tolerance must be in the range 0 to 1. Supplied value: " diff --git a/src/functionObjects/field/ddt2/ddt2.C b/src/functionObjects/field/ddt2/ddt2.C index 7aeecd01e90d76ac011206c2bf7c38c42c36716d..a3876716585aa57bcea8897ca5cf0e57e0ee2029 100644 --- a/src/functionObjects/field/ddt2/ddt2.C +++ b/src/functionObjects/field/ddt2/ddt2.C @@ -112,7 +112,6 @@ Foam::functionObjects::ddt2::ddt2 ) : fvMeshFunctionObject(name, runTime, dict), - prevTimeIndex_(-1), selectFields_(), resultName_(word::null), blacklist_(), @@ -218,20 +217,12 @@ bool Foam::functionObjects::ddt2::execute() << "Unprocessed field " << ignored << endl; } - // Update time index - prevTimeIndex_ = obr_.time().timeIndex(); - return true; } bool Foam::functionObjects::ddt2::write() { - if (prevTimeIndex_ < obr_.time().timeIndex()) - { - // Ensure written results reflect the current state - execute(); - } if (results_.size()) { Log << type() << ' ' << name() << " write:" << endl; diff --git a/src/functionObjects/field/ddt2/ddt2.H b/src/functionObjects/field/ddt2/ddt2.H index bba1492e3e4fb870671465597e812a2df74ff035..21607ce2a34c98f72c87742e8f94b84dd1340119 100644 --- a/src/functionObjects/field/ddt2/ddt2.H +++ b/src/functionObjects/field/ddt2/ddt2.H @@ -101,9 +101,6 @@ class ddt2 { // Private data - //- Time at last execute, ensures write uses up-to-date values - label prevTimeIndex_; - //- Name of fields to process wordReList selectFields_; diff --git a/src/functionObjects/field/fieldAverage/fieldAverage.C b/src/functionObjects/field/fieldAverage/fieldAverage.C index 46c30fbc973859f7faa505f2072aff4badb523f2..12ffdcd9a5f7f5d989fba9bd62207b4c59367e05 100644 --- a/src/functionObjects/field/fieldAverage/fieldAverage.C +++ b/src/functionObjects/field/fieldAverage/fieldAverage.C @@ -40,7 +40,7 @@ namespace functionObjects } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::functionObjects::fieldAverage::resetFields() { @@ -302,17 +302,39 @@ bool Foam::functionObjects::fieldAverage::read(const dictionary& dict) dict.readIfPresent("periodicRestart", periodicRestart_); dict.lookup("fields") >> faItems_; + const scalar currentTime = obr().time().value(); + if (periodicRestart_) { dict.lookup("restartPeriod") >> restartPeriod_; - Info<< " Restart period " << restartPeriod_ - << nl << endl; + + if (restartPeriod_ > 0) + { + // Determine the appropriate interval for the next restart + periodIndex_ = 1; + while (currentTime > restartPeriod_*periodIndex_) + { + ++periodIndex_; + } + + Info<< " Restart period " << restartPeriod_ + << " - next restart at " << (restartPeriod_*periodIndex_) + << nl << endl; + } + else + { + periodicRestart_ = false; + + Info<< " Restart period " << restartPeriod_ + << " - ignored" + << nl << endl; + } } restartTime_ = GREAT; if (dict.readIfPresent("restartTime", restartTime_)) { - if (restartTime_ < obr_.time().value()) + if (currentTime > restartTime_) { // The restart time is already in the past - ignore restartTime_ = GREAT; diff --git a/src/functionObjects/field/fieldAverage/fieldAverage.H b/src/functionObjects/field/fieldAverage/fieldAverage.H index 31a4763bfa6be29a015a338edd37cd04f6632df1..20c8380d7eecb302e1115a2a795bb180309977da 100644 --- a/src/functionObjects/field/fieldAverage/fieldAverage.H +++ b/src/functionObjects/field/fieldAverage/fieldAverage.H @@ -189,7 +189,7 @@ protected: label periodIndex_; - // Private Member Functions + // Protected Member Functions // Initialisation routines diff --git a/src/functionObjects/field/fieldAverage/fieldAverageTemplates.C b/src/functionObjects/field/fieldAverage/fieldAverageTemplates.C index f5995f718a7df98f46ff787137e7fa82b6ddf8b1..fd6c50542d03b8c03bd96090bd5e2ce480bd1a53 100644 --- a/src/functionObjects/field/fieldAverage/fieldAverageTemplates.C +++ b/src/functionObjects/field/fieldAverage/fieldAverageTemplates.C @@ -213,11 +213,10 @@ void Foam::functionObjects::fieldAverage::calculateMeanFieldType if (faItems_[fieldi].iterBase()) { - dt = 1.0; + dt = 1; Dt = scalar(totalIter_[fieldi]); } - scalar alpha = (Dt - dt)/Dt; scalar beta = dt/Dt; if (faItems_[fieldi].window() > 0) @@ -226,12 +225,11 @@ void Foam::functionObjects::fieldAverage::calculateMeanFieldType if (Dt - dt >= w) { - alpha = (w - dt)/w; beta = dt/w; } } - meanField = alpha*meanField + beta*baseField; + meanField = (1 - beta)*meanField + beta*baseField; } } @@ -277,11 +275,10 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType if (faItems_[fieldi].iterBase()) { - dt = 1.0; + dt = 1; Dt = scalar(totalIter_[fieldi]); } - scalar alpha = (Dt - dt)/Dt; scalar beta = dt/Dt; if (faItems_[fieldi].window() > 0) @@ -290,13 +287,12 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType if (Dt - dt >= w) { - alpha = (w - dt)/w; beta = dt/w; } } prime2MeanField = - alpha*prime2MeanField + (1 - beta)*prime2MeanField + beta*sqr(baseField) - sqr(meanField); } @@ -316,11 +312,7 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFields() const { if (faItems_[i].prime2Mean()) { - calculatePrime2MeanFieldType<VolFieldType1, VolFieldType2> - ( - i - ); - + calculatePrime2MeanFieldType<VolFieldType1, VolFieldType2>(i); calculatePrime2MeanFieldType<SurfaceFieldType1, SurfaceFieldType2> ( i diff --git a/src/functionObjects/field/fieldExpression/fieldExpression.C b/src/functionObjects/field/fieldExpression/fieldExpression.C index d56bff0bdebf5ad48bcb207b6887aea9ae30a2f1..6bb432ca3d910e4c3ab40981b34ee0c3572d5450 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpression.C +++ b/src/functionObjects/field/fieldExpression/fieldExpression.C @@ -39,13 +39,6 @@ namespace functionObjects // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -bool Foam::functionObjects::fieldExpression::calc() -{ - NotImplemented; - return false; -} - - void Foam::functionObjects::fieldExpression::setResultName ( const word& typeName, @@ -122,7 +115,7 @@ bool Foam::functionObjects::fieldExpression::execute() { Warning << " functionObjects::" << type() << " " << name() - << " cannot find required field " << fieldName_ << endl; + << " failed to execute." << endl; // Clear the result field from the objectRegistry if present clear(); diff --git a/src/functionObjects/field/fieldExpression/fieldExpression.H b/src/functionObjects/field/fieldExpression/fieldExpression.H index 56cd540469df258844b494ca28f4c32a7cee326d..0ae69f8aecceeae105e7dd749c13150b3ecfc71d 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpression.H +++ b/src/functionObjects/field/fieldExpression/fieldExpression.H @@ -72,10 +72,13 @@ protected: // Protected member functions - virtual bool calc(); + virtual bool calc() = 0; void setResultName(const word& typeName, const word& defaultArg); + template<class Type> + bool foundObject(const word& name); + private: @@ -134,6 +137,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository + #include "fieldExpressionTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..442834b6e5d68f9d8196035dbf9729db58e10280 --- /dev/null +++ b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "fieldExpression.H" + +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +template<class Type> +bool Foam::functionObjects::fieldExpression::foundObject +( + const word& name +) +{ + if (fvMeshFunctionObject::foundObject<Type>(name)) + { + return true; + } + else + { + Warning + << " functionObjects::" << type() << " " << this->name() + << " cannot find required object " << name << " of type " + << Type::typeName << endl; + + return false; + } +} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/fieldMinMax/fieldMinMax.C b/src/functionObjects/field/fieldMinMax/fieldMinMax.C index c2f6b643a6333f72891d7a480bc2179dded645a0..491b05fb61f183bfde807f2f0e47a2f611ddfdb6 100644 --- a/src/functionObjects/field/fieldMinMax/fieldMinMax.C +++ b/src/functionObjects/field/fieldMinMax/fieldMinMax.C @@ -52,7 +52,7 @@ const Foam::NamedEnum > Foam::functionObjects::fieldMinMax::modeTypeNames_; -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::functionObjects::fieldMinMax::writeFileHeader(Ostream& os) const { diff --git a/src/functionObjects/field/fieldMinMax/fieldMinMax.H b/src/functionObjects/field/fieldMinMax/fieldMinMax.H index 5196740be89be028fe712ad6474c3493cc6ce216..86d61d0d09963aaeb07b3b3a2deab6ea138a36eb 100644 --- a/src/functionObjects/field/fieldMinMax/fieldMinMax.H +++ b/src/functionObjects/field/fieldMinMax/fieldMinMax.H @@ -28,7 +28,7 @@ Group grpFieldFunctionObjects Description - Calculates the value and location of scalar minimim and maximum for a list + Calculates the value and location of scalar minimum and maximum for a list of user-specified fields. For variables with a rank greater than zero, either the min/max of a @@ -127,7 +127,7 @@ protected: wordList fieldSet_; - // Private Member Functions + // Protected Member Functions //- Helper function to write the output template<class Type> diff --git a/src/functionObjects/field/fieldValues/fieldValue/fieldValue.C b/src/functionObjects/field/fieldValues/fieldValue/fieldValue.C index 42f57bb9f718e1ba3a3783691ef82c76cbea9f67..4ebe86bb24b422affbeb238acceb6624e0e013f1 100644 --- a/src/functionObjects/field/fieldValues/fieldValue/fieldValue.C +++ b/src/functionObjects/field/fieldValues/fieldValue/fieldValue.C @@ -97,7 +97,7 @@ bool Foam::functionObjects::fieldValue::read(const dictionary& dict) dict.lookup("fields") >> fields_; dict.lookup("writeFields") >> writeFields_; - dict.readIfPresent("scaleFactor", scaleFactor_); + scaleFactor_ = dict.lookupOrDefault<scalar>("scaleFactor", 1.0); return true; } diff --git a/src/functionObjects/field/fieldValues/fieldValue/fieldValue.H b/src/functionObjects/field/fieldValues/fieldValue/fieldValue.H index 6278eea50a7466d31c7b77a25ce4fe03e1f58aea..823363316a30d3ee90344987bb794ceceef67526 100644 --- a/src/functionObjects/field/fieldValues/fieldValue/fieldValue.H +++ b/src/functionObjects/field/fieldValues/fieldValue/fieldValue.H @@ -70,7 +70,7 @@ protected: // Protected data - //- Optional scale value + //- Optional scaling factor scalar scaleFactor_; //- Construction dictionary diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C index 578cf6884bd1be5d5ca673270268091eac4706a8..baa86b3157bfb865a6dbd3548f50e139653d219d 100644 --- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C +++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C @@ -64,7 +64,7 @@ template<> const char* Foam::NamedEnum < Foam::functionObjects::fieldValues::surfaceFieldValue::operationType, - 15 + 16 >::names[] = { "none", @@ -77,6 +77,7 @@ const char* Foam::NamedEnum "areaAverage", "weightedAreaAverage", "areaIntegrate", + "weightedAreaIntegrate", "min", "max", "CoV", @@ -93,11 +94,11 @@ const Foam::NamedEnum const Foam::NamedEnum < Foam::functionObjects::fieldValues::surfaceFieldValue::operationType, - 15 + 16 > Foam::functionObjects::fieldValues::surfaceFieldValue::operationTypeNames_; -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::functionObjects::fieldValues::surfaceFieldValue::setFaceZoneFaces() { diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H index b34a9b6544f21aafa7522fc473ef76fe824b340b..8f39f204c4a3c41a02f9eacd1819bb671b45d833 100644 --- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H +++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H @@ -109,14 +109,15 @@ Usage sumDirectionBalance | sum of balance of values in given direction average | ensemble average weightedAverage | weighted average - areaAverage | area weighted average + areaAverage | area-weighted average weightedAreaAverage | weighted area average areaIntegrate | area integral + weightedAreaIntegrate | weighted area integral min | minimum max | maximum CoV | coefficient of variation: standard deviation/mean - areaNormalAverage| area weighted average in face normal direction - areaNormalIntegrate | area weighted integral in face normal directon + areaNormalAverage| area-weighted average in face normal direction + areaNormalIntegrate | area-weighted integral in face normal directon \endplaintable Note @@ -210,6 +211,7 @@ public: opAreaAverage, //!< Area average opWeightedAreaAverage, //!< Weighted area average opAreaIntegrate, //!< Area integral + opWeightedAreaIntegrate, //!< Weighted area integral opMin, //!< Minimum opMax, //!< Maximum opCoV, //!< Coefficient of variation @@ -218,7 +220,7 @@ public: }; //- Operation type names - static const NamedEnum<operationType, 15> operationTypeNames_; + static const NamedEnum<operationType, 16> operationTypeNames_; private: diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C index 5272714d95781c3a10710c061248aafafd0b44bc..5c76bc055bd525d8b892d567be5aed94bd697b4e 100644 --- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C +++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C @@ -176,10 +176,9 @@ processSameTypeValues } case opWeightedAverage: { - label wSize = returnReduce(weightField.size(), sumOp<label>()); - - if (wSize > 0) + if (returnReduce(weightField.size(), sumOp<label>())) { + // has weights result = gSum(weightField*values)/(gSum(weightField) + ROOTVSMALL); } @@ -192,31 +191,40 @@ processSameTypeValues } case opAreaAverage: { - const scalarField magSf(mag(Sf)); + const scalarField factor(mag(Sf)); - result = gSum(magSf*values)/gSum(magSf); + result = gSum(factor*values)/gSum(factor); break; } case opWeightedAreaAverage: { - const scalarField magSf(mag(Sf)); - label wSize = returnReduce(weightField.size(), sumOp<label>()); - - if (wSize > 0) - { - result = gSum(weightField*magSf*values)/gSum(magSf*weightField); - } - else - { - result = gSum(magSf*values)/gSum(magSf); - } + const scalarField factor + ( + returnReduce(weightField.size(), sumOp<label>()) // has weights + ? weightField*mag(Sf) + : mag(Sf) + ); + + result = gSum(factor*values)/gSum(factor); break; } case opAreaIntegrate: { - const scalarField magSf(mag(Sf)); + const scalarField factor(mag(Sf)); - result = gSum(magSf*values); + result = gSum(factor*values); + break; + } + case opWeightedAreaIntegrate: + { + const scalarField factor + ( + returnReduce(weightField.size(), sumOp<label>()) // has weights + ? weightField*mag(Sf) + : mag(Sf) + ); + + result = gSum(factor*values); break; } case opMin: diff --git a/src/functionObjects/field/fieldsExpression/fieldsExpression.C b/src/functionObjects/field/fieldsExpression/fieldsExpression.C new file mode 100644 index 0000000000000000000000000000000000000000..482c1aa932e641fc525ea4cb9edaf1a3ccca2750 --- /dev/null +++ b/src/functionObjects/field/fieldsExpression/fieldsExpression.C @@ -0,0 +1,158 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "fieldsExpression.H" +#include "dictionary.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + defineTypeNameAndDebug(fieldsExpression, 0); +} +} + + +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +void Foam::functionObjects::fieldsExpression::setResultName +( + const word& typeName, + const wordList& defaultArgs +) +{ + if (fieldNames_.empty()) + { + fieldNames_ = defaultArgs; + } + + if (resultName_.empty()) + { + if (!fieldNames_.empty()) + { + resultName_ = typeName + '(' + fieldNames_[0]; + for (label i=1; i<fieldNames_.size(); i++) + { + resultName_ += ',' + fieldNames_[i]; + } + resultName_ += ')'; + } + else + { + resultName_ = typeName; + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionObjects::fieldsExpression::fieldsExpression +( + const word& name, + const Time& runTime, + const dictionary& dict, + const wordList& fieldNames, + const word& resultName +) +: + fvMeshFunctionObject(name, runTime, dict), + fieldNames_(fieldNames), + resultName_(resultName) +{ + read(dict); + + if (fieldNames_.size() < 2) + { + FatalIOErrorInFunction(dict) + << "functionObject::" << type() << " " << name + << " requires at least 2 fields only " + << fieldNames_.size() << " provided: " << fieldNames_ + << exit(FatalIOError); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::functionObjects::fieldsExpression::~fieldsExpression() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::functionObjects::fieldsExpression::read(const dictionary& dict) +{ + fvMeshFunctionObject::read(dict); + + if (fieldNames_.empty() || dict.found("fields")) + { + dict.lookup("fields") >> fieldNames_; + } + + if (dict.found("result")) + { + dict.lookup("result") >> resultName_; + } + + return true; +} + + +bool Foam::functionObjects::fieldsExpression::execute() +{ + if (!calc()) + { + Warning + << " functionObjects::" << type() << " " << name() + << " cannot find required fields " << fieldNames_ << endl; + + // Clear the result fields from the objectRegistry if present + clear(); + + return false; + } + else + { + return true; + } +} + + +bool Foam::functionObjects::fieldsExpression::write() +{ + return writeObject(resultName_); +} + + +bool Foam::functionObjects::fieldsExpression::clear() +{ + return clearObject(resultName_); +} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/fieldsExpression/fieldsExpression.H b/src/functionObjects/field/fieldsExpression/fieldsExpression.H new file mode 100644 index 0000000000000000000000000000000000000000..da99ee331eac30de3efd88647012e831fe550456 --- /dev/null +++ b/src/functionObjects/field/fieldsExpression/fieldsExpression.H @@ -0,0 +1,162 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::functionObjects::fieldsExpression + +Group + grpFieldFunctionObjects + +Description + +See also + Foam::functionObjects::fvMeshFunctionObject + +SourceFiles + fieldsExpression.C + +\*---------------------------------------------------------------------------*/ + +#ifndef functionObjects_fieldsExpression_H +#define functionObjects_fieldsExpression_H + +#include "fvMeshFunctionObject.H" +#include "volFieldsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + +/*---------------------------------------------------------------------------*\ + Class fieldsExpression Declaration +\*---------------------------------------------------------------------------*/ + +class fieldsExpression +: + public fvMeshFunctionObject +{ +protected: + + // Protected member data + + //- Names of fields to process + wordList fieldNames_; + + //- Name of result fields + word resultName_; + + + // Protected member functions + + void setResultName + ( + const word& typeName, + const wordList& defaultArg = wordList::null() + ); + + //- Call 'calcFieldType' for the given functionObject + // for 'volField' and 'surfaceField' field types + template<class Type, class FOType> + bool calcFieldTypes(FOType& fo); + + //- Call 'calcFieldTypes' for the given 'Type' and functionObject + template<class Type, class FOType> + bool calcType(FOType& fo); + + //- Call 'calcType' for the given functionObject + // for each primitive type + template<class FOType> + bool calcAllTypes(FOType& fo); + + virtual bool calc() = 0; + + +private: + + // Private Member Functions + + //- Disallow default bitwise copy construct + fieldsExpression(const fieldsExpression&); + + //- Disallow default bitwise assignment + void operator=(const fieldsExpression&); + + +public: + + //- Runtime type information + TypeName("fieldsExpression"); + + + // Constructors + + //- Construct from Time and dictionary + fieldsExpression + ( + const word& name, + const Time& runTime, + const dictionary& dict, + const wordList& fieldNames = wordList::null(), + const word& resultName = word::null + ); + + + //- Destructor + virtual ~fieldsExpression(); + + + // Member Functions + + //- Read the fieldsExpression data + virtual bool read(const dictionary&); + + //- Calculate the result fields + virtual bool execute(); + + //- Write the result fields + virtual bool write(); + + //- Clear the result fields from the objectRegistry + virtual bool clear(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace functionObjects +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "fieldsExpressionTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/functionObjects/field/fieldsExpression/fieldsExpressionTemplates.C b/src/functionObjects/field/fieldsExpression/fieldsExpressionTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..b9b3be11359d67230518659125f9575756f93507 --- /dev/null +++ b/src/functionObjects/field/fieldsExpression/fieldsExpressionTemplates.C @@ -0,0 +1,82 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "volFields.H" +#include "surfaceFields.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class Type, class FOType> +bool Foam::functionObjects::fieldsExpression::calcFieldTypes(FOType& fo) +{ + typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType; + typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; + + if (foundObject<VolFieldType>(fieldNames_[0])) + { + return store + ( + resultName_, + fo.template calcFieldType<VolFieldType>() + ); + } + else if (foundObject<SurfaceFieldType>(fieldNames_[0])) + { + return store + ( + resultName_, + fo.template calcFieldType<SurfaceFieldType>() + ); + } + else + { + return false; + } +} + + +template<class Type, class FOType> +bool Foam::functionObjects::fieldsExpression::calcType(FOType& fo) +{ + return calcFieldTypes<Type>(fo); +} + + +template<class FOType> +bool Foam::functionObjects::fieldsExpression::calcAllTypes(FOType& fo) +{ + bool processed = false; + + processed = processed || fo.template calcType<scalar>(fo); + processed = processed || fo.template calcType<vector>(fo); + processed = processed || fo.template calcType<sphericalTensor>(fo); + processed = processed || fo.template calcType<symmTensor>(fo); + processed = processed || fo.template calcType<tensor>(fo); + + return processed; +} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/fluxSummary/fluxSummary.C b/src/functionObjects/field/fluxSummary/fluxSummary.C index cfe7a3e18c2beefe6e6b7192ba7d57b80bc02b85..dc403701a4a160b43f3b69507e1867a0d65de62a 100644 --- a/src/functionObjects/field/fluxSummary/fluxSummary.C +++ b/src/functionObjects/field/fluxSummary/fluxSummary.C @@ -79,21 +79,19 @@ void Foam::functionObjects::fluxSummary::initialiseFaceZone DynamicList<List<scalar>>& faceSign ) const { - const fvMesh& mesh = refCast<const fvMesh>(obr_); - - label zonei = mesh.faceZones().findZoneID(faceZoneName); + label zonei = mesh_.faceZones().findZoneID(faceZoneName); if (zonei == -1) { FatalErrorInFunction << "Unable to find faceZone " << faceZoneName - << ". Valid faceZones are: " << mesh.faceZones().names() + << ". Valid faceZones are: " << mesh_.faceZones().names() << exit(FatalError); } faceZoneNames.append(faceZoneName); - const faceZone& fZone = mesh.faceZones()[zonei]; + const faceZone& fZone = mesh_.faceZones()[zonei]; DynamicList<label> faceIDs(fZone.size()); DynamicList<label> facePatchIDs(fZone.size()); @@ -105,15 +103,15 @@ void Foam::functionObjects::fluxSummary::initialiseFaceZone label faceID = -1; label facePatchID = -1; - if (mesh.isInternalFace(facei)) + if (mesh_.isInternalFace(facei)) { faceID = facei; facePatchID = -1; } else { - facePatchID = mesh.boundaryMesh().whichPatch(facei); - const polyPatch& pp = mesh.boundaryMesh()[facePatchID]; + facePatchID = mesh_.boundaryMesh().whichPatch(facei); + const polyPatch& pp = mesh_.boundaryMesh()[facePatchID]; if (isA<coupledPolyPatch>(pp)) { if (refCast<const coupledPolyPatch>(pp).owner()) @@ -170,31 +168,29 @@ void Foam::functionObjects::fluxSummary::initialiseFaceZoneAndDirection DynamicList<List<scalar>>& faceSign ) const { - const fvMesh& mesh = refCast<const fvMesh>(obr_); - vector refDir = dir/(mag(dir) + ROOTVSMALL); - label zonei = mesh.faceZones().findZoneID(faceZoneName); + label zonei = mesh_.faceZones().findZoneID(faceZoneName); if (zonei == -1) { FatalErrorInFunction << "Unable to find faceZone " << faceZoneName - << ". Valid faceZones are: " << mesh.faceZones().names() + << ". Valid faceZones are: " << mesh_.faceZones().names() << exit(FatalError); } faceZoneNames.append(faceZoneName); zoneRefDir.append(refDir); - const faceZone& fZone = mesh.faceZones()[zonei]; + const faceZone& fZone = mesh_.faceZones()[zonei]; DynamicList<label> faceIDs(fZone.size()); DynamicList<label> facePatchIDs(fZone.size()); DynamicList<scalar> faceSigns(fZone.size()); - const surfaceVectorField& Sf = mesh.Sf(); - const surfaceScalarField& magSf = mesh.magSf(); + const surfaceVectorField& Sf = mesh_.Sf(); + const surfaceScalarField& magSf = mesh_.magSf(); vector n(Zero); @@ -204,15 +200,15 @@ void Foam::functionObjects::fluxSummary::initialiseFaceZoneAndDirection label faceID = -1; label facePatchID = -1; - if (mesh.isInternalFace(facei)) + if (mesh_.isInternalFace(facei)) { faceID = facei; facePatchID = -1; } else { - facePatchID = mesh.boundaryMesh().whichPatch(facei); - const polyPatch& pp = mesh.boundaryMesh()[facePatchID]; + facePatchID = mesh_.boundaryMesh().whichPatch(facei); + const polyPatch& pp = mesh_.boundaryMesh()[facePatchID]; if (isA<coupledPolyPatch>(pp)) { if (refCast<const coupledPolyPatch>(pp).owner()) @@ -279,27 +275,25 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection DynamicList<List<scalar>>& faceSign ) const { - const fvMesh& mesh = refCast<const fvMesh>(obr_); - vector refDir = dir/(mag(dir) + ROOTVSMALL); - const label cellZonei = mesh.cellZones().findZoneID(cellZoneName); + const label cellZonei = mesh_.cellZones().findZoneID(cellZoneName); if (cellZonei == -1) { FatalErrorInFunction << "Unable to find cellZone " << cellZoneName - << ". Valid zones are: " << mesh.cellZones().names() + << ". Valid zones are: " << mesh_.cellZones().names() << exit(FatalError); } - const label nInternalFaces = mesh.nInternalFaces(); - const polyBoundaryMesh& pbm = mesh.boundaryMesh(); + const label nInternalFaces = mesh_.nInternalFaces(); + const polyBoundaryMesh& pbm = mesh_.boundaryMesh(); - labelList cellAddr(mesh.nCells(), -1); - const labelList& cellIDs = mesh.cellZones()[cellZonei]; + labelList cellAddr(mesh_.nCells(), -1); + const labelList& cellIDs = mesh_.cellZones()[cellZonei]; UIndirectList<label>(cellAddr, cellIDs) = identity(cellIDs.size()); - labelList nbrFaceCellAddr(mesh.nFaces() - nInternalFaces, -1); + labelList nbrFaceCellAddr(mesh_.nFaces() - nInternalFaces, -1); forAll(pbm, patchi) { @@ -311,17 +305,17 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection { label facei = pp.start() + i; label nbrFacei = facei - nInternalFaces; - label own = mesh.faceOwner()[facei]; + label own = mesh_.faceOwner()[facei]; nbrFaceCellAddr[nbrFacei] = cellAddr[own]; } } } // Correct boundary values for parallel running - syncTools::swapBoundaryFaceList(mesh, nbrFaceCellAddr); + syncTools::swapBoundaryFaceList(mesh_, nbrFaceCellAddr); // Collect faces - DynamicList<label> faceIDs(floor(0.1*mesh.nFaces())); + DynamicList<label> faceIDs(floor(0.1*mesh_.nFaces())); DynamicList<label> facePatchIDs(faceIDs.size()); DynamicList<label> faceLocalPatchIDs(faceIDs.size()); DynamicList<scalar> faceSigns(faceIDs.size()); @@ -329,12 +323,12 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection // Internal faces for (label facei = 0; facei < nInternalFaces; facei++) { - const label own = cellAddr[mesh.faceOwner()[facei]]; - const label nbr = cellAddr[mesh.faceNeighbour()[facei]]; + const label own = cellAddr[mesh_.faceOwner()[facei]]; + const label nbr = cellAddr[mesh_.faceNeighbour()[facei]]; if (((own != -1) && (nbr == -1)) || ((own == -1) && (nbr != -1))) { - vector n = mesh.faces()[facei].normal(mesh.points()); + vector n = mesh_.faces()[facei].normal(mesh_.points()); n /= mag(n) + ROOTVSMALL; if ((n & refDir) > tolerance_) @@ -362,12 +356,12 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection forAll(pp, localFacei) { const label facei = pp.start() + localFacei; - const label own = cellAddr[mesh.faceOwner()[facei]]; + const label own = cellAddr[mesh_.faceOwner()[facei]]; const label nbr = nbrFaceCellAddr[facei - nInternalFaces]; if ((own != -1) && (nbr == -1)) { - vector n = mesh.faces()[facei].normal(mesh.points()); + vector n = mesh_.faces()[facei].normal(mesh_.points()); n /= mag(n) + ROOTVSMALL; if ((n & refDir) > tolerance_) @@ -391,15 +385,15 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection // Convert into primitivePatch for convenience indirectPrimitivePatch patch ( - IndirectList<face>(mesh.faces(), faceIDs), - mesh.points() + IndirectList<face>(mesh_.faces(), faceIDs), + mesh_.points() ); if (debug) { - OBJstream os(mesh.time().path()/"patch.obj"); + OBJstream os(mesh_.time().path()/"patch.obj"); faceList faces(patch); - os.write(faces, mesh.points(), false); + os.write(faces, mesh_.points(), false); } @@ -467,7 +461,7 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection patchEdgeFaceRegion > calc ( - mesh, + mesh_, patch, changedEdges, changedInfo, @@ -524,9 +518,9 @@ void Foam::functionObjects::fluxSummary::initialiseCellZoneAndDirection // Write OBj of faces to file if (debug) { - OBJstream os(mesh.time().path()/zoneName + ".obj"); - faceList faces(mesh.faces(), regionFaceIDs[regioni]); - os.write(faces, mesh.points(), false); + OBJstream os(mesh_.time().path()/zoneName + ".obj"); + faceList faces(mesh_.faces(), regionFaceIDs[regioni]); + os.write(faces, mesh_.points(), false); } } @@ -552,8 +546,7 @@ void Foam::functionObjects::fluxSummary::initialiseFaceArea() { faceArea_.setSize(faceID_.size(), 0); - const fvMesh& mesh = refCast<const fvMesh>(obr_); - const surfaceScalarField& magSf = mesh.magSf(); + const surfaceScalarField& magSf = mesh_.magSf(); forAll(faceID_, zonei) { @@ -623,9 +616,9 @@ bool Foam::functionObjects::fluxSummary::read(const dictionary& dict) writeFile::read(dict); mode_ = modeTypeNames_.read(dict.lookup("mode")); - phiName_= dict.lookupOrDefault<word>("phi", "phi"); - dict.readIfPresent("scaleFactor", scaleFactor_); - dict.readIfPresent("tolerance", tolerance_); + phiName_ = dict.lookupOrDefault<word>("phi", "phi"); + scaleFactor_ = dict.lookupOrDefault<scalar>("scaleFactor", 1.0); + tolerance_ = dict.lookupOrDefault<scalar>("tolerance", 0.8); // Initialise with capacity of 10 faceZones DynamicList<vector> refDir(10); @@ -788,7 +781,7 @@ bool Foam::functionObjects::fluxSummary::write() { const surfaceScalarField& phi = lookupObject<surfaceScalarField>(phiName_); - word flowType = ""; + word flowType; if (phi.dimensions() == dimVolume/dimTime) { flowType = "volumetric"; @@ -801,7 +794,7 @@ bool Foam::functionObjects::fluxSummary::write() { FatalErrorInFunction << "Unsupported flux field " << phi.name() << " with dimensions " - << phi.dimensions() << ". Expected eithe mass flow or volumetric " + << phi.dimensions() << ". Expected either mass flow or volumetric " << "flow rate" << abort(FatalError); } diff --git a/src/functionObjects/field/grad/gradTemplates.C b/src/functionObjects/field/grad/gradTemplates.C index fb505bb8b6f9de218c8445e7d19e8cf595702c12..d1ad033526adcb64e4396f88eb97fc88e66d597d 100644 --- a/src/functionObjects/field/grad/gradTemplates.C +++ b/src/functionObjects/field/grad/gradTemplates.C @@ -39,7 +39,7 @@ bool Foam::functionObjects::grad::calcGrad() ( resultName_, fvc::grad(lookupObject<VolFieldType>(fieldName_)), - true + mesh_.changing() && mesh_.cache(resultName_) ); } else if (foundObject<SurfaceFieldType>(fieldName_)) @@ -48,7 +48,7 @@ bool Foam::functionObjects::grad::calcGrad() ( resultName_, fvc::grad(lookupObject<SurfaceFieldType>(fieldName_)), - true + mesh_.changing() && mesh_.cache(resultName_) ); } else diff --git a/src/functionObjects/field/mapFields/mapFields.H b/src/functionObjects/field/mapFields/mapFields.H index 299a6f5165253b39355bfa1e513db071006d5fde..7fee3cf142d3f51b41023fcf8033af04303a5f67 100644 --- a/src/functionObjects/field/mapFields/mapFields.H +++ b/src/functionObjects/field/mapFields/mapFields.H @@ -50,7 +50,7 @@ Usage \table Property | Description | Required | Default value type | Type name: mapFields | yes | - mapRgion | Name of region to map to | yes | + mapRegion | Name of region to map to | yes | mapMethod | Mapping method | yes | patchMapMethod | Patch mapping method | no | <auto> consistent | Mapping meshes have consistent boundaries | yes | @@ -61,7 +61,6 @@ Usage SourceFiles mapFields.C - IOmapFields.H \*---------------------------------------------------------------------------*/ diff --git a/src/functionObjects/field/nearWallFields/nearWallFields.C b/src/functionObjects/field/nearWallFields/nearWallFields.C index 061aca85e974e041d74c8ed818ccac9c94089305..2744a95919b593b84740ad7934a0aaa602785745 100644 --- a/src/functionObjects/field/nearWallFields/nearWallFields.C +++ b/src/functionObjects/field/nearWallFields/nearWallFields.C @@ -42,7 +42,7 @@ namespace functionObjects } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::functionObjects::nearWallFields::calcAddressing() { diff --git a/src/functionObjects/field/pressure/pressure.C b/src/functionObjects/field/pressure/pressure.C index 4f73902c89c293675a9e5862a013ab5b128f4953..1344041fb0fe2fdd3d32ee2d2ce8389dbb87af8a 100644 --- a/src/functionObjects/field/pressure/pressure.C +++ b/src/functionObjects/field/pressure/pressure.C @@ -232,8 +232,8 @@ bool Foam::functionObjects::pressure::read(const dictionary& dict) { fieldExpression::read(dict); - dict.readIfPresent("U", UName_); - dict.readIfPresent("rho", rhoName_); + UName_ = dict.lookupOrDefault<word>("U", "U"); + rhoName_ = dict.lookupOrDefault<word>("rho", "rho"); if (rhoName_ == "rhoInf") { diff --git a/src/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H b/src/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H index 46b84fd38b1278bd1ce090be2a70eb1d4af7a31c..6a1a6525f6508f3829d507b80ef91f49d2f3ffde 100644 --- a/src/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H +++ b/src/functionObjects/field/regionSizeDistribution/regionSizeDistribution.H @@ -114,8 +114,16 @@ Usage minDiameter | minimum region equivalent diameter | no | 0 setFormat | writing format | yes | origin | origin of local co-ordinate system | yes | - coordinateRoation | orientation of local co-ordinate system | no | + coordinateRoation | orientation of local co-ordinate system | no log | Log to standard output | no | yes + isoPlanes | switch for isoPlanes | no | false + origin | origin of the plane when isoPlanes is used | no | none + direction | direction of the plane when isoPlanes is used | no | none + maxDiameter | maximum diameter of the sampling cylinder when + isoPlanes is used | no | none + nDownstreamBins | number of bins when isoPlanes is used | no | none + maxDownstream | maximum distance from origin when isoPlanes is used + | no | none \endtable See also diff --git a/src/functionObjects/field/subtract/subtract.C b/src/functionObjects/field/subtract/subtract.C new file mode 100644 index 0000000000000000000000000000000000000000..8405fd11fa94a14ba690f05ee78d819323a58a9a --- /dev/null +++ b/src/functionObjects/field/subtract/subtract.C @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "subtract.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + defineTypeNameAndDebug(subtract, 0); + addToRunTimeSelectionTable(functionObject, subtract, dictionary); +} +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +bool Foam::functionObjects::subtract::calc() +{ + return calcAllTypes(*this); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionObjects::subtract::subtract +( + const word& name, + const Time& runTime, + const dictionary& dict +) +: + fieldsExpression(name, runTime, dict) +{ + setResultName("subtract"); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::functionObjects::subtract::~subtract() +{} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/subtract/subtract.H b/src/functionObjects/field/subtract/subtract.H new file mode 100644 index 0000000000000000000000000000000000000000..6fb4aa7fd25ac1c9d743a291468e196f9b93bd81 --- /dev/null +++ b/src/functionObjects/field/subtract/subtract.H @@ -0,0 +1,129 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::functionObjects::subtract + +Group + grpFieldFunctionObjects + +Description + From the first field subtract the remaining fields in the list. + + The operation can be applied to any volume or surface fields generating a + volume or surface scalar field. + + Example of function object specification: + \verbatim + Tdiff + { + type subtract; + libs ("libfieldFunctionObjects.so"); + fields (T Tmean); + result Tdiff; + executeControl writeTime; + writeControl writeTime; + } + \endverbatim + +See also + Foam::functionObjects::fieldsExpression + Foam::functionObjects::fvMeshFunctionObject + +SourceFiles + subtract.C + +\*---------------------------------------------------------------------------*/ + +#ifndef functionObjects_subtract_H +#define functionObjects_subtract_H + +#include "fieldsExpression.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + +/*---------------------------------------------------------------------------*\ + Class subtract Declaration +\*---------------------------------------------------------------------------*/ + +class subtract +: + public fieldsExpression +{ + // Private Member Functions + + //- Subtract the list of fields of the specified type + // and return the result + template<class GeoFieldType> + tmp<GeoFieldType> calcFieldType() const; + + //- Subtract the list of fields and return true if successful + virtual bool calc(); + + +public: + + friend class fieldsExpression; + + + //- Runtime type information + TypeName("subtract"); + + + // Constructors + + //- Construct from Time and dictionary + subtract + ( + const word& name, + const Time& runTime, + const dictionary& dict + ); + + + //- Destructor + virtual ~subtract(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace functionObjects +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "subtractTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/functionObjects/field/subtract/subtractTemplates.C b/src/functionObjects/field/subtract/subtractTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..07aee1e98c8c89fd5ee14f943ed08fea066a31cd --- /dev/null +++ b/src/functionObjects/field/subtract/subtractTemplates.C @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class GeoFieldType> +Foam::tmp<GeoFieldType> +Foam::functionObjects::subtract::calcFieldType() const +{ + tmp<GeoFieldType> tresult + ( + lookupObject<GeoFieldType>(fieldNames_[0]) + - lookupObject<GeoFieldType>(fieldNames_[1]) + ); + + for (label i=2; i<fieldNames_.size(); i++) + { + tresult.ref() -= lookupObject<GeoFieldType>(fieldNames_[i]); + } + + return tresult; +} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/valueAverage/valueAverage.H b/src/functionObjects/field/valueAverage/valueAverage.H index ecb9ebe5f21e164ee447f9c0de6f0d01d1968ee6..83cf3ed170eb1e04aef0f36e19bddb8aa6368408 100644 --- a/src/functionObjects/field/valueAverage/valueAverage.H +++ b/src/functionObjects/field/valueAverage/valueAverage.H @@ -95,7 +95,7 @@ protected: // Protected data - //- Name of function object to retrueve data from + //- Name of function object to retrieve data from word functionObjectName_; //- List of fields on which to operate diff --git a/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C b/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C index 1a36431ff3721b6a69db120c215b4e6c359eada9..f27d8603222ae1aa7ee7e93e5eea4f99e159bd93 100644 --- a/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C +++ b/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C @@ -33,7 +33,7 @@ const std::size_t Foam::wallBoundedParticle::sizeofFields_ ); -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // Foam::edge Foam::wallBoundedParticle::currentEdge() const { diff --git a/src/functionObjects/field/zeroGradient/zeroGradient.C b/src/functionObjects/field/zeroGradient/zeroGradient.C index 53d41c23f89e0c08f18be6a57f44d2470788a8c8..ff07607652bf19fa5f3dab52c6dc2d5841998d8b 100644 --- a/src/functionObjects/field/zeroGradient/zeroGradient.C +++ b/src/functionObjects/field/zeroGradient/zeroGradient.C @@ -100,7 +100,6 @@ Foam::functionObjects::zeroGradient::zeroGradient ) : fvMeshFunctionObject(name, runTime, dict), - prevTimeIndex_(-1), selectFields_(), resultName_(string::null), results_() @@ -175,20 +174,12 @@ bool Foam::functionObjects::zeroGradient::execute() << "Unprocessed field " << ignored << endl; } - // Update time index - prevTimeIndex_ = obr_.time().timeIndex(); - return true; } bool Foam::functionObjects::zeroGradient::write() { - if (prevTimeIndex_ < obr_.time().timeIndex()) - { - // Ensure written results reflect the current state - execute(); - } if (results_.size()) { Log << type() << ' ' << name() << " write:" << endl; diff --git a/src/functionObjects/field/zeroGradient/zeroGradient.H b/src/functionObjects/field/zeroGradient/zeroGradient.H index e4eb1c75b3dcaf2cf3381d9c8bb2f2678007e6ec..84243608243737ecb27b8735d2be2e19e84f1d43 100644 --- a/src/functionObjects/field/zeroGradient/zeroGradient.H +++ b/src/functionObjects/field/zeroGradient/zeroGradient.H @@ -95,9 +95,6 @@ class zeroGradient { // Private data - //- Time at last execute, ensures write uses up-to-date values - label prevTimeIndex_; - //- Name of fields to process wordReList selectFields_; diff --git a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C index 221f1fea638885b5c35016faefa947426415abda..f4abd527f7e957ba462250c62cf91a9dcb715398 100644 --- a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C +++ b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C @@ -256,8 +256,6 @@ bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict) if (writeFields_) { - const fvMesh& mesh = refCast<const fvMesh>(obr_); - volVectorField* forceCoeffPtr ( new volVectorField @@ -265,12 +263,12 @@ bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict) IOobject ( fieldName("forceCoeff"), - mesh.time().timeName(), - mesh, + mesh_.time().timeName(), + mesh_, IOobject::NO_READ, IOobject::NO_WRITE ), - mesh, + mesh_, dimensionedVector("0", dimless, Zero) ) ); @@ -284,12 +282,12 @@ bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict) IOobject ( fieldName("momentCoeff"), - mesh.time().timeName(), - mesh, + mesh_.time().timeName(), + mesh_, IOobject::NO_READ, IOobject::NO_WRITE ), - mesh, + mesh_, dimensionedVector("0", dimless, Zero) ) ); diff --git a/src/functionObjects/graphics/runTimePostProcessing/Allwmake b/src/functionObjects/graphics/runTimePostProcessing/Allwmake index 277a8c394f6f36ad02f89b0bab074c3f8121925e..9538323521da100a8679713d8eb5b7261fa33254 100755 --- a/src/functionObjects/graphics/runTimePostProcessing/Allwmake +++ b/src/functionObjects/graphics/runTimePostProcessing/Allwmake @@ -4,37 +4,58 @@ cd ${0%/*} || exit 1 # Run from this directory # Source the wmake functions . $WM_DIR/scripts/wmakeFunctions -# The source directory -sourceDir=$PWD - -# Where are any generated files stored? -findObjectDir $sourceDir -depDir="$objectsDir" +# Ensure CMake gets the correct C/C++ compilers +[ -n "$WM_CC" ] && export CC="$WM_CC" +[ -n "$WM_CXX" ] && export CXX="$WM_CXX" echo echo "======================================================================" echo "${PWD##*/} : $PWD" echo + +# CMake into objectsDir, +# with an additional attempt if (possibly incorrect) CMakeCache.txt existed +doCmake() +{ + local sourceDir="$1" + + findObjectDir $sourceDir # Where are generated files stored? + test -f "$objectsDir/CMakeCache.txt" + retry=$? # CMakeCache.txt exists, but sources may have moved + + mkdir -p $objectsDir && \ + ( + cd $objectsDir || exit 1 + + cmake $sourceDir || { + if [ $retry -eq 0 ] + then + echo "Removing CMakeCache.txt and attempt again" + rm -f CMakeCache.txt + cmake $sourceDir + else + exit 1 + fi + } && make + ) +} + + if [ -d "$VTK_DIR" -o -d "$ParaView_DIR" ] then - # ensure CMake gets the correct C/C++ compilers - [ -n "$WM_CC" ] && export CC="$WM_CC" - [ -n "$WM_CXX" ] && export CXX="$WM_CXX" - - if type cmake > /dev/null 2>&1 + if [ "$targetType" != objects ] then - ( - mkdir -p $depDir \ - && cd $depDir \ - && cmake $sourceDir \ - && make - ) || { - echo - echo "WARNING: incomplete build of VTK-based post-processing" - } - else - echo "WARNING: skipped - needs cmake" + if type cmake > /dev/null 2>&1 + then + doCmake $PWD || { + echo + echo " WARNING: incomplete build of VTK-based post-processing" + echo + } + else + echo "WARNING: skipped - needs cmake" + fi fi else echo "WARNING: skipped - needs a VTK or a ParaView installation" @@ -45,4 +66,4 @@ fi echo "======================================================================" echo -# ----------------------------------------------------------------- end-of-file +# ----------------------------------------------------------------------------- diff --git a/src/functionObjects/graphics/runTimePostProcessing/scene.C b/src/functionObjects/graphics/runTimePostProcessing/scene.C index 43cd38be48301312e69ed0c4fe4892a2c1831fff..4af8b0d0e83f119a19afdc3ac68df3a1546c6209 100644 --- a/src/functionObjects/graphics/runTimePostProcessing/scene.C +++ b/src/functionObjects/graphics/runTimePostProcessing/scene.C @@ -38,28 +38,6 @@ License #include "vtkRenderWindow.h" #include "vtkWindowToImageFilter.h" -// * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * // - -namespace Foam -{ - template<> - const char* NamedEnum - < - functionObjects::runTimePostPro::scene::modeType, - 2 - >::names[] = - { - "static", - "flightPath" - }; -} - -const Foam::NamedEnum -< - Foam::functionObjects::runTimePostPro::scene::modeType, - 2 -> modeTypeNames_; - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -92,9 +70,6 @@ void Foam::functionObjects::runTimePostPro::scene::readCamera } } - - dict.lookup("parallelProjection") >> parallelProjection_; - if (nFrameTotal_ > 1) { scalar endPosition = dict.lookupOrDefault<scalar>("endPosition", 1); @@ -107,60 +82,36 @@ void Foam::functionObjects::runTimePostPro::scene::readCamera dPosition_ = (endPosition - startPosition_)/scalar(nFrameTotal_ - 1); } - mode_ = modeTypeNames_.read(dict.lookup("mode")); - - word coeffsName = modeTypeNames_[mode_] + word("Coeffs"); - const dictionary& coeffs = dict.subDict(coeffsName); + cameraPosition_ = Function1<vector>::New("position", dict); + cameraFocalPoint_ = Function1<point>::New("focalPoint", dict); + cameraUp_ = Function1<vector>::New("up", dict); - switch (mode_) + dict.readIfPresent("clipBox", clipBox_); + dict.lookup("parallelProjection") >> parallelProjection_; + if (!parallelProjection_) { - case mtStatic: + if (dict.found("viewAngle")) { - clipBox_ = boundBox(coeffs.lookup("clipBox")); - const vector lookDir(vector(coeffs.lookup("lookDir"))); - cameraPosition_.reset - ( - new Function1Types::Constant<point>("position", -lookDir) - ); - const vector focalPoint(coeffs.lookup("focalPoint")); - cameraFocalPoint_.reset - ( - new Function1Types::Constant<point>("focalPoint", focalPoint) - ); - const vector up(coeffs.lookup("up")); - cameraUp_.reset(new Function1Types::Constant<point>("up", up)); - break; + cameraViewAngle_ = Function1<scalar>::New("viewAngle", dict); } - case mtFlightPath: + else { - cameraPosition_.reset - ( - Function1<vector>::New("position", coeffs).ptr() - ); - cameraFocalPoint_.reset + cameraViewAngle_.reset ( - Function1<point>::New("focalPoint", coeffs).ptr() + new Function1Types::Constant<scalar>("viewAngle", 35.0) ); - cameraUp_.reset(Function1<vector>::New("up", coeffs).ptr()); - break; - } - default: - { - FatalErrorInFunction - << "Unhandled enumeration " << modeTypeNames_[mode_] - << abort(FatalError); } } - if (dict.found("viewAngle")) + if (dict.found("zoom")) { - cameraViewAngle_.reset(Function1<scalar>::New("viewAngle", dict).ptr()); + cameraZoom_ = Function1<scalar>::New("zoom", dict); } else { - cameraViewAngle_.reset + cameraZoom_.reset ( - new Function1Types::Constant<scalar>("viewAngle", 35.0) + new Function1Types::Constant<scalar>("zoom", 1.0) ); } } @@ -224,25 +175,11 @@ void Foam::functionObjects::runTimePostPro::scene::initialise camera->SetParallelProjection(parallelProjection_); renderer->SetActiveCamera(camera); - - // Initialise the camera - const vector up = cameraUp_->value(position_); - const vector pos = cameraPosition_->value(position_); - const point focalPoint = cameraFocalPoint_->value(position_); - - camera->SetViewUp(up.x(), up.y(), up.z()); - camera->SetPosition(pos.x(), pos.y(), pos.z()); - camera->SetFocalPoint(focalPoint.x(), focalPoint.y(), focalPoint.z()); - camera->Modified(); - - // Add the lights vtkSmartPointer<vtkLightKit> lightKit = vtkSmartPointer<vtkLightKit>::New(); lightKit->AddLightsToRenderer(renderer); - - // For static mode initialise the clip box - if (mode_ == mtStatic) + if (clipBox_ != boundBox::greatBox) { const point& min = clipBox_.min(); const point& max = clipBox_.max(); @@ -261,15 +198,10 @@ void Foam::functionObjects::runTimePostPro::scene::initialise vtkSmartPointer<vtkPolyDataMapper>::New(); clipMapper->SetInputConnection(clipBox->GetOutputPort()); - vtkSmartPointer<vtkActor> clipActor = vtkSmartPointer<vtkActor>::New(); - clipActor->SetMapper(clipMapper); - clipActor->VisibilityOff(); - renderer->AddActor(clipActor); - - // Call resetCamera to fit clip box in view - clipActor->VisibilityOn(); - renderer->ResetCamera(); - clipActor->VisibilityOff(); + clipBoxActor_ = vtkSmartPointer<vtkActor>::New(); + clipBoxActor_->SetMapper(clipMapper); + clipBoxActor_->VisibilityOff(); + renderer->AddActor(clipBoxActor_); } } @@ -279,26 +211,44 @@ void Foam::functionObjects::runTimePostPro::scene::setCamera vtkRenderer* renderer ) const { - if (mode_ == mtFlightPath) + vtkCamera* camera = renderer->GetActiveCamera(); + + if (parallelProjection_) { - const vector up = cameraUp_->value(position_); - const vector pos = cameraPosition_->value(position_); - const point focalPoint = cameraFocalPoint_->value(position_); - - vtkCamera* camera = renderer->GetActiveCamera(); - camera->SetViewUp(up.x(), up.y(), up.z()); - camera->SetPosition(pos.x(), pos.y(), pos.z()); - camera->SetFocalPoint(focalPoint.x(), focalPoint.y(), focalPoint.z()); - camera->Modified(); + // Restore parallel scale to allow application of zoom (later) + camera->SetParallelScale(1); } - - if (!parallelProjection_) + else { // Restore viewAngle (it might be reset by clipping) - vtkCamera* camera = renderer->GetActiveCamera(); camera->SetViewAngle(cameraViewAngle_->value(position_)); - camera->Modified(); } + + const vector up = cameraUp_->value(position_); + const vector pos = cameraPosition_->value(position_); + const point focalPoint = cameraFocalPoint_->value(position_); + const scalar zoom = cameraZoom_->value(position_); + + camera->SetViewUp(up.x(), up.y(), up.z()); + camera->SetPosition(pos.x(), pos.y(), pos.z()); + camera->SetFocalPoint(focalPoint.x(), focalPoint.y(), focalPoint.z()); + + + // Apply clipping if required + // Note: possible optimisation - if the camera is static, this only needs + // to be done once on initialisation + if (clipBox_ != boundBox::greatBox) + { + // Call ResetCamera() to fit clip box in view + clipBoxActor_->VisibilityOn(); + renderer->ResetCamera(); + clipBoxActor_->VisibilityOff(); + } + + // Zoom applied after all other operations + camera->Zoom(zoom); + + camera->Modified(); } @@ -323,12 +273,13 @@ Foam::functionObjects::runTimePostPro::scene::scene obr_(obr), name_(name), colours_(), - mode_(mtStatic), cameraPosition_(nullptr), cameraFocalPoint_(nullptr), cameraUp_(nullptr), cameraViewAngle_(nullptr), - clipBox_(), + cameraZoom_(nullptr), + clipBox_(boundBox::greatBox), + clipBoxActor_(), parallelProjection_(true), nFrameTotal_(1), startPosition_(0), @@ -366,7 +317,10 @@ Foam::scalar Foam::functionObjects::runTimePostPro::scene::position() const } -void Foam::functionObjects::runTimePostPro::scene::read(const dictionary& dict) +void Foam::functionObjects::runTimePostPro::scene::read +( + const dictionary& dict +) { readCamera(dict.subDict("camera")); readColours(dict.subDict("colours")); diff --git a/src/functionObjects/graphics/runTimePostProcessing/scene.H b/src/functionObjects/graphics/runTimePostProcessing/scene.H index 9fd4ab8ebc7f6ee10e5c288150d176d69e48ffab..e2f5d87e1226d88ec02a8ca140b289eee98178df 100644 --- a/src/functionObjects/graphics/runTimePostProcessing/scene.H +++ b/src/functionObjects/graphics/runTimePostProcessing/scene.H @@ -25,6 +25,28 @@ Class Foam::functionObjects::runTimePostPro::scene Description + Class to control scene construction and provide main rendering loop + +Usage + \verbatim + camera + { + // Total number of frames to generate + nFrameTotal 1; + + // Parallel projection flag + parallelProjection no; + + focalPoint (0 0 0); + up (0 1 0); + position (0 0 1); + + // Optional entries + clipBox (-0.0206 -0.0254 -0.0005) (0.29 0.0254 0.0005); + viewAngle 20; + zoom 1.1; + } + \endverbatim SourceFiles scene.C @@ -49,6 +71,7 @@ SourceFiles // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +class vtkActor; class vtkRenderer; class vtkRenderWindow; @@ -58,22 +81,12 @@ namespace functionObjects { namespace runTimePostPro { - /*---------------------------------------------------------------------------*\ Class scene Declaration \*---------------------------------------------------------------------------*/ class scene { -public: - - enum modeType{mtStatic, mtFlightPath}; - - NamedEnum<modeType, 2> modeTypeNames_; - - -private: - // Private data //- Reference to the object registry @@ -88,7 +101,7 @@ private: //- Read camera properties void readCamera(const dictionary& dict); - //- Read solour properties + //- Read colour properties void readColours(const dictionary& dict); //- Disallow default bitwise copy construct @@ -108,9 +121,6 @@ protected: // Camera settings - //- Mode - modeType mode_; - //- Position autoPtr<Function1<point>> cameraPosition_; @@ -123,12 +133,20 @@ protected: //- View angle autoPtr<Function1<scalar>> cameraViewAngle_; + //- Zoom: 1 = do nothing, >1 = zoom in, <1 = zoom out + // - perspective mode: reduces view angle + // - parallel mode: manipulate parallel scale + autoPtr<Function1<scalar>> cameraZoom_; + // Scene management //- Clipping box boundBox clipBox_; + //- Clipping box actor + vtkSmartPointer<vtkActor> clipBoxActor_; + //- Parallel projection flag bool parallelProjection_; diff --git a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C index 29c98a9126b94a98d5c1ff31cf6c0e00a8e87336..df771eb9bbde374e297c2ace61a3dcb20354d6cd 100644 --- a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C +++ b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C @@ -50,7 +50,7 @@ namespace functionObjects } } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::functionObjects::codedFunctionObject::prepare ( diff --git a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H index cb8b76feb0eefeb2089db0f079d075045119165c..f11c43d4b430c6caa9cbfef8f0452c7a980ab379 100644 --- a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H +++ b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H @@ -56,12 +56,11 @@ Usage // Lookup U const volVectorField& U = mesh().lookupObject<volVectorField>("U"); // Write - mag(U).write(); - } + mag(U)().write(); + #};" } \endverbatim - See also Foam::functionObject Foam::codedBase diff --git a/src/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C b/src/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C index 640fb58d103aefb545140843697c98872c00a6ea..8dc18591c65c6425f51e888de80d71cec5103022 100644 --- a/src/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C +++ b/src/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C @@ -65,7 +65,9 @@ void Foam::functionObjects::timeActivatedFileUpdate::updateFile() Log << nl << type() << ": copying file" << nl << timeVsFile_[i].second() << nl << "to:" << nl << fileToUpdate_ << nl << endl; - cp(timeVsFile_[i].second(), fileToUpdate_); + fileName destFile(fileToUpdate_ + Foam::name(pid())); + cp(timeVsFile_[i].second(), destFile); + mv(destFile, fileToUpdate_); lastIndex_ = i; } } diff --git a/src/fvAgglomerationMethods/Allwmake b/src/fvAgglomerationMethods/Allwmake index aac219e3378d9ed54414df041c9d8d21dd1b0c78..dcef4328c21f652e15f5793cb48fc400a22e364d 100755 --- a/src/fvAgglomerationMethods/Allwmake +++ b/src/fvAgglomerationMethods/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x export ParMGridGen=$WM_THIRD_PARTY_DIR/ParMGridGen-1.0 diff --git a/src/fvMotionSolver/Make/files b/src/fvMotionSolver/Make/files index 19475e258b45772839a59aa3e15702d19f8418cf..3f43482922a1ad685cd98df9c8b7766c1a633fcc 100644 --- a/src/fvMotionSolver/Make/files +++ b/src/fvMotionSolver/Make/files @@ -1,10 +1,8 @@ -fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.C +fvMotionSolvers/fvMotionSolver/fvMotionSolver.C fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.C fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.C -fvMotionSolvers/displacement/interpolation/displacementInterpolationMotionSolver.C -fvMotionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C -fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.C fvMotionSolvers/displacement/surfaceAlignedSBRStress/surfaceAlignedSBRStressFvMotionSolver.C +fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.C fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.C fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.C diff --git a/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.C index b0efd536051895e9d9e2bdb5eaba85718e03bc20..a8c37d2c3046f33619eb19ada7a12b51dbed69b2 100644 --- a/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.C +++ b/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.C @@ -55,7 +55,7 @@ displacementComponentLaplacianFvMotionSolver ) : componentDisplacementMotionSolver(mesh, dict, type()), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellDisplacement_ ( IOobject diff --git a/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.H index bed5a61674f0c9adbc55d3e14712bc12034dfe5c..91cd122a2589edc714724b6bb258ceb38aa59bcc 100644 --- a/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.H +++ b/src/fvMotionSolver/fvMotionSolvers/componentDisplacement/componentLaplacian/displacementComponentLaplacianFvMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define displacementComponentLaplacianFvMotionSolver_H #include "componentDisplacementMotionSolver.H" -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,7 +58,7 @@ class motionDiffusivity; class displacementComponentLaplacianFvMotionSolver : public componentDisplacementMotionSolver, - public fvMotionSolverCore + public fvMotionSolver { // Private data diff --git a/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.C index 072918a0c3891527bb6d14944a958b45ca919acc..6facb081384786e181e2949df9fbecb933e14270 100644 --- a/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.C +++ b/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.C @@ -54,7 +54,7 @@ velocityComponentLaplacianFvMotionSolver ) : componentVelocityMotionSolver(mesh, dict, typeName), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellMotionU_ ( IOobject diff --git a/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.H index d4075ff93b58196af391033453701aef9372fe2e..35db5b256e7db9c285ed87584e43fbe466f0c8f4 100644 --- a/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.H +++ b/src/fvMotionSolver/fvMotionSolvers/componentVelocity/componentLaplacian/velocityComponentLaplacianFvMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define velocityComponentLaplacianFvMotionSolver_H #include "componentVelocityMotionSolver.H" -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,7 +58,7 @@ class motionDiffusivity; class velocityComponentLaplacianFvMotionSolver : public componentVelocityMotionSolver, - public fvMotionSolverCore + public fvMotionSolver { // Private data @@ -121,7 +121,6 @@ public: //- Update topology virtual void updateMesh(const mapPolyMesh&); - }; diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.C index f1c71ae36c5e4ddeaf3d026040ce36d99b1e4d10..bc33e0cc8c16548c88051a086a3739157a17689e 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.C +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.C @@ -65,7 +65,7 @@ Foam::displacementSBRStressFvMotionSolver::displacementSBRStressFvMotionSolver ) : displacementMotionSolver(mesh, dict, dict.lookup("solver")), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellDisplacement_ ( IOobject @@ -108,7 +108,7 @@ displacementSBRStressFvMotionSolver ) : displacementMotionSolver(mesh, dict, pointDisplacement, points0, typeName), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellDisplacement_ ( IOobject diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.H index 5e4c7b64c1fc98ab6cf022673d8e7fa760b765a0..857e7e51d896b7453ec22961111d33788169f9c2 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.H +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define displacementSBRStressFvMotionSolver_H #include "displacementMotionSolver.H" -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,7 +58,7 @@ class motionDiffusivity; class displacementSBRStressFvMotionSolver : public displacementMotionSolver, - public fvMotionSolverCore + public fvMotionSolver { // Private data diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.C index f4e78392cfce2e1b136e80a762b76d20cc7c4ce7..85c120136485d1c1d9889d8629f8cec53de47620 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.C +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.C @@ -63,7 +63,7 @@ Foam::displacementLaplacianFvMotionSolver::displacementLaplacianFvMotionSolver ) : displacementMotionSolver(mesh, dict, typeName), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellDisplacement_ ( IOobject @@ -153,7 +153,7 @@ displacementLaplacianFvMotionSolver ) : displacementMotionSolver(mesh, dict, pointDisplacement, points0, typeName), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellDisplacement_ ( IOobject diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.H index 1df49597a6b9fe9c230105a0e0114e0b1ed89887..3abc4cbf09450e14f239912339166adcf0b1b3aa 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.H +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define displacementLaplacianFvMotionSolver_H #include "displacementMotionSolver.H" -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,7 +58,7 @@ class motionDiffusivity; class displacementLaplacianFvMotionSolver : public displacementMotionSolver, - public fvMotionSolverCore + public fvMotionSolver { // Private data diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.C new file mode 100644 index 0000000000000000000000000000000000000000..277593506b1f4d84c12a088b6aca4a230cdafec5 --- /dev/null +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.C @@ -0,0 +1,371 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "solidBodyDisplacementLaplacianFvMotionSolver.H" +#include "motionInterpolation.H" +#include "motionDiffusivity.H" +#include "fvmLaplacian.H" +#include "addToRunTimeSelectionTable.H" +#include "OFstream.H" +#include "meshTools.H" +#include "mapPolyMesh.H" +#include "solidBodyMotionFunction.H" +#include "transformField.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(solidBodyDisplacementLaplacianFvMotionSolver, 0); + + addToRunTimeSelectionTable + ( + motionSolver, + solidBodyDisplacementLaplacianFvMotionSolver, + dictionary + ); + + addToRunTimeSelectionTable + ( + displacementMotionSolver, + solidBodyDisplacementLaplacianFvMotionSolver, + displacement + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::solidBodyDisplacementLaplacianFvMotionSolver:: +solidBodyDisplacementLaplacianFvMotionSolver +( + const polyMesh& mesh, + const IOdictionary& dict +) +: + displacementMotionSolver(mesh, dict, typeName), + fvMotionSolver(mesh), + SBMFPtr_(solidBodyMotionFunction::New(coeffDict(), mesh.time())), + cellDisplacement_ + ( + IOobject + ( + "cellDisplacement", + mesh.time().timeName(), + mesh, + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + fvMesh_, + dimensionedVector + ( + "cellDisplacement", + pointDisplacement_.dimensions(), + Zero + ), + cellMotionBoundaryTypes<vector>(pointDisplacement_.boundaryField()) + ), + pointLocation_(nullptr), + interpolationPtr_ + ( + coeffDict().found("interpolation") + ? motionInterpolation::New(fvMesh_, coeffDict().lookup("interpolation")) + : motionInterpolation::New(fvMesh_) + ), + diffusivityPtr_ + ( + motionDiffusivity::New(fvMesh_, coeffDict().lookup("diffusivity")) + ), + frozenPointsZone_ + ( + coeffDict().found("frozenPointsZone") + ? fvMesh_.pointZones().findZoneID(coeffDict().lookup("frozenPointsZone")) + : -1 + ) +{ + IOobject io + ( + "pointLocation", + fvMesh_.time().timeName(), + fvMesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + if (debug) + { + Info<< "solidBodyDisplacementLaplacianFvMotionSolver:" << nl + << " diffusivity : " << diffusivityPtr_().type() << nl + << " frozenPoints zone : " << frozenPointsZone_ << endl; + } + + + if (io.typeHeaderOk<pointVectorField>(true)) + { + pointLocation_.reset + ( + new pointVectorField + ( + io, + pointMesh::New(fvMesh_) + ) + ); + + if (debug) + { + Info<< "solidBodyDisplacementLaplacianFvMotionSolver :" + << " Read pointVectorField " + << io.name() + << " to be used for boundary conditions on points." + << nl + << "Boundary conditions:" + << pointLocation_().boundaryField().types() << endl; + } + } +} + + +Foam::solidBodyDisplacementLaplacianFvMotionSolver:: +solidBodyDisplacementLaplacianFvMotionSolver +( + const polyMesh& mesh, + const IOdictionary& dict, + const pointVectorField& pointDisplacement, + const pointIOField& points0 +) +: + displacementMotionSolver(mesh, dict, pointDisplacement, points0, typeName), + fvMotionSolver(mesh), + SBMFPtr_(solidBodyMotionFunction::New(coeffDict(), mesh.time())), + cellDisplacement_ + ( + IOobject + ( + "cellDisplacement", + mesh.time().timeName(), + mesh, + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + fvMesh_, + dimensionedVector + ( + "cellDisplacement", + pointDisplacement_.dimensions(), + Zero + ), + cellMotionBoundaryTypes<vector>(pointDisplacement_.boundaryField()) + ), + pointLocation_(nullptr), + interpolationPtr_ + ( + coeffDict().found("interpolation") + ? motionInterpolation::New(fvMesh_, coeffDict().lookup("interpolation")) + : motionInterpolation::New(fvMesh_) + ), + diffusivityPtr_ + ( + motionDiffusivity::New(fvMesh_, coeffDict().lookup("diffusivity")) + ), + frozenPointsZone_ + ( + coeffDict().found("frozenPointsZone") + ? fvMesh_.pointZones().findZoneID(coeffDict().lookup("frozenPointsZone")) + : -1 + ) +{ + IOobject io + ( + "pointLocation", + fvMesh_.time().timeName(), + fvMesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + if (debug) + { + Info<< "solidBodyDisplacementLaplacianFvMotionSolver:" << nl + << " diffusivity : " << diffusivityPtr_().type() << nl + << " frozenPoints zone : " << frozenPointsZone_ << endl; + } + + + if (io.typeHeaderOk<pointVectorField>(true)) + { + pointLocation_.reset + ( + new pointVectorField + ( + io, + pointMesh::New(fvMesh_) + ) + ); + + if (debug) + { + Info<< "solidBodyDisplacementLaplacianFvMotionSolver :" + << " Read pointVectorField " + << io.name() + << " to be used for boundary conditions on points." + << nl + << "Boundary conditions:" + << pointLocation_().boundaryField().types() << endl; + } + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::solidBodyDisplacementLaplacianFvMotionSolver:: +~solidBodyDisplacementLaplacianFvMotionSolver() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::motionDiffusivity& +Foam::solidBodyDisplacementLaplacianFvMotionSolver::diffusivity() +{ + if (!diffusivityPtr_.valid()) + { + diffusivityPtr_ = motionDiffusivity::New + ( + fvMesh_, + coeffDict().lookup("diffusivity") + ); + } + return diffusivityPtr_(); +} + + +Foam::tmp<Foam::pointField> +Foam::solidBodyDisplacementLaplacianFvMotionSolver::curPoints() const +{ + interpolationPtr_->interpolate + ( + cellDisplacement_, + pointDisplacement_ + ); + + tmp<pointField> tnewPoints + ( + transformPoints(SBMFPtr_().transformation(), points0()) + ); + const pointField& newPoints = tnewPoints(); + + if (pointLocation_.valid()) + { + if (debug) + { + Info<< "solidBodyDisplacementLaplacianFvMotionSolver : applying " + << " boundary conditions on " << pointLocation_().name() + << " to new point location." + << endl; + } + + pointLocation_().primitiveFieldRef() = + newPoints + + pointDisplacement_.internalField(); + + pointLocation_().correctBoundaryConditions(); + + // Implement frozen points + if (frozenPointsZone_ != -1) + { + const pointZone& pz = fvMesh_.pointZones()[frozenPointsZone_]; + + forAll(pz, i) + { + pointLocation_()[pz[i]] = newPoints[pz[i]]; + } + } + + twoDCorrectPoints(pointLocation_().primitiveFieldRef()); + + return tmp<pointField>(pointLocation_().primitiveField()); + } + else + { + tmp<pointField> tcurPoints + ( + newPoints + pointDisplacement_.primitiveField() + ); + pointField& curPoints = tcurPoints.ref(); + + // Implement frozen points + if (frozenPointsZone_ != -1) + { + const pointZone& pz = fvMesh_.pointZones()[frozenPointsZone_]; + + forAll(pz, i) + { + curPoints[pz[i]] = newPoints[pz[i]]; + } + } + + twoDCorrectPoints(curPoints); + + return tcurPoints; + } +} + + +void Foam::solidBodyDisplacementLaplacianFvMotionSolver::solve() +{ + // The points have moved so before interpolation update + // the motionSolver accordingly + movePoints(fvMesh_.points()); + + diffusivity().correct(); + pointDisplacement_.boundaryFieldRef().updateCoeffs(); + + Foam::solve + ( + fvm::laplacian + ( + diffusivity().operator()(), + cellDisplacement_, + "laplacian(diffusivity,cellDisplacement)" + ) + ); +} + + +void Foam::solidBodyDisplacementLaplacianFvMotionSolver::updateMesh +( + const mapPolyMesh& mpm +) +{ + displacementMotionSolver::updateMesh(mpm); + + // Update diffusivity. Note two stage to make sure old one is de-registered + // before creating/registering new one. + diffusivityPtr_.clear(); +} + + +// ************************************************************************* // diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.H new file mode 100644 index 0000000000000000000000000000000000000000..2f768b51f72c60385fb32c1ffeeb9747eba08026 --- /dev/null +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/solidBodyDisplacementLaplacian/solidBodyDisplacementLaplacianFvMotionSolver.H @@ -0,0 +1,155 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::solidBodyDisplacementLaplacianFvMotionSolver + +Group + grpMeshMotionSolvers + +Description + Applies Laplacian displacement solving on top of a transformation of + the initial points using a solid-body motion. + +See also + Foam::displacementLaplacian + +SourceFiles + solidBodyDisplacementLaplacianFvMotionSolver.C + +\*---------------------------------------------------------------------------*/ + +#ifndef solidBodyDisplacementLaplacianFvMotionSolver_H +#define solidBodyDisplacementLaplacianFvMotionSolver_H + +#include "displacementMotionSolver.H" +#include "fvMotionSolver.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward class declarations +class motionInterpolation; +class motionDiffusivity; +class solidBodyMotionFunction; + +/*---------------------------------------------------------------------------*\ + Class solidBodyDisplacementLaplacianFvMotionSolver Declaration +\*---------------------------------------------------------------------------*/ + +class solidBodyDisplacementLaplacianFvMotionSolver +: + public displacementMotionSolver, + public fvMotionSolver +{ + // Private data + + //- Motion function + autoPtr<solidBodyMotionFunction> SBMFPtr_; + + //- Cell-centre motion field + mutable volVectorField cellDisplacement_; + + //- Optionally read point-position field. Used only for position + // boundary conditions. + mutable autoPtr<pointVectorField> pointLocation_; + + //- Interpolation used to transfer cell displacement to the points + autoPtr<motionInterpolation> interpolationPtr_; + + //- Diffusivity used to control the motion + autoPtr<motionDiffusivity> diffusivityPtr_; + + //- Frozen points (that are not on patches). -1 or points that are + // fixed to be at points0_ location + label frozenPointsZone_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + solidBodyDisplacementLaplacianFvMotionSolver + ( + const solidBodyDisplacementLaplacianFvMotionSolver& + ); + + //- Disallow default bitwise assignment + void operator=(const solidBodyDisplacementLaplacianFvMotionSolver&); + + +public: + + //- Runtime type information + TypeName("solidBodyDisplacementLaplacian"); + + + // Constructors + + //- Construct from polyMesh and IOdictionary + solidBodyDisplacementLaplacianFvMotionSolver + ( + const polyMesh&, + const IOdictionary& + ); + + //- Construct from components + solidBodyDisplacementLaplacianFvMotionSolver + ( + const polyMesh& mesh, + const IOdictionary& dict, + const pointVectorField& pointDisplacement, + const pointIOField& points0 + ); + + + //- Destructor + ~solidBodyDisplacementLaplacianFvMotionSolver(); + + + // Member Functions + + //- Return reference to the diffusivity field + motionDiffusivity& diffusivity(); + + //- Return point location obtained from the current motion field + virtual tmp<pointField> curPoints() const; + + //- Solve for motion + virtual void solve(); + + //- Update topology + virtual void updateMesh(const mapPolyMesh&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.C b/src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolver.C similarity index 86% rename from src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.C rename to src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolver.C index 3a1cc5273ffebcd1116e163ac2a4dcacba9e4882..e86d7b2472d8b35e52b91995d1b063bd3383d87f 100644 --- a/src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.C +++ b/src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,19 +23,19 @@ License \*---------------------------------------------------------------------------*/ -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(fvMotionSolverCore, 0); + defineTypeNameAndDebug(fvMotionSolver, 0); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::fvMotionSolverCore::fvMotionSolverCore(const polyMesh& mesh) +Foam::fvMotionSolver::fvMotionSolver(const polyMesh& mesh) : fvMesh_(refCast<const fvMesh>(mesh)) {} diff --git a/src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.H b/src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolver.H similarity index 92% rename from src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.H rename to src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolver.H index cea29b3112e7ba4806fbd2a3712579c4b9383722..02dd93a417e54a39b737774c003764de2590d2fb 100644 --- a/src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCore.H +++ b/src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolver.H @@ -22,18 +22,18 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::fvMotionSolverCore + Foam::fvMotionSolver Description Base class for fvMesh based motionSolvers. SourceFiles - fvMotionSolverCore.C + fvMotionSolver.C \*---------------------------------------------------------------------------*/ -#ifndef fvMotionSolverCore_H -#define fvMotionSolverCore_H +#ifndef fvMotionSolver_H +#define fvMotionSolver_H #include "fvMesh.H" @@ -46,7 +46,7 @@ namespace Foam Class velocityMotionSolver Declaration \*---------------------------------------------------------------------------*/ -class fvMotionSolverCore +class fvMotionSolver { protected: @@ -76,7 +76,7 @@ public: // Constructors //- Construct from polyMesh - fvMotionSolverCore(const polyMesh&); + fvMotionSolver(const polyMesh&); // Member Functions @@ -96,7 +96,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository - #include "fvMotionSolverCoreTemplates.C" + #include "fvMotionSolverTemplates.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCoreTemplates.C b/src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolverTemplates.C similarity index 95% rename from src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCoreTemplates.C rename to src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolverTemplates.C index 1a1d3697aad61480f8b40e9ca02d207a424a8527..8d1ba014d9118b7025fc0ae6ad900f0f6e13070e 100644 --- a/src/fvMotionSolver/fvMotionSolvers/fvMotionSolverCore/fvMotionSolverCoreTemplates.C +++ b/src/fvMotionSolver/fvMotionSolvers/fvMotionSolver/fvMotionSolverTemplates.C @@ -23,14 +23,14 @@ License \*---------------------------------------------------------------------------*/ -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" #include "fixedValuePointPatchFields.H" #include "cellMotionFvPatchFields.H" // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type> -Foam::wordList Foam::fvMotionSolverCore::cellMotionBoundaryTypes +Foam::wordList Foam::fvMotionSolver::cellMotionBoundaryTypes ( const typename GeometricField<Type, pointPatchField, pointMesh>:: Boundary& pmUbf diff --git a/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.C index 2b6c50bfd2d8399c9ab20fadfe885cafe2585d4b..46e7f34e2d77550d88c45e18df2807c0902023d8 100644 --- a/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.C +++ b/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.C @@ -53,7 +53,7 @@ Foam::velocityLaplacianFvMotionSolver::velocityLaplacianFvMotionSolver ) : velocityMotionSolver(mesh, dict, typeName), - fvMotionSolverCore(mesh), + fvMotionSolver(mesh), cellMotionU_ ( IOobject diff --git a/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.H index af213a96756a9f57d8fb7183435514533b5de42e..457aee03d86d87a255141687ea276d2e942950ae 100644 --- a/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.H +++ b/src/fvMotionSolver/fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #define velocityLaplacianFvMotionSolver_H #include "velocityMotionSolver.H" -#include "fvMotionSolverCore.H" +#include "fvMotionSolver.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,7 +58,7 @@ class motionDiffusivity; class velocityLaplacianFvMotionSolver : public velocityMotionSolver, - public fvMotionSolverCore + public fvMotionSolver { // Private data diff --git a/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C b/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C index 89de057f5d062c8f8a8f9ede39850f7b0de9ac7d..210168f72a4a339e8815a8444e233bd856aae817 100644 --- a/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C +++ b/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C @@ -227,8 +227,8 @@ void Foam::fv::effectivenessHeatExchangerSource::addSup reduce(sumMagPhi, sumOp<scalar>()); reduce(primaryInletTfMean, sumOp<scalar>()); - primaryInletTfMean /= sumMagPhi; - CpfMean /= sumMagPhi; + primaryInletTfMean /= sumMagPhi + ROOTVSMALL; + CpfMean /= sumMagPhi + ROOTVSMALL; scalar primaryInletT = primaryInletT_; if (!userPrimaryInletT_) @@ -285,18 +285,18 @@ void Foam::fv::effectivenessHeatExchangerSource::addSup { label celli = cells_[i]; heSource[celli] -= - Qt*V[celli]*mag(U[celli])*deltaTCells[i]/sumWeight; + Qt*V[celli]*mag(U[celli])*deltaTCells[i] + /(sumWeight + ROOTVSMALL); } } - if (debug && Pstream::master()) - { - Info<< indent << "Net mass flux [Kg/s] : " << sumPhi << nl; - Info<< indent << "Total energy exchange [W] : " << Qt << nl; - Info<< indent << "Tref [K] : " << Tref << nl; - Info<< indent << "Efficiency : " - << eTable_()(mag(sumPhi), secondaryMassFlowRate_) << endl; - } + Info<< type() << ": " << name() << nl << incrIndent + << indent << "Net mass flux [Kg/s] : " << sumPhi << nl + << indent << "Total energy exchange [W] : " << Qt << nl + << indent << "Tref [K] : " << Tref << nl + << indent << "Effectiveness : " + << eTable_()(mag(sumPhi), secondaryMassFlowRate_) << decrIndent + << nl << endl; } diff --git a/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.H b/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.H index 92831a8c1d94b53b7ba99cc25bbff39b00564fe0..56afff2adb6d13c8e2ecf88aab32d264696bec8e 100644 --- a/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.H +++ b/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.H @@ -205,7 +205,6 @@ private: // Private Member Functions - //- Disallow default bitwise copy construct effectivenessHeatExchangerSource ( diff --git a/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C b/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C index 96cd17ce60d55a6ab779935a0a32eb6c5d103ad1..8581f53bb9b5a796fd8f71019d803665bd6ba2be 100644 --- a/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C +++ b/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C @@ -47,7 +47,7 @@ namespace fv } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::fv::meanVelocityForce::writeProps ( diff --git a/src/fvOptions/sources/general/codedSource/CodedSource.C b/src/fvOptions/sources/general/codedSource/CodedSource.C index f29021c94be400cf66d87994c47834a3afc892f9..4611cd23174a545c6401fea75a83844b3fc8e2fa 100644 --- a/src/fvOptions/sources/general/codedSource/CodedSource.C +++ b/src/fvOptions/sources/general/codedSource/CodedSource.C @@ -29,7 +29,7 @@ License #include "dynamicCode.H" #include "dynamicCodeContext.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type> void Foam::fv::CodedSource<Type>::prepare diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake index 3d09e66bf56c332b49abacd6a6e840a2301a9eb5..a70ae861ba0e324ddd00fb67616613dd6c236699 100755 --- a/src/lagrangian/Allwmake +++ b/src/lagrangian/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType distributionModels wmake $targetType basic diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index 710e36bfd2837d72a0f7fc74b26e9e2dd978fa2d..4dd3558af7b8ef4d0a41480ef2de7c280b0512b8 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -258,7 +258,12 @@ void Foam::Cloud<ParticleType>::move(TrackData& td, const scalar trackTime) { // If we are running in parallel and the particle is on a // boundary face - if (Pstream::parRun() && p.face() >= pMesh().nInternalFaces()) + if + ( + Pstream::parRun() + && td.switchProcessor + && p.face() >= pMesh().nInternalFaces() + ) { label patchi = pbm.whichPatch(p.face()); diff --git a/src/lagrangian/distributionModels/Make/files b/src/lagrangian/distributionModels/Make/files index 3b130fb5035b2a441ef8ce4c745e61711ede1540..8942fc5a4d4e86f270a21781645f81bda8063985 100644 --- a/src/lagrangian/distributionModels/Make/files +++ b/src/lagrangian/distributionModels/Make/files @@ -8,6 +8,7 @@ general/general.C multiNormal/multiNormal.C normal/normal.C RosinRammler/RosinRammler.C +massRosinRammler/massRosinRammler.C uniform/uniform.C LIB = $(FOAM_LIBBIN)/libdistributionModels diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C index f2e5ac09657af49c238d698542de2f07184eaf09..2e5a04561975c6b33e0cd64c5bd0d8c4ea030098 100644 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C +++ b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,11 +30,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(RosinRammler, 0); - addToRunTimeSelectionTable(distributionModel, RosinRammler, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(RosinRammler, 0); + addToRunTimeSelectionTable(distributionModel, RosinRammler, dictionary); +} } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H index 5817d5427132755849dfde2ce2beee35b6c123e7..448165a7037f5b2f204a81af1f20d0b048a9ea8a 100644 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H +++ b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -100,7 +100,7 @@ public: // Member Functions - //- Sample the distributionModel + //- Sample the distributionModel virtual scalar sample() const; //- Return the minimum value diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.H b/src/lagrangian/distributionModels/distributionModel/distributionModel.H index fe5e876544984ceed14a32e2605f79f619ccd8a7..5e712e10eca22ea19d97b72b6369ef3641496ca9 100644 --- a/src/lagrangian/distributionModels/distributionModel/distributionModel.H +++ b/src/lagrangian/distributionModels/distributionModel/distributionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,6 +36,7 @@ Description - multi-normal - normal - Rosin-Rammler + - Mass-based Rosin-Rammler - uniform The distributionModel is tabulated in equidistant nPoints, in an interval. diff --git a/src/lagrangian/distributionModels/exponential/exponential.C b/src/lagrangian/distributionModels/exponential/exponential.C index 01298de33c54c99fb0a182a00ef3ef4e0a2cdfcf..013e5c39bb73678c948247343f2ed36576c5de5f 100644 --- a/src/lagrangian/distributionModels/exponential/exponential.C +++ b/src/lagrangian/distributionModels/exponential/exponential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,11 +30,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(exponential, 0); - addToRunTimeSelectionTable(distributionModel, exponential, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(exponential, 0); + addToRunTimeSelectionTable(distributionModel, exponential, dictionary); +} } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/lagrangian/distributionModels/exponential/exponential.H b/src/lagrangian/distributionModels/exponential/exponential.H index 5743a8c37d1ece1f95023c21da9621b729e517bf..76f62acbb87c061d86fa9491ab5ab421f4732e1c 100644 --- a/src/lagrangian/distributionModels/exponential/exponential.H +++ b/src/lagrangian/distributionModels/exponential/exponential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -93,7 +93,7 @@ public: // Member Functions - //- Sample the distributionModel + //- Sample the distributionModel virtual scalar sample() const; //- Return the minimum value diff --git a/src/lagrangian/distributionModels/fixedValue/fixedValue.C b/src/lagrangian/distributionModels/fixedValue/fixedValue.C index 048a9482f3090e648494ce7a48751bec9328ccfc..f8f0c234a9f555644214e0c05d4cbacbc7738e7b 100644 --- a/src/lagrangian/distributionModels/fixedValue/fixedValue.C +++ b/src/lagrangian/distributionModels/fixedValue/fixedValue.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,11 +30,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(fixedValue, 0); - addToRunTimeSelectionTable(distributionModel, fixedValue, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(fixedValue, 0); + addToRunTimeSelectionTable(distributionModel, fixedValue, dictionary); +} } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/lagrangian/distributionModels/fixedValue/fixedValue.H b/src/lagrangian/distributionModels/fixedValue/fixedValue.H index e7da3e03b0efce89f9970a4d9f2083fa9e440b64..aa089730310226cb607c224eaaee6d08e9905c1f 100644 --- a/src/lagrangian/distributionModels/fixedValue/fixedValue.H +++ b/src/lagrangian/distributionModels/fixedValue/fixedValue.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -84,7 +84,7 @@ public: // Member Functions - //- Sample the distributionModel + //- Sample the distributionModel virtual scalar sample() const; //- Return the minimum value diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C index 590298f1e64ce66115d09374110cf55943444a16..0cf368a6ab526e3fce455c3ec2a300ee5c01aeac 100644 --- a/src/lagrangian/distributionModels/general/general.C +++ b/src/lagrangian/distributionModels/general/general.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License @@ -30,11 +30,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(general, 0); - addToRunTimeSelectionTable(distributionModel, general, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(general, 0); + addToRunTimeSelectionTable(distributionModel, general, dictionary); +} } diff --git a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C new file mode 100644 index 0000000000000000000000000000000000000000..015343b711794299f303dc0fbadf078201f978d9 --- /dev/null +++ b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "massRosinRammler.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace distributionModels +{ + defineTypeNameAndDebug(massRosinRammler, 0); + addToRunTimeSelectionTable(distributionModel, massRosinRammler, dictionary); +} +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::distributionModels::massRosinRammler::massRosinRammler +( + const dictionary& dict, + cachedRandom& rndGen +) +: + distributionModel(typeName, dict, rndGen), + minValue_(readScalar(distributionModelDict_.lookup("minValue"))), + maxValue_(readScalar(distributionModelDict_.lookup("maxValue"))), + d_(readScalar(distributionModelDict_.lookup("d"))), + n_(readScalar(distributionModelDict_.lookup("n"))) +{ + check(); +} + + +Foam::distributionModels::massRosinRammler::massRosinRammler +( + const massRosinRammler& p +) +: + distributionModel(p), + minValue_(p.minValue_), + maxValue_(p.maxValue_), + d_(p.d_), + n_(p.n_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::distributionModels::massRosinRammler::~massRosinRammler() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::scalar Foam::distributionModels::massRosinRammler::sample() const +{ + scalar d; + + // Re-sample if the calculated d is out of the physical range + do + { + const scalar a = 3/n_ + 1; + const scalar P = rndGen_.sample01<scalar>(); + const scalar x = invIncGamma(a, P); + d = d_*pow(x, 1/n_); + } while (d < minValue_ || d > maxValue_); + + return d; +} + + +Foam::scalar Foam::distributionModels::massRosinRammler::minValue() const +{ + return minValue_; +} + + +Foam::scalar Foam::distributionModels::massRosinRammler::maxValue() const +{ + return maxValue_; +} + + +Foam::scalar Foam::distributionModels::massRosinRammler::meanValue() const +{ + return d_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H new file mode 100644 index 0000000000000000000000000000000000000000..f1745326b676b439cdd8a321b313463a7c163109 --- /dev/null +++ b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H @@ -0,0 +1,137 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::massRosinRammler + +Description + Mass-based Rosin-Rammler distributionModel. + + Corrected form of the Rosin-Rammler distribution taking into account the + varying number of particels per parces for for fixed-mass parcels. This + distribution should be used when + \verbatim + parcelBasisType mass; + \endverbatim + + See equation 10 in reference: + \verbatim + Yoon, S. S., Hewson, J. C., DesJardin, P. E., Glaze, D. J., + Black, A. R., & Skaggs, R. R. (2004). + Numerical modeling and experimental measurements of a high speed + solid-cone water spray for use in fire suppression applications. + International Journal of Multiphase Flow, 30(11), 1369-1388. + \endverbatim + +SourceFiles + massRosinRammler.C + +\*---------------------------------------------------------------------------*/ + +#ifndef massRosinRammler_H +#define massRosinRammler_H + +#include "distributionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace distributionModels +{ + +/*---------------------------------------------------------------------------*\ + Class massRosinRammler Declaration +\*---------------------------------------------------------------------------*/ + +class massRosinRammler +: + public distributionModel +{ + // Private data + + //- Distribution minimum + scalar minValue_; + + //- Distribution maximum + scalar maxValue_; + + //- Characteristic droplet size + scalar d_; + + //- Empirical dimensionless constant to specify the distribution width, + // sometimes referred to as the dispersion coefficient + scalar n_; + + +public: + + //- Runtime type information + TypeName("massRosinRammler"); + + + // Constructors + + //- Construct from components + massRosinRammler(const dictionary& dict, cachedRandom& rndGen); + + //- Construct copy + massRosinRammler(const massRosinRammler& p); + + //- Construct and return a clone + virtual autoPtr<distributionModel> clone() const + { + return autoPtr<distributionModel>(new massRosinRammler(*this)); + } + + + //- Destructor + virtual ~massRosinRammler(); + + + // Member Functions + + //- Sample the distributionModel + virtual scalar sample() const; + + //- Return the minimum value + virtual scalar minValue() const; + + //- Return the maximum value + virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace distributionModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/multiNormal/multiNormal.C b/src/lagrangian/distributionModels/multiNormal/multiNormal.C index 9a8bf423ec8d9304fe359edef2baa313743dd4fc..1cbb5a585639042b95b93f424378f71f233e4825 100644 --- a/src/lagrangian/distributionModels/multiNormal/multiNormal.C +++ b/src/lagrangian/distributionModels/multiNormal/multiNormal.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,11 +30,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(multiNormal, 0); - addToRunTimeSelectionTable(distributionModel, multiNormal, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(multiNormal, 0); + addToRunTimeSelectionTable(distributionModel, multiNormal, dictionary); +} } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/lagrangian/distributionModels/normal/normal.C b/src/lagrangian/distributionModels/normal/normal.C index a585ee59a1eb96913c544c806c9dafa0bf3aeae1..1fc16376a901492a01b9df75d8a7b8ffdef6e2ad 100644 --- a/src/lagrangian/distributionModels/normal/normal.C +++ b/src/lagrangian/distributionModels/normal/normal.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,11 +31,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(normal, 0); - addToRunTimeSelectionTable(distributionModel, normal, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(normal, 0); + addToRunTimeSelectionTable(distributionModel, normal, dictionary); +} } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/lagrangian/distributionModels/uniform/uniform.C b/src/lagrangian/distributionModels/uniform/uniform.C index 05f7a21befbef52e3d67badabd11dc2ad2aac205..72a0d2fc3ddb7cd339c3e703f462b28a8292dcde 100644 --- a/src/lagrangian/distributionModels/uniform/uniform.C +++ b/src/lagrangian/distributionModels/uniform/uniform.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,11 +30,11 @@ License namespace Foam { - namespace distributionModels - { - defineTypeNameAndDebug(uniform, 0); - addToRunTimeSelectionTable(distributionModel, uniform, dictionary); - } +namespace distributionModels +{ + defineTypeNameAndDebug(uniform, 0); + addToRunTimeSelectionTable(distributionModel, uniform, dictionary); +} } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/lagrangian/distributionModels/uniform/uniform.H b/src/lagrangian/distributionModels/uniform/uniform.H index da880347d1009ddb21f610b4a20ac762b0891fce..3efaee8219de849475331933f3b61a382f2d1178 100644 --- a/src/lagrangian/distributionModels/uniform/uniform.H +++ b/src/lagrangian/distributionModels/uniform/uniform.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -88,7 +88,7 @@ public: // Member Functions - //- Sample the distributionModel + //- Sample the distributionModel virtual scalar sample() const; //- Return the minimum value diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C index fa33bcce52f608d1651564b36200b313776d0099..5c65a074023826f2ff75e828dea092f368b1b8b3 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -490,6 +490,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + template<class ParcelType> template<class TrackData> void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C index 2d2ac4d45a85801f051e725bc6ddcf38d730cb2e..38e9684af65039e1ed3ef4006b0edc95876c1057 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/FacePostProcessing/FacePostProcessing.C @@ -74,6 +74,8 @@ void Foam::FacePostProcessing<CloudType>::makeLogFile } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + template<class CloudType> void Foam::FacePostProcessing<CloudType>::write() { diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C index 8ea2b51386d3a29d1ed8d49fa4306889ddccc761..c559e3f5dfb62136f59c0dc3c5045e1373491eed 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C @@ -385,6 +385,8 @@ void Foam::ParticleCollector<CloudType>::collectParcelConcentricCircles } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + template<class CloudType> void Foam::ParticleCollector<CloudType>::write() { diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 73090e20b97d597a00737b08d89c779b43cfdd37..9f496a63f1a7ca3bc18a6d70fbdd63bf4110b565 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -169,7 +169,7 @@ bool Foam::InjectionModel<CloudType>::findCellAtPosition FatalErrorInFunction << "Cannot find parcel injection cell. " << "Parcel position = " << p0 << nl - << abort(FatalError); + << exit(FatalError); } else { @@ -215,8 +215,8 @@ Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles { nP = 0.0; FatalErrorInFunction - << "Unknown parcelBasis type" << nl - << exit(FatalError); + << "Unknown parcelBasis type" << nl + << exit(FatalError); } } @@ -358,8 +358,8 @@ Foam::InjectionModel<CloudType>::InjectionModel else { FatalErrorInFunction - << "parcelBasisType must be either 'number', 'mass' or 'fixed'" << nl - << exit(FatalError); + << "parcelBasisType must be either 'number', 'mass' or 'fixed'" + << nl << exit(FatalError); } } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C index e9c4bc33e2873abb4089af450b705aa9f2241625..522725fdeb5aca893cae0d39d4910aa94611c185 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C @@ -28,6 +28,8 @@ License #include "SubField.H" #include "cachedRandom.H" #include "triPointRef.H" +#include "volFields.H" +#include "polyMeshTetDecomposition.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -148,7 +150,7 @@ void Foam::patchInjectionBase::updateMesh(const polyMesh& mesh) void Foam::patchInjectionBase::setPositionAndCell ( - const polyMesh& mesh, + const fvMesh& mesh, cachedRandom& rnd, vector& position, label& cellOwner, @@ -174,25 +176,25 @@ void Foam::patchInjectionBase::setPositionAndCell if (Pstream::myProcNo() == proci) { // Find corresponding decomposed face triangle - label triI = 0; + label trii = 0; scalar offset = sumTriMagSf_[proci]; forAllReverse(triCumulativeMagSf_, i) { if (areaFraction > triCumulativeMagSf_[i] + offset) { - triI = i; + trii = i; break; } } // Set cellOwner - label facei = triToFace_[triI]; + label facei = triToFace_[trii]; cellOwner = cellOwners_[facei]; // Find random point in triangle const polyPatch& patch = mesh.boundaryMesh()[patchId_]; const pointField& points = patch.points(); - const face& tf = triFace_[triI]; + const face& tf = triFace_[trii]; const triPointRef tri(points[tf[0]], points[tf[1]], points[tf[2]]); const point pf(tri.randomPoint(rnd)); diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.H index 47c003b60b796a07633f0cc5c8c3962e336e54e7..2124b3acfc877b1e220a61f4d7d41312639b8a00 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.H @@ -28,7 +28,7 @@ Description Base class for patch-based injection models. Class handles injecting at a random point adjacent to the patch faces to - provide a more stochsatic view of the injection process. Patch faces are + provide a more stochastic view of the injection process. Patch faces are triangulated, and area fractions accumulated. The fractional areas are then applied to determine across which face a parcel is to be injected. @@ -53,6 +53,7 @@ namespace Foam // Forward class declarations class polyMesh; +class fvMesh; class cachedRandom; /*---------------------------------------------------------------------------*\ @@ -116,7 +117,7 @@ public: //- Set the injection position and owner cell, tetFace and tetPt virtual void setPositionAndCell ( - const polyMesh& mesh, + const fvMesh& mesh, cachedRandom& rnd, vector& position, label& cellOwner, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/NonSphereDrag/NonSphereDragForce.C b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/NonSphereDrag/NonSphereDragForce.C index 3cbccc478734c44f27e0227f2cb909cc1a881af1..674d4b182414d87a3591d78565caf2d37afbbb06 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/NonSphereDrag/NonSphereDragForce.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/NonSphereDrag/NonSphereDragForce.C @@ -25,7 +25,7 @@ License #include "NonSphereDragForce.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class CloudType> Foam::scalar Foam::NonSphereDragForce<CloudType>::CdRe(const scalar Re) const diff --git a/src/lagrangian/intermediate/submodels/MPPIC/AveragingMethods/AveragingMethod/AveragingMethod.C b/src/lagrangian/intermediate/submodels/MPPIC/AveragingMethods/AveragingMethod/AveragingMethod.C index c9c473a8395758a42381676d823b6bf57a00d00d..f6833065856ab21240a8724ee6f63a64841f14b7 100644 --- a/src/lagrangian/intermediate/submodels/MPPIC/AveragingMethods/AveragingMethod/AveragingMethod.C +++ b/src/lagrangian/intermediate/submodels/MPPIC/AveragingMethods/AveragingMethod/AveragingMethod.C @@ -27,6 +27,13 @@ License #include "runTimeSelectionTables.H" #include "pointMesh.H" +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class Type> +void Foam::AveragingMethod<Type>::updateGrad() +{} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class Type> @@ -106,15 +113,6 @@ Foam::AveragingMethod<Type>::~AveragingMethod() {} -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -template<class Type> -void Foam::AveragingMethod<Type>::updateGrad() -{ - // do nothing -} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C index eef6b78f394541c8707b3d91210687cb050d31a8..18136186b7b1059af1963782b2bf3b3376ce9cdb 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C @@ -29,7 +29,7 @@ License using namespace Foam::constant::mathematical; -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class CloudType> Foam::tmp<Foam::scalarField> Foam::LiquidEvaporation<CloudType>::calcXc diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C index da98006d456f21b12b7d3aec7f86bde5f8d4f1d3..4836532061367b83f98ac6addaf7f75942f3dcd4 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C @@ -29,7 +29,7 @@ License using namespace Foam::constant::mathematical; -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class CloudType> Foam::tmp<Foam::scalarField> Foam::LiquidEvaporationBoil<CloudType>::calcXc diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C index 8ef554b1e5c11535b594557bf15bc4d750f77384..a47b35df94908d12dc50f21832e83b415d351d60 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C @@ -81,6 +81,8 @@ Foam::word Foam::ThermoSurfaceFilm<CloudType>::interactionTypeStr } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + template<class CloudType> Foam::vector Foam::ThermoSurfaceFilm<CloudType>::tangentVector ( diff --git a/src/lagrangian/molecularDynamics/Allwmake b/src/lagrangian/molecularDynamics/Allwmake index 8a53eb6fb611efa362a386b8e86ab1ff2e0a7f05..c1221b264c932267017fe7a4801039e5f037e354 100755 --- a/src/lagrangian/molecularDynamics/Allwmake +++ b/src/lagrangian/molecularDynamics/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType potential wmake $targetType molecularMeasurements diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C index 8c3f8fa448ff300e0e61008dff0530416faed1fb..18724c978781b7e6e9cc07fa4657f6e0a3347492 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C @@ -35,8 +35,7 @@ namespace Foam } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::pairPotential::scaleEnergy(scalar& e, const scalar r) const { diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H index e75eaf624e24f1b203be2209687d752e804ca255..cafa9a49a3cc2d5f1732746da22ae60549593680 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H @@ -60,7 +60,7 @@ class pairPotential protected: - // Protected data + // Protected member data word name_; dictionary pairPotentialProperties_; @@ -79,7 +79,7 @@ protected: bool writeTables_; - // Private Member Functions + // Protected member functions void scaleEnergy(scalar& e, const scalar r) const; @@ -93,7 +93,7 @@ protected: public: //- Runtime type information - TypeName("pairPotential"); + TypeName("pairPotential"); // Declare run-time constructor selection table diff --git a/src/mesh/Allwmake b/src/mesh/Allwmake index e0b125892841570047a77f0a1117122a5cb9daff..9aa9ba5bfcc7d030af4e9dcf45e8c5b5bef77e0f 100755 --- a/src/mesh/Allwmake +++ b/src/mesh/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType snappyHexMesh wmake $targetType blockMesh diff --git a/src/mesh/blockMesh/Make/files b/src/mesh/blockMesh/Make/files index 53d856529db4de050e6ff3a378b61eda2cd65b0d..5831633613d88cf5e29a50861feeb48cad4aff5b 100644 --- a/src/mesh/blockMesh/Make/files +++ b/src/mesh/blockMesh/Make/files @@ -1,6 +1,7 @@ blockVertices/blockVertex/blockVertex.C blockVertices/pointVertex/pointVertex.C blockVertices/projectVertex/projectVertex.C +blockVertices/namedVertex/namedVertex.C blockEdges/bezier/bezier.C blockEdges/blockEdge/blockEdge.C @@ -14,6 +15,7 @@ blockEdges/BSplineEdge/BSplineEdge.C blockEdges/splineEdge/CatmullRomSpline.C blockEdges/splineEdge/splineEdge.C blockEdges/projectEdge/projectEdge.C +blockEdges/projectCurveEdge/projectCurveEdge.C blockFaces/blockFace/blockFace.C blockFaces/projectFace/projectFace.C @@ -24,8 +26,9 @@ gradingDescriptor/gradingDescriptors.C blockDescriptor/blockDescriptor.C blockDescriptor/blockDescriptorEdges.C -block/block.C -block/blockCreate.C +blocks/block/block.C +blocks/block/blockCreate.C +blocks/namedBlock/namedBlock.C blockMesh/blockMesh.C blockMesh/blockMeshCreate.C @@ -34,4 +37,8 @@ blockMesh/blockMeshCheck.C blockMesh/blockMeshMerge.C blockMesh/blockMeshMergeFast.C +blockMeshTools/blockMeshTools.C + +searchableExtrudedCircle/searchableExtrudedCircle.C + LIB = $(FOAM_LIBBIN)/libblockMesh diff --git a/src/mesh/blockMesh/Make/options b/src/mesh/blockMesh/Make/options index bf6ca71abfb4c715b09e5ed1679f365702c55784..5467dc3ce38635ce1b666c5263855f795f66e302 100644 --- a/src/mesh/blockMesh/Make/options +++ b/src/mesh/blockMesh/Make/options @@ -1,9 +1,11 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/fileFormats/lnInclude \ + -I$(LIB_SRC)/edgeMesh/lnInclude \ -I$(LIB_SRC)/surfMesh/lnInclude LIB_LIBS = \ -lmeshTools \ -lfileFormats \ + -ledgeMesh \ -lsurfMesh diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C index fb9a413013b96eab4cb401f21335a6b16d896027..7593b3763e16bbe71e1a4663924269d1cd55fc7b 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "blockDescriptor.H" +#include "blockMeshTools.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -164,6 +165,8 @@ Foam::blockDescriptor::blockDescriptor Foam::blockDescriptor::blockDescriptor ( + const dictionary& dict, + const label index, const pointField& vertices, const blockEdgeList& edges, const blockFaceList& faces, @@ -173,13 +176,24 @@ Foam::blockDescriptor::blockDescriptor vertices_(vertices), edges_(edges), faces_(faces), - blockShape_(is), density_(), expand_(12, gradingDescriptors()), zoneName_(), curvedFaces_(-1), nCurvedFaces_(0) { + // Read cell model and list of vertices (potentially with variables) + word model(is); + blockShape_ = cellShape + ( + model, + blockMeshTools::read<label> + ( + is, + dict.subOrEmptyDict("namedVertices") + ) + ); + // Examine next token token t(is); @@ -347,6 +361,25 @@ void Foam::blockDescriptor::correctFacePoints } +void Foam::blockDescriptor::write +( + Ostream& os, + const label val, + const dictionary& d +) +{ + const dictionary* varDictPtr = d.subDictPtr("namedBlocks"); + if (varDictPtr) + { + blockMeshTools::write(os, val, *varDictPtr); + } + else + { + os << val; + } +} + + // * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * * // Foam::Ostream& Foam::operator<<(Ostream& os, const blockDescriptor& bd) diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.H b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.H index b0f7b1412cfef83aa8dca994b71f5df70864ceee..e4d3b72cb91bfcb41c26fe084e76ec21152c96de 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.H +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.H @@ -152,6 +152,8 @@ public: //- Construct from Istream blockDescriptor ( + const dictionary& dict, + const label index, const pointField& vertices, const blockEdgeList&, const blockFaceList&, @@ -161,6 +163,9 @@ public: // Member Functions + //- Reference to point field defining the block mesh + inline const pointField& vertices() const; + //- Return reference to the list of curved faces inline const blockFaceList& faces() const; @@ -233,6 +238,9 @@ public: // to lie on the faces of the block void correctFacePoints(FixedList<pointField, 6>&) const; + //- Write block index with dictionary lookup + static void write(Ostream&, const label blocki, const dictionary&); + // IOstream Operators diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptorI.H b/src/mesh/blockMesh/blockDescriptor/blockDescriptorI.H index 823860a820d276c6693f745195d24c17bc17900a..13ec39c2e67f9798c2cbbd763439406c4012e742 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptorI.H +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptorI.H @@ -25,6 +25,12 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +inline const Foam::pointField& Foam::blockDescriptor::vertices() const +{ + return vertices_; +} + + inline const Foam::blockFaceList& Foam::blockDescriptor::faces() const { return faces_; diff --git a/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.C b/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.C index 4e16c18264c06d3925c628910180db9efefa51f1..dc62dbc3e4a47fb8a41b197c5adc7f633113e6d5 100644 --- a/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.C +++ b/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.C @@ -62,12 +62,14 @@ Foam::blockEdges::BSplineEdge::BSplineEdge Foam::blockEdges::BSplineEdge::BSplineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ) : - blockEdge(points, is), + blockEdge(dict, index, points, is), BSpline(appendEndPoints(points, start_, end_, pointField(is))) { token t(is); diff --git a/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.H b/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.H index 81c06d63a79041d853429d2ae34fe04de6b748df..72cbeeab7ac9d31c2c05236c3d2aa35280f31b04 100644 --- a/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.H +++ b/src/mesh/blockMesh/blockEdges/BSplineEdge/BSplineEdge.H @@ -83,6 +83,8 @@ public: //- Construct from Istream, setting pointsList BSplineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField&, Istream& diff --git a/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.C b/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.C index 5d012e0531c35ebe7adae77608e9e55afc5e0443..793cc27b2f58e3eda49e5245cb502aa3b685a1ca 100644 --- a/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.C +++ b/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.C @@ -123,12 +123,14 @@ Foam::blockEdges::arcEdge::arcEdge Foam::blockEdges::arcEdge::arcEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ) : - blockEdge(points, is), + blockEdge(dict, index, points, is), p1_(points_[start_]), p2_(is), p3_(points_[end_]), diff --git a/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.H b/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.H index 4406ec40a11f6c0851b1af7666fc7821738d9a56..260e5dc7bb4da21c43246ffff1530eb35bd010a6 100644 --- a/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.H +++ b/src/mesh/blockMesh/blockEdges/arcEdge/arcEdge.H @@ -92,6 +92,8 @@ public: //- Construct from Istream setting pointsList arcEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& diff --git a/src/mesh/blockMesh/blockEdges/bezier/bezier.C b/src/mesh/blockMesh/blockEdges/bezier/bezier.C index 85d71594773337ef2d3edf520e604c83e48c6b5c..c99837b87fbb78c682436eac1a288a8f91968c49 100644 --- a/src/mesh/blockMesh/blockEdges/bezier/bezier.C +++ b/src/mesh/blockMesh/blockEdges/bezier/bezier.C @@ -43,25 +43,27 @@ namespace blockEdges Foam::blockEdges::bezier::bezier ( - const pointField& ps, + const pointField& points, const label start, const label end, const pointField& control ) : - blockEdge(ps, start, end), + blockEdge(points, start, end), control_(control) {} Foam::blockEdges::bezier::bezier ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ) : - blockEdge(points, is), + blockEdge(dict, index, points, is), control_(appendEndPoints(points, start_, end_, pointField(is))) {} diff --git a/src/mesh/blockMesh/blockEdges/bezier/bezier.H b/src/mesh/blockMesh/blockEdges/bezier/bezier.H index 62e76605718cec6cc22dbea1cd608c2a297c8523..1ea280b9218a9f16a3336b373cfdff534a8d01eb 100644 --- a/src/mesh/blockMesh/blockEdges/bezier/bezier.H +++ b/src/mesh/blockMesh/blockEdges/bezier/bezier.H @@ -87,7 +87,7 @@ public: //- Construct from components bezier ( - const pointField&, + const pointField& points, const label start, const label end, const pointField& control @@ -96,6 +96,8 @@ public: //- Construct from Istream bezier ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField&, Istream& diff --git a/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.C b/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.C index 4ed2647a741782235ee66daf06059a75a9adb30f..12f63a3057d33f6c14f708305e7120dd09aa9ea4 100644 --- a/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.C +++ b/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "blockEdge.H" +#include "blockVertex.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -51,13 +52,15 @@ Foam::blockEdge::blockEdge Foam::blockEdge::blockEdge ( + const dictionary& dict, + const label index, const pointField& points, Istream& is ) : points_(points), - start_(readLabel(is)), - end_(readLabel(is)) + start_(blockVertex::read(is, dict)), + end_(blockVertex::read(is, dict)) {} @@ -70,6 +73,8 @@ Foam::autoPtr<Foam::blockEdge> Foam::blockEdge::clone() const Foam::autoPtr<Foam::blockEdge> Foam::blockEdge::New ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is @@ -95,7 +100,7 @@ Foam::autoPtr<Foam::blockEdge> Foam::blockEdge::New << abort(FatalError); } - return autoPtr<blockEdge>(cstrIter()(geometry, points, is)); + return autoPtr<blockEdge>(cstrIter()(dict, index, geometry, points, is)); } @@ -139,6 +144,15 @@ Foam::blockEdge::position(const scalarList& lambdas) const } +void Foam::blockEdge::write(Ostream& os, const dictionary& d) const +{ + blockVertex::write(os, start_, d); + os << tab; + blockVertex::write(os, end_, d); + os << endl; +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // Foam::Ostream& Foam::operator<<(Ostream& os, const blockEdge& p) diff --git a/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.H b/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.H index e6e3196ea94a3981245aff19e4368af12e1550ce..bde77adbc29b4feee21aa483a361e84e30a27153 100644 --- a/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.H +++ b/src/mesh/blockMesh/blockEdges/blockEdge/blockEdge.H @@ -92,11 +92,13 @@ public: blockEdge, Istream, ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ), - (geometry, points, is) + (dict, index, geometry, points, is) ); @@ -113,6 +115,8 @@ public: //- Construct from Istream setting pointsList blockEdge ( + const dictionary& dict, + const label index, const pointField&, Istream& ); @@ -123,6 +127,8 @@ public: //- New function which constructs and returns pointer to a blockEdge static autoPtr<blockEdge> New ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField&, Istream& @@ -132,20 +138,29 @@ public: // PtrLists of blockEdge class iNew { + const dictionary& dict_; const searchableSurfaces& geometry_; const pointField& points_; + mutable label index_; public: - iNew(const searchableSurfaces& geometry, const pointField& points) + iNew + ( + const dictionary& dict, + const searchableSurfaces& geometry, + const pointField& points + ) : + dict_(dict), geometry_(geometry), - points_(points) + points_(points), + index_(0) {} autoPtr<blockEdge> operator()(Istream& is) const { - return blockEdge::New(geometry_, points_, is); + return blockEdge::New(dict_, index_++, geometry_, points_, is); } }; @@ -195,6 +210,9 @@ public: //- Return the length of the curve virtual scalar length() const = 0; + //- Write edge with variable backsubstitution + void write(Ostream&, const dictionary&) const; + // Ostream operator diff --git a/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.C b/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.C index 45b4434850a1f3cb5964e86836c08aa143e2e25a..9206151f56223b0e7809cff921f36a4e7aeaca6e 100644 --- a/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.C +++ b/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.C @@ -53,12 +53,14 @@ Foam::blockEdges::lineEdge::lineEdge Foam::blockEdges::lineEdge::lineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ) : - blockEdge(points, is) + blockEdge(dict, index, points, is) {} diff --git a/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.H b/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.H index e70ffd10bf79477159eaa3e3ed15729963361200..c5266b28c3d2c49d4e7c70c9a4a3c8894db25d94 100644 --- a/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.H +++ b/src/mesh/blockMesh/blockEdges/lineEdge/lineEdge.H @@ -68,6 +68,8 @@ public: //- Construct from Istream with a pointField lineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField&, Istream& diff --git a/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLine.C b/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLine.C index ac7572f59534b2454387b461e6a08cecc33ad5e3..a54b2f790e3c70fc7b7493b2d0d3dd8b31f69d16 100644 --- a/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLine.C +++ b/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLine.C @@ -25,7 +25,7 @@ License #include "polyLine.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::polyLine::calcParam() { diff --git a/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.C b/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.C index 1396636a66f62ebe1ed0be3d969e712e52a169d3..63e8fb4d00be11e19a900ed9dd7a542fad7b1499 100644 --- a/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.C +++ b/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.C @@ -55,12 +55,14 @@ Foam::blockEdges::polyLineEdge::polyLineEdge Foam::blockEdges::polyLineEdge::polyLineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& ps, Istream& is ) : - blockEdge(ps, is), + blockEdge(dict, index, ps, is), polyLine(appendEndPoints(ps, start_, end_, pointField(is))) {} diff --git a/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.H b/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.H index adcd7fd1b47c641467ad89d1c2513da007bbef9d..62e42ca31c302916bec0d0ebd0708f0141dbf69c 100644 --- a/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.H +++ b/src/mesh/blockMesh/blockEdges/polyLineEdge/polyLineEdge.H @@ -83,6 +83,8 @@ public: //- Construct from Istream polyLineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField&, Istream& diff --git a/src/mesh/blockMesh/blockEdges/projectCurveEdge/projectCurveEdge.C b/src/mesh/blockMesh/blockEdges/projectCurveEdge/projectCurveEdge.C new file mode 100644 index 0000000000000000000000000000000000000000..cf49d9ce5997c6370cc316407c3bc8a0a2e83437 --- /dev/null +++ b/src/mesh/blockMesh/blockEdges/projectCurveEdge/projectCurveEdge.C @@ -0,0 +1,258 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "searchableSurfacesQueries.H" +#include "projectCurveEdge.H" +#include "unitConversion.H" +#include "addToRunTimeSelectionTable.H" +#include "pointConstraint.H" +#include "OBJstream.H" +#include "linearInterpolationWeights.H" +#include "searchableExtrudedCircle.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(projectCurveEdge, 0); + addToRunTimeSelectionTable(blockEdge, projectCurveEdge, Istream); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::projectCurveEdge::projectCurveEdge +( + const dictionary& dict, + const label index, + const searchableSurfaces& geometry, + const pointField& points, + Istream& is +) +: + blockEdge(dict, index, points, is), + geometry_(geometry) +{ + wordList names(is); + surfaces_.setSize(names.size()); + forAll(names, i) + { + surfaces_[i] = geometry_.findSurfaceID(names[i]); + + if (surfaces_[i] == -1) + { + FatalIOErrorInFunction(is) + << "Cannot find surface " << names[i] << " in geometry" + << exit(FatalIOError); + } + + if (isA<searchableExtrudedCircle>(geometry_[surfaces_[i]])) + { + Info<< type() << " : Using curved surface " + << geometry_[surfaces_[i]].name() + << " to predict starting points." << endl; + } + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp<Foam::pointField> +Foam::projectCurveEdge::position(const scalarList& lambdas) const +{ + // For debugging to tag the output + static label eIter = 0; + + autoPtr<OBJstream> debugStr; + if (debug) + { + debugStr.reset + ( + new OBJstream("projectCurveEdge_" + Foam::name(eIter++) + ".obj") + ); + Info<< "Writing lines from straight-line start points" + << " to projected points to " << debugStr().name() << endl; + } + + + tmp<pointField> tpoints(new pointField(lambdas.size())); + pointField& points = tpoints.ref(); + + const point& startPt = points_[start_]; + const point& endPt = points_[end_]; + const vector d = endPt-startPt; + + // Initial guess + forAll(lambdas, i) + { + points[i] = startPt+lambdas[i]*d; + } + + // Use special interpolation to keep initial guess on same position on + // surface + forAll(surfaces_, i) + { + if (isA<searchableExtrudedCircle>(geometry_[surfaces_[i]])) + { + const searchableExtrudedCircle& s = + refCast<const searchableExtrudedCircle> + ( + geometry_[surfaces_[i]] + ); + List<pointIndexHit> nearInfo; + s.findParametricNearest + ( + points[0], + points.last(), + scalarField(lambdas), + scalarField(points.size(), magSqr(d)), + nearInfo + ); + forAll(nearInfo, i) + { + if (nearInfo[i].hit()) + { + points[i] = nearInfo[i].hitPoint(); + } + } + + break; + } + } + + + + // Upper limit for number of iterations + const label maxIter = 10; + // Residual tolerance + const scalar relTol = 0.1; + const scalar absTol = 1e-4; + + scalar initialResidual = 0.0; + + for (label iter = 0; iter < maxIter; iter++) + { + // Do projection + { + List<pointConstraint> constraints(lambdas.size()); + pointField start(points); + searchableSurfacesQueries::findNearest + ( + geometry_, + surfaces_, + start, + scalarField(start.size(), magSqr(d)), + points, + constraints + ); + + // Reset start and end point + if (lambdas[0] < SMALL) + { + points[0] = startPt; + } + if (lambdas.last() > 1.0-SMALL) + { + points.last() = endPt; + } + + if (debugStr.valid()) + { + forAll(points, i) + { + debugStr().write(linePointRef(start[i], points[i])); + } + } + } + + // Calculate lambdas (normalised coordinate along edge) + scalarField projLambdas(points.size()); + { + projLambdas[0] = 0.0; + for (label i = 1; i < points.size(); i++) + { + projLambdas[i] = projLambdas[i-1] + mag(points[i]-points[i-1]); + } + projLambdas /= projLambdas.last(); + } + linearInterpolationWeights interpolator(projLambdas); + + // Compare actual distances and move points (along straight line; + // not along surface) + vectorField residual(points.size(), vector::zero); + labelList indices; + scalarField weights; + for (label i = 1; i < points.size() - 1; i++) + { + interpolator.valueWeights(lambdas[i], indices, weights); + + point predicted = vector::zero; + forAll(indices, indexi) + { + predicted += weights[indexi]*points[indices[indexi]]; + } + residual[i] = predicted-points[i]; + } + + scalar scalarResidual = sum(mag(residual)); + + if (debug) + { + Pout<< "Iter:" << iter << " initialResidual:" << initialResidual + << " residual:" << scalarResidual << endl; + } + + if (scalarResidual < absTol*0.5*lambdas.size()) + { + break; + } + else if (iter == 0) + { + initialResidual = scalarResidual; + } + else if (scalarResidual/initialResidual < relTol) + { + break; + } + + + if (debugStr.valid()) + { + forAll(points, i) + { + const point predicted(points[i] + residual[i]); + debugStr().write(linePointRef(points[i], predicted)); + } + } + + points += residual; + } + + return tpoints; +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockEdges/projectCurveEdge/projectCurveEdge.H b/src/mesh/blockMesh/blockEdges/projectCurveEdge/projectCurveEdge.H new file mode 100644 index 0000000000000000000000000000000000000000..27d7f7ffcac5bb860500e90cf912b86b5692c60a --- /dev/null +++ b/src/mesh/blockMesh/blockEdges/projectCurveEdge/projectCurveEdge.H @@ -0,0 +1,128 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::projectCurveEdge + +Description + Defines the edge from the projection onto a surface (single surface) + or intersection of two surfaces. + +SourceFiles + projectCurveEdge.C + +\*---------------------------------------------------------------------------*/ + +#ifndef projectCurveEdge_H +#define projectCurveEdge_H + +#include "blockEdge.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class pointConstraint; + +/*---------------------------------------------------------------------------*\ + Class projectCurveEdge Declaration +\*---------------------------------------------------------------------------*/ + +class projectCurveEdge +: + public blockEdge +{ + // Private data + + const searchableSurfaces& geometry_; + + //- The indices of surfaces onto which the points are projected + labelList surfaces_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + projectCurveEdge(const projectCurveEdge&); + + //- Disallow default bitwise assignment + void operator=(const projectCurveEdge&); + + +public: + + //- Runtime type information + TypeName("projectCurve"); + + + // Constructors + + //- Construct from Istream setting pointsList + projectCurveEdge + ( + const dictionary& dict, + const label index, + const searchableSurfaces& geometry, + const pointField& points, + Istream& + ); + + + //- Destructor + virtual ~projectCurveEdge() + {} + + + // Member Functions + + //- Return the point positions corresponding to the curve parameters + // 0 <= lambda <= 1 + virtual point position(const scalar) const + { + NotImplemented; + return point::max; + } + + //- Return the point positions corresponding to the curve parameters + // 0 <= lambda <= 1 + virtual tmp<pointField> position(const scalarList&) const; + + //- Return the length of the curve + virtual scalar length() const + { + NotImplemented; + return 1; + } +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.C b/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.C index 9f10f341918cad067e0705ab25a0abce66c4aa13..4af420d1880334f1457f7fc4738e685258d31ff9 100644 --- a/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.C +++ b/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.C @@ -29,6 +29,7 @@ License #include "addToRunTimeSelectionTable.H" #include "pointConstraint.H" #include "OBJstream.H" +#include "linearInterpolationWeights.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -79,12 +80,14 @@ void Foam::projectEdge::findNearest Foam::projectEdge::projectEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ) : - blockEdge(points, is), + blockEdge(dict, index, points, is), geometry_(geometry) { wordList names(is); @@ -108,7 +111,7 @@ Foam::projectEdge::projectEdge Foam::point Foam::projectEdge::position(const scalar lambda) const { // Initial guess - const point start(points_[start_]+lambda*(points_[end_]-points_[start_])); + const point start(points_[start_] + lambda*(points_[end_]-points_[start_])); point near(start); @@ -125,7 +128,20 @@ Foam::point Foam::projectEdge::position(const scalar lambda) const Foam::tmp<Foam::pointField> Foam::projectEdge::position(const scalarList& lambdas) const { - static label iter = 0; + // For debugging to tag the output + static label eIter = 0; + + autoPtr<OBJstream> debugStr; + if (debug) + { + debugStr.reset + ( + new OBJstream("projectEdge_" + Foam::name(eIter++) + ".obj") + ); + Info<< "Writing lines from straight-line start points" + << " to projected points to " << debugStr().name() << endl; + } + tmp<pointField> tpoints(new pointField(lambdas.size())); pointField& points = tpoints.ref(); @@ -141,17 +157,26 @@ Foam::projectEdge::position(const scalarList& lambdas) const } - for (label i = 0; i < 3; i++) + // Upper limit for number of iterations + const label maxIter = 10; + // Residual tolerance + const scalar relTol = 0.1; + const scalar absTol = 1e-4; + + scalar initialResidual = 0.0; + + for (label iter = 0; iter < maxIter; iter++) { // Do projection { List<pointConstraint> constraints(lambdas.size()); + pointField start(points); searchableSurfacesQueries::findNearest ( geometry_, surfaces_, - pointField(points), - scalarField(points.size(), magSqr(d)), + start, + scalarField(start.size(), magSqr(d)), points, constraints ); @@ -165,63 +190,77 @@ Foam::projectEdge::position(const scalarList& lambdas) const { points.last() = endPt; } + + if (debugStr.valid()) + { + forAll(points, i) + { + debugStr().write(linePointRef(start[i], points[i])); + } + } } - // Calculate distances - scalarField nearLength(points.size()); + // Calculate lambdas (normalised coordinate along edge) + scalarField projLambdas(points.size()); { - nearLength[0] = 0.0; - for(label i = 1; i < points.size(); i++) + projLambdas[0] = 0.0; + for (label i = 1; i < points.size(); i++) { - nearLength[i] = nearLength[i-1] + mag(points[i]-points[i-1]); + projLambdas[i] = projLambdas[i-1] + mag(points[i]-points[i-1]); } + projLambdas /= projLambdas.last(); } + linearInterpolationWeights interpolator(projLambdas); // Compare actual distances and move points (along straight line; // not along surface) - for(label i = 1; i < points.size() - 1; i++) + vectorField residual(points.size(), vector::zero); + labelList indices; + scalarField weights; + for (label i = 1; i < points.size() - 1; i++) { - scalar nearDelta = mag(points[i]-points[i-1])/nearLength.last(); - scalar wantedDelta = lambdas[i]-lambdas[i-1]; + interpolator.valueWeights(lambdas[i], indices, weights); - vector v(points[i]-points[i-1]); - points[i] = points[i-1]+wantedDelta/nearDelta*v; + point predicted = vector::zero; + forAll(indices, indexi) + { + predicted += weights[indexi]*points[indices[indexi]]; + } + residual[i] = predicted-points[i]; } - } + scalar scalarResidual = sum(mag(residual)); - if (debug) - { - OBJstream str("projectEdge_" + Foam::name(iter++) + ".obj"); - Info<< "Writing lines from straight-line start points" - << " to projected points to " << str.name() << endl; - - pointField startPts(lambdas.size()); - forAll(lambdas, i) + if (debug) { - startPts[i] = startPt+lambdas[i]*d; + Pout<< "Iter:" << iter << " initialResidual:" << initialResidual + << " residual:" << scalarResidual << endl; } - pointField nearPts(lambdas.size()); - List<pointConstraint> nearConstraints(lambdas.size()); + if (scalarResidual < absTol*0.5*lambdas.size()) { - const scalar distSqr = magSqr(d); - searchableSurfacesQueries::findNearest - ( - geometry_, - surfaces_, - startPts, - scalarField(startPts.size(), distSqr), - nearPts, - nearConstraints - ); + break; + } + else if (iter == 0) + { + initialResidual = scalarResidual; + } + else if (scalarResidual/initialResidual < relTol) + { + break; } - forAll(startPts, i) + + if (debugStr.valid()) { - str.write(linePointRef(startPts[i], nearPts[i])); - str.write(linePointRef(nearPts[i], points[i])); + forAll(points, i) + { + const point predicted(points[i] + residual[i]); + debugStr().write(linePointRef(points[i], predicted)); + } } + + points += residual; } return tpoints; diff --git a/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.H b/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.H index cf8baebe75edf3a8d824d3e099e2305c2f558165..320f658eb57411b89e1ed39deb8ecf1163960534 100644 --- a/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.H +++ b/src/mesh/blockMesh/blockEdges/projectEdge/projectEdge.H @@ -84,6 +84,8 @@ public: //- Construct from Istream setting pointsList projectEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& diff --git a/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.C b/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.C index 5a6be74f4e8dd94b6b87d1fd777825f72eb069de..0e70e255c82b2b74a44e2093ffe46712387fe3b9 100644 --- a/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.C +++ b/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.C @@ -62,12 +62,14 @@ Foam::blockEdges::splineEdge::splineEdge Foam::blockEdges::splineEdge::splineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField& points, Istream& is ) : - blockEdge(points, is), + blockEdge(dict, index, points, is), CatmullRomSpline(appendEndPoints(points, start_, end_, pointField(is))) { token t(is); diff --git a/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.H b/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.H index 4080b606c82a7b72698632567851e96c5ecc5da5..e1457a2d87070597293918e400b6f26bca495917 100644 --- a/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.H +++ b/src/mesh/blockMesh/blockEdges/splineEdge/splineEdge.H @@ -83,6 +83,8 @@ public: //- Construct from Istream, setting pointsList splineEdge ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, const pointField&, Istream& diff --git a/src/mesh/blockMesh/blockFaces/blockFace/blockFace.C b/src/mesh/blockMesh/blockFaces/blockFace/blockFace.C index 388c9fcc5dc9402c8e11d4fc9a8135584d7875d6..7f777b8a8031e5a362e71320b670781d4945a2b3 100644 --- a/src/mesh/blockMesh/blockFaces/blockFace/blockFace.C +++ b/src/mesh/blockMesh/blockFaces/blockFace/blockFace.C @@ -24,6 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "blockFace.H" +#include "blockMeshTools.H" +#include "blockVertex.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -42,9 +44,21 @@ Foam::blockFace::blockFace(const face& vertices) {} -Foam::blockFace::blockFace(Istream& is) +Foam::blockFace::blockFace +( + const dictionary& dict, + const label index, + Istream& is +) : - vertices_(is) + vertices_ + ( + blockMeshTools::read<label> + ( + is, + dict.subOrEmptyDict("namedVertices") + ) + ) {} @@ -57,6 +71,8 @@ Foam::autoPtr<Foam::blockFace> Foam::blockFace::clone() const Foam::autoPtr<Foam::blockFace> Foam::blockFace::New ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& is ) @@ -81,7 +97,26 @@ Foam::autoPtr<Foam::blockFace> Foam::blockFace::New << abort(FatalError); } - return autoPtr<blockFace>(cstrIter()(geometry, is)); + return autoPtr<blockFace>(cstrIter()(dict, index, geometry, is)); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::blockFace::write(Ostream& os, const dictionary& d) const +{ + // Write size and start delimiter + os << vertices_.size() << token::BEGIN_LIST; + + // Write contents + forAll(vertices_, i) + { + if (i > 0) os << token::SPACE; + blockVertex::write(os, vertices_[i], d); + } + + // Write end delimiter + os << token::END_LIST; } diff --git a/src/mesh/blockMesh/blockFaces/blockFace/blockFace.H b/src/mesh/blockMesh/blockFaces/blockFace/blockFace.H index fee6771d79bb6b6a2dd08cef7626aa180a675bb6..f890aa3ae79bf79a08335a35f648a770184c6d26 100644 --- a/src/mesh/blockMesh/blockFaces/blockFace/blockFace.H +++ b/src/mesh/blockMesh/blockFaces/blockFace/blockFace.H @@ -77,10 +77,12 @@ public: blockFace, Istream, ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& is ), - (geometry, is) + (dict, index, geometry, is) ); @@ -90,7 +92,12 @@ public: blockFace(const face& vertices); //- Construct from Istream - blockFace(Istream&); + blockFace + ( + const dictionary& dict, + const label index, + Istream& + ); //- Clone function virtual autoPtr<blockFace> clone() const; @@ -98,6 +105,8 @@ public: //- New function which constructs and returns pointer to a blockFace static autoPtr<blockFace> New ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& ); @@ -106,18 +115,22 @@ public: // PtrLists of blockFace class iNew { + const dictionary& dict_; const searchableSurfaces& geometry_; + mutable label index_; public: - iNew(const searchableSurfaces& geometry) + iNew(const dictionary& dict, const searchableSurfaces& geometry) : - geometry_(geometry) + dict_(dict), + geometry_(geometry), + index_(0) {} autoPtr<blockFace> operator()(Istream& is) const { - return blockFace::New(geometry_, is); + return blockFace::New(dict_, index_++, geometry_, is); } }; @@ -145,6 +158,9 @@ public: pointField& points ) const = 0; + //- Write face with variable backsubstitution + void write(Ostream&, const dictionary&) const; + // Ostream operator diff --git a/src/mesh/blockMesh/blockFaces/projectFace/projectFace.C b/src/mesh/blockMesh/blockFaces/projectFace/projectFace.C index 2cf9c9742769e71c72f30e3c6cf9fd86b2e60cc0..36129e6c8ac981b1f907ce66a348b35e3370a927 100644 --- a/src/mesh/blockMesh/blockFaces/projectFace/projectFace.C +++ b/src/mesh/blockMesh/blockFaces/projectFace/projectFace.C @@ -27,6 +27,8 @@ License #include "unitConversion.H" #include "addToRunTimeSelectionTable.H" #include "blockDescriptor.H" +#include "OBJstream.H" +#include "linearInterpolationWeights.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -66,15 +68,74 @@ const Foam::searchableSurface& Foam::blockFaces::projectFace::lookupSurface } +Foam::label Foam::blockFaces::projectFace::index +( + const labelPair& n, + const labelPair& coord +) const +{ + return coord.first() + coord.second()*n.first(); +} + + +void Foam::blockFaces::projectFace::calcLambdas +( + const labelPair& n, + const pointField& points, + scalarField& lambdaI, + scalarField& lambdaJ +) const +{ + lambdaI.setSize(points.size()); + lambdaI = 0.0; + lambdaJ.setSize(points.size()); + lambdaJ = 0.0; + + for (label i = 1; i < n.first(); i++) + { + for (label j = 1; j < n.second(); j++) + { + label ij = index(n, labelPair(i, j)); + label iMin1j = index(n, labelPair(i-1, j)); + lambdaI[ij] = lambdaI[iMin1j] + mag(points[ij]-points[iMin1j]); + + label ijMin1 = index(n, labelPair(i, j-1)); + lambdaJ[ij] = lambdaJ[ijMin1] + mag(points[ij]-points[ijMin1]); + } + } + + for (label i = 1; i < n.first(); i++) + { + label ijLast = index(n, labelPair(i, n.second()-1)); + for (label j = 1; j < n.second(); j++) + { + label ij = index(n, labelPair(i, j)); + lambdaJ[ij] /= lambdaJ[ijLast]; + } + } + for (label j = 1; j < n.second(); j++) + { + label iLastj = index(n, labelPair(n.first()-1, j)); + for (label i = 1; i < n.first(); i++) + { + label ij = index(n, labelPair(i, j)); + lambdaI[ij] /= lambdaI[iLastj]; + } + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::blockFaces::projectFace::projectFace ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& is ) : - blockFace(is), + blockFace(dict, index, is), surface_(lookupSurface(geometry, is)) {} @@ -88,20 +149,215 @@ void Foam::blockFaces::projectFace::project pointField& points ) const { - List<pointIndexHit> hits; - scalarField nearestDistSqr - ( - points.size(), - magSqr(points[0] - points[points.size()-1]) - ); - surface_.findNearest(points, nearestDistSqr, hits); - - forAll(hits, i) + // For debugging to tag the output + static label fIter = 0; + + autoPtr<OBJstream> debugStr; + if (debug) { - if (hits[i].hit()) + debugStr.reset + ( + new OBJstream("projectFace_" + Foam::name(fIter++) + ".obj") + ); + Info<< "Face:" << blockFacei << " on block:" << desc.blockShape() + << " with verts:" << desc.vertices() + << " writing lines from start points" + << " to projected points to " << debugStr().name() << endl; + } + + + // Find out range of vertices in face + labelPair n(-1, -1); + switch (blockFacei) + { + case 0: + case 1: + { + n.first() = desc.density()[1] + 1; + n.second() = desc.density()[2] + 1; + } + break; + + case 2: + case 3: + { + n.first() = desc.density()[0] + 1; + n.second() = desc.density()[2] + 1; + } + break; + + case 4: + case 5: { - points[i] = hits[i].hitPoint(); + n.first() = desc.density()[0] + 1; + n.second() = desc.density()[1] + 1; } + break; + } + + + // Calculate initial normalised edge lengths (= u,v coordinates) + scalarField lambdaI(points.size(), 0.0); + scalarField lambdaJ(points.size(), 0.0); + calcLambdas(n, points, lambdaI, lambdaJ); + + + // Upper limit for number of iterations + const label maxIter = 10; + // Residual tolerance + const scalar relTol = 0.1; + + scalar initialResidual = 0.0; + scalar iResidual = 0.0; + scalar jResidual = 0.0; + + for (label iter = 0; iter < maxIter; iter++) + { + // Do projection + { + List<pointIndexHit> hits; + scalarField nearestDistSqr + ( + points.size(), + magSqr(points[0] - points[points.size()-1]) + ); + surface_.findNearest(points, nearestDistSqr, hits); + + forAll(hits, i) + { + if (hits[i].hit()) + { + const point& hitPt = hits[i].hitPoint(); + if (debugStr.valid()) + { + debugStr().write(linePointRef(points[i], hitPt)); + } + points[i] = hitPt; + } + } + } + + if (debug) + { + Pout<< "Iter:" << iter << " initialResidual:" << initialResidual + << " iResidual+jResidual:" << iResidual+jResidual << endl; + } + + + if (iter > 0 && (iResidual+jResidual)/initialResidual < relTol) + { + break; + } + + + // Predict along i + vectorField residual(points.size(), vector::zero); + + // Work arrays for interpolation + labelList indices; + scalarField weights; + for (label j = 1; j < n.second()-1; j++) + { + // Calculate actual lamdba along constant j line + scalarField projLambdas(n.first()); + projLambdas[0] = 0.0; + for (label i = 1; i < n.first(); i++) + { + label ij = index(n, labelPair(i, j)); + label iMin1j = index(n, labelPair(i-1, j)); + projLambdas[i] = + projLambdas[i-1] + +mag(points[ij]-points[iMin1j]); + } + projLambdas /= projLambdas.last(); + + linearInterpolationWeights interpolator(projLambdas); + + for (label i = 1; i < n.first()-1; i++) + { + label ij = index(n, labelPair(i, j)); + + interpolator.valueWeights(lambdaI[ij], indices, weights); + + point predicted = vector::zero; + forAll(indices, indexi) + { + label ptIndex = index(n, labelPair(indices[indexi], j)); + predicted += weights[indexi]*points[ptIndex]; + } + residual[ij] = predicted-points[ij]; + } + } + + if (debugStr.valid()) + { + forAll(points, i) + { + const point predicted(points[i] + residual[i]); + debugStr().write(linePointRef(points[i], predicted)); + } + } + + iResidual = sum(mag(residual)); + + // Update points before doing j. Note: is this needed? Complicates + // residual checking. + points += residual; + + + // Predict along j + residual = vector::zero; + for (label i = 1; i < n.first()-1; i++) + { + // Calculate actual lamdba along constant i line + scalarField projLambdas(n.second()); + projLambdas[0] = 0.0; + for (label j = 1; j < n.second(); j++) + { + label ij = index(n, labelPair(i, j)); + label ijMin1 = index(n, labelPair(i, j-1)); + projLambdas[j] = + projLambdas[j-1] + +mag(points[ij]-points[ijMin1]); + } + + projLambdas /= projLambdas.last(); + + linearInterpolationWeights interpolator(projLambdas); + + for (label j = 1; j < n.second()-1; j++) + { + label ij = index(n, labelPair(i, j)); + + interpolator.valueWeights(lambdaJ[ij], indices, weights); + + point predicted = vector::zero; + forAll(indices, indexi) + { + label ptIndex = index(n, labelPair(i, indices[indexi])); + predicted += weights[indexi]*points[ptIndex]; + } + residual[ij] = predicted-points[ij]; + } + } + + if (debugStr.valid()) + { + forAll(points, i) + { + const point predicted(points[i] + residual[i]); + debugStr().write(linePointRef(points[i], predicted)); + } + } + + jResidual = sum(mag(residual)); + + if (iter == 0) + { + initialResidual = iResidual + jResidual; + } + + points += residual; } } diff --git a/src/mesh/blockMesh/blockFaces/projectFace/projectFace.H b/src/mesh/blockMesh/blockFaces/projectFace/projectFace.H index c1b56bbcdba83e101bc1ae23be684b33d011e5dd..635318b05c27501c95bdb281a87a94e1f9f33409 100644 --- a/src/mesh/blockMesh/blockFaces/projectFace/projectFace.H +++ b/src/mesh/blockMesh/blockFaces/projectFace/projectFace.H @@ -67,6 +67,22 @@ class projectFace Istream& is ) const; + //- Convert i,j to single index + label index + ( + const labelPair& n, + const labelPair& coord + ) const; + + //- Calulate lambdas (but unnormalised) + void calcLambdas + ( + const labelPair& n, + const pointField& points, + scalarField& lambdaI, + scalarField& lambdaJ + ) const; + //- Disallow default bitwise copy construct projectFace(const projectFace&); @@ -85,6 +101,8 @@ public: //- Construct from Istream setting pointsList projectFace ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& ); diff --git a/src/mesh/blockMesh/blockMesh/blockMesh.C b/src/mesh/blockMesh/blockMesh/blockMesh.C index 366288e5ae72ef566d50681c0262a60650a2844f..10bb74f76521af7530500a299142a2153d4267e1 100644 --- a/src/mesh/blockMesh/blockMesh/blockMesh.C +++ b/src/mesh/blockMesh/blockMesh/blockMesh.C @@ -38,33 +38,34 @@ namespace Foam Foam::blockMesh::blockMesh(const IOdictionary& dict, const word& regionName) : - verboseOutput(dict.lookupOrDefault<Switch>("verbose", true)), + meshDict_(dict), + verboseOutput(meshDict_.lookupOrDefault<Switch>("verbose", true)), geometry_ ( IOobject ( "geometry", // dummy name - dict.time().constant(), // instance + meshDict_.time().constant(), // instance "geometry", // local - dict.time(), // registry + meshDict_.time(), // registry IOobject::MUST_READ, IOobject::NO_WRITE ), - dict.found("geometry") - ? dict.subDict("geometry") + meshDict_.found("geometry") + ? meshDict_.subDict("geometry") : dictionary(), true ), scaleFactor_(1.0), blockVertices_ ( - dict.lookup("vertices"), - blockVertex::iNew(geometry_) + meshDict_.lookup("vertices"), + blockVertex::iNew(meshDict_, geometry_) ), vertices_(Foam::vertices(blockVertices_)), - topologyPtr_(createTopology(dict, regionName)) + topologyPtr_(createTopology(meshDict_, regionName)) { - Switch fastMerge(dict.lookupOrDefault<Switch>("fastMerge", false)); + Switch fastMerge(meshDict_.lookupOrDefault<Switch>("fastMerge", false)); if (fastMerge) { diff --git a/src/mesh/blockMesh/blockMesh/blockMesh.H b/src/mesh/blockMesh/blockMesh/blockMesh.H index fcd3698c34027ee3f08cf42be98ce2751a5d25af..01f9bf6411b0bf7e1e9675d818d4ab3f1c4cb821 100644 --- a/src/mesh/blockMesh/blockMesh/blockMesh.H +++ b/src/mesh/blockMesh/blockMesh/blockMesh.H @@ -65,6 +65,9 @@ class blockMesh { // Private data + //- Reference to mesh dictionary + const IOdictionary& meshDict_; + //- Switch for verbose output bool verboseOutput; @@ -139,7 +142,7 @@ class blockMesh polyMesh* createTopology(const IOdictionary&, const word& regionName); - void check(const polyMesh&) const; + void check(const polyMesh&, const dictionary&) const; //- Determine the merge info and the final number of cells/points void calcMergeInfo(); @@ -178,6 +181,12 @@ public: // Access + //- Access to input dictionary + const dictionary& meshDict() const + { + return meshDict_; + } + //- Optional searchable geometry to project face-points to const searchableSurfaces& geometry() const { diff --git a/src/mesh/blockMesh/blockMesh/blockMeshCheck.C b/src/mesh/blockMesh/blockMesh/blockMeshCheck.C index 10bd9e3116df63d26c852f0972749ffa94da3752..fc0c08b8623443bfcd277132f852d8755a958a00 100644 --- a/src/mesh/blockMesh/blockMesh/blockMeshCheck.C +++ b/src/mesh/blockMesh/blockMesh/blockMeshCheck.C @@ -27,7 +27,7 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::blockMesh::check(const polyMesh& bm) const +void Foam::blockMesh::check(const polyMesh& bm, const dictionary& dict) const { Info<< nl << "Check topology" << endl; @@ -40,8 +40,9 @@ void Foam::blockMesh::check(const polyMesh& bm) const { if (edges_[cei].compare(edges_[cej]) != 0) { - Info<< " Curved edge " << edges_[cej] - << " is a duplicate of curved edge " << edges_[cei] + Info<< " Curved edge "; + edges_[cej].write(Info, dict); + Info<< " is a duplicate of curved edge " << edges_[cei] << endl; ok = false; break; @@ -74,8 +75,9 @@ void Foam::blockMesh::check(const polyMesh& bm) const if (!found) { - Info<< " Curved edge " << edges_[cei] - << " does not correspond to a block edge." + Info<< " Curved edge "; + edges_[cei].write(Info, dict); + Info<< " does not correspond to a block edge." << endl; ok = false; } @@ -90,9 +92,11 @@ void Foam::blockMesh::check(const polyMesh& bm) const { if (faces_[cfi].compare(faces_[cfj]) != 0) { - Info<< " Curved face " << faces_[cfj] - << " is a duplicate of curved face " << faces_[cfi] - << endl; + Info<< " Curved face "; + faces_[cfj].write(Info, dict); + Info<< " is a duplicate of curved face "; + faces_[cfi].write(Info, dict); + Info<< endl; ok = false; break; } @@ -112,9 +116,9 @@ void Foam::blockMesh::check(const polyMesh& bm) const if (!found) { - Info<< " Curved face " << faces_[cfi] - << " does not correspond to a block face." - << endl; + Info<< " Curved face "; + faces_[cfi].write(Info, dict); + Info<< " does not correspond to a block face." << endl; ok = false; } } diff --git a/src/mesh/blockMesh/blockMesh/blockMeshTopology.C b/src/mesh/blockMesh/blockMesh/blockMeshTopology.C index ab998442051ad93e6b1bf0bc884573f33f857f43..ff275c852e6b69c484306d64126ab320fdcf8718 100644 --- a/src/mesh/blockMesh/blockMesh/blockMeshTopology.C +++ b/src/mesh/blockMesh/blockMesh/blockMeshTopology.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "blockMesh.H" +#include "blockMeshTools.H" #include "Time.H" #include "preservePatchTypes.H" #include "emptyPolyPatch.H" @@ -110,6 +111,11 @@ void Foam::blockMesh::readPatches wordList& nbrPatchNames ) { + // Collect all variables + dictionary varDict(meshDescription.subOrEmptyDict("namedVertices")); + varDict.merge(meshDescription.subOrEmptyDict("namedBlocks")); + + ITstream& patchStream(meshDescription.lookup("patches")); // Read number of patches in mesh @@ -160,7 +166,11 @@ void Foam::blockMesh::readPatches >> patchNames[nPatches]; // Read patch faces - patchStream >> tmpBlocksPatches[nPatches]; + tmpBlocksPatches[nPatches] = blockMeshTools::read<face> + ( + patchStream, + varDict + ); // Check for multiple patches @@ -258,6 +268,11 @@ void Foam::blockMesh::readBoundary PtrList<dictionary>& patchDicts ) { + // Collect all variables + dictionary varDict(meshDescription.subOrEmptyDict("namedVertices")); + varDict.merge(meshDescription.subOrEmptyDict("namedBlocks")); + + // Read like boundary file const PtrList<entry> patchesInfo ( @@ -286,7 +301,12 @@ void Foam::blockMesh::readBoundary patchDicts.set(patchi, new dictionary(patchInfo.dict())); // Read block faces - patchDicts[patchi].lookup("faces") >> tmpBlocksPatches[patchi]; + tmpBlocksPatches[patchi] = blockMeshTools::read<face> + ( + patchDicts[patchi].lookup("faces"), + varDict + ); + checkPatchLabels ( @@ -353,7 +373,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology blockEdgeList edges ( meshDescription.lookup("edges"), - blockEdge::iNew(geometry_, vertices_) + blockEdge::iNew(meshDescription, geometry_, vertices_) ); edges_.transfer(edges); @@ -375,7 +395,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology blockFaceList faces ( meshDescription.lookup("faces"), - blockFace::iNew(geometry_) + blockFace::iNew(meshDescription, geometry_) ); faces_.transfer(faces); @@ -395,7 +415,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology blockList blocks ( meshDescription.lookup("blocks"), - block::iNew(vertices_, edges_, faces_) + block::iNew(meshDescription, vertices_, edges_, faces_) ); transfer(blocks); @@ -545,7 +565,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology ); } - check(*blockMeshPtr); + check(*blockMeshPtr, meshDescription); return blockMeshPtr; } diff --git a/src/mesh/blockMesh/blockMeshTools/blockMeshTools.C b/src/mesh/blockMesh/blockMeshTools/blockMeshTools.C new file mode 100644 index 0000000000000000000000000000000000000000..465998ce9d65ecd4ea802126e077d6e3517741ba --- /dev/null +++ b/src/mesh/blockMesh/blockMeshTools/blockMeshTools.C @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "blockMeshTools.H" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::blockMeshTools::read +( + Istream& is, + label& val, + const dictionary& dict +) +{ + token t(is); + if (t.isLabel()) + { + val = t.labelToken(); + } + else if (t.isWord()) + { + const word& varName = t.wordToken(); + const entry* ePtr = dict.lookupScopedEntryPtr + ( + varName, + true, + true + ); + if (ePtr) + { + // Read as label + val = Foam::readLabel(ePtr->stream()); + } + else + { + FatalIOErrorInFunction(is) + << "Undefined variable " + << varName << ". Valid variables are " << dict + << exit(FatalIOError); + } + } + else + { + FatalIOErrorInFunction(is) + << "Illegal token " << t.info() + << " when trying to read label" + << exit(FatalIOError); + } + + is.fatalCheck + ( + "operator>>(Istream&, List<T>&) : reading entry" + ); +} + + +Foam::label Foam::blockMeshTools::read +( + Istream& is, + const dictionary& dict +) +{ + label val; + read(is, val, dict); + return val; +} + + +void Foam::blockMeshTools::write +( + Ostream& os, + const label val, + const dictionary& dict +) +{ + forAllConstIter(dictionary, dict, iter) + { + if (iter().isStream()) + { + label keyVal(Foam::readLabel(iter().stream())); + if (keyVal == val) + { + os << iter().keyword(); + return; + } + } + } + os << val; +} + + +const Foam::keyType& Foam::blockMeshTools::findEntry +( + const dictionary& dict, + const label val +) +{ + forAllConstIter(dictionary, dict, iter) + { + if (iter().isStream()) + { + label keyVal(Foam::readLabel(iter().stream())); + if (keyVal == val) + { + return iter().keyword(); + } + } + } + + return keyType::null; +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockMeshTools/blockMeshTools.H b/src/mesh/blockMesh/blockMeshTools/blockMeshTools.H new file mode 100644 index 0000000000000000000000000000000000000000..ee18555f90985bddf1c41c28594e880efafed0a1 --- /dev/null +++ b/src/mesh/blockMesh/blockMeshTools/blockMeshTools.H @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------* \ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Namespace + Foam::blockMeshTools + +Description + Tools for parsing label(List) with dictionary lookup. + +SourceFiles + blockMeshTools.C + blockMeshToolsTemplates.C + +\*---------------------------------------------------------------------------*/ + +#ifndef blockMeshTools_H +#define blockMeshTools_H + +#include "dictionary.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace blockMeshTools +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + //- In-place read with dictionary lookup + void read(Istream&, label&, const dictionary&); + + //- In-place read with dictionary lookup + template<class T> + void read(Istream&, List<T>&, const dictionary&); + + //- Return-read with dictionary lookup + label read(Istream&, const dictionary&); + + //- Return-read with dictionary lookup + template<class T> + List<T> read(Istream& is, const dictionary&); + + //- Write with dictionary lookup + void write(Ostream&, const label, const dictionary&); + + //- Linear search for label entry + const keyType& findEntry(const dictionary&, const label); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace blockMeshTools +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "blockMeshToolsTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockMeshTools/blockMeshToolsTemplates.C b/src/mesh/blockMesh/blockMeshTools/blockMeshToolsTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..1df2dcc975a77f5498c66b46eb4db6a51f694404 --- /dev/null +++ b/src/mesh/blockMesh/blockMeshTools/blockMeshToolsTemplates.C @@ -0,0 +1,115 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class T> +void Foam::blockMeshTools::read +( + Istream& is, + List<T>& L, + const dictionary& dict +) +{ + token firstToken(is); + + if (firstToken.isLabel()) + { + label s = firstToken.labelToken(); + + // Set list length to that read + L.setSize(s); + + // Read list contents depending on data format + + // Read beginning of contents + char delimiter = is.readBeginList("List"); + + if (s) + { + if (delimiter == token::BEGIN_LIST) + { + for (label i=0; i<s; i++) + { + read(is, L[i], dict); + } + } + } + + // Read end of contents + is.readEndList("List"); + } + else if (firstToken.isPunctuation()) + { + if (firstToken.pToken() != token::BEGIN_LIST) + { + FatalIOErrorInFunction(is) + << "incorrect first token, expected '(', found " + << firstToken.info() + << exit(FatalIOError); + } + + SLList<T> sll; + + while (true) + { + token t(is); + if (t.isPunctuation() && t.pToken() == token::END_LIST) + { + break; + } + is.putBack(t); + T elem; + read(is, elem, dict); + sll.append(elem); + } + + // Convert the singly-linked list to this list + L = sll; + } + else + { + FatalIOErrorInFunction(is) + << "incorrect first token, expected <int> or '(', found " + << firstToken.info() + << exit(FatalIOError); + } +} + + +template<class T> +Foam::List<T> Foam::blockMeshTools::read +( + Istream& is, + const dictionary& dict +) +{ + List<T> L; + read(is, L, dict); + return L; +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.C b/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.C index fe8ab41dc590827f32ef1f0a22e6b9586c83871c..fba46625b14df8787e1e8b6fb0d09e5f5de689f4 100644 --- a/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.C +++ b/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.C @@ -25,6 +25,7 @@ License #include "blockVertex.H" #include "pointVertex.H" +#include "blockMeshTools.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -50,6 +51,8 @@ Foam::autoPtr<Foam::blockVertex> Foam::blockVertex::clone() const Foam::autoPtr<Foam::blockVertex> Foam::blockVertex::New ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& is ) @@ -61,14 +64,14 @@ Foam::autoPtr<Foam::blockVertex> Foam::blockVertex::New token firstToken(is); - if (firstToken.pToken() == token::BEGIN_LIST) + if (firstToken.isPunctuation() && firstToken.pToken() == token::BEGIN_LIST) { // Putback the opening bracket is.putBack(firstToken); return autoPtr<blockVertex> ( - new blockVertices::pointVertex(geometry, is) + new blockVertices::pointVertex(dict, index, geometry, is) ); } else if (firstToken.isWord()) @@ -88,7 +91,7 @@ Foam::autoPtr<Foam::blockVertex> Foam::blockVertex::New << abort(FatalError); } - return autoPtr<blockVertex>(cstrIter()(geometry, is)); + return autoPtr<blockVertex>(cstrIter()(dict, index, geometry, is)); } else { @@ -102,4 +105,34 @@ Foam::autoPtr<Foam::blockVertex> Foam::blockVertex::New } +Foam::label Foam::blockVertex::read(Istream& is, const dictionary& dict) +{ + const dictionary* varDictPtr = dict.subDictPtr("namedVertices"); + if (varDictPtr) + { + return blockMeshTools::read(is, *varDictPtr); + } + return readLabel(is); +} + + +void Foam::blockVertex::write +( + Ostream& os, + const label val, + const dictionary& d +) +{ + const dictionary* varDictPtr = d.subDictPtr("namedVertices"); + if (varDictPtr) + { + blockMeshTools::write(os, val, *varDictPtr); + } + else + { + os << val; + } +} + + // ************************************************************************* // diff --git a/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.H b/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.H index 7d5bb9fbd635c16ca9a6da3774578f8b7640fdab..90a5169f041090f77921bc6374eec49a45233eb0 100644 --- a/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.H +++ b/src/mesh/blockMesh/blockVertices/blockVertex/blockVertex.H @@ -63,10 +63,12 @@ public: blockVertex, Istream, ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& is ), - (geometry, is) + (dict, index, geometry, is) ); @@ -81,6 +83,8 @@ public: //- New function which constructs and returns pointer to a blockVertex static autoPtr<blockVertex> New ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& ); @@ -89,18 +93,22 @@ public: // PtrLists of blockVertex class iNew { + const dictionary& dict_; const searchableSurfaces& geometry_; + mutable label index_; public: - iNew(const searchableSurfaces& geometry) + iNew(const dictionary& dict, const searchableSurfaces& geometry) : - geometry_(geometry) + dict_(dict), + geometry_(geometry), + index_(0) {} autoPtr<blockVertex> operator()(Istream& is) const { - return blockVertex::New(geometry_, is); + return blockVertex::New(dict_, index_++, geometry_, is); } }; @@ -113,6 +121,12 @@ public: // Member Functions virtual operator point() const = 0; + + //- Read vertex index with optional name lookup + static label read(Istream&, const dictionary&); + + //- Write vertex index with optional name backsubstitution + static void write(Ostream&, const label, const dictionary&); }; diff --git a/src/mesh/blockMesh/blockVertices/namedVertex/namedVertex.C b/src/mesh/blockMesh/blockVertices/namedVertex/namedVertex.C new file mode 100644 index 0000000000000000000000000000000000000000..5e9738602ed1b53ee84fd9c94a20684b09d50378 --- /dev/null +++ b/src/mesh/blockMesh/blockVertices/namedVertex/namedVertex.C @@ -0,0 +1,78 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "namedVertex.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace blockVertices +{ + defineTypeNameAndDebug(namedVertex, 0); + addToRunTimeSelectionTable(blockVertex, namedVertex, Istream); +} +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::blockVertices::namedVertex::namedVertex +( + const dictionary& dict, + const label index, + const searchableSurfaces& geometry, + Istream& is +) +: + name_(is), + vertexPtr_(blockVertex::New(dict, index, geometry, is)) +{ + dictionary& d = const_cast<dictionary&>(dict); + + dictionary* varDictPtr = d.subDictPtr("namedVertices"); + if (varDictPtr) + { + const_cast<dictionary&>(*varDictPtr).add(name_, index); + } + else + { + dictionary varDict; + varDict.add(name_, index); + d.add("namedVertices", varDict); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::blockVertices::namedVertex::operator point() const +{ + return vertexPtr_().operator point(); +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockVertices/namedVertex/namedVertex.H b/src/mesh/blockMesh/blockVertices/namedVertex/namedVertex.H new file mode 100644 index 0000000000000000000000000000000000000000..9e30ed15de0c2fcecab3c5ab5b97ca1f83d0fc14 --- /dev/null +++ b/src/mesh/blockMesh/blockVertices/namedVertex/namedVertex.H @@ -0,0 +1,104 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::blockVertices::namedVertex + +Description + Gives name to a vertex. + +SourceFiles + namedVertex.C + +\*---------------------------------------------------------------------------*/ + +#ifndef blockVertices_namedVertex_H +#define blockVertices_namedVertex_H + +#include "blockVertex.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace blockVertices +{ + +/*---------------------------------------------------------------------------*\ + Class namedVertex Declaration +\*---------------------------------------------------------------------------*/ + +class namedVertex +: + public blockVertex +{ +protected: + + // Protected member data + + //- The dictionary variable name for the vertex number + word name_; + + //- The vertex location + autoPtr<blockVertex> vertexPtr_; + + +public: + + //- Runtime type information + TypeName("name"); + + + // Constructors + + //- Construct from Istream setting pointsList + namedVertex + ( + const dictionary&, + const label index, + const searchableSurfaces& geometry, + Istream& + ); + + + //- Destructor + virtual ~namedVertex() + {} + + + // Member Functions + + virtual operator point() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace blockVertices +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.C b/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.C index 4b3120d98b2a3bea482f4366650d0ec5293ad573..4af95df1637f5aec1a8fe61a4a96a055dda5deb2 100644 --- a/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.C +++ b/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.C @@ -42,6 +42,8 @@ namespace blockVertices Foam::blockVertices::pointVertex::pointVertex ( + const dictionary&, + const label index, const searchableSurfaces& geometry, Istream& is ) diff --git a/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.H b/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.H index 1179c66bd5d8e2da6c70d9f7cb68276f1f0e6d21..929f92a25c201acc8caebb0ebd0da562923100a5 100644 --- a/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.H +++ b/src/mesh/blockMesh/blockVertices/pointVertex/pointVertex.H @@ -70,6 +70,8 @@ public: //- Construct from Istream setting pointsList pointVertex ( + const dictionary&, + const label index, const searchableSurfaces& geometry, Istream& ); diff --git a/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.C b/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.C index 04cff7d250343172f36a0b60ea58c2135aed0cba..f5d23fc50c9f1c21cc92a9678c4970c742ce3a28 100644 --- a/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.C +++ b/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.C @@ -45,11 +45,13 @@ namespace blockVertices Foam::blockVertices::projectVertex::projectVertex ( + const dictionary& dict, + const label index, const searchableSurfaces& geometry, Istream& is ) : - pointVertex(geometry, is), + pointVertex(dict, index, geometry, is), geometry_(geometry) { wordList names(is); @@ -79,8 +81,11 @@ Foam::blockVertices::projectVertex::operator point() const // Note: how far do we need to search? Probably not further than - // span of surfaces themselves. + // span of surfaces themselves. Make sure to limit in case + // of e.g. searchablePlane which has infinite bb. boundBox bb(searchableSurfacesQueries::bounds(geometry_, surfaces_)); + bb.min() = max(bb.min(), point(-GREAT, -GREAT, -GREAT)); + bb.max() = min(bb.max(), point(GREAT, GREAT, GREAT)); searchableSurfacesQueries::findNearest ( diff --git a/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.H b/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.H index 929b6a68ebe646fb6136e60cf3b520d5b517af42..d47dce6e8cbd89403986fce2f31f9b2c266bda3f 100644 --- a/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.H +++ b/src/mesh/blockMesh/blockVertices/projectVertex/projectVertex.H @@ -81,6 +81,8 @@ public: //- Construct from Istream setting pointsList projectVertex ( + const dictionary&, + const label index, const searchableSurfaces& geometry, Istream& ); diff --git a/src/mesh/blockMesh/blocks/block/block.C b/src/mesh/blockMesh/blocks/block/block.C new file mode 100644 index 0000000000000000000000000000000000000000..5d75aa5574f40903e41c973e6cd79b3623252eb2 --- /dev/null +++ b/src/mesh/blockMesh/blocks/block/block.C @@ -0,0 +1,119 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "block.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(block, 0); + defineRunTimeSelectionTable(block, Istream); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::block::block +( + const dictionary& dict, + const label index, + const pointField& vertices, + const blockEdgeList& edges, + const blockFaceList& faces, + Istream& is +) +: + blockDescriptor(dict, index, vertices, edges, faces, is) +{ + createPoints(); + createBoundary(); +} + + +Foam::block::block(const blockDescriptor& blockDesc) +: + blockDescriptor(blockDesc) +{ + createPoints(); + createBoundary(); +} + + +Foam::autoPtr<Foam::block> Foam::block::New +( + const dictionary& dict, + const label index, + const pointField& points, + const blockEdgeList& edges, + const blockFaceList& faces, + Istream& is +) +{ + if (debug) + { + InfoInFunction << "Constructing block" << endl; + } + + const word blockOrCellShapeType(is); + + IstreamConstructorTable::iterator cstrIter = + IstreamConstructorTablePtr_->find(blockOrCellShapeType); + + if (cstrIter == IstreamConstructorTablePtr_->end()) + { + is.putBack(blockOrCellShapeType); + return autoPtr<block>(new block(dict, index, points, edges, faces, is)); + } + else + { + return autoPtr<block> + ( + cstrIter() + ( + dict, + index, + points, + edges, + faces, + is + ) + ); + } +} + + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const block& b) +{ + os << b.points() << nl + << b.cells() << nl + << b.boundaryPatches() << endl; + + return os; +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/block/block.H b/src/mesh/blockMesh/blocks/block/block.H similarity index 78% rename from src/mesh/blockMesh/block/block.H rename to src/mesh/blockMesh/blocks/block/block.H index 7b55c5f59f1afb29765d7969b8b6e5170b0e9445..fb3012016d55d8b9ee1f5ad9789158c0ea4d4069 100644 --- a/src/mesh/blockMesh/block/block.H +++ b/src/mesh/blockMesh/blocks/block/block.H @@ -91,11 +91,36 @@ class block public: + //- Runtime type information + TypeName("block"); + + + // Declare run-time constructor selection tables + + declareRunTimeSelectionTable + ( + autoPtr, + block, + Istream, + ( + const dictionary& dict, + const label index, + const pointField& vertices, + const blockEdgeList& edges, + const blockFaceList& faces, + Istream& is + ), + (dict, index, vertices, edges, faces, is) + ); + + // Constructors //- Construct from components with Istream block ( + const dictionary& dict, + const label index, const pointField& vertices, const blockEdgeList& edges, const blockFaceList& faces, @@ -112,35 +137,56 @@ public: return autoPtr<block>(nullptr); } + //- New function which constructs and returns pointer to a block + static autoPtr<block> New + ( + const dictionary& dict, + const label index, + const pointField& points, + const blockEdgeList& edges, + const blockFaceList& faces, + Istream& + ); + //- Class used for the read-construction of // PtrLists of blocks class iNew { + const dictionary& dict_; const pointField& points_; const blockEdgeList& edges_; const blockFaceList& faces_; + mutable label index_; public: iNew ( + const dictionary& dict, const pointField& points, const blockEdgeList& edges, const blockFaceList& faces ) : + dict_(dict), points_(points), edges_(edges), - faces_(faces) + faces_(faces), + index_(0) {} autoPtr<block> operator()(Istream& is) const { - return autoPtr<block>(new block(points_, edges_, faces_, is)); + return block::New(dict_, index_++, points_, edges_, faces_, is); } }; + //- Destructor + virtual ~block() + {} + + // Member Functions // Access diff --git a/src/mesh/blockMesh/block/blockCreate.C b/src/mesh/blockMesh/blocks/block/blockCreate.C similarity index 100% rename from src/mesh/blockMesh/block/blockCreate.C rename to src/mesh/blockMesh/blocks/block/blockCreate.C diff --git a/src/mesh/blockMesh/block/blockI.H b/src/mesh/blockMesh/blocks/block/blockI.H similarity index 100% rename from src/mesh/blockMesh/block/blockI.H rename to src/mesh/blockMesh/blocks/block/blockI.H diff --git a/src/mesh/blockMesh/block/blockList.H b/src/mesh/blockMesh/blocks/block/blockList.H similarity index 95% rename from src/mesh/blockMesh/block/blockList.H rename to src/mesh/blockMesh/blocks/block/blockList.H index bfca6c9c60848ccaad05a9644190b634946b7ac4..80b8a328af597b678718eb4c97c456d05a2a860e 100644 --- a/src/mesh/blockMesh/block/blockList.H +++ b/src/mesh/blockMesh/blocks/block/blockList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,4 +53,3 @@ typedef PtrList<block> blockList; #endif // ************************************************************************* // - diff --git a/src/mesh/blockMesh/blocks/namedBlock/namedBlock.C b/src/mesh/blockMesh/blocks/namedBlock/namedBlock.C new file mode 100644 index 0000000000000000000000000000000000000000..023638b75ed724d2d7ee2f354c3fb1a8718ab212 --- /dev/null +++ b/src/mesh/blockMesh/blocks/namedBlock/namedBlock.C @@ -0,0 +1,71 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "namedBlock.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace blocks +{ + defineTypeNameAndDebug(namedBlock, 0); + addToRunTimeSelectionTable(block, namedBlock, Istream); +} +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::blocks::namedBlock::namedBlock +( + const dictionary& dict, + const label index, + const pointField& vertices, + const blockEdgeList& edges, + const blockFaceList& faces, + Istream& is +) +: + word(is), + block(dict, index, vertices, edges, faces, is) +{ + dictionary& d = const_cast<dictionary&>(dict); + dictionary* varDictPtr = d.subDictPtr("namedBlocks"); + if (varDictPtr) + { + const_cast<dictionary&>(*varDictPtr).add(*this, index); + } + else + { + dictionary varDict; + varDict.add(*this, index); + d.add("namedBlocks", varDict); + } +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/blocks/namedBlock/namedBlock.H b/src/mesh/blockMesh/blocks/namedBlock/namedBlock.H new file mode 100644 index 0000000000000000000000000000000000000000..992cbb0526517212da2915692ecc159ceb4e32b2 --- /dev/null +++ b/src/mesh/blockMesh/blocks/namedBlock/namedBlock.H @@ -0,0 +1,91 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::blocks::namedBlock + +Description + Gives name to a block. + +SourceFiles + namedBlock.C + +\*---------------------------------------------------------------------------*/ + +#ifndef blocks_namedBlock_H +#define blocks_namedBlock_H + +#include "block.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace blocks +{ + +/*---------------------------------------------------------------------------*\ + Class namedBlock Declaration +\*---------------------------------------------------------------------------*/ + +class namedBlock +: + public word, + public block +{ +public: + + //- Runtime type information + TypeName("name"); + + + // Constructors + + //- Construct from Istream setting pointsList + namedBlock + ( + const dictionary& dict, + const label index, + const pointField& vertices, + const blockEdgeList& edges, + const blockFaceList& faces, + Istream& is + ); + + + //- Destructor + virtual ~namedBlock() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace blocks +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/searchableExtrudedCircle/searchableExtrudedCircle.C b/src/mesh/blockMesh/searchableExtrudedCircle/searchableExtrudedCircle.C new file mode 100644 index 0000000000000000000000000000000000000000..9656656b77b726405f0b19bfe9ba227d7b100872 --- /dev/null +++ b/src/mesh/blockMesh/searchableExtrudedCircle/searchableExtrudedCircle.C @@ -0,0 +1,437 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "searchableExtrudedCircle.H" +#include "addToRunTimeSelectionTable.H" +#include "Time.H" +#include "edgeMesh.H" +#include "indexedOctree.H" +#include "treeDataEdge.H" +#include "linearInterpolationWeights.H" +#include "quaternion.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(searchableExtrudedCircle, 0); + addToRunTimeSelectionTable + ( + searchableSurface, + searchableExtrudedCircle, + dict + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::searchableExtrudedCircle::searchableExtrudedCircle +( + const IOobject& io, + const dictionary& dict +) +: + searchableSurface(io), + eMeshPtr_ + ( + edgeMesh::New + ( + IOobject + ( + dict.lookup("file"), // name + io.time().constant(), // instance + "triSurface", // local + io.time(), // registry + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ).objectPath() + ) + ), + radius_(readScalar(dict.lookup("radius"))) +{ + const edgeMesh& eMesh = eMeshPtr_(); + + const pointField& points = eMesh.points(); + const edgeList& edges = eMesh.edges(); + bounds() = boundBox(points, false); + + vector halfSpan(0.5*bounds().span()); + point ctr(bounds().midpoint()); + + bounds().min() = ctr - mag(halfSpan)*vector(1, 1, 1); + bounds().max() = ctr + mag(halfSpan)*vector(1, 1, 1); + + // Calculate bb of all points + treeBoundBox bb(bounds()); + + // Slightly extended bb. Slightly off-centred just so on symmetric + // geometry there are less face/edge aligned items. + bb.min() -= point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); + bb.max() += point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); + + edgeTree_.reset + ( + new indexedOctree<treeDataEdge> + ( + treeDataEdge + ( + false, // do not cache bb + edges, + points, + identity(edges.size()) + ), + bb, // overall search domain + 8, // maxLevel + 10, // leafsize + 3.0 // duplicity + ) + ); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::searchableExtrudedCircle::~searchableExtrudedCircle() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const Foam::wordList& Foam::searchableExtrudedCircle::regions() const +{ + if (regions_.empty()) + { + regions_.setSize(1); + regions_[0] = "region0"; + } + return regions_; +} + + +Foam::label Foam::searchableExtrudedCircle::size() const +{ + return eMeshPtr_().points().size(); +} + + +Foam::tmp<Foam::pointField> Foam::searchableExtrudedCircle::coordinates() const +{ + return eMeshPtr_().points(); +} + + +void Foam::searchableExtrudedCircle::boundingSpheres +( + pointField& centres, + scalarField& radiusSqr +) const +{ + centres = eMeshPtr_().points(); + radiusSqr.setSize(centres.size()); + radiusSqr = Foam::sqr(radius_); + // Add a bit to make sure all points are tested inside + radiusSqr += Foam::sqr(SMALL); +} + + +void Foam::searchableExtrudedCircle::findNearest +( + const pointField& samples, + const scalarField& nearestDistSqr, + List<pointIndexHit>& info +) const +{ + const indexedOctree<treeDataEdge>& tree = edgeTree_(); + + info.setSize(samples.size()); + + forAll(samples, i) + { + info[i] = tree.findNearest(samples[i], nearestDistSqr[i]); + + if (info[i].hit()) + { + vector d(samples[i]-info[i].hitPoint()); + info[i].setPoint(info[i].hitPoint() + d/mag(d)*radius_); + } + } +} + + +void Foam::searchableExtrudedCircle::findParametricNearest +( + const point& start, + const point& end, + const scalarField& rawLambdas, + const scalarField& nearestDistSqr, + List<pointIndexHit>& info +) const +{ + const edgeMesh& mesh = eMeshPtr_(); + const indexedOctree<treeDataEdge>& tree = edgeTree_(); + const edgeList& edges = mesh.edges(); + const pointField& points = mesh.points(); + const labelListList& pointEdges = mesh.pointEdges(); + + const scalar maxDistSqr(Foam::magSqr(bounds().span())); + + // Normalise lambdas + const scalarField lambdas + ( + (rawLambdas-rawLambdas[0]) + /(rawLambdas.last()-rawLambdas[0]) + ); + + + // Nearest point on curve and local axis direction + pointField curvePoints(lambdas.size()); + vectorField axialVecs(lambdas.size()); + + const pointIndexHit startInfo = tree.findNearest(start, maxDistSqr); + curvePoints[0] = startInfo.hitPoint(); + axialVecs[0] = edges[startInfo.index()].vec(points); + + const pointIndexHit endInfo = tree.findNearest(end, maxDistSqr); + curvePoints.last() = endInfo.hitPoint(); + axialVecs.last() = edges[endInfo.index()].vec(points); + + + + scalarField curveLambdas(points.size(), -1.0); + + { + scalar endDistance = -1.0; + + // Determine edge lengths walking from start to end. + + const point& start = curvePoints[0]; + const point& end = curvePoints.last(); + + label edgei = startInfo.index(); + const edge& startE = edges[edgei]; + + label pointi = startE[0]; + if ((startE.vec(points)&(end-start)) > 0) + { + pointi = startE[1]; + } + + curveLambdas[pointi] = mag(points[pointi]-curvePoints[0]); + label otherPointi = startE.otherVertex(pointi); + curveLambdas[otherPointi] = -mag(points[otherPointi]-curvePoints[0]); + + //Pout<< "for point:" << points[pointi] << " have distance " + // << curveLambdas[pointi] << endl; + + + while (true) + { + const labelList& pEdges = pointEdges[pointi]; + if (pEdges.size() == 1) + { + break; + } + else if (pEdges.size() != 2) + { + FatalErrorInFunction << "Curve " << name() + << " is not a single path. This is not supported" + << exit(FatalError); + break; + } + + label oldEdgei = edgei; + if (pEdges[0] == oldEdgei) + { + edgei = pEdges[1]; + } + else + { + edgei = pEdges[0]; + } + + if (edgei == endInfo.index()) + { + endDistance = curveLambdas[pointi] + mag(end-points[pointi]); + + //Pout<< "Found end edge:" << edges[edgei].centre(points) + // << " endPt:" << end + // << " point before:" << points[pointi] + // << " accumulated length:" << endDistance << endl; + } + + + label oldPointi = pointi; + pointi = edges[edgei].otherVertex(oldPointi); + + if (curveLambdas[pointi] >= 0) + { + break; + } + + curveLambdas[pointi] = + curveLambdas[oldPointi] + edges[edgei].mag(points); + } + + // Normalise curveLambdas + forAll(curveLambdas, i) + { + if (curveLambdas[i] >= 0) + { + curveLambdas[i] /= endDistance; + } + } + } + + + + // Interpolation engine + linearInterpolationWeights interpolator(curveLambdas); + + // Find wanted location along curve + labelList indices; + scalarField weights; + for (label i = 1; i < curvePoints.size()-1; i++) + { + interpolator.valueWeights(lambdas[i], indices, weights); + + if (indices.size() == 1) + { + // On outside of curve. Choose one of the connected edges. + label pointi = indices[0]; + const point& p0 = points[pointi]; + label edge0 = pointEdges[pointi][0]; + const edge& e0 = edges[edge0]; + axialVecs[i] = e0.vec(points); + curvePoints[i] = weights[0]*p0; + } + else if (indices.size() == 2) + { + const point& p0 = points[indices[0]]; + const point& p1 = points[indices[1]]; + axialVecs[i] = p1-p0; + curvePoints[i] = weights[0]*p0+weights[1]*p1; + } + } + axialVecs /= mag(axialVecs); + + + // Now we have the lambdas, curvePoints and axialVecs. + + + + info.setSize(lambdas.size()); + info = pointIndexHit(); + + // Given the current lambdas interpolate radial direction inbetween + // endpoints (all projected onto the starting coordinate system) + quaternion qStart; + vector radialStart; + { + radialStart = start-curvePoints[0]; + radialStart -= (radialStart&axialVecs[0])*axialVecs[0]; + radialStart /= mag(radialStart); + qStart = quaternion(radialStart, 0.0); + + info[0] = pointIndexHit(true, start, 0); + } + + quaternion qProjectedEnd; + { + vector radialEnd(end-curvePoints.last()); + radialEnd -= (radialEnd&axialVecs.last())*axialVecs.last(); + radialEnd /= mag(radialEnd); + + vector projectedEnd = radialEnd; + projectedEnd -= (projectedEnd&axialVecs[0])*axialVecs[0]; + projectedEnd /= mag(projectedEnd); + qProjectedEnd = quaternion(projectedEnd, 0.0); + + info.last() = pointIndexHit(true, end, 0); + } + + for (label i = 1; i < lambdas.size()-1; i++) + { + quaternion q(slerp(qStart, qProjectedEnd, lambdas[i])); + vector radialDir(q.transform(radialStart)); + + radialDir -= (radialDir&axialVecs[i])*axialVecs.last(); + radialDir /= mag(radialDir); + + info[i] = pointIndexHit(true, curvePoints[i]+radius_*radialDir, 0); + } +} + + +void Foam::searchableExtrudedCircle::getRegion +( + const List<pointIndexHit>& info, + labelList& region +) const +{ + region.setSize(info.size()); + region = 0; +} + + +void Foam::searchableExtrudedCircle::getNormal +( + const List<pointIndexHit>& info, + vectorField& normal +) const +{ + const edgeMesh& mesh = eMeshPtr_(); + const indexedOctree<treeDataEdge>& tree = edgeTree_(); + const edgeList& edges = mesh.edges(); + const pointField& points = mesh.points(); + + normal.setSize(info.size()); + normal = Zero; + + forAll(info, i) + { + if (info[i].hit()) + { + // Find nearest on curve + pointIndexHit curvePt = tree.findNearest + ( + info[i].hitPoint(), + Foam::magSqr(bounds().span()) + ); + + normal[i] = info[i].hitPoint()-curvePt.hitPoint(); + + // Subtract axial direction + vector axialVec = edges[curvePt.index()].vec(points); + axialVec /= mag(axialVec); + normal[i] -= (normal[i]&axialVec)*axialVec; + normal[i] /= mag(normal[i]); + } + } +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/searchableExtrudedCircle/searchableExtrudedCircle.H b/src/mesh/blockMesh/searchableExtrudedCircle/searchableExtrudedCircle.H new file mode 100644 index 0000000000000000000000000000000000000000..864638dbc171ebc42ffa0d62de561525876b5dc9 --- /dev/null +++ b/src/mesh/blockMesh/searchableExtrudedCircle/searchableExtrudedCircle.H @@ -0,0 +1,236 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::searchableExtrudedCircle + +Description + Searching on edgemesh with constant radius + +SourceFiles + searchableExtrudedCircle.C + +\*---------------------------------------------------------------------------*/ + +#ifndef searchableExtrudedCircle_H +#define searchableExtrudedCircle_H + +#include "treeBoundBox.H" +#include "searchableSurface.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class edgeMesh; +class treeDataEdge; +template <class Type> class indexedOctree; + +/*---------------------------------------------------------------------------*\ + Class searchableExtrudedCircle Declaration +\*---------------------------------------------------------------------------*/ + +class searchableExtrudedCircle +: + public searchableSurface +{ + // Private Member Data + + //- Feature + autoPtr<edgeMesh> eMeshPtr_; + + //- Search structure + autoPtr<indexedOctree<treeDataEdge>> edgeTree_; + + //- Radius + const scalar radius_; + + //- Names of regions + mutable wordList regions_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + searchableExtrudedCircle(const searchableExtrudedCircle&); + + //- Disallow default bitwise assignment + void operator=(const searchableExtrudedCircle&); + + +public: + + //- Runtime type information + TypeName("searchableExtrudedCircle"); + + + // Constructors + + //- Construct from dictionary (used by searchableSurface) + searchableExtrudedCircle + ( + const IOobject& io, + const dictionary& dict + ); + + + //- Destructor + virtual ~searchableExtrudedCircle(); + + + // Member Functions + + virtual const wordList& regions() const; + + //- Whether supports volume type below + virtual bool hasVolumeType() const + { + return true; + } + + //- Range of local indices that can be returned. + virtual label size() const; + + //- Get representative set of element coordinates + // Usually the element centres (should be of length size()). + virtual tmp<pointField> coordinates() const; + + //- Get bounding spheres (centre and radius squared), one per element. + // Any point on element is guaranteed to be inside. + virtual void boundingSpheres + ( + pointField& centres, + scalarField& radiusSqr + ) const; + + //- Get the points that define the surface. + virtual tmp<pointField> points() const + { + return coordinates(); + } + + //- Does any part of the surface overlap the supplied bound box? + virtual bool overlaps(const boundBox& bb) const + { + NotImplemented; + return false; + } + + + // Multiple point queries. + + virtual void findNearest + ( + const pointField& sample, + const scalarField& nearestDistSqr, + List<pointIndexHit>& + ) const; + + //- Unique to parametric geometry: given points find + // an interpolated (along the curve) point on the surface. + // The lambdas[0] is equivalent for start, lambdas.last() + // is equivalent for end. + virtual void findParametricNearest + ( + const point& start, + const point& end, + const scalarField& lambdas, + const scalarField& nearestDistSqr, + List<pointIndexHit>& + ) const; + + virtual void findLine + ( + const pointField& start, + const pointField& end, + List<pointIndexHit>& + ) const + { + NotImplemented; + } + + virtual void findLineAny + ( + const pointField& start, + const pointField& end, + List<pointIndexHit>& + ) const + { + NotImplemented; + } + + //- Get all intersections in order from start to end. + virtual void findLineAll + ( + const pointField& start, + const pointField& end, + List<List<pointIndexHit>>& + ) const + { + NotImplemented; + } + + //- From a set of points and indices get the region + virtual void getRegion + ( + const List<pointIndexHit>&, + labelList& region + ) const; + + //- From a set of points and indices get the normal + virtual void getNormal + ( + const List<pointIndexHit>&, + vectorField& normal + ) const; + + //- Determine type (inside/outside/mixed) for point. unknown if + // cannot be determined (e.g. non-manifold surface) + virtual void getVolumeType + ( + const pointField&, + List<volumeType>& + ) const + { + NotImplemented; + } + + bool writeData(Ostream&) const + { + NotImplemented; + return false; + } +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C index 81f81dc50806d351320101f8d795a2f5be513a3e..acd25a6e595d0a2ef459adb2da7a1f783bf55343 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C @@ -3038,6 +3038,30 @@ void Foam::meshRefinement::write } +void Foam::meshRefinement::removeFiles(const polyMesh& mesh) +{ + IOobject io + ( + "dummy", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ); + fileName setsDir(io.path()); + + if (topoSet::debug) DebugVar(setsDir); + + // Remove local files + if (exists(setsDir/"surfaceIndex")) + { + rm(setsDir/"surfaceIndex"); + } + + // Remove other files + hexRef8::removeFiles(mesh); +} + + Foam::meshRefinement::writeType Foam::meshRefinement::writeLevel() { return writeLevel_; diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H index 8666d5bf8060ff7697ec8aedae4eab90556c102f..e01bb3f781f9b2c80413397db9d41bddf182e8e0 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H @@ -1447,6 +1447,9 @@ public: const fileName& ) const; + //- Helper: remove all relevant files from mesh instance + static void removeFiles(const polyMesh&); + //- Helper: calculate average template<class T> static T gAverage @@ -1468,7 +1471,6 @@ public: // NamedEnum template<class Enum> static int readFlags(const Enum& namedEnum, const wordList&); - }; diff --git a/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.C b/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.C index fb6bf7601b7a4e80bae13abac1c9e0adeb75656b..aa05d3b8cba385bfa948df9deb2dd29c023aae30 100644 --- a/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.C +++ b/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.C @@ -299,59 +299,6 @@ void Foam::refinementFeatures::buildTrees(const label featI) } -const Foam::PtrList<Foam::indexedOctree<Foam::treeDataEdge>>& -Foam::refinementFeatures::regionEdgeTrees() const -{ - if (!regionEdgeTreesPtr_.valid()) - { - regionEdgeTreesPtr_.reset - ( - new PtrList<indexedOctree<treeDataEdge>>(size()) - ); - PtrList<indexedOctree<treeDataEdge>>& trees = regionEdgeTreesPtr_(); - - forAll(*this, featI) - { - const extendedEdgeMesh& eMesh = operator[](featI); - const pointField& points = eMesh.points(); - const edgeList& edges = eMesh.edges(); - - // Calculate bb of all points - treeBoundBox bb(points); - - // Random number generator. Bit dodgy since not exactly random ;-) - Random rndGen(65431); - - // Slightly extended bb. Slightly off-centred just so on symmetric - // geometry there are less face/edge aligned items. - bb = bb.extend(rndGen, 1e-4); - bb.min() -= point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); - bb.max() += point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); - - trees.set - ( - featI, - new indexedOctree<treeDataEdge> - ( - treeDataEdge - ( - false, // do not cache bb - edges, - points, - eMesh.regionEdges() - ), - bb, // overall search domain - 8, // maxLevel - 10, // leafsize - 3.0 // duplicity - ) - ); - } - } - return regionEdgeTreesPtr_(); -} - - // Find maximum level of a shell. void Foam::refinementFeatures::findHigherLevel ( @@ -425,6 +372,61 @@ void Foam::refinementFeatures::findHigherLevel } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +const Foam::PtrList<Foam::indexedOctree<Foam::treeDataEdge>>& +Foam::refinementFeatures::regionEdgeTrees() const +{ + if (!regionEdgeTreesPtr_.valid()) + { + regionEdgeTreesPtr_.reset + ( + new PtrList<indexedOctree<treeDataEdge>>(size()) + ); + PtrList<indexedOctree<treeDataEdge>>& trees = regionEdgeTreesPtr_(); + + forAll(*this, featI) + { + const extendedEdgeMesh& eMesh = operator[](featI); + const pointField& points = eMesh.points(); + const edgeList& edges = eMesh.edges(); + + // Calculate bb of all points + treeBoundBox bb(points); + + // Random number generator. Bit dodgy since not exactly random ;-) + Random rndGen(65431); + + // Slightly extended bb. Slightly off-centred just so on symmetric + // geometry there are less face/edge aligned items. + bb = bb.extend(rndGen, 1e-4); + bb.min() -= point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); + bb.max() += point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); + + trees.set + ( + featI, + new indexedOctree<treeDataEdge> + ( + treeDataEdge + ( + false, // do not cache bb + edges, + points, + eMesh.regionEdges() + ), + bb, // overall search domain + 8, // maxLevel + 10, // leafsize + 3.0 // duplicity + ) + ); + } + } + return regionEdgeTreesPtr_(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::refinementFeatures::refinementFeatures diff --git a/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.H b/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.H index 062e8ddbf99e28314180961f3f7e3ad45a502eb6..6147c81bcf311dbcac00a69ea6550a0f2279dfd8 100644 --- a/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.H +++ b/src/mesh/snappyHexMesh/refinementFeatures/refinementFeatures.H @@ -53,8 +53,6 @@ class refinementFeatures : public PtrList<extendedFeatureEdgeMesh> { -private: - // Private data //- Per shell the list of ranges diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C index 68c561b2f0b216badfd5f5fc2d6c8aa87671b1e6..76b39fa700c495041e358e677a0b4126181b27e6 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C @@ -28,7 +28,7 @@ License #include "mapDistribute.H" #include "unitConversion.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class SourcePatch, class TargetPatch> void Foam::AMIMethod<SourcePatch, TargetPatch>::checkPatches() const diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C index fe47d9aa101282357bd7d830fd0257ed1f817b7b..74015e3ece131becd743119842c206a20cb54d61 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C +++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C @@ -71,44 +71,6 @@ Foam::vector Foam::cyclicAMIPolyPatch::findFaceNormalMaxRadius } -// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // - -void Foam::cyclicAMIPolyPatch::calcTransforms() -{ - const cyclicAMIPolyPatch& half0 = *this; - vectorField half0Areas(half0.size()); - forAll(half0, facei) - { - half0Areas[facei] = half0[facei].normal(half0.points()); - } - - const cyclicAMIPolyPatch& half1 = neighbPatch(); - vectorField half1Areas(half1.size()); - forAll(half1, facei) - { - half1Areas[facei] = half1[facei].normal(half1.points()); - } - - calcTransforms - ( - half0, - half0.faceCentres(), - half0Areas, - half1.faceCentres(), - half1Areas - ); - - if (debug) - { - Pout<< "calcTransforms() : patch: " << name() << nl - << " forwardT = " << forwardT() << nl - << " reverseT = " << reverseT() << nl - << " separation = " << separation() << nl - << " collocated = " << collocated() << nl << endl; - } -} - - void Foam::cyclicAMIPolyPatch::calcTransforms ( const primitivePatch& half0, @@ -323,7 +285,7 @@ void Foam::cyclicAMIPolyPatch::calcTransforms } -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // void Foam::cyclicAMIPolyPatch::resetAMI ( @@ -399,6 +361,42 @@ void Foam::cyclicAMIPolyPatch::resetAMI } +void Foam::cyclicAMIPolyPatch::calcTransforms() +{ + const cyclicAMIPolyPatch& half0 = *this; + vectorField half0Areas(half0.size()); + forAll(half0, facei) + { + half0Areas[facei] = half0[facei].normal(half0.points()); + } + + const cyclicAMIPolyPatch& half1 = neighbPatch(); + vectorField half1Areas(half1.size()); + forAll(half1, facei) + { + half1Areas[facei] = half1[facei].normal(half1.points()); + } + + calcTransforms + ( + half0, + half0.faceCentres(), + half0Areas, + half1.faceCentres(), + half1Areas + ); + + if (debug) + { + Pout<< "calcTransforms() : patch: " << name() << nl + << " forwardT = " << forwardT() << nl + << " reverseT = " << reverseT() << nl + << " separation = " << separation() << nl + << " collocated = " << collocated() << nl << endl; + } +} + + void Foam::cyclicAMIPolyPatch::initGeometry(PstreamBuffers& pBufs) { // The AMI is no longer valid. Leave it up to demand-driven calculation diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H index cb36eb0af0de364eff47b2dd9e28a71996300d56..6963aa9d253e5dc091f6c21fad62accb8089653f 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H +++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H @@ -53,9 +53,6 @@ class cyclicAMIPolyPatch : public coupledPolyPatch { - -private: - // Private Member Functions //- Return normal of face at max distance from rotation axis diff --git a/src/meshTools/algorithms/MeshWave/FaceCellWave.C b/src/meshTools/algorithms/MeshWave/FaceCellWave.C index 8518350e809094ed405beb1ac19024df0c512a81..f76d71657456766cb37b3fc8fc5c716e8860ca6a 100644 --- a/src/meshTools/algorithms/MeshWave/FaceCellWave.C +++ b/src/meshTools/algorithms/MeshWave/FaceCellWave.C @@ -104,7 +104,7 @@ namespace Foam } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type, class TrackingData> bool Foam::FaceCellWave<Type, TrackingData>::updateCell diff --git a/src/meshTools/algorithms/MeshWave/FaceCellWave.H b/src/meshTools/algorithms/MeshWave/FaceCellWave.H index 0653e255c13debe0d44745eff6529dc47e73aac0..f86aab57d04a6b7d3d71284a1c02a845a501776e 100644 --- a/src/meshTools/algorithms/MeshWave/FaceCellWave.H +++ b/src/meshTools/algorithms/MeshWave/FaceCellWave.H @@ -77,8 +77,6 @@ class FaceCellWave : public FaceCellWaveName { -private: - // Private Member Functions //- Disallow default bitwise copy construct @@ -90,7 +88,7 @@ private: protected: - // Private data + // Protected data //- Reference to mesh const polyMesh& mesh_; @@ -244,7 +242,7 @@ protected: void handleExplicitConnections(); - // Private static data + // Protected static data static const scalar geomTol_; static scalar propagationTol_; diff --git a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H index 38ef08c3b220b498fbf4e0283854854bb7371a3e..1fe40bfc354b4868dd831dfe8de32010b05f3687 100644 --- a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H +++ b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H @@ -133,7 +133,7 @@ public: //- Helper class for finding nearest - // Nearest: + // Nearest: // - point+local index // - sqr(distance) // - processor diff --git a/src/meshTools/sets/topoSetSource/topoSetSource.C b/src/meshTools/sets/topoSetSource/topoSetSource.C index 295af9f0f9530f651af02734380701aa252f2b67..216c417c64e0f62c98e41badb96b30e991791aed 100644 --- a/src/meshTools/sets/topoSetSource/topoSetSource.C +++ b/src/meshTools/sets/topoSetSource/topoSetSource.C @@ -134,7 +134,7 @@ Foam::Istream& Foam::topoSetSource::checkIs(Istream& is) } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::topoSetSource::addOrDelete ( diff --git a/src/meshTools/sets/topoSets/cellSet.C b/src/meshTools/sets/topoSets/cellSet.C index 956e07714d1f20db35f6ce5ceebd5b65bdcf5e97..c38bb209c60b65cfdd6c32df0f201e68f4882acf 100644 --- a/src/meshTools/sets/topoSets/cellSet.C +++ b/src/meshTools/sets/topoSets/cellSet.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,6 +28,7 @@ License #include "polyMesh.H" #include "Time.H" #include "addToRunTimeSelectionTable.H" +#include "mapDistributePolyMesh.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -228,6 +229,37 @@ void cellSet::updateMesh(const mapPolyMesh& morphMap) } +void cellSet::distribute(const mapDistributePolyMesh& map) +{ + boolList inSet(map.nOldCells()); + forAllConstIter(cellSet, *this, iter) + { + inSet[iter.key()] = true; + } + map.distributeCellData(inSet); + + // Count + label n = 0; + forAll(inSet, celli) + { + if (inSet[celli]) + { + n++; + } + } + + clear(); + resize(n); + forAll(inSet, celli) + { + if (inSet[celli]) + { + insert(celli); + } + } +} + + void Foam::cellSet::writeDebug ( Ostream& os, diff --git a/src/meshTools/sets/topoSets/cellSet.H b/src/meshTools/sets/topoSets/cellSet.H index e7974486e44b07afdcb30e99587510ce893498aa..4f02b2cdb6e84cd11c4acae34abab22c75d58da7 100644 --- a/src/meshTools/sets/topoSets/cellSet.H +++ b/src/meshTools/sets/topoSets/cellSet.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -147,9 +147,12 @@ public: //- Return max index+1. virtual label maxSize(const polyMesh& mesh) const; - //- Update any stored data for new labels + //- Update any stored data for new labels. virtual void updateMesh(const mapPolyMesh& morphMap); + //- Update any stored data for mesh redistribution. + virtual void distribute(const mapDistributePolyMesh&); + //- Write maxLen items with label and coordinates. virtual void writeDebug ( diff --git a/src/meshTools/sets/topoSets/cellZoneSet.C b/src/meshTools/sets/topoSets/cellZoneSet.C index 5fc39bf1420ded10f0105d7e9caf2fab1c81265f..9551827c29103201bc02509f6b1c1074b5ccd268 100644 --- a/src/meshTools/sets/topoSets/cellZoneSet.C +++ b/src/meshTools/sets/topoSets/cellZoneSet.C @@ -229,7 +229,13 @@ void cellZoneSet::deleteSet(const topoSet& set) void cellZoneSet::sync(const polyMesh& mesh) -{} +{ + cellSet::sync(mesh); + + // Take over contents of cellSet into addressing. + addressing_ = sortedToc(); + updateSet(); +} label cellZoneSet::maxSize(const polyMesh& mesh) const diff --git a/src/meshTools/sets/topoSets/cellZoneSet.H b/src/meshTools/sets/topoSets/cellZoneSet.H index d3dfe2e63bd70fe3b5a4e311101239d25de7b29e..ee7a3ebb63951e60d0179c2239cc5d9c06714263 100644 --- a/src/meshTools/sets/topoSets/cellZoneSet.H +++ b/src/meshTools/sets/topoSets/cellZoneSet.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,7 @@ Class Foam::cellZoneSet Description - Like cellSet but updates cellZone when writing. + Like cellSet but -reads data from cellZone -updates cellZone when writing. SourceFiles cellZone.C @@ -126,7 +126,7 @@ public: //- Delete elements present in set. virtual void deleteSet(const topoSet& set); - //- Sync cellZoneSet across coupled patches. + //- Sync cellSet across coupled patches; update cellZone from cellSet virtual void sync(const polyMesh& mesh); //- Write maxLen items with label and coordinates. @@ -150,10 +150,6 @@ public: //- Return max index+1. virtual label maxSize(const polyMesh& mesh) const; - - - - }; diff --git a/src/meshTools/sets/topoSets/faceSet.C b/src/meshTools/sets/topoSets/faceSet.C index 52622b3dc679fdfe995c60633cedcf25bcbed5a1..7049f36a66f4429f592597cc19d53c41d50f5a83 100644 --- a/src/meshTools/sets/topoSets/faceSet.C +++ b/src/meshTools/sets/topoSets/faceSet.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,6 +27,7 @@ License #include "mapPolyMesh.H" #include "polyMesh.H" #include "syncTools.H" +#include "mapDistributePolyMesh.H" #include "addToRunTimeSelectionTable.H" @@ -161,6 +162,37 @@ void faceSet::updateMesh(const mapPolyMesh& morphMap) } +void faceSet::distribute(const mapDistributePolyMesh& map) +{ + boolList inSet(map.nOldFaces()); + forAllConstIter(faceSet, *this, iter) + { + inSet[iter.key()] = true; + } + map.distributeFaceData(inSet); + + // Count + label n = 0; + forAll(inSet, facei) + { + if (inSet[facei]) + { + n++; + } + } + + clear(); + resize(n); + forAll(inSet, facei) + { + if (inSet[facei]) + { + insert(facei); + } + } +} + + void faceSet::writeDebug ( Ostream& os, diff --git a/src/meshTools/sets/topoSets/faceSet.H b/src/meshTools/sets/topoSets/faceSet.H index 7586a9c87e3a8ff3bc2def3583904cbe1307fd80..75b5f817d1e7006cba77b7379adc28da9699b740 100644 --- a/src/meshTools/sets/topoSets/faceSet.H +++ b/src/meshTools/sets/topoSets/faceSet.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -116,6 +116,9 @@ public: //- Update any stored data for new labels virtual void updateMesh(const mapPolyMesh& morphMap); + //- Update any stored data for mesh redistribution. + virtual void distribute(const mapDistributePolyMesh&); + //- Write maxLen items with label and coordinates. virtual void writeDebug ( diff --git a/src/meshTools/sets/topoSets/faceZoneSet.C b/src/meshTools/sets/topoSets/faceZoneSet.C index cbd882d76c98c020ba0425314ebb4b38f5efacb7..608109f7d522707f0b5641518608656b8a5f3836 100644 --- a/src/meshTools/sets/topoSets/faceZoneSet.C +++ b/src/meshTools/sets/topoSets/faceZoneSet.C @@ -26,6 +26,9 @@ License #include "faceZoneSet.H" #include "mapPolyMesh.H" #include "polyMesh.H" +#include "setToFaceZone.H" +#include "setsToFaceZone.H" +#include "syncTools.H" #include "addToRunTimeSelectionTable.H" @@ -322,7 +325,132 @@ void faceZoneSet::deleteSet(const topoSet& set) void faceZoneSet::sync(const polyMesh& mesh) -{} +{ + // Make sure that the faceZone is consistent with the faceSet + { + const labelHashSet zoneSet(addressing_); + + // Get elements that are in zone but not faceSet + labelHashSet badSet(zoneSet); + badSet -= *this; + + // Add elements that are in faceSet but not in zone + labelHashSet fSet(*this); + fSet -= zoneSet; + + badSet += fSet; + + label nBad = returnReduce(badSet.size(), sumOp<label>()); + + if (nBad) + { + WarningInFunction << "Detected " << nBad + << " faces that are in the faceZone but not" + << " in the faceSet or vice versa." + << " The faceZoneSet should only be manipulated" + << " using " << setsToFaceZone::typeName + << " or " << setToFaceZone::typeName << endl; + } + } + + + // Make sure that on coupled faces orientation is opposite. Pushes + // master orientation to slave in case of conflict. + + + // 0 : not in faceZone + // 1 : in faceZone and unflipped + //-1 : in faceZone and flipped + const label UNFLIPPED = 1; + const label FLIPPED = -1; + labelList myZoneFace(mesh.nFaces()-mesh.nInternalFaces(), 0); + + forAll(addressing_, i) + { + label bFacei = addressing_[i]-mesh.nInternalFaces(); + + if (bFacei >= 0) + { + if (flipMap_[i]) + { + myZoneFace[bFacei] = FLIPPED; + } + else + { + myZoneFace[bFacei] = UNFLIPPED; + } + } + } + + labelList neiZoneFace(myZoneFace); + syncTools::swapBoundaryFaceList(mesh, neiZoneFace); + + + const PackedBoolList isMasterFace(syncTools::getMasterFaces(mesh)); + + + // Rebuild faceZone addressing and flipMap + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + DynamicList<label> newAddressing(addressing_.size()); + DynamicList<bool> newFlipMap(flipMap_.size()); + + forAll(addressing_, i) + { + label facei = addressing_[i]; + if (facei < mesh.nInternalFaces()) + { + newAddressing.append(facei); + newFlipMap.append(flipMap_[i]); + } + } + + for (label facei = mesh.nInternalFaces(); facei < mesh.nFaces(); facei++) + { + label myStat = myZoneFace[facei-mesh.nInternalFaces()]; + label neiStat = neiZoneFace[facei-mesh.nInternalFaces()]; + + if (myStat == 0) + { + if (neiStat == UNFLIPPED) + { + // Neighbour is unflipped so I am flipped + newAddressing.append(facei); + newFlipMap.append(true); + } + else if (neiStat == FLIPPED) + { + newAddressing.append(facei); + newFlipMap.append(false); + } + } + else + { + if (myStat == neiStat) + { + // Conflict. masterFace wins + newAddressing.append(facei); + if (isMasterFace[facei]) + { + newFlipMap.append(myStat == FLIPPED); + } + else + { + newFlipMap.append(neiStat == UNFLIPPED); + } + } + else + { + newAddressing.append(facei); + newFlipMap.append(myStat == FLIPPED); + } + } + } + + addressing_.transfer(newAddressing); + flipMap_.transfer(newFlipMap); + updateSet(); +} label faceZoneSet::maxSize(const polyMesh& mesh) const diff --git a/src/meshTools/sets/topoSets/faceZoneSet.H b/src/meshTools/sets/topoSets/faceZoneSet.H index f96482911f0540f9d5d3575c55a64c0435e89089..35a0133041f5c97b77361fef2a687d665e6bc028 100644 --- a/src/meshTools/sets/topoSets/faceZoneSet.H +++ b/src/meshTools/sets/topoSets/faceZoneSet.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,7 @@ Class Foam::faceZoneSet Description - Like faceSet but updates faceZone when writing. + Like faceSet but -reads data from faceZone -updates faceZone when writing. SourceFiles faceZone.C @@ -167,10 +167,6 @@ public: //- Return max index+1. virtual label maxSize(const polyMesh& mesh) const; - - - - }; diff --git a/src/meshTools/sets/topoSets/pointSet.C b/src/meshTools/sets/topoSets/pointSet.C index 925de24908d1efb586ba48c731b20e2e3bf6ddba..e9d3542cf7eb85064d14224101004c9342782bf3 100644 --- a/src/meshTools/sets/topoSets/pointSet.C +++ b/src/meshTools/sets/topoSets/pointSet.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,6 +27,7 @@ License #include "mapPolyMesh.H" #include "polyMesh.H" #include "syncTools.H" +#include "mapDistributePolyMesh.H" #include "addToRunTimeSelectionTable.H" @@ -156,6 +157,37 @@ void pointSet::updateMesh(const mapPolyMesh& morphMap) } +void pointSet::distribute(const mapDistributePolyMesh& map) +{ + boolList inSet(map.nOldPoints()); + forAllConstIter(pointSet, *this, iter) + { + inSet[iter.key()] = true; + } + map.distributePointData(inSet); + + // Count + label n = 0; + forAll(inSet, pointi) + { + if (inSet[pointi]) + { + n++; + } + } + + clear(); + resize(n); + forAll(inSet, pointi) + { + if (inSet[pointi]) + { + insert(pointi); + } + } +} + + void pointSet::writeDebug ( Ostream& os, diff --git a/src/meshTools/sets/topoSets/pointSet.H b/src/meshTools/sets/topoSets/pointSet.H index 2bd396de855c8cca11ca51fa7f2af7e4fa4a0514..e5f92b12052af3d78a70dcbc8b6be1b78dd46d6a 100644 --- a/src/meshTools/sets/topoSets/pointSet.H +++ b/src/meshTools/sets/topoSets/pointSet.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -119,6 +119,9 @@ public: //- Update any stored data for new labels //virtual void updateMesh(const polyTopoChange& meshMod); + //- Update any stored data for mesh redistribution. + virtual void distribute(const mapDistributePolyMesh&); + //- Write maxLen items with label and coordinates. virtual void writeDebug ( diff --git a/src/meshTools/sets/topoSets/pointZoneSet.C b/src/meshTools/sets/topoSets/pointZoneSet.C index 4b2794363b3cdeaeb21ad74bb8f2c0dbf5b46bbc..726dc77777f8a43be43f2c9c24aafa70e82c920a 100644 --- a/src/meshTools/sets/topoSets/pointZoneSet.C +++ b/src/meshTools/sets/topoSets/pointZoneSet.C @@ -230,7 +230,13 @@ void pointZoneSet::deleteSet(const topoSet& set) void pointZoneSet::sync(const polyMesh& mesh) -{} +{ + pointSet::sync(mesh); + + // Take over contents of pointSet into addressing. + addressing_ = sortedToc(); + updateSet(); +} label pointZoneSet::maxSize(const polyMesh& mesh) const diff --git a/src/meshTools/sets/topoSets/pointZoneSet.H b/src/meshTools/sets/topoSets/pointZoneSet.H index e8e6519f8fd628e9ea0208940e370c849190f97c..daaf4bdc0f2853971d4f843075044fe82e9270f8 100644 --- a/src/meshTools/sets/topoSets/pointZoneSet.H +++ b/src/meshTools/sets/topoSets/pointZoneSet.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,8 @@ Class Foam::pointZoneSet Description - Like pointSet but updates pointZone when writing. + Like pointSet but -reads data from pointZone -updates pointZone when + writing. SourceFiles pointZone.C @@ -153,10 +154,6 @@ public: //- Return max index+1. virtual label maxSize(const polyMesh& mesh) const; - - - - }; diff --git a/src/meshTools/sets/topoSets/topoSet.C b/src/meshTools/sets/topoSets/topoSet.C index 23127c235871e3505bfcbabb8612194b8fdad035..59f0ea2ff5ad6fa8847c3979da84ab3374e4d9b3 100644 --- a/src/meshTools/sets/topoSets/topoSet.C +++ b/src/meshTools/sets/topoSets/topoSet.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -130,7 +130,7 @@ Foam::fileName Foam::topoSet::localPath } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // // Update stored cell numbers using map. // Do in two passes to prevent allocation if nothing changed. @@ -550,6 +550,26 @@ void Foam::topoSet::updateMesh(const mapPolyMesh&) } +void Foam::topoSet::removeFiles(const polyMesh& mesh) +{ + IOobject io + ( + "dummy", + mesh.facesInstance(), + mesh.meshSubDir/"sets", + mesh + ); + fileName setsDir(io.path()); + + if (debug) DebugVar(setsDir); + + if (isDir(setsDir)) + { + rmDir(setsDir); + } +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // void Foam::topoSet::operator=(const topoSet& rhs) diff --git a/src/meshTools/sets/topoSets/topoSet.H b/src/meshTools/sets/topoSets/topoSet.H index ffdc64ca48be850d7ce3ac8a993f9269ac02fb87..3d0ec883b9998b1ca229ff235aa82ae8ae11b0cc 100644 --- a/src/meshTools/sets/topoSets/topoSet.H +++ b/src/meshTools/sets/topoSets/topoSet.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -32,6 +32,7 @@ Description SourceFiles topoSet.C + topoSetTemplates.C \*---------------------------------------------------------------------------*/ @@ -54,6 +55,7 @@ namespace Foam class mapPolyMesh; class polyMesh; class primitiveMesh; +class mapDistributePolyMesh; /*---------------------------------------------------------------------------*\ Class topoSet Declaration @@ -297,9 +299,28 @@ public: //- Update any stored data for new labels. Not implemented. virtual void updateMesh(const mapPolyMesh& morphMap); + //- Update any stored data for mesh redistribution. + virtual void distribute(const mapDistributePolyMesh&) = 0; + //- Return max allowable index (+1). Not implemented. virtual label maxSize(const polyMesh& mesh) const = 0; + //- Helper: call updateMesh on all sets in container (and + // updates instance) + template<class Container> + static void updateMesh + ( + const fileName& instance, + const mapPolyMesh&, + Container& + ); + + //- Helper: set instance on all sets in container + template<class Container> + static void setInstance(const fileName& instance, Container&); + + //- Helper: remove all sets files from mesh instance + static void removeFiles(const polyMesh&); // Member operators @@ -316,6 +337,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository + #include "topoSetTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/meshTools/sets/topoSets/topoSetTemplates.C b/src/meshTools/sets/topoSets/topoSetTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..58f62c50cf7a9154ee67607b3e8896a9f31de033 --- /dev/null +++ b/src/meshTools/sets/topoSets/topoSetTemplates.C @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Container> +void Foam::topoSet::setInstance +( + const fileName& instance, + Container& lst +) +{ + forAll(lst, i) + { + lst[i].instance() = instance; + } +} + + +template<class Container> +void Foam::topoSet::updateMesh +( + const fileName& instance, + const mapPolyMesh& map, + Container& lst +) +{ + forAll(lst, i) + { + lst[i].instance() = instance; + lst[i].updateMesh(map); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C b/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C index 1915de7ecca2cd06ef14045f4c0da769b182539e..aec02f8e06bb0795ee86aee91a31cea04ac5fa3a 100644 --- a/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C +++ b/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -26,6 +26,7 @@ License #include "triSurfaceTools.H" #include "triSurface.H" +#include "MeshedSurface.H" #include "OFstream.H" #include "mergePoints.H" #include "polyMesh.H" @@ -2743,8 +2744,168 @@ void Foam::triSurfaceTools::calcInterpolationWeights // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Tracking: +// Checking: + +bool Foam::triSurfaceTools::validTri +( + const triSurface& surf, + const label facei +) +{ + typedef labelledTri FaceType; + const FaceType& f = surf[facei]; + + // Simple check on indices ok. + forAll(f, fp) + { + if (f[fp] < 0 || f[fp] >= surf.points().size()) + { + WarningInFunction + << "triangle " << facei << " vertices " << f + << " uses point indices outside point range 0.." + << surf.points().size()-1 + << endl; + return false; + } + } + + if (f[0] == f[1] || f[0] == f[2] || f[1] == f[2]) + { + WarningInFunction + << "triangle " << facei + << " uses non-unique vertices " << f + << " coords:" << f.points(surf.points()) + << endl; + return false; + } + + // duplicate triangle check + + const labelList& fFaces = surf.faceFaces()[facei]; + + // Check if faceNeighbours use same points as this face. + // Note: discards normal information - sides of baffle are merged. + forAll(fFaces, i) + { + label nbrFacei = fFaces[i]; + if (nbrFacei <= facei) + { + // lower numbered faces already checked + continue; + } + + const FaceType& nbrF = surf[nbrFacei]; + + // Same as calling triFace::compare(f, nbrF) == 1 only + if + ( + (f[0] == nbrF[0] || f[0] == nbrF[1] || f[0] == nbrF[2]) + && (f[1] == nbrF[0] || f[1] == nbrF[1] || f[1] == nbrF[2]) + && (f[2] == nbrF[0] || f[2] == nbrF[1] || f[2] == nbrF[2]) + ) + { + WarningInFunction + << "triangle " << facei << " vertices " << f + << " has the same vertices as triangle " << nbrFacei + << " vertices " << nbrF + << " coords:" << f.points(surf.points()) + << endl; + + return false; + } + } + + return true; +} + + +bool Foam::triSurfaceTools::validTri +( + const MeshedSurface<face>& surf, + const label facei +) +{ + typedef face FaceType; + const FaceType& f = surf[facei]; + + if (f.size() != 3) + { + WarningInFunction + << "face " << facei + << " is not a triangle, it has " << f.size() + << " indices" + << endl; + return false; + } + + // Simple check on indices ok. + forAll(f, fp) + { + if (f[fp] < 0 || f[fp] >= surf.points().size()) + { + WarningInFunction + << "triangle " << facei << " vertices " << f + << " uses point indices outside point range 0.." + << surf.points().size()-1 + << endl; + return false; + } + } + + if (f[0] == f[1] || f[0] == f[2] || f[1] == f[2]) + { + WarningInFunction + << "triangle " << facei + << " uses non-unique vertices " << f + << " coords:" << f.points(surf.points()) + << endl; + return false; + } + + // duplicate triangle check + + const labelList& fFaces = surf.faceFaces()[facei]; + + // Check if faceNeighbours use same points as this face. + // Note: discards normal information - sides of baffle are merged. + forAll(fFaces, i) + { + label nbrFacei = fFaces[i]; + + if (nbrFacei <= facei) + { + // lower numbered faces already checked + continue; + } + + const FaceType& nbrF = surf[nbrFacei]; + + // Same as calling triFace::compare(f, nbrF) == 1 only + if + ( + (f[0] == nbrF[0] || f[0] == nbrF[1] || f[0] == nbrF[2]) + && (f[1] == nbrF[0] || f[1] == nbrF[1] || f[1] == nbrF[2]) + && (f[2] == nbrF[0] || f[2] == nbrF[1] || f[2] == nbrF[2]) + ) + { + WarningInFunction + << "triangle " << facei << " vertices " << f + << " has the same vertices as triangle " << nbrFacei + << " vertices " << nbrF + << " coords:" << f.points(surf.points()) + << endl; + + return false; + } + } + + return true; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tracking: // Test point on surface to see if is on face,edge or point. Foam::surfaceLocation Foam::triSurfaceTools::classify diff --git a/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.H b/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.H index 24fd96322e62a63ea1657997b22fd4eafef24c72..d90c862dc972b298baece9ee24484dbb6e432bef 100644 --- a/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.H +++ b/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -50,11 +50,14 @@ namespace Foam { // Forward declaration of classes -class triSurface; class edge; class labelledTri; class polyBoundaryMesh; class plane; +class triSurface; +class face; +template<class Face> class MeshedSurface; + /*---------------------------------------------------------------------------*\ Class triSurfaceTools Declaration @@ -159,7 +162,7 @@ class triSurfaceTools ); //- Calculate minimum (cos of) edge angle using addressing from - /// collapsing + // collapsing // edge to v1 at pt. Returns 1 if v1 is on edge without neighbours // (and hence no edge angle can be defined) static scalar collapseMinCosAngle @@ -516,6 +519,15 @@ public: static triSurface delaunay2D(const List<vector2D>&); + // Surface checking functionality + + //- Check single triangle for (topological) validity + static bool validTri(const triSurface&, const label facei); + + //- Check single triangle for (topological) validity + static bool validTri(const MeshedSurface<face>&, const label facei); + + // Tracking //- Test point on plane of triangle to see if on edge or point or inside diff --git a/src/parallel/Allwmake b/src/parallel/Allwmake index 2f1cf312705c0d14cfc6d31ee2e694a11fdd1969..a588a2b796e3eb73dee0040745caa319b84d11a5 100755 --- a/src/parallel/Allwmake +++ b/src/parallel/Allwmake @@ -3,11 +3,9 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x decompose/Allwmake $targetType $* reconstruct/Allwmake $targetType $* wmake $targetType distributed - #------------------------------------------------------------------------------ diff --git a/src/parallel/decompose/Allwclean b/src/parallel/decompose/Allwclean index 62e2d2969853d6aa3bcd7d30fac6901d243ef3cb..e0acdabc1532e1140e48bffcd4cb4316bae9d49d 100755 --- a/src/parallel/decompose/Allwclean +++ b/src/parallel/decompose/Allwclean @@ -5,20 +5,17 @@ cd ${0%/*} || exit 1 # Run from this directory if settings=`$WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch` then . $settings - echo "using SCOTCH_ARCH_PATH=$SCOTCH_ARCH_PATH" + echo " using SCOTCH_ARCH_PATH=$SCOTCH_ARCH_PATH" else echo - echo "Error: no config.sh/scotch settings" + echo " Error: no config.sh/scotch settings" echo fi -# -# define how to clean an mpi-versioned library -# +# Define how to clean an mpi-versioned library wcleanMpiLib() { - set +x for libName do ( @@ -28,11 +25,8 @@ wcleanMpiLib() wclean $libName ) done - set -x } -set -x - if [ -n "$SCOTCH_ARCH_PATH" ] then wclean scotchDecomp @@ -42,16 +36,11 @@ then wcleanMpiLib ptscotchDecomp fi else - echo - echo "Skipping scotchDecomp (ptscotchDecomp)" - echo + echo " skipping scotchDecomp (ptscotchDecomp)" fi - wclean metisDecomp - wclean decompositionMethods - wclean decompose #------------------------------------------------------------------------------ diff --git a/src/parallel/decompose/AllwmakeLnInclude b/src/parallel/decompose/AllwmakeLnInclude index 4f421640947ca9a44905439c9b1b5d98d815d0b5..74fdde1f38c5cc8e2a51acf9ba6cb5f06ee3706c 100755 --- a/src/parallel/decompose/AllwmakeLnInclude +++ b/src/parallel/decompose/AllwmakeLnInclude @@ -1,6 +1,5 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x wmakeLnInclude decompositionMethods wmakeLnInclude metisDecomp diff --git a/src/parallel/decompose/metisDecomp/metisDecomp.C b/src/parallel/decompose/metisDecomp/metisDecomp.C index 8e27852ecc2a03295c1b1a4a592d895cb6d7f808..2cb09cbb77cbc672438f9d0954f2616435d16b82 100644 --- a/src/parallel/decompose/metisDecomp/metisDecomp.C +++ b/src/parallel/decompose/metisDecomp/metisDecomp.C @@ -291,7 +291,7 @@ Foam::labelList Foam::metisDecomp::decompose fineDistribution[i] = finalDecomp[agglom[i]]; } - return finalDecomp; + return fineDistribution; } diff --git a/src/parallel/reconstruct/Allwmake b/src/parallel/reconstruct/Allwmake index 647a42cb3de3e32f1e0f9e4e1539735d0225a16e..d9ebb6fc90087aa8ecfb8e391df365a69cfc638b 100755 --- a/src/parallel/reconstruct/Allwmake +++ b/src/parallel/reconstruct/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType reconstruct diff --git a/src/parallel/reconstruct/reconstruct/processorMeshes.C b/src/parallel/reconstruct/reconstruct/processorMeshes.C index 47bd1166d0b13f3cf909e3d07b796dcefa6e4951..28bedcb6d3796ccbcf7fe4ebedf21a27734697ab 100644 --- a/src/parallel/reconstruct/reconstruct/processorMeshes.C +++ b/src/parallel/reconstruct/reconstruct/processorMeshes.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -26,6 +26,15 @@ License #include "processorMeshes.H" #include "Time.H" #include "primitiveMesh.H" +#include "topoSet.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(processorMeshes, 0); +} + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -35,11 +44,11 @@ void Foam::processorMeshes::read() // and fields forAll(databases_, proci) { - meshes_.set(proci, nullptr); - pointProcAddressing_.set(proci, nullptr); - faceProcAddressing_.set(proci, nullptr); - cellProcAddressing_.set(proci, nullptr); boundaryProcAddressing_.set(proci, nullptr); + cellProcAddressing_.set(proci, nullptr); + faceProcAddressing_.set(proci, nullptr); + pointProcAddressing_.set(proci, nullptr); + meshes_.set(proci, nullptr); } forAll(databases_, proci) @@ -259,4 +268,62 @@ void Foam::processorMeshes::reconstructPoints(fvMesh& mesh) } +void Foam::processorMeshes::removeFiles(const polyMesh& mesh) +{ + fileName pointPath + ( + IOobject + ( + "pointProcAddressing", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ).objectPath() + ); + if (topoSet::debug) DebugVar(pointPath); + rm(pointPath); + + rm + ( + IOobject + ( + "faceProcAddressing", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ).objectPath() + ); + rm + ( + IOobject + ( + "cellProcAddressing", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ).objectPath() + ); + rm + ( + IOobject + ( + "boundaryProcAddressing", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ).objectPath() + ); + rm + ( + IOobject + ( + "procAddressing", + mesh.facesInstance(), + mesh.meshSubDir, + mesh + ).objectPath() + ); +} + + // ************************************************************************* // diff --git a/src/parallel/reconstruct/reconstruct/processorMeshes.H b/src/parallel/reconstruct/reconstruct/processorMeshes.H index f9ffbc182f4a60c837c30be3ed349f17cef4ea17..4f33212656e94c536227d0277954b8daeaa976bd 100644 --- a/src/parallel/reconstruct/reconstruct/processorMeshes.H +++ b/src/parallel/reconstruct/reconstruct/processorMeshes.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -89,6 +89,10 @@ class processorMeshes public: + //- Runtime type information + ClassName("processorMeshes"); + + // Constructors //- Construct from components @@ -133,7 +137,8 @@ public: return boundaryProcAddressing_; } - + //- Helper: remove all procAddressing files from mesh instance + static void removeFiles(const polyMesh& mesh); }; diff --git a/src/randomProcesses/Make/options b/src/randomProcesses/Make/options index 4d1c505daed6c9e5189349b734e2965e25eb785b..233247dccd568389de98af7e15c0f20939bc698d 100644 --- a/src/randomProcesses/Make/options +++ b/src/randomProcesses/Make/options @@ -5,6 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/surfMesh/lnInclude LIB_LIBS = \ - -L$(FFTW_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -lfftw3 \ + -L$(FFTW_ARCH_PATH)/lib \ + -L$(FFTW_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ + -lfftw3 \ -lfiniteVolume \ -lsampling diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index 21d52bb3dd8bf6eaf58f391e38d1c47bdd58e169..ae80887fe89f8d15fff01d275f050dd86d837e3b 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C @@ -94,17 +94,41 @@ Foam::label Foam::noiseModel::findStartTimeIndex // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::noiseModel::noiseModel(const dictionary& dict) +Foam::noiseModel::noiseModel(const dictionary& dict, const bool readFields) : dict_(dict), - rhoRef_(dict.lookupOrDefault<scalar>("rhoRef", 1)), - nSamples_(dict.lookupOrDefault<label>("N", 65536)), - fLower_(dict.lookupOrDefault<scalar>("fl", 25)), - fUpper_(dict.lookupOrDefault<scalar>("fu", 10000)), - startTime_(dict.lookupOrDefault<scalar>("startTime", 0)), - windowModelPtr_(windowModel::New(dict, nSamples_)), - graphFormat_(dict.lookupOrDefault<word>("graphFormat", "raw")) + rhoRef_(1), + nSamples_(65536), + fLower_(25), + fUpper_(10000), + startTime_(0), + windowModelPtr_(), + graphFormat_("raw") { + if (readFields) + { + read(dict); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::noiseModel::~noiseModel() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::noiseModel::read(const dictionary& dict) +{ + dict.readIfPresent("rhoRef", rhoRef_); + dict.readIfPresent("N", nSamples_); + dict.readIfPresent("fl", fLower_); + dict.readIfPresent("fu", fUpper_); + dict.readIfPresent("startTime", startTime_); + dict.readIfPresent("graphFormat", graphFormat_); + // Check number of samples - must be a power of 2 for our FFT bool powerOf2 = ((nSamples_ != 0) && !(nSamples_ & (nSamples_ - 1))); if (!powerOf2) @@ -139,13 +163,11 @@ Foam::noiseModel::noiseModel(const dictionary& dict) << exit(FatalIOError); } -} + windowModelPtr_ = windowModel::New(dict, nSamples_); -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::noiseModel::~noiseModel() -{} + return true; +} // ************************************************************************* // diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H index 28643cbf564fe1c48bc670ac7e4aaa5e5dbd5707..89c41edb84c927554f505235f19fe83668d1ced5 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H @@ -124,7 +124,7 @@ protected: scalar checkUniformTimeStep ( const scalarList& times - ) const; + ) const; //- Find and return start time index label findStartTimeIndex @@ -139,7 +139,7 @@ public: //- Runtime type information TypeName("noiseModel"); - //- Run time selection table + //- Run time selection table declareRunTimeSelectionTable ( autoPtr, @@ -155,7 +155,7 @@ public: static autoPtr<noiseModel> New(const dictionary& dict); //- Constructor - noiseModel(const dictionary& dict); + noiseModel(const dictionary& dict, const bool readFields = true); //- Destructor virtual ~noiseModel(); @@ -163,6 +163,9 @@ public: // Public Member Functions + //- Read from dictionary + virtual bool read(const dictionary& dict); + //- Abstract call to calculate virtual void calculate() = 0; }; diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C index fc03d0300330d2ff6bee5c98593cf154e69358f1..9838f7176cda9578697c786e7d4ed7ea685482a1 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C @@ -43,14 +43,12 @@ addToRunTimeSelectionTable(noiseModel, pointNoise, dictionary); void pointNoise::filterTimeData ( - const Function1Types::CSV<scalar>& pData, + const scalarField& t0, + const scalarField& p0, scalarField& t, scalarField& p -) +) const { - const scalarField t0(pData.x()); - const scalarField p0(pData.y()); - DynamicList<scalar> tf(t0.size()); DynamicList<scalar> pf(t0.size()); @@ -68,23 +66,15 @@ void pointNoise::filterTimeData } -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void pointNoise::calculate() +void pointNoise::processData(const Function1Types::CSV<scalar>& data) { - // Point data only handled by master - if (!Pstream::master()) - { - return; - } + Info<< "Reading data file " << data.fName() << endl; - Info<< "Reading data file" << endl; - - Function1Types::CSV<scalar> pData("pressure", dict_, "Data"); + const fileName fNameBase = data.fName().name(true); // Time and pressure history data scalarField t, p; - filterTimeData(pData, t, p); + filterTimeData(data.x(), data.y(), t, p); p *= rhoRef_; Info<< " read " << t.size() << " values" << nl << endl; @@ -96,7 +86,7 @@ void pointNoise::calculate() windowModelPtr_->validate(t.size()); const windowModel& win = windowModelPtr_(); const scalar deltaf = 1.0/(deltaT*win.nSamples()); - fileName outDir(fileName("postProcessing")/"noise"/typeName); + fileName outDir(fileName("postProcessing")/"noise"/typeName/fNameBase); // Create the fft noiseFFT nfft(deltaT, p); @@ -185,12 +175,45 @@ void pointNoise::calculate() } +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void pointNoise::calculate() +{ + // Point data only handled by master + if (!Pstream::master()) + { + return; + } + + + if (inputFileNames_.size()) + { + forAll(inputFileNames_, i) + { + const fileName fName = inputFileNames_[i].expand(); + Function1Types::CSV<scalar> data("pressure", dict_, "Data", fName); + processData(data); + } + } + else + { + Function1Types::CSV<scalar> data("pressure", dict_, "Data"); + processData(data); + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -pointNoise::pointNoise(const dictionary& dict) +pointNoise::pointNoise(const dictionary& dict, const bool readFields) : noiseModel(dict) -{} +{ + if (readFields) + { + read(dict); + } +} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // @@ -199,6 +222,18 @@ pointNoise::~pointNoise() {} +bool pointNoise::read(const dictionary& dict) +{ + if (noiseModel::read(dict)) + { + dict.readIfPresent("inputFiles", inputFileNames_); + return true; + } + + return false; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace noiseModels diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H index 30bc669ae96433c3ba8cf689afb9304a79a21067..374678487f5089f83ec31bcdd7009a5372cf77de 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H @@ -76,8 +76,8 @@ SeeAlso \*---------------------------------------------------------------------------*/ -#ifndef pointNoise_H -#define pointNoise_H +#ifndef noiseModels_pointNoise_H +#define noiseModels_pointNoise_H #include "noiseModel.H" #include "CSV.H" @@ -100,14 +100,24 @@ class pointNoise protected: + // Protected data + + //- Input file names - optional + List<fileName> inputFileNames_; + + // Protected Member Functions void filterTimeData ( - const Function1Types::CSV<scalar>& pData, + const scalarField& t0, + const scalarField& p0, scalarField& t, scalarField& p - ); + ) const; + + //- Process the CSV data + void processData(const Function1Types::CSV<scalar>& data); public: @@ -116,7 +126,7 @@ public: TypeName("pointNoise"); //- Constructor - pointNoise(const dictionary& dict); + pointNoise(const dictionary& dict, const bool readFields = true); //- Destructor virtual ~pointNoise(); @@ -124,6 +134,9 @@ public: // Public Member Functions + //- Read from dictionary + virtual bool read(const dictionary& dict); + //- Calculate virtual void calculate(); diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 69cb1713c10267e95901c9dd5e889a2143cda64d..1ff7e53ee74de1eca1632815ee6463abef8ee5d3 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -44,12 +44,9 @@ addToRunTimeSelectionTable(noiseModel, surfaceNoise, dictionary); // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void surfaceNoise::initialise(const dictionary& dict) +void surfaceNoise::initialise(const fileName& fName) { - dict.lookup("inputFile") >> inputFileName_; - inputFileName_.expand(); - - dict.readIfPresent("fftWriteInterval", fftWriteInterval_); + Info<< "Reading data file " << fName << endl; label nAvailableTimes = 0; @@ -57,17 +54,15 @@ void surfaceNoise::initialise(const dictionary& dict) if (Pstream::master()) { // Create the surface reader - const word readerType(dict.lookup("reader")); - readerPtr_.reset(surfaceReader::New(readerType, inputFileName_).ptr()); + readerPtr_ = surfaceReader::New(readerType_, fName); // Find the index of the pressure data - const word pName(dict.lookupOrDefault<word>("p", "p")); const List<word> fieldNames(readerPtr_->fieldNames(0)); - pIndex_ = findIndex(fieldNames, pName); + pIndex_ = findIndex(fieldNames, pName_); if (pIndex_ == -1) { FatalErrorInFunction - << "Unable to find pressure field name " << pName + << "Unable to find pressure field name " << pName_ << " in list of available fields: " << fieldNames << exit(FatalError); } @@ -76,12 +71,6 @@ void surfaceNoise::initialise(const dictionary& dict) // - Could be done later, but since this utility can process a lot of // data we can ensure that the user-input is correct prior to doing // the heavy lifting - const word writerType(dict.lookup("writer")); - dictionary optDict - ( - dict.subOrEmptyDict("writeOptions").subOrEmptyDict(writerType) - ); - writerPtr_.reset(surfaceWriter::New(writerType, optDict).ptr()); // Set the time range const instantList allTimes = readerPtr_->times(); @@ -404,18 +393,25 @@ Foam::scalar surfaceNoise::surfaceAverage // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -surfaceNoise::surfaceNoise(const dictionary& dict) +surfaceNoise::surfaceNoise(const dictionary& dict, const bool readFields) : - noiseModel(dict), - inputFileName_("unknown-inputFile"), + noiseModel(dict, false), + inputFileNames_(), + pName_("p"), pIndex_(0), times_(), deltaT_(0), startTimeIndex_(0), nFace_(0), - fftWriteInterval_(1) + fftWriteInterval_(1), + readerType_(word::null), + readerPtr_(nullptr), + writerPtr_(nullptr) { - initialise(dict); + if (readFields) + { + read(dict); + } } @@ -427,271 +423,316 @@ surfaceNoise::~surfaceNoise() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void surfaceNoise::calculate() +bool surfaceNoise::read(const dictionary& dict) { - // Container for pressure time history data per face - List<scalarField> pData; - - // Processor procFaceOffsets - labelList procFaceOffset; - if (Pstream::parRun()) + if (noiseModel::read(dict)) { - const label nProcs = Pstream::nProcs(); - const label nFacePerProc = floor(nFace_/nProcs) + 1; - - procFaceOffset.setSize(nProcs + 1, 0); - for (label i = 1; i < procFaceOffset.size(); i++) + if (dict.found("inputFile")) { - procFaceOffset[i] = min(i*nFacePerProc, nFace_); + inputFileNames_.setSize(1); + dict.lookup("inputFile") >> inputFileNames_[0]; + } + else + { + dict.lookup("inputFiles") >> inputFileNames_; } - } - else - { - procFaceOffset.setSize(1, nFace_); - } - // Read pressure data from file - readSurfaceData(procFaceOffset, pData); + dict.readIfPresent("fftWriteInterval", fftWriteInterval_); + dict.readIfPresent("p", pName_); - // Process the pressure data, and store results as surface values per - // frequency so that it can be output using the surface writer + dict.lookup("reader") >> readerType_; - Info<< "Creating noise FFTs" << endl; + word writerType(dict.lookup("writer")); + dictionary optDict + ( + dict.subOrEmptyDict("writeOptions").subOrEmptyDict(writerType) + ); - // Storage for FFT data - const label nLocalFace = pData.size(); - const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_)); - const label nFFT = freq1.size()/fftWriteInterval_; - List<scalarField> surfPrmsf(nFFT); - List<scalarField> surfPSDf(nFFT); - forAll(surfPrmsf, freqI) - { - surfPrmsf[freqI].setSize(nLocalFace); - surfPSDf[freqI].setSize(nLocalFace); + writerPtr_ = surfaceWriter::New(writerType, optDict); + + return true; } - // Storage for 1/3 octave data - labelList octave13BandIDs; - scalarField octave13FreqCentre; - noiseFFT::octaveBandInfo - ( - freq1, - fLower_, - fUpper_, - 3, - octave13BandIDs, - octave13FreqCentre - ); + return false; +} - label bandSize = 0; - if (octave13BandIDs.empty()) - { - WarningInFunction - << "Ocatve band calculation failed (zero sized). " - << "please check your input data" - << endl; - } - else - { - bandSize = octave13BandIDs.size() - 1; - } - List<scalarField> surfPSD13f(bandSize); - List<scalarField> surfPrms13f2(bandSize); - forAll(surfPSD13f, freqI) +void surfaceNoise::calculate() +{ + forAll(inputFileNames_, i) { - surfPSD13f[freqI].setSize(nLocalFace); - surfPrms13f2[freqI].setSize(nLocalFace); - } + fileName fName = inputFileNames_[i]; - const windowModel& win = windowModelPtr_(); + initialise(fName.expand()); - forAll(pData, faceI) - { - const scalarField& p = pData[faceI]; + // Container for pressure time history data per face + List<scalarField> pData; - noiseFFT nfft(deltaT_, p); - graph Prmsf(nfft.RMSmeanPf(win)); - graph PSDf(nfft.PSDf(win)); + // Processor procFaceOffsets + labelList procFaceOffset; + if (Pstream::parRun()) + { + const label nProcs = Pstream::nProcs(); + const label nFacePerProc = floor(nFace_/nProcs) + 1; - // Store the frequency results in slot for face of surface - forAll(surfPrmsf, i) + procFaceOffset.setSize(nProcs + 1, 0); + for (label i = 1; i < procFaceOffset.size(); i++) + { + procFaceOffset[i] = min(i*nFacePerProc, nFace_); + } + } + else { - label freqI = (i + 1)*fftWriteInterval_ - 1; - surfPrmsf[i][faceI] = Prmsf.y()[freqI]; - surfPSDf[i][faceI] = PSDf.y()[freqI]; + procFaceOffset.setSize(1, nFace_); } - // PSD [Pa^2/Hz] - graph PSD13f(nfft.octaves(PSDf, octave13BandIDs, false)); + // Read pressure data from file + readSurfaceData(procFaceOffset, pData); - // Integrated PSD = P(rms)^2 [Pa^2] - graph Prms13f2(nfft.octaves(PSDf, octave13BandIDs, true)); + // Process the pressure data, and store results as surface values per + // frequency so that it can be output using the surface writer - // Store the 1/3 octave results in slot for face of surface - forAll(surfPSD13f, freqI) + Info<< "Creating noise FFTs" << endl; + + // Storage for FFT data + const label nLocalFace = pData.size(); + const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_)); + const label nFFT = freq1.size()/fftWriteInterval_; + List<scalarField> surfPrmsf(nFFT); + List<scalarField> surfPSDf(nFFT); + forAll(surfPrmsf, freqI) { - surfPSD13f[freqI][faceI] = PSD13f.y()[freqI]; - surfPrms13f2[freqI][faceI] = Prms13f2.y()[freqI]; + surfPrmsf[freqI].setSize(nLocalFace); + surfPSDf[freqI].setSize(nLocalFace); } - } - - // Output directory for graphs - fileName outDir(fileName("postProcessing")/"noise"/typeName); - const scalar deltaf = 1.0/(deltaT_*win.nSamples()); - Info<< "Writing fft surface data" << endl; - { - scalarField PrmsfAve(surfPrmsf.size(), 0); - scalarField PSDfAve(surfPrmsf.size(), 0); - scalarField fOut(surfPrmsf.size(), 0); + // Storage for 1/3 octave data + labelList octave13BandIDs; + scalarField octave13FreqCentre; + noiseFFT::octaveBandInfo + ( + freq1, + fLower_, + fUpper_, + 3, + octave13BandIDs, + octave13FreqCentre + ); - forAll(surfPrmsf, i) + label bandSize = 0; + if (octave13BandIDs.empty()) { - label freqI = i*fftWriteInterval_; - fOut[i] = freq1[freqI]; - const word& fName = inputFileName_.name(true); - const word gName = "fft"; - PrmsfAve[i] = writeSurfaceData - ( - fName, - gName, - "Prmsf", - freq1[freqI], - surfPrmsf[i], - procFaceOffset - ); + WarningInFunction + << "Ocatve band calculation failed (zero sized). " + << "please check your input data" + << endl; + } + else + { + bandSize = octave13BandIDs.size() - 1; + } - PSDfAve[i] = writeSurfaceData - ( - fName, - gName, - "PSDf", - freq1[freqI], - surfPSDf[i], - procFaceOffset - ); - writeSurfaceData - ( - fName, - gName, - "PSD", - freq1[freqI], - noiseFFT::PSD(surfPSDf[i]), - procFaceOffset - ); - writeSurfaceData - ( - fName, - gName, - "SPL", - freq1[freqI], - noiseFFT::SPL(surfPSDf[i]*deltaf), - procFaceOffset - ); + List<scalarField> surfPSD13f(bandSize); + List<scalarField> surfPrms13f2(bandSize); + forAll(surfPSD13f, freqI) + { + surfPSD13f[freqI].setSize(nLocalFace); + surfPrms13f2[freqI].setSize(nLocalFace); } - graph Prmsfg - ( - "Average Prms(f)", - "f [Hz]", - "P(f) [Pa]", - fOut, - PrmsfAve - ); - Prmsfg.write(outDir, graph::wordify(Prmsfg.title()), graphFormat_); + const windowModel& win = windowModelPtr_(); - graph PSDfg - ( - "Average PSD_f(f)", - "f [Hz]", - "PSD(f) [PaPa_Hz]", - fOut, - PSDfAve - ); - PSDfg.write(outDir, graph::wordify(PSDfg.title()), graphFormat_); + forAll(pData, faceI) + { + const scalarField& p = pData[faceI]; - graph PSDg - ( - "Average PSD_dB_Hz(f)", - "f [Hz]", - "PSD(f) [dB_Hz]", - fOut, - noiseFFT::PSD(PSDfAve) - ); - PSDg.write(outDir, graph::wordify(PSDg.title()), graphFormat_); + noiseFFT nfft(deltaT_, p); + graph Prmsf(nfft.RMSmeanPf(win)); + graph PSDf(nfft.PSDf(win)); - graph SPLg + // Store the frequency results in slot for face of surface + forAll(surfPrmsf, i) + { + label freqI = (i + 1)*fftWriteInterval_ - 1; + surfPrmsf[i][faceI] = Prmsf.y()[freqI]; + surfPSDf[i][faceI] = PSDf.y()[freqI]; + } + + // PSD [Pa^2/Hz] + graph PSD13f(nfft.octaves(PSDf, octave13BandIDs, false)); + + // Integrated PSD = P(rms)^2 [Pa^2] + graph Prms13f2(nfft.octaves(PSDf, octave13BandIDs, true)); + + // Store the 1/3 octave results in slot for face of surface + forAll(surfPSD13f, freqI) + { + surfPSD13f[freqI][faceI] = PSD13f.y()[freqI]; + surfPrms13f2[freqI][faceI] = Prms13f2.y()[freqI]; + } + } + + const word& fNameBase = fName.name(true); + + // Output directory for graphs + fileName outDir ( - "Average SPL_dB(f)", - "f [Hz]", - "SPL(f) [dB]", - fOut, - noiseFFT::SPL(PSDfAve*deltaf) + fileName("postProcessing")/"noise"/typeName/fNameBase ); - SPLg.write(outDir, graph::wordify(SPLg.title()), graphFormat_); - } + const scalar deltaf = 1.0/(deltaT_*win.nSamples()); + Info<< "Writing fft surface data" << endl; + { + scalarField PrmsfAve(surfPrmsf.size(), 0); + scalarField PSDfAve(surfPrmsf.size(), 0); + scalarField fOut(surfPrmsf.size(), 0); - Info<< "Writing one-third octave surface data" << endl; - { - scalarField PSDfAve(surfPSD13f.size(), 0); - scalarField Prms13f2Ave(surfPSD13f.size(), 0); + forAll(surfPrmsf, i) + { + label freqI = i*fftWriteInterval_; + fOut[i] = freq1[freqI]; + const word gName = "fft"; + PrmsfAve[i] = writeSurfaceData + ( + fNameBase, + gName, + "Prmsf", + freq1[freqI], + surfPrmsf[i], + procFaceOffset + ); + + PSDfAve[i] = writeSurfaceData + ( + fNameBase, + gName, + "PSDf", + freq1[freqI], + surfPSDf[i], + procFaceOffset + ); + writeSurfaceData + ( + fNameBase, + gName, + "PSD", + freq1[freqI], + noiseFFT::PSD(surfPSDf[i]), + procFaceOffset + ); + writeSurfaceData + ( + fNameBase, + gName, + "SPL", + freq1[freqI], + noiseFFT::SPL(surfPSDf[i]*deltaf), + procFaceOffset + ); + } - forAll(surfPSD13f, i) - { - const word& fName = inputFileName_.name(true); - const word gName = "oneThirdOctave"; - PSDfAve[i] = writeSurfaceData + graph Prmsfg ( - fName, - gName, - "PSD13f", - octave13FreqCentre[i], - surfPSD13f[i], - procFaceOffset + "Average Prms(f)", + "f [Hz]", + "P(f) [Pa]", + fOut, + PrmsfAve ); - writeSurfaceData + Prmsfg.write(outDir, graph::wordify(Prmsfg.title()), graphFormat_); + + graph PSDfg ( - fName, - gName, - "PSD13", - octave13FreqCentre[i], - noiseFFT::PSD(surfPSD13f[i]), - procFaceOffset + "Average PSD_f(f)", + "f [Hz]", + "PSD(f) [PaPa_Hz]", + fOut, + PSDfAve ); - writeSurfaceData + PSDfg.write(outDir, graph::wordify(PSDfg.title()), graphFormat_); + + graph PSDg ( - fName, - gName, - "SPL13", - octave13FreqCentre[i], - noiseFFT::SPL(surfPrms13f2[i]), - procFaceOffset + "Average PSD_dB_Hz(f)", + "f [Hz]", + "PSD(f) [dB_Hz]", + fOut, + noiseFFT::PSD(PSDfAve) ); + PSDg.write(outDir, graph::wordify(PSDg.title()), graphFormat_); - Prms13f2Ave[i] = surfaceAverage(surfPrms13f2[i], procFaceOffset); + graph SPLg + ( + "Average SPL_dB(f)", + "f [Hz]", + "SPL(f) [dB]", + fOut, + noiseFFT::SPL(PSDfAve*deltaf) + ); + SPLg.write(outDir, graph::wordify(SPLg.title()), graphFormat_); } - graph PSD13g - ( - "Average PSD13_dB_Hz(fm)", - "fm [Hz]", - "PSD(fm) [dB_Hz]", - octave13FreqCentre, - noiseFFT::PSD(PSDfAve) - ); - PSD13g.write(outDir, graph::wordify(PSD13g.title()), graphFormat_); - graph SPL13g - ( - "Average SPL13_dB(fm)", - "fm [Hz]", - "SPL(fm) [dB]", - octave13FreqCentre, - noiseFFT::SPL(Prms13f2Ave) - ); - SPL13g.write(outDir, graph::wordify(SPL13g.title()), graphFormat_); + Info<< "Writing one-third octave surface data" << endl; + { + scalarField PSDfAve(surfPSD13f.size(), 0); + scalarField Prms13f2Ave(surfPSD13f.size(), 0); + + forAll(surfPSD13f, i) + { + const word gName = "oneThirdOctave"; + PSDfAve[i] = writeSurfaceData + ( + fNameBase, + gName, + "PSD13f", + octave13FreqCentre[i], + surfPSD13f[i], + procFaceOffset + ); + writeSurfaceData + ( + fNameBase, + gName, + "PSD13", + octave13FreqCentre[i], + noiseFFT::PSD(surfPSD13f[i]), + procFaceOffset + ); + writeSurfaceData + ( + fNameBase, + gName, + "SPL13", + octave13FreqCentre[i], + noiseFFT::SPL(surfPrms13f2[i]), + procFaceOffset + ); + + Prms13f2Ave[i] = + surfaceAverage(surfPrms13f2[i], procFaceOffset); + } + + graph PSD13g + ( + "Average PSD13_dB_Hz(fm)", + "fm [Hz]", + "PSD(fm) [dB_Hz]", + octave13FreqCentre, + noiseFFT::PSD(PSDfAve) + ); + PSD13g.write(outDir, graph::wordify(PSD13g.title()), graphFormat_); + + graph SPL13g + ( + "Average SPL13_dB(fm)", + "fm [Hz]", + "SPL(fm) [dB]", + octave13FreqCentre, + noiseFFT::SPL(Prms13f2Ave) + ); + SPL13g.write(outDir, graph::wordify(SPL13g.title()), graphFormat_); + } } } diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H index 054944a1589765e455b203e958fb4a199842d58b..165a1cefd77963b882d10c4d44285eaa79c6258e 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H @@ -53,7 +53,7 @@ Description } // Input file - inputFile "postProcessing/faceSource1/surface/patch/patch.case"; + inputFiles ("postProcessing/faceSource1/surface/patch/patch.case"); // Write interval for FFT data, default = 1 fftWriteInterval 100; @@ -83,8 +83,8 @@ SeeAlso \*---------------------------------------------------------------------------*/ -#ifndef surfaceNoise_H -#define surfaceNoise_H +#ifndef noiseModels_surfaceNoise_H +#define noiseModels_surfaceNoise_H #include "noiseModel.H" #include "labelList.H" @@ -115,8 +115,11 @@ protected: // Protected Data - //- Input file name - fileName inputFileName_; + //- Input file names + List<fileName> inputFileNames_; + + //- Name of pressure field + word pName_; //- Index of pressure field in reader field list label pIndex_; @@ -138,17 +141,20 @@ protected: // result in a very large number of output files (1 per frequency) label fftWriteInterval_; + //- Reader type + word readerType_; + //- Pointer to the surface reader mutable autoPtr<surfaceReader> readerPtr_; //- Pointer to the surface writer - autoPtr<surfaceWriter> writerPtr_; + mutable autoPtr<surfaceWriter> writerPtr_; // Protected Member Functions //- Initialise - void initialise(const dictionary& dict); + void initialise(const fileName& fName); //- Read surface data void readSurfaceData @@ -183,7 +189,7 @@ public: TypeName("surfaceNoise"); //- Constructor - surfaceNoise(const dictionary& dict); + surfaceNoise(const dictionary& dict, const bool readFields = true); //- Destructor virtual ~surfaceNoise(); @@ -191,6 +197,9 @@ public: // Public Member Functions + //- Read from dictionary + virtual bool read(const dictionary& dict); + //- Calculate virtual void calculate(); }; diff --git a/src/regionModels/Allwclean b/src/regionModels/Allwclean index 94b0901855ea3a8a6b6122a9cfad66588bc7d184..2996d85d6158179e6e7c4c1f5ef16e0805ff00ad 100755 --- a/src/regionModels/Allwclean +++ b/src/regionModels/Allwclean @@ -1,7 +1,6 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory makeType=${1:-libso} -set -x wclean $makeType regionModel wclean $makeType pyrolysisModels @@ -9,5 +8,4 @@ wclean $makeType surfaceFilmModels wclean $makeType thermalBaffleModels wclean $makeType regionCoupling - #------------------------------------------------------------------------------ diff --git a/src/regionModels/Allwmake b/src/regionModels/Allwmake index c8e86eef7d65f54a8952c5f4035fab7f1d455e1a..1f2348ee2c43d5f36a2984689ebda670ddc70db9 100755 --- a/src/regionModels/Allwmake +++ b/src/regionModels/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType regionModel wmake $targetType pyrolysisModels @@ -12,5 +11,4 @@ wmake $targetType surfaceFilmModels/derivedFvPatchFields/wallFunctions wmake $targetType thermalBaffleModels wmake $targetType regionCoupling - #------------------------------------------------------------------------------ diff --git a/src/regionModels/pyrolysisModels/pyrolysisModel/pyrolysisModel.C b/src/regionModels/pyrolysisModels/pyrolysisModel/pyrolysisModel.C index 2b1f968f68d362c98b6e6d11cfd13839f44cf209..61f5502341e83ff16ececef0fd0ef0ea9df2b730 100644 --- a/src/regionModels/pyrolysisModels/pyrolysisModel/pyrolysisModel.C +++ b/src/regionModels/pyrolysisModels/pyrolysisModel/pyrolysisModel.C @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ #include "pyrolysisModel.H" -#include "fvMesh.H" -#include "mappedFieldFvPatchField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/regionModels/regionModel/regionModel1D/regionModel1D.H b/src/regionModels/regionModel/regionModel1D/regionModel1D.H index 592e0af3176606edab18a16c69a006d90f10face..3663a946488ab172711bf4d6ca63a1a2bc50a298 100644 --- a/src/regionModels/regionModel/regionModel1D/regionModel1D.H +++ b/src/regionModels/regionModel/regionModel1D/regionModel1D.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,9 +54,6 @@ class regionModel1D : public regionModel { - -private: - // Private Member Functions //- Disallow default bitwise copy construct diff --git a/src/regionModels/regionModel/singleLayerRegion/singleLayerRegion.H b/src/regionModels/regionModel/singleLayerRegion/singleLayerRegion.H index ac0892c49f0398460b9cfac894ecd4b922777613..ccababa2724e5519daa8ba72c01e952e951f01cd 100644 --- a/src/regionModels/regionModel/singleLayerRegion/singleLayerRegion.H +++ b/src/regionModels/regionModel/singleLayerRegion/singleLayerRegion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,9 +52,6 @@ class singleLayerRegion : public regionModel { - -private: - // Private Member Functions //- Disallow default bitwise copy construct diff --git a/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/curvatureSeparation/curvatureSeparation.C b/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/curvatureSeparation/curvatureSeparation.C index 72d49c774c18806596f4b01fa2462e0917124bd8..bedaa4a9e5181bf72b7b87efdf9d1930169ec456 100644 --- a/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/curvatureSeparation/curvatureSeparation.C +++ b/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/curvatureSeparation/curvatureSeparation.C @@ -117,8 +117,8 @@ tmp<scalarField> curvatureSeparation::calcCosAngle { const fvMesh& mesh = owner().regionMesh(); const vectorField nf(mesh.Sf()/mesh.magSf()); - const unallocLabelList& own = mesh.owner(); - const unallocLabelList& nbr = mesh.neighbour(); + const labelUList& own = mesh.owner(); + const labelUList& nbr = mesh.neighbour(); scalarField phiMax(mesh.nCells(), -GREAT); scalarField cosAngle(mesh.nCells(), 0.0); diff --git a/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.C b/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.C index e27bf3539286751d1bb5a1202b8f51666ed13189..0fa21926e752f401bc86d72cb5690c9e873faec8 100644 --- a/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.C +++ b/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.C @@ -789,7 +789,7 @@ tmp<volScalarField::Internal> thermoSingleLayer::Srho() const toPrimary(filmPatchi, patchMass); const label primaryPatchi = primaryPatchIDs()[i]; - const unallocLabelList& cells = + const labelUList& cells = primaryMesh().boundaryMesh()[primaryPatchi].faceCells(); forAll(patchMass, j) @@ -843,7 +843,7 @@ tmp<volScalarField::Internal> thermoSingleLayer::Srho toPrimary(filmPatchi, patchMass); const label primaryPatchi = primaryPatchIDs()[i]; - const unallocLabelList& cells = + const labelUList& cells = primaryMesh().boundaryMesh()[primaryPatchi].faceCells(); forAll(patchMass, j) @@ -893,7 +893,7 @@ tmp<volScalarField::Internal> thermoSingleLayer::Sh() const toPrimary(filmPatchi, patchEnergy); const label primaryPatchi = primaryPatchIDs()[i]; - const unallocLabelList& cells = + const labelUList& cells = primaryMesh().boundaryMesh()[primaryPatchi].faceCells(); forAll(patchEnergy, j) diff --git a/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.H b/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.H index cbf5717f115c5e0158f5cd2435853d3174dd5464..941aa73145333c49c1623235bf3e312591afb09c 100644 --- a/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.H +++ b/src/regionModels/surfaceFilmModels/thermoSingleLayer/thermoSingleLayer.H @@ -65,8 +65,6 @@ class thermoSingleLayer : public kinematicSingleLayer { -private: - // Private member functions //- Disallow default bitwise copy construct diff --git a/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C b/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C index 34bdfe2f85fb546ac3b8b92dcfe9e6e7892171a0..ca1f1511c068078f7fa4093de60dfbee925f4d1a 100644 --- a/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C +++ b/src/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle/thermalBaffleFvPatchScalarField.C @@ -26,7 +26,6 @@ License #include "thermalBaffleFvPatchScalarField.H" #include "addToRunTimeSelectionTable.H" #include "emptyPolyPatch.H" -#include "polyPatch.H" #include "mappedWallPolyPatch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/renumber/Allwmake b/src/renumber/Allwmake index 66d9bfd5366c8f66e74b55adda50298aafeaf50e..b76410a6a785aa8e7cda37ea66440f6c21100325 100755 --- a/src/renumber/Allwmake +++ b/src/renumber/Allwmake @@ -16,8 +16,6 @@ targetType=libso # echo #fi -set -x - wmake $targetType renumberMethods if [ -f "$BOOST_ARCH_PATH/include/boost/version.hpp" ] || \ diff --git a/src/renumber/SloanRenumber/Make/options b/src/renumber/SloanRenumber/Make/options index 2c8f956a611718051304f5c066175e83e469ea3c..bf9567fef2bb19ea3d4d22470c56838adb5fa31f 100644 --- a/src/renumber/SloanRenumber/Make/options +++ b/src/renumber/SloanRenumber/Make/options @@ -5,7 +5,9 @@ EXE_INC = \ -I$(LIB_SRC)/renumber/renumberMethods/lnInclude LIB_LIBS = \ - -L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -lboost_system \ + -L$(BOOST_ARCH_PATH)/lib \ + -L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ + -lboost_system \ -lmeshTools \ -ldecompositionMethods \ -lrenumberMethods diff --git a/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.C b/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.C index 4e865bd0b11c13e6ede0254b59a75233202a2721..33d7810da8cc501ed1c3e697ce8b3242c1108dfc 100644 --- a/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.C +++ b/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.C @@ -26,7 +26,7 @@ License #include "OppositeFaceCellWave.H" #include "polyMesh.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class Type, class TrackingData> void Foam::OppositeFaceCellWave<Type, TrackingData>::opposingFaceLabels diff --git a/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.H b/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.H index bcfe3cb0ddafc991691bd72fdf48bd852303cf0d..12701070822163bc433417eab95fe6584fb16cce 100644 --- a/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.H +++ b/src/renumber/renumberMethods/structuredRenumber/OppositeFaceCellWave.H @@ -52,14 +52,14 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class OppositeFaceCellWaveName Declaration + Class OppositeFaceCellWaveName Declaration \*---------------------------------------------------------------------------*/ TemplateName(OppositeFaceCellWave); /*---------------------------------------------------------------------------*\ - Class OppositeFaceCellWave Declaration + Class OppositeFaceCellWave Declaration \*---------------------------------------------------------------------------*/ template<class Type, class TrackingData = int> diff --git a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C index b2236c39c49e25b344729c724b17aafff511a9a9..4a8de4eac4d72b0557ff26ed31edc9f7c0f02a8b 100644 --- a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C +++ b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C @@ -114,6 +114,53 @@ void Foam::RBD::rigidBodyModel::addRestraints } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +Foam::label Foam::RBD::rigidBodyModel::join_ +( + const label parentID, + const spatialTransform& XT, + autoPtr<joint> jointPtr, + autoPtr<rigidBody> bodyPtr +) +{ + // Append the body + const rigidBody& body = bodyPtr(); + bodies_.append(bodyPtr); + const label bodyID = nBodies()-1; + bodyIDs_.insert(body.name(), bodyID); + + // If the parentID refers to a merged body find the parent into which it has + // been merged and set lambda and XT accordingly + if (merged(parentID)) + { + const subBody& sBody = mergedBody(parentID); + lambda_.append(sBody.masterID()); + XT_.append(XT & sBody.masterXT()); + } + else + { + lambda_.append(parentID); + XT_.append(XT); + } + + // Append the joint + const joint& prevJoint = joints_[joints_.size() - 1]; + joints_.append(jointPtr); + joint& curJoint = joints_[joints_.size() - 1]; + curJoint.index() = joints_.size() - 1; + curJoint.qIndex() = prevJoint.qIndex() + prevJoint.nDoF(); + + // Increment the degrees of freedom + nDoF_ += curJoint.nDoF(); + unitQuaternions_ = unitQuaternions_ || curJoint.unitQuaternion(); + + resizeState(); + + return bodyID; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // Foam::RBD::rigidBodyModel::rigidBodyModel() @@ -168,52 +215,7 @@ Foam::RBD::rigidBodyModel::~rigidBodyModel() {} -// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // - -Foam::label Foam::RBD::rigidBodyModel::join_ -( - const label parentID, - const spatialTransform& XT, - autoPtr<joint> jointPtr, - autoPtr<rigidBody> bodyPtr -) -{ - // Append the body - const rigidBody& body = bodyPtr(); - bodies_.append(bodyPtr); - const label bodyID = nBodies()-1; - bodyIDs_.insert(body.name(), bodyID); - - // If the parentID refers to a merged body find the parent into which it has - // been merged and set lambda and XT accordingly - if (merged(parentID)) - { - const subBody& sBody = mergedBody(parentID); - lambda_.append(sBody.masterID()); - XT_.append(XT & sBody.masterXT()); - } - else - { - lambda_.append(parentID); - XT_.append(XT); - } - - // Append the joint - const joint& prevJoint = joints_[joints_.size() - 1]; - joints_.append(jointPtr); - joint& curJoint = joints_[joints_.size() - 1]; - curJoint.index() = joints_.size() - 1; - curJoint.qIndex() = prevJoint.qIndex() + prevJoint.nDoF(); - - // Increment the degrees of freedom - nDoF_ += curJoint.nDoF(); - unitQuaternions_ = unitQuaternions_ || curJoint.unitQuaternion(); - - resizeState(); - - return bodyID; -} - +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // Foam::label Foam::RBD::rigidBodyModel::join ( diff --git a/src/sampling/cuttingPlane/cuttingPlane.C b/src/sampling/cuttingPlane/cuttingPlane.C index 5cf7a37dd7cd39524ffb2da2afcaeaed6e436b61..22314049afddd82dd5dae3af0b60912be6397a7e 100644 --- a/src/sampling/cuttingPlane/cuttingPlane.C +++ b/src/sampling/cuttingPlane/cuttingPlane.C @@ -55,7 +55,7 @@ void Foam::cuttingPlane::calcCutCells listSize = cellIdLabels.size(); } - cutCells_.setSize(listSize); + meshCells_.setSize(listSize); label cutcelli(0); // Find the cut cells by detecting any cell that uses points with @@ -70,9 +70,7 @@ void Foam::cuttingPlane::calcCutCells } const labelList& cEdges = cellEdges[celli]; - label nCutEdges = 0; - forAll(cEdges, i) { const edge& e = edges[cEdges[i]]; @@ -87,8 +85,7 @@ void Foam::cuttingPlane::calcCutCells if (nCutEdges > 2) { - cutCells_[cutcelli++] = celli; - + meshCells_[cutcelli++] = celli; break; } } @@ -96,7 +93,7 @@ void Foam::cuttingPlane::calcCutCells } // Set correct list size - cutCells_.setSize(cutcelli); + meshCells_.setSize(cutcelli); } @@ -114,7 +111,7 @@ void Foam::cuttingPlane::intersectEdges // Per edge -1 or the label of the intersection point edgePoint.setSize(edges.size()); - DynamicList<point> dynCuttingPoints(4*cutCells_.size()); + DynamicList<point> dynCuttingPoints(4*meshCells_.size()); forAll(edges, edgeI) { @@ -258,15 +255,15 @@ void Foam::cuttingPlane::walkCellCuts const pointField& cutPoints = this->points(); // use dynamic lists to handle triangulation and/or missed cuts - DynamicList<face> dynCutFaces(cutCells_.size()); - DynamicList<label> dynCutCells(cutCells_.size()); + DynamicList<face> dynCutFaces(meshCells_.size()); + DynamicList<label> dynCutCells(meshCells_.size()); // scratch space for calculating the face vertices DynamicList<label> faceVerts(10); - forAll(cutCells_, i) + forAll(meshCells_, i) { - label celli = cutCells_[i]; + label celli = meshCells_[i]; // Find the starting edge to walk from. const labelList& cEdges = mesh.cellEdges()[celli]; @@ -330,20 +327,18 @@ void Foam::cuttingPlane::walkCellCuts } this->storedFaces().transfer(dynCutFaces); - cutCells_.transfer(dynCutCells); + meshCells_.transfer(dynCutCells); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct without cutting Foam::cuttingPlane::cuttingPlane(const plane& pln) : plane(pln) {} -// Construct from plane and mesh reference, restricted to a list of cells Foam::cuttingPlane::cuttingPlane ( const plane& pln, @@ -369,7 +364,7 @@ void Foam::cuttingPlane::reCut ) { MeshStorage::clear(); - cutCells_.clear(); + meshCells_.clear(); const scalarField dotProducts((mesh.points() - refPoint()) & normal()); @@ -391,7 +386,7 @@ void Foam::cuttingPlane::remapFaces const labelUList& faceMap ) { - // recalculate the cells cut + // Recalculate the cells cut if (notNull(faceMap) && faceMap.size()) { MeshStorage::remapFaces(faceMap); @@ -399,9 +394,9 @@ void Foam::cuttingPlane::remapFaces List<label> newCutCells(faceMap.size()); forAll(faceMap, facei) { - newCutCells[facei] = cutCells_[faceMap[facei]]; + newCutCells[facei] = meshCells_[faceMap[facei]]; } - cutCells_.transfer(newCutCells); + meshCells_.transfer(newCutCells); } } @@ -420,7 +415,7 @@ void Foam::cuttingPlane::operator=(const cuttingPlane& rhs) static_cast<MeshStorage&>(*this) = rhs; static_cast<plane&>(*this) = rhs; - cutCells_ = rhs.cutCells(); + meshCells_ = rhs.meshCells(); } diff --git a/src/sampling/cuttingPlane/cuttingPlane.H b/src/sampling/cuttingPlane/cuttingPlane.H index c6c3669ebd37c94d738e609268ef84845066d7c8..460e936f9928e72d91bb8625ce84954afd89becb 100644 --- a/src/sampling/cuttingPlane/cuttingPlane.H +++ b/src/sampling/cuttingPlane/cuttingPlane.H @@ -70,7 +70,7 @@ class cuttingPlane // Private data //- List of cells cut by the plane - labelList cutCells_; + labelList meshCells_; // Private Member Functions @@ -121,7 +121,7 @@ protected: // Protected Member Functions - //- Recut mesh with existing planeDesc, restricted to a list of cells + //- Recut mesh with existing plane, restricted to a list of cells void reCut ( const primitiveMesh&, @@ -157,15 +157,15 @@ public: } //- Return List of cells cut by the plane - const labelList& cutCells() const + const labelList& meshCells() const { - return cutCells_; + return meshCells_; } //- Return true or false to question: have any cells been cut? bool cut() const { - return cutCells_.size(); + return meshCells_.size(); } //- Sample the cell field diff --git a/src/sampling/cuttingPlane/cuttingPlaneTemplates.C b/src/sampling/cuttingPlane/cuttingPlaneTemplates.C index ba1c80eb72258ed2e2d6f66e2e54b857b43a0d06..b774e1e2542f8babcb67578555ceabc6d059d601 100644 --- a/src/sampling/cuttingPlane/cuttingPlaneTemplates.C +++ b/src/sampling/cuttingPlane/cuttingPlaneTemplates.C @@ -28,8 +28,6 @@ Description #include "cuttingPlane.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> @@ -38,7 +36,7 @@ Foam::tmp<Foam::Field<Type>> Foam::cuttingPlane::sample const Field<Type>& fld ) const { - return tmp<Field<Type>>(new Field<Type>(fld, cutCells())); + return tmp<Field<Type>>(new Field<Type>(fld, meshCells())); } diff --git a/src/sampling/meshToMesh/calcMethod/meshToMeshMethod/meshToMeshMethod.C b/src/sampling/meshToMesh/calcMethod/meshToMeshMethod/meshToMeshMethod.C index 63c8a58d7a4fff2585e39bb6626ca9c0a9ad54aa..9a99aa04e1c12d5c0a4ab816c0ac985a28902a17 100644 --- a/src/sampling/meshToMesh/calcMethod/meshToMeshMethod/meshToMeshMethod.C +++ b/src/sampling/meshToMesh/calcMethod/meshToMeshMethod/meshToMeshMethod.C @@ -39,7 +39,7 @@ namespace Foam Foam::scalar Foam::meshToMeshMethod::tolerance_ = 1e-6; -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // Foam::labelList Foam::meshToMeshMethod::maskCells() const { diff --git a/src/sampling/meshToMesh0/calculateMeshToMesh0Addressing.C b/src/sampling/meshToMesh0/calculateMeshToMesh0Addressing.C index 3bd2a71e54c1b89bc393e52b49de18e42e8b946b..cbbebf229ccd9fde2290f87fe51a5ad158213d14 100644 --- a/src/sampling/meshToMesh0/calculateMeshToMesh0Addressing.C +++ b/src/sampling/meshToMesh0/calculateMeshToMesh0Addressing.C @@ -156,6 +156,7 @@ void Foam::meshToMesh0::calcAddressing() << "Source patch " << fromPatch.name() << " has no faces. Not performing mapping for it." << endl; + boundaryAddressing_[patchi].setSize(toPatch.size()); boundaryAddressing_[patchi] = -1; } else diff --git a/src/sampling/probes/probes.C b/src/sampling/probes/probes.C index a8f217084c5c71f0bb28aab5b5c50dc343d727f0..e920b946b83dc1b94c83dc56a4e3551d8f40f302 100644 --- a/src/sampling/probes/probes.C +++ b/src/sampling/probes/probes.C @@ -46,7 +46,7 @@ namespace Foam } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::probes::findElements(const fvMesh& mesh) { diff --git a/src/sampling/sampledSet/sampledSet/sampledSet.C b/src/sampling/sampledSet/sampledSet/sampledSet.C index 50979b68bec7014a8c8de493ea4f0adb6e244933..f583aaea86d7685eb423b16a50bedecbf0e64601 100644 --- a/src/sampling/sampledSet/sampledSet/sampledSet.C +++ b/src/sampling/sampledSet/sampledSet/sampledSet.C @@ -39,7 +39,7 @@ namespace Foam } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // Foam::label Foam::sampledSet::getBoundaryCell(const label facei) const { diff --git a/src/sampling/sampledSurface/isoSurface/isoSurface.C b/src/sampling/sampledSurface/isoSurface/isoSurface.C index dc93fd1684247ee648ffe8441646232293160b02..d5d8b7fbde52cd827acde5d2a0c6327a813c611b 100644 --- a/src/sampling/sampledSurface/isoSurface/isoSurface.C +++ b/src/sampling/sampledSurface/isoSurface/isoSurface.C @@ -33,6 +33,7 @@ License #include "OFstream.H" #include "meshTools.H" #include "triSurfaceSearch.H" +#include "triSurfaceTools.H" #include "surfaceIntersection.H" #include "intersectedSurface.H" #include "searchableBox.H" @@ -1257,76 +1258,6 @@ void Foam::isoSurface::trimToBox } -bool Foam::isoSurface::validTri(const triSurface& surf, const label facei) -{ - // Simple check on indices ok. - - const labelledTri& f = surf[facei]; - - if - ( - (f[0] < 0) || (f[0] >= surf.points().size()) - || (f[1] < 0) || (f[1] >= surf.points().size()) - || (f[2] < 0) || (f[2] >= surf.points().size()) - ) - { - WarningInFunction - << "triangle " << facei << " vertices " << f - << " uses point indices outside point range 0.." - << surf.points().size()-1 << endl; - - return false; - } - - if ((f[0] == f[1]) || (f[0] == f[2]) || (f[1] == f[2])) - { - WarningInFunction - << "triangle " << facei - << " uses non-unique vertices " << f - << endl; - return false; - } - - // duplicate triangle check - - const labelList& fFaces = surf.faceFaces()[facei]; - - // Check if faceNeighbours use same points as this face. - // Note: discards normal information - sides of baffle are merged. - forAll(fFaces, i) - { - label nbrFacei = fFaces[i]; - - if (nbrFacei <= facei) - { - // lower numbered faces already checked - continue; - } - - const labelledTri& nbrF = surf[nbrFacei]; - - if - ( - ((f[0] == nbrF[0]) || (f[0] == nbrF[1]) || (f[0] == nbrF[2])) - && ((f[1] == nbrF[0]) || (f[1] == nbrF[1]) || (f[1] == nbrF[2])) - && ((f[2] == nbrF[0]) || (f[2] == nbrF[1]) || (f[2] == nbrF[2])) - ) - { - WarningInFunction - << "triangle " << facei << " vertices " << f - << " fc:" << f.centre(surf.points()) - << " has the same vertices as triangle " << nbrFacei - << " vertices " << nbrF - << " fc:" << nbrF.centre(surf.points()) - << endl; - - return false; - } - } - return true; -} - - Foam::triSurface Foam::isoSurface::subsetMesh ( const triSurface& s, @@ -1756,8 +1687,7 @@ Foam::isoSurface::isoSurface forAll(*this, triI) { - // Copied from surfaceCheck - validTri(*this, triI); + triSurfaceTools::validTri(*this, triI); } fileName stlFile = mesh_.time().path() + ".stl"; diff --git a/src/sampling/sampledSurface/isoSurface/isoSurface.H b/src/sampling/sampledSurface/isoSurface/isoSurface.H index 267cc04c9005e09f7ccc690b4f1c15d8e6459e2b..e947405566366af52706271de323ca69368163e9 100644 --- a/src/sampling/sampledSurface/isoSurface/isoSurface.H +++ b/src/sampling/sampledSurface/isoSurface/isoSurface.H @@ -377,9 +377,6 @@ class isoSurface List<FixedList<scalar, 3>>& interpolationWeights ); - //- Check single triangle for (topological) validity - static bool validTri(const triSurface&, const label facei); - static triSurface subsetMesh ( const triSurface& s, diff --git a/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.C b/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.C index 977165958627c7953e5c8b89efeb32ea35f8fd93..47ec36069f096619001be0033126088e0d1c8d1c 100644 --- a/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.C +++ b/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.C @@ -29,6 +29,7 @@ License #include "mergePoints.H" #include "tetMatcher.H" #include "syncTools.H" +#include "triSurfaceTools.H" #include "addToRunTimeSelectionTable.H" #include "Time.H" #include "triPoints.H" @@ -1049,73 +1050,6 @@ Foam::triSurface Foam::isoSurfaceCell::stitchTriPoints } -bool Foam::isoSurfaceCell::validTri(const triSurface& surf, const label facei) -{ - // Simple check on indices ok. - - const labelledTri& f = surf[facei]; - - forAll(f, fp) - { - if (f[fp] < 0 || f[fp] >= surf.points().size()) - { - WarningInFunction - << "triangle " << facei << " vertices " << f - << " uses point indices outside point range 0.." - << surf.points().size()-1 << endl; - - return false; - } - } - - if ((f[0] == f[1]) || (f[0] == f[2]) || (f[1] == f[2])) - { - WarningInFunction - << "triangle " << facei - << " uses non-unique vertices " << f - << endl; - return false; - } - - // duplicate triangle check - - const labelList& fFaces = surf.faceFaces()[facei]; - - // Check if faceNeighbours use same points as this face. - // Note: discards normal information - sides of baffle are merged. - forAll(fFaces, i) - { - label nbrFacei = fFaces[i]; - - if (nbrFacei <= facei) - { - // lower numbered faces already checked - continue; - } - - const labelledTri& nbrF = surf[nbrFacei]; - - if - ( - ((f[0] == nbrF[0]) || (f[0] == nbrF[1]) || (f[0] == nbrF[2])) - && ((f[1] == nbrF[0]) || (f[1] == nbrF[1]) || (f[1] == nbrF[2])) - && ((f[2] == nbrF[0]) || (f[2] == nbrF[1]) || (f[2] == nbrF[2])) - ) - { - WarningInFunction - << "triangle " << facei << " vertices " << f - << " coords:" << f.points(surf.points()) - << " has the same vertices as triangle " << nbrFacei - << " vertices " << nbrF - << endl; - - return false; - } - } - return true; -} - - void Foam::isoSurfaceCell::calcAddressing ( const triSurface& surf, @@ -1569,8 +1503,7 @@ Foam::isoSurfaceCell::isoSurfaceCell forAll(*this, triI) { - // Copied from surfaceCheck - validTri(*this, triI); + triSurfaceTools::validTri(*this, triI); } } diff --git a/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.H b/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.H index ec496319ec482808ad8d32a362c308a090b3d5e1..f848cc47366cdc6e7cb29dff72f96cb3cee043c6 100644 --- a/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.H +++ b/src/sampling/sampledSurface/isoSurface/isoSurfaceCell.H @@ -272,9 +272,6 @@ class isoSurfaceCell labelList& triMap // merged to unmerged triangle ) const; - //- Check single triangle for (topological) validity - static bool validTri(const triSurface&, const label); - //- Determine edge-face addressing void calcAddressing ( diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C index bd026f2b91e68eafa22e34441bcc74c8a9f6e84a..2c21271939d7da5ec56115b36e6aca64da0d69b0 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C @@ -212,14 +212,14 @@ void Foam::ensightSurfaceReader::readCase(IFstream& is) } // Start reading time information - readLine(is, buffer); // time set: 1 + readLine(is, buffer); // time set: <int> readLine(is, buffer); - readFromLine(3, buffer, nTimeSteps_); + readFromLine(3, buffer, nTimeSteps_); // number of steps: <int> readLine(is, buffer); - readFromLine(3, buffer, timeStartIndex_); + readFromLine(3, buffer, timeStartIndex_); // filename start number: <int> readLine(is, buffer); - readFromLine(2, buffer, timeIncrement_); + readFromLine(2, buffer, timeIncrement_); // filename increment: <int> if (debug) { @@ -369,7 +369,7 @@ const Foam::meshedSurface& Foam::ensightSurfaceReader::geometry() // Read faces - may be a mix of tris, quads and polys DynamicList<face> faces(ceil(nPoints/3)); - DynamicList<Tuple2<string, label> > schema(faces.size()); + DynamicList<Tuple2<string, label>> schema(faces.size()); string faceType = ""; label nFace = 0; while (is.good()) // (is.peek() != EOF) @@ -494,7 +494,7 @@ Foam::wordList Foam::ensightSurfaceReader::fieldNames } -Foam::tmp<Foam::Field<Foam::scalar> > Foam::ensightSurfaceReader::field +Foam::tmp<Foam::Field<Foam::scalar>> Foam::ensightSurfaceReader::field ( const label timeIndex, const label fieldIndex, @@ -505,7 +505,7 @@ Foam::tmp<Foam::Field<Foam::scalar> > Foam::ensightSurfaceReader::field } -Foam::tmp<Foam::Field<Foam::vector> > Foam::ensightSurfaceReader::field +Foam::tmp<Foam::Field<Foam::vector>> Foam::ensightSurfaceReader::field ( const label timeIndex, const label fieldIndex, @@ -516,7 +516,7 @@ Foam::tmp<Foam::Field<Foam::vector> > Foam::ensightSurfaceReader::field } -Foam::tmp<Foam::Field<Foam::sphericalTensor> > +Foam::tmp<Foam::Field<Foam::sphericalTensor>> Foam::ensightSurfaceReader::field ( const label timeIndex, @@ -528,7 +528,7 @@ Foam::ensightSurfaceReader::field } -Foam::tmp<Foam::Field<Foam::symmTensor> > Foam::ensightSurfaceReader::field +Foam::tmp<Foam::Field<Foam::symmTensor>> Foam::ensightSurfaceReader::field ( const label timeIndex, const label fieldIndex, @@ -539,7 +539,7 @@ Foam::tmp<Foam::Field<Foam::symmTensor> > Foam::ensightSurfaceReader::field } -Foam::tmp<Foam::Field<Foam::tensor> > Foam::ensightSurfaceReader::field +Foam::tmp<Foam::Field<Foam::tensor>> Foam::ensightSurfaceReader::field ( const label timeIndex, const label fieldIndex, diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H index 0ba7e1c49b7ef30f84ad003c72a6c5c5b1e79eb8..75c760341ab39505fb39a79a3af03fdc954816d8 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H @@ -86,7 +86,7 @@ protected: //- Pointer to the surface autoPtr<meshedSurface> surfPtr_; - List<Tuple2<string, label> > schema_; + List<Tuple2<string, label>> schema_; // Protected Member Functions @@ -126,7 +126,7 @@ protected: //- Helper function to return a field template<class Type> - tmp<Field<Type> > readField + tmp<Field<Type>> readField ( const label timeIndex, const label fieldIndex @@ -160,7 +160,7 @@ public: virtual wordList fieldNames(const label timeIndex) const; //- Return a scalar field at a given time - virtual tmp<Field<scalar> > field + virtual tmp<Field<scalar>> field ( const label timeIndex, const label fieldIndex, @@ -168,7 +168,7 @@ public: ) const; //- Return a scalar field at a given time - virtual tmp<Field<vector> > field + virtual tmp<Field<vector>> field ( const label timeIndex, const label fieldIndex, @@ -176,7 +176,7 @@ public: ) const; //- Return a sphericalTensor field at a given time - virtual tmp<Field<sphericalTensor> > field + virtual tmp<Field<sphericalTensor>> field ( const label timeIndex, const label fieldIndex, @@ -184,7 +184,7 @@ public: ) const; //- Return a symmTensor field at a given time - virtual tmp<Field<symmTensor> > field + virtual tmp<Field<symmTensor>> field ( const label timeIndex, const label fieldIndex, @@ -192,7 +192,7 @@ public: ) const; //- Return a tensor field at a given time - virtual tmp<Field<tensor> > field + virtual tmp<Field<tensor>> field ( const label timeIndex, const label fieldIndex, diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C index 5b8b3f555921e9e19fcede384aaa7c169a06c6ac..df6f466390ec49461bfdcfd23042d111375caf65 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C @@ -57,7 +57,7 @@ void Foam::ensightSurfaceReader::readFromLine template<class Type> -Foam::tmp<Foam::Field<Type> > Foam::ensightSurfaceReader::readField +Foam::tmp<Foam::Field<Type>> Foam::ensightSurfaceReader::readField ( const label timeIndex, const label fieldIndex @@ -126,7 +126,7 @@ Foam::tmp<Foam::Field<Type> > Foam::ensightSurfaceReader::readField is.read(iValue); // Allocate storage for data as a list per component - List<DynamicList<scalar> > values(pTraits<Type>::nComponents); + List<DynamicList<scalar>> values(pTraits<Type>::nComponents); label n = surfPtr_->size(); forAll(values, cmptI) { @@ -164,7 +164,7 @@ Foam::tmp<Foam::Field<Type> > Foam::ensightSurfaceReader::readField } } - tmp<Field<Type> > tField(new Field<Type>(n, pTraits<Type>::zero)); + tmp<Field<Type>> tField(new Field<Type>(n, pTraits<Type>::zero)); Field<Type>& field = tField.ref(); for diff --git a/src/sampling/sampledSurface/sampledPlane/sampledPlane.H b/src/sampling/sampledSurface/sampledPlane/sampledPlane.H index 4171cb3e36b27604b1b2979146573566ed7f72ba..8c8867070a0a8ba5b0dd42e20b9433a127897b92 100644 --- a/src/sampling/sampledSurface/sampledPlane/sampledPlane.H +++ b/src/sampling/sampledSurface/sampledPlane/sampledPlane.H @@ -169,7 +169,7 @@ public: //- For every face original cell in mesh const labelList& meshCells() const { - return cuttingPlane::cutCells(); + return cuttingPlane::meshCells(); } //- Sample field on surface diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C index f15c61b36315f0d3bd89dcdb14334c7bbc6d7e70..39568568524f490ea0922ba49771d3358b106d4d 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C @@ -31,6 +31,7 @@ License #include "volPointInterpolation.H" #include "PatchTools.H" #include "mapPolyMesh.H" +#include "sampledTriSurfaceMesh.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -84,6 +85,37 @@ void Foam::sampledSurfaces::writeGeometry() const } +void Foam::sampledSurfaces::writeOriginalIds() +{ + const word fieldName = "Ids"; + const fileName outputDir = outputPath_/time_.timeName(); + + forAll(*this, surfI) + { + const sampledSurface& s = operator[](surfI); + + if (isA<sampledTriSurfaceMesh>(s)) + { + const sampledTriSurfaceMesh& surf = + dynamicCast<const sampledTriSurfaceMesh&>(s); + + if (surf.keepIds()) + { + const labelList& idLst = surf.originalIds(); + + Field<scalar> ids(idLst.size()); + forAll(idLst, i) + { + ids[i] = idLst[i]; + } + + writeSurface(ids, surfI, fieldName, outputDir); + } + } + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::sampledSurfaces::sampledSurfaces diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H index 1d9c9e730b91a668999fa9b5292804f22c0d2128..8d610dbb5921504452b1c3076d480a98073a1fd6 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H @@ -116,6 +116,9 @@ class sampledSurfaces //- Write geometry only void writeGeometry() const; + //- Write scalar field with original ids + void writeOriginalIds(); + //- Write sampled fieldName on surface and on outputDir path template<class Type> void writeSurface diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C index 4e25d84af06d86b2f616e092d5afd9451760c021..143837a4eb3294936e916089e57103e155b95bd8 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C @@ -60,7 +60,6 @@ Foam::label Foam::sampledSurfaces::classifyFields() { // Check currently available fields wordList allFields = obr_.sortedNames(); - labelList indices = findStrings(fieldSelection_, allFields); forAll(fieldSelection_, i) { diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C index ba39848aad2bd0d809c3e56b2d0a0e615f43b679..0dd8c248efdff0e0c493171f84d401da54d5e406 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C @@ -49,9 +49,7 @@ void Foam::sampledSurfaces::writeSurface gatheredValues[Pstream::myProcNo()] = values; Pstream::gatherList(gatheredValues); - fileName sampleFile; - if (Pstream::master()) { // Combine values into single field @@ -181,24 +179,21 @@ void Foam::sampledSurfaces::sampleAndWrite template<class GeoField> void Foam::sampledSurfaces::sampleAndWrite(const IOobjectList& objects) { - wordList names; + wordList fieldNames; if (loadFromFiles_) { - IOobjectList fieldObjects(objects.lookupClass(GeoField::typeName)); - names = fieldObjects.names(); + fieldNames = objects.sortedNames(GeoField::typeName, fieldSelection_); } else { - names = mesh_.thisDb().names<GeoField>(); - } + fieldNames = mesh_.thisDb().sortedNames<GeoField>(fieldSelection_); - labelList nameIDs(findStrings(fieldSelection_, names)); - - wordHashSet fieldNames(wordList(names, nameIDs)); + writeOriginalIds(); + } - forAllConstIter(wordHashSet, fieldNames, iter) + forAll(fieldNames, fieldi) { - const word& fieldName = iter.key(); + const word& fieldName = fieldNames[fieldi]; if ((Pstream::master()) && verbose_) { diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C b/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C index c1c08006d4542c0dc3caf1f5e41d78bb9d23f851..38fdc7c748f8d86602db4f299e1cb7c80fb1cc28 100644 --- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C +++ b/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.C @@ -296,6 +296,11 @@ bool Foam::sampledTriSurfaceMesh::update(const meshSearch& meshSearcher) } + if (keepIds_) + { + originalIds_ = faceMap; + } + // Subset cellOrFaceLabels cellOrFaceLabels = UIndirectList<label>(cellOrFaceLabels, faceMap)(); @@ -545,6 +550,8 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh ), sampleSource_(sampleSource), needsUpdate_(true), + keepIds_(false), + originalIds_(), sampleElements_(0), samplePoints_(0) {} @@ -573,6 +580,8 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh ), sampleSource_(samplingSourceNames_[dict.lookup("source")]), needsUpdate_(true), + keepIds_(dict.lookupOrDefault<Switch>("keepIds", false)), + originalIds_(), sampleElements_(0), samplePoints_(0) {} @@ -594,7 +603,7 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh name, mesh.time().constant(), // instance "triSurface", // local - mesh, // registry + mesh, // registry IOobject::NO_READ, IOobject::NO_WRITE, false @@ -603,6 +612,8 @@ Foam::sampledTriSurfaceMesh::sampledTriSurfaceMesh ), sampleSource_(samplingSourceNames_[sampleSourceName]), needsUpdate_(true), + keepIds_(false), + originalIds_(), sampleElements_(0), samplePoints_(0) {} @@ -633,6 +644,7 @@ bool Foam::sampledTriSurfaceMesh::expire() sampledSurface::clearGeom(); MeshStorage::clear(); + originalIds_.clear(); boundaryTreePtr_.clear(); sampleElements_.clear(); samplePoints_.clear(); diff --git a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H b/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H index 7403bfc65e24a4888b7b1fb18282646e3d1d4b3d..6cd96a4770c0c49e8c19a7a871016fd3c6792e47 100644 --- a/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H +++ b/src/sampling/sampledSurface/sampledTriSurfaceMesh/sampledTriSurfaceMesh.H @@ -117,6 +117,13 @@ private: //- Track if the surface needs an update mutable bool needsUpdate_; + //- Retain element ids/order of original surface + bool keepIds_; + + //- List of element ids/order of the original surface, + // when keepIds is active. + labelList originalIds_; + //- Search tree for all non-coupled boundary faces mutable autoPtr<indexedOctree<treeDataFace>> boundaryTreePtr_; @@ -240,6 +247,19 @@ public: return MeshStorage::Cf(); } + //- If element ids/order of the original surface are kept + bool keepIds() const + { + return keepIds_; + } + + //- List of element ids/order of the original surface, + // when keepIds is active. + const labelList& originalIds() const + { + return originalIds_; + } + //- Sample field on surface virtual tmp<scalarField> sample diff --git a/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.C b/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.C index 9d063409df601955d2bfe725957b545e10563c16..06b6339b5b7f7e525ddd3a853dd2c5c32938fc65 100644 --- a/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.C +++ b/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -72,8 +72,32 @@ Foam::MeshedSurfaceIOAllocator::MeshedSurfaceIOAllocator {} +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::MeshedSurfaceIOAllocator::~MeshedSurfaceIOAllocator() +{ + clear(); +} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +void Foam::MeshedSurfaceIOAllocator::setInstance(const fileName& inst) +{ + points_.instance() = inst; + faces_.instance() = inst; + zones_.instance() = inst; +} + + +void Foam::MeshedSurfaceIOAllocator::setWriteOption(IOobject::writeOption w) +{ + points_.writeOpt() = w; + faces_.writeOpt() = w; + zones_.writeOpt() = w; +} + + void Foam::MeshedSurfaceIOAllocator::clear() { points_.clear(); @@ -136,4 +160,20 @@ void Foam::MeshedSurfaceIOAllocator::reset } +bool Foam::MeshedSurfaceIOAllocator::writeObject +( + IOstream::streamFormat fmt, + IOstream::versionNumber ver, + IOstream::compressionType cmp +) const +{ + return + ( + points_.writeObject(fmt, ver, cmp) + && faces_.writeObject(fmt, ver, cmp) + && zones_.writeObject(fmt, ver, cmp) + ); +} + + // ************************************************************************* // diff --git a/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.H b/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.H index 6c8aa07e2a843db822111bf2c62dc085e3c457ef..ed74141bb9ded321e473df1f021e08673feb2ea2 100644 --- a/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.H +++ b/src/surfMesh/MeshedSurfaceAllocator/MeshedSurfaceIOAllocator.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -106,8 +106,21 @@ public: ); + //- Destructor + virtual ~MeshedSurfaceIOAllocator(); + + // Member Functions + // Database + + //- Set the instance for mesh files + void setInstance(const fileName&); + + //- Adjust the write option for all components + void setWriteOption(IOobject::writeOption); + + // Access //- Non-const access to the points @@ -177,6 +190,18 @@ public: const Xfer<faceList>& faces, const Xfer<surfZoneList>& zones ); + + + // Writing + + //- Write using given format, version and compression + virtual bool writeObject + ( + IOstream::streamFormat, + IOstream::versionNumber, + IOstream::compressionType + ) const; + }; diff --git a/src/surfMesh/surfMesh/surfMesh.C b/src/surfMesh/surfMesh/surfMesh.C index c7eef6b72b10f0eadc32c8a9ae1f9653fc570c9f..f1ed76a7eb69f55bc7f1cf20412f46b2c558775f 100644 --- a/src/surfMesh/surfMesh/surfMesh.C +++ b/src/surfMesh/surfMesh/surfMesh.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -229,18 +229,25 @@ Foam::surfMesh::~surfMesh() void Foam::surfMesh::updatePointsRef() { - // Assign the reference to the points (this is truly ugly) - reinterpret_cast<SubField<point>&> + // Assign the reference to the points (quite ugly) + // points() are returned as Field but are actually stored as SubField + reinterpret_cast<typename MeshReference::PointFieldType&> ( const_cast<Field<point>&>(MeshReference::points()) - ) = reinterpret_cast<SubField<point>&>(this->storedPoints()); + ).shallowCopy + ( + this->storedPoints() + ); } void Foam::surfMesh::updateFacesRef() { - // Assign the reference to the faces - shallowCopy(this->storedFaces()); + // Assign the reference to the faces (UList) + static_cast<MeshReference&>(*this).shallowCopy + ( + this->storedFaces() + ); } diff --git a/src/surfMesh/surfMesh/surfMesh.H b/src/surfMesh/surfMesh/surfMesh.H index 64e7c0239a474e1603c0f00dd233116d21c92599..a839d79a70dac8591ccb12ef8a78d87fc7b218f4 100644 --- a/src/surfMesh/surfMesh/surfMesh.H +++ b/src/surfMesh/surfMesh/surfMesh.H @@ -186,7 +186,7 @@ public: // Member Functions - // Database + // Database //- Return the local mesh directory (dbDir()/meshSubDir) fileName meshDir() const; @@ -200,10 +200,17 @@ public: const fileName& facesInstance() const; //- Set the instance for mesh files - void setInstance(const fileName&); + void setInstance + ( + const fileName&, + IOobject::writeOption = IOobject::AUTO_WRITE + ); + //- Adjust the write option for all components + void setWriteOption(IOobject::writeOption); - // Access + + // Access //- Return the number of raw points virtual label nPoints() const; @@ -263,7 +270,6 @@ public: // time directories virtual readUpdateState readUpdate(); - //- Update the mesh corresponding to given map //- Remove surface zones void removeZones(); @@ -291,16 +297,27 @@ public: void transfer(MeshedSurface<face>&); + // Writing + //- Avoid masking the normal objectRegistry write using surfaceRegistry::write; + //- Write all components using given format, version and compression + virtual bool writeObject + ( + IOstream::streamFormat fmt, + IOstream::versionNumber ver, + IOstream::compressionType cmp + ) const; + //- Write to file static void write(const fileName&, const surfMesh&); //- Write to file void write(const fileName&); - // Storage management + + // Storage management //- Transfer contents to the Xfer container as a MeshedSurface Xfer<MeshedSurface<face>> xfer(); @@ -322,6 +339,7 @@ public: //- Remove all files from mesh instance() void removeFiles() const; + }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/surfMesh/surfMesh/surfMeshIO.C b/src/surfMesh/surfMesh/surfMeshIO.C index f2a5c54245ab0bc8420b71db062b68bb3e497cad..ec0b9f6106ec68b54610cf04f8ec65e5f7a7541e 100644 --- a/src/surfMesh/surfMesh/surfMeshIO.C +++ b/src/surfMesh/surfMesh/surfMeshIO.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,7 +28,7 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::surfMesh::setInstance(const fileName& inst) +void Foam::surfMesh::setInstance(const fileName& inst, IOobject::writeOption w) { if (debug) { @@ -36,15 +36,16 @@ void Foam::surfMesh::setInstance(const fileName& inst) } instance() = inst; + Allocator::setInstance(inst); - storedIOPoints().writeOpt() = IOobject::AUTO_WRITE; - storedIOPoints().instance() = inst; + setWriteOption(w); +} - storedIOFaces().writeOpt() = IOobject::AUTO_WRITE; - storedIOFaces().instance() = inst; - storedIOZones().writeOpt() = IOobject::AUTO_WRITE; - storedIOZones().instance() = inst; +void Foam::surfMesh::setWriteOption(IOobject::writeOption w) +{ + writeOpt() = w; + Allocator::setWriteOption(w); } @@ -199,4 +200,15 @@ Foam::surfMesh::readUpdateState Foam::surfMesh::readUpdate() } +bool Foam::surfMesh::writeObject +( + IOstream::streamFormat fmt, + IOstream::versionNumber ver, + IOstream::compressionType cmp +) const +{ + return Allocator::writeObject(fmt, ver, cmp); +} + + // ************************************************************************* // diff --git a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatCore.C index 6d1a8d3fc19db4f088aefa68adcf89ff803f1122..3f309be57e415ef794d1022291bfb46dee7747f5 100644 --- a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatCore.C +++ b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatCore.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -28,7 +28,7 @@ License #include "IFstream.H" #include "IStringStream.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // bool Foam::fileFormats::AC3DsurfaceFormatCore::readCmd ( diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatCore.C index 501806c4174e074859a043eb83e10cdb56e54453..9a28648d0c22c0310f6834c99fecfa893ed4552d 100644 --- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatCore.C +++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatCore.C @@ -26,7 +26,7 @@ License #include "VTKsurfaceFormatCore.H" #include "clock.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::fileFormats::VTKsurfaceFormatCore::writeHeader ( diff --git a/src/surfMesh/surfaceFormats/x3d/X3DsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/x3d/X3DsurfaceFormatCore.C index 2ba0dbf5f39b7ec2f710bc3407afb28f54bdc32b..0dd477304a4c237e3438166ca4057342c2340e90 100644 --- a/src/surfMesh/surfaceFormats/x3d/X3DsurfaceFormatCore.C +++ b/src/surfMesh/surfaceFormats/x3d/X3DsurfaceFormatCore.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,7 +26,7 @@ License #include "X3DsurfaceFormatCore.H" #include "clock.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::fileFormats::X3DsurfaceFormatCore::writeHeader ( diff --git a/src/thermophysicalModels/Allwmake b/src/thermophysicalModels/Allwmake index 5df22b24b82d8095a899bfb9575c9e9fcec88b6a..2c90db55a8d9bdf2bd7cd00d8f4e77a29e765030 100755 --- a/src/thermophysicalModels/Allwmake +++ b/src/thermophysicalModels/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType specie wmake $targetType solidSpecie diff --git a/src/thermophysicalModels/properties/Allwmake b/src/thermophysicalModels/properties/Allwmake index e2da041c684bd40f26fac6ade3002d38c1cea354..5ad45938fc016e9fe7fd99ff6024fa4303639ae6 100755 --- a/src/thermophysicalModels/properties/Allwmake +++ b/src/thermophysicalModels/properties/Allwmake @@ -3,12 +3,10 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType liquidProperties wmake $targetType liquidMixtureProperties wmake $targetType solidProperties wmake $targetType solidMixtureProperties - #------------------------------------------------------------------------------ diff --git a/src/thermophysicalModels/reactionThermo/psiuReactionThermo/psiuReactionThermo.C b/src/thermophysicalModels/reactionThermo/psiuReactionThermo/psiuReactionThermo.C index c58ff931407a105f1a7dbcf9a0455878fa2d794e..f7161a5b097bd78aa5b33d0c50e080bf6c92fc7b 100644 --- a/src/thermophysicalModels/reactionThermo/psiuReactionThermo/psiuReactionThermo.C +++ b/src/thermophysicalModels/reactionThermo/psiuReactionThermo/psiuReactionThermo.C @@ -40,7 +40,7 @@ namespace Foam defineTypeNameAndDebug(psiuReactionThermo, 0); defineRunTimeSelectionTable(psiuReactionThermo, fvMesh); -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // wordList psiuReactionThermo::heuBoundaryTypes() { diff --git a/src/topoChangerFvMesh/Make/files b/src/topoChangerFvMesh/Make/files index 17883173042d676af4fa0fedb08793cdce3d9d8d..8a0e7e686a3d9a747732c386884131eae3a67354 100644 --- a/src/topoChangerFvMesh/Make/files +++ b/src/topoChangerFvMesh/Make/files @@ -1,5 +1,6 @@ topoChangerFvMesh/topoChangerFvMesh.C rawTopoChangerFvMesh/rawTopoChangerFvMesh.C +dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C /* linearValveFvMesh/linearValveFvMesh.C diff --git a/src/topoChangerFvMesh/Make/options b/src/topoChangerFvMesh/Make/options index 44753e64c96546ae740c2d54605959f8ba6890fd..6477e3ff9d0056aa02286a0e84cc776072087a94 100644 --- a/src/topoChangerFvMesh/Make/options +++ b/src/topoChangerFvMesh/Make/options @@ -2,10 +2,12 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/surfMesh/lnInclude LIB_LIBS = \ -lfiniteVolume \ -ldynamicFvMesh \ -ldynamicMesh \ - -lmeshTools + -lmeshTools \ + -lsurfMesh diff --git a/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C new file mode 100644 index 0000000000000000000000000000000000000000..3ebdff1638a3894c67626ab8ecd3c4b9f1a47102 --- /dev/null +++ b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.C @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "addToRunTimeSelectionTable.H" +#include "dynamicMotionSolverTopoFvMesh.H" +#include "mapPolyMesh.H" +#include "OBJstream.H" +#include "Time.H" +#include "surfaceFields.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(dynamicMotionSolverTopoFvMesh, 0); + + addToRunTimeSelectionTable + ( + dynamicFvMesh, + dynamicMotionSolverTopoFvMesh, + IOobject + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::dynamicMotionSolverTopoFvMesh::dynamicMotionSolverTopoFvMesh +( + const IOobject& io +) +: + topoChangerFvMesh(io), + motionPtr_(motionSolver::New(*this)) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::dynamicMotionSolverTopoFvMesh::~dynamicMotionSolverTopoFvMesh() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::dynamicMotionSolverTopoFvMesh::update() +{ + // Do mesh changes (not using inflation - points added directly into mesh) + autoPtr<mapPolyMesh> topoChangeMap = topoChanger_.changeMesh(false); + + if (topoChangeMap.valid()) + { + Info << "Executing mesh topology update" << endl; + motionPtr_->updateMesh(topoChangeMap()); + + setV0() = V(); + + pointField newPoints(motionPtr_->newPoints()); + movePoints(newPoints); + + if (debug) + { + OBJstream osOld("oldPts_" + time().timeName() + ".obj"); + const pointField& oldPts = oldPoints(); + forAll(oldPts, i) + { + osOld.write(oldPts[i]); + } + + OBJstream osNew("newPts_" + time().timeName() + ".obj"); + forAll(points(), i) + { + osNew.write(points()[i]); + } + } + } + else + { + // Calculate the new point positions using the motion solver + pointField newPoints(motionPtr_->newPoints()); + + // The mesh now contains the cells with zero volume + Info << "Executing mesh motion" << endl; + movePoints(newPoints); + } + + return true; +} + + +// ************************************************************************* // diff --git a/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H new file mode 100644 index 0000000000000000000000000000000000000000..ad1cb71ba7efce75f4c28a17a0bf77615e28833e --- /dev/null +++ b/src/topoChangerFvMesh/dynamicMotionSolverTopoFvMesh/dynamicMotionSolverTopoFvMesh.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenCFD Ltd + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::dynamicMotionSolverTopoFvMesh + +Description + Sample topoChangerFvMesh that moves an object using a motion solver + +SourceFiles + dynamicMotionSolverTopoFvMesh.C + +\*---------------------------------------------------------------------------*/ + +#ifndef dynamicMotionSolverTopoFvMesh_H +#define dynamicMotionSolverTopoFvMesh_H + +#include "topoChangerFvMesh.H" +#include "motionSolver.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes + +/*---------------------------------------------------------------------------*\ + Class dynamicMotionSolverTopoFvMesh Declaration +\*---------------------------------------------------------------------------*/ + +class dynamicMotionSolverTopoFvMesh +: + public topoChangerFvMesh +{ + // Private data + + //- Motion dictionary + dictionary motionDict_; + + //- Motion solver + autoPtr<motionSolver> motionPtr_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + dynamicMotionSolverTopoFvMesh(const dynamicMotionSolverTopoFvMesh&); + + //- Disallow default bitwise assignment + void operator=(const dynamicMotionSolverTopoFvMesh&); + + +public: + + //- Runtime type information + TypeName("dynamicMotionSolverTopoFvMesh"); + + + // Constructors + + //- Construct from database + explicit dynamicMotionSolverTopoFvMesh(const IOobject& io); + + + //- Destructor + virtual ~dynamicMotionSolverTopoFvMesh(); + + + // Member Functions + + //- Update the mesh for both mesh motion and topology change + virtual bool update(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/transportModels/Allwmake b/src/transportModels/Allwmake index 4fcc281a6ef08d2d7f2825cbbee0642b93c9bdac..b533c83c310910626d17fab1363f2cb82564527e 100755 --- a/src/transportModels/Allwmake +++ b/src/transportModels/Allwmake @@ -3,7 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x wmake $targetType twoPhaseMixture wmake $targetType interfaceProperties diff --git a/src/transportModels/incompressible/Make/files b/src/transportModels/incompressible/Make/files index 40eea6a11f289696c650f9995eb232fb29622309..b181820bd83a285a2c20516f97be9c599452ca37 100644 --- a/src/transportModels/incompressible/Make/files +++ b/src/transportModels/incompressible/Make/files @@ -6,6 +6,7 @@ viscosityModels/CrossPowerLaw/CrossPowerLaw.C viscosityModels/BirdCarreau/BirdCarreau.C viscosityModels/HerschelBulkley/HerschelBulkley.C viscosityModels/Casson/Casson.C +viscosityModels/strainRateFunction/strainRateFunction.C transportModel/transportModel.C singlePhaseTransportModel/singlePhaseTransportModel.C diff --git a/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.C b/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.C index ad110c26e937fffa072e696c8a5ada631f3d10e2..061feda8ab44312203d63c3386547be118e3edef 100644 --- a/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.C +++ b/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.C @@ -36,7 +36,7 @@ namespace Foam } -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // void Foam::incompressibleTwoPhaseMixture::calcNu() { diff --git a/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.H b/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.H index e867e5be75d219b915f6ba543241bc85621fde7d..7821b2d9fb027d4a6c051cc323a8cff83045c5b1 100644 --- a/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.H +++ b/src/transportModels/incompressible/incompressibleTwoPhaseMixture/incompressibleTwoPhaseMixture.H @@ -72,7 +72,7 @@ protected: volScalarField nu_; - // Private Member Functions + // Protected Member Functions //- Calculate and return the laminar viscosity void calcNu(); diff --git a/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.C b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.C new file mode 100644 index 0000000000000000000000000000000000000000..6c218d710a7be2852c7654680c45a7203a09e1d3 --- /dev/null +++ b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.C @@ -0,0 +1,138 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "strainRateFunction.H" +#include "addToRunTimeSelectionTable.H" +#include "surfaceFields.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace viscosityModels +{ + defineTypeNameAndDebug(strainRateFunction, 0); + + addToRunTimeSelectionTable + ( + viscosityModel, + strainRateFunction, + dictionary + ); +} +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::viscosityModels::strainRateFunction::strainRateFunction +( + const word& name, + const dictionary& viscosityProperties, + const volVectorField& U, + const surfaceScalarField& phi +) +: + viscosityModel(name, viscosityProperties, U, phi), + strainRateFunctionCoeffs_(viscosityProperties.subDict(typeName + "Coeffs")), + strainRateFunction_ + ( + Function1<scalar>::New("function", strainRateFunctionCoeffs_) + ), + nu_ + ( + IOobject + ( + name, + U_.time().timeName(), + U_.db(), + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + U_.mesh(), + dimensionedScalar(name, dimViscosity, 0) + ) +{ + correct(); +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::tmp<Foam::volScalarField> +Foam::viscosityModels::strainRateFunction::nu() const +{ + return nu_; +} + + +Foam::tmp<Foam::scalarField> +Foam::viscosityModels::strainRateFunction::nu(const label patchi) const +{ + return nu_.boundaryField()[patchi]; +} + + +void Foam::viscosityModels::strainRateFunction::correct() +{ + tmp<volScalarField> tsigma = strainRate(); + const volScalarField& sigma = tsigma(); + + nu_.primitiveFieldRef() = strainRateFunction_->value(sigma()); + + volScalarField::Boundary& nuBf = nu_.boundaryFieldRef(); + const volScalarField::Boundary& sigmaBf = sigma.boundaryField(); + + forAll(nuBf, patchi) + { + nuBf[patchi] = strainRateFunction_->value(sigmaBf[patchi]); + } +} + + +bool Foam::viscosityModels::strainRateFunction::read +( + const dictionary& viscosityProperties +) +{ + viscosityModel::read(viscosityProperties); + + strainRateFunctionCoeffs_ = viscosityProperties.subDict + ( + typeName + "Coeffs" + ); + + strainRateFunction_.clear(); + strainRateFunction_ = Function1<scalar>::New + ( + "function", + strainRateFunctionCoeffs_ + ); + + return true; +} + + +// ************************************************************************* // diff --git a/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.H b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.H new file mode 100644 index 0000000000000000000000000000000000000000..90c102e322b02f38576979710785fd78dcade21b --- /dev/null +++ b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.H @@ -0,0 +1,131 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::viscosityModels::strainRateFunction + +Description + Run-time selected strain-rate function non-Newtonian viscosity model. + + Example linear function of strain-rate: + \verbatim + transportModel strainRateFunction; + + strainRateFunctionCoeffs + { + function polynomial ((0 0.1) (1 1.3)); + } + \endverbatim + +See also + Foam::viscosityModel + Foam::Function1 + +SourceFiles + strainRateFunction.C + +\*---------------------------------------------------------------------------*/ + +#ifndef strainRateFunction_H +#define strainRateFunction_H + +#include "viscosityModel.H" +#include "volFields.H" +#include "Function1.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace viscosityModels +{ + +/*---------------------------------------------------------------------------*\ + Class strainRateFunction Declaration +\*---------------------------------------------------------------------------*/ + +class strainRateFunction +: + public viscosityModel +{ + // Private data + + //- Coefficients dictionary + dictionary strainRateFunctionCoeffs_; + + //- Strain-rate function + autoPtr<Function1<scalar>> strainRateFunction_; + + //- Current viscosity field + volScalarField nu_; + + +public: + + //- Runtime type information + TypeName("strainRateFunction"); + + + // Constructors + + //- Construct from components + strainRateFunction + ( + const word& name, + const dictionary& viscosityProperties, + const volVectorField& U, + const surfaceScalarField& phi + ); + + + //- Destructor + virtual ~strainRateFunction() + {} + + + // Member Functions + + //- Return the laminar viscosity + virtual tmp<volScalarField> nu() const; + + //- Return the laminar viscosity for patch + virtual tmp<scalarField> nu(const label patchi) const; + + //- Correct the laminar viscosity + virtual void correct(); + + //- Read transportProperties dictionary + virtual bool read(const dictionary& viscosityProperties); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace viscosityModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/triSurface/triSurface/surfacePatch/surfacePatch.C b/src/triSurface/triSurface/surfacePatch/surfacePatch.C index e84f26d7f8b745746062b2dad1d6f04b5860c8a5..6b09d556230721e5585ea3b49a3e9afb850821c0 100644 --- a/src/triSurface/triSurface/surfacePatch/surfacePatch.C +++ b/src/triSurface/triSurface/surfacePatch/surfacePatch.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "surfacePatch.H" +#include "surfZone.H" #include "dictionary.H" #include "word.H" @@ -38,7 +39,15 @@ namespace Foam Foam::surfacePatch::surfacePatch() : - geometricSurfacePatch("", "", -1), + geometricSurfacePatch(word::null, word::null, -1), + size_(0), + start_(0) +{} + + +Foam::surfacePatch::surfacePatch(const label index) +: + geometricSurfacePatch(word::null, word::null, index), size_(0), start_(0) {} @@ -83,7 +92,7 @@ Foam::surfacePatch::surfacePatch {} -Foam::surfacePatch::surfacePatch(const Foam::surfacePatch& sp) +Foam::surfacePatch::surfacePatch(const surfacePatch& sp) : geometricSurfacePatch(sp), size_(sp.size()), @@ -114,6 +123,19 @@ void Foam::surfacePatch::writeDict(Ostream& os) const // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // +Foam::surfacePatch::operator Foam::surfZone() const +{ + return surfZone + ( + this->name(), + this->size(), + this->start(), + this->index(), + this->geometricType() + ); +} + + bool Foam::surfacePatch::operator!=(const surfacePatch& p) const { return !(*this == p); diff --git a/src/triSurface/triSurface/surfacePatch/surfacePatch.H b/src/triSurface/triSurface/surfacePatch/surfacePatch.H index 9e0b8786955a3acec62034142ddd42fe7c491bc7..43278798e75ae65b325eee2adeadc979da615e48 100644 --- a/src/triSurface/triSurface/surfacePatch/surfacePatch.H +++ b/src/triSurface/triSurface/surfacePatch/surfacePatch.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -36,8 +36,6 @@ SourceFiles #define surfacePatch_H #include "geometricSurfacePatch.H" -#include "word.H" -#include "label.H" #include "className.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,12 +46,13 @@ namespace Foam // Forward declaration of friend functions and operators class surfacePatch; +class surfZone; Ostream& operator<<(Ostream&, const surfacePatch&); /*---------------------------------------------------------------------------*\ - Class surfacePatch Declaration + Class surfacePatch Declaration \*---------------------------------------------------------------------------*/ class surfacePatch @@ -79,6 +78,9 @@ public: //- Construct null surfacePatch(); + //- Construct null with specified index + explicit surfacePatch(const label index); + //- Construct from components surfacePatch ( @@ -106,25 +108,25 @@ public: // Member Functions - //- Return start label of this patch in the polyMesh face list + //- Return start label of this patch in the face list label start() const { return start_; } - //- Return start label of this patch in the polyMesh face list + //- Return start label of this patch in the face list label& start() { return start_; } - //- Return size of this patch in the polyMesh face list + //- Return size of this patch in the face list label size() const { return size_; } - //- Return size of this patch in the polyMesh face list + //- Return size of this patch in the face list label& size() { return size_; @@ -139,11 +141,17 @@ public: // Member Operators + //- Conversion to surfZone representation + explicit operator surfZone() const; + + + //- Compare. bool operator!=(const surfacePatch&) const; - //- compare. + //- Compare. bool operator==(const surfacePatch&) const; + // IOstream Operators friend Ostream& operator<<(Ostream&, const surfacePatch&); diff --git a/src/triSurface/triSurface/triSurface.C b/src/triSurface/triSurface/triSurface.C index 307ae31de7e3183f8f9f32a48d6d99f9e633a879..6bc2e9d64bdf2872f34c5feb795b275dbd6adc45 100644 --- a/src/triSurface/triSurface/triSurface.C +++ b/src/triSurface/triSurface/triSurface.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -31,15 +31,18 @@ License #include "boundBox.H" #include "SortableList.H" #include "PackedBoolList.H" +#include "surfZoneList.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { -defineTypeNameAndDebug(triSurface, 0); + defineTypeNameAndDebug(triSurface, 0); } +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + Foam::fileName Foam::triSurface::triSurfInstance(const Time& d) { fileName foamName(d.caseName() + ".ftr"); @@ -488,7 +491,8 @@ void Foam::triSurface::write // Returns patch info. Sets faceMap to the indexing according to patch // numbers. Patch numbers start at 0. -Foam::surfacePatchList Foam::triSurface::calcPatches(labelList& faceMap) const +Foam::surfacePatchList +Foam::triSurface::calcPatches(labelList& faceMap) const { // Sort according to region numbers of labelledTri SortableList<label> sortedRegion(size()); @@ -533,30 +537,29 @@ Foam::surfacePatchList Foam::triSurface::calcPatches(labelList& faceMap) const surfacePatch& newPatch = newPatches[newPatchi]; newPatch.index() = newPatchi; - - label oldPatchi = newPatchi; - - // start of patch newPatch.start() = startFacei; - // Take over any information from existing patches - if ((oldPatchi < patches_.size()) && (patches_[oldPatchi].name() != "")) + if + ( + newPatchi < patches_.size() + && !patches_[newPatchi].name().empty() + ) { - newPatch.name() = patches_[oldPatchi].name(); + newPatch.name() = patches_[newPatchi].name(); } else { - newPatch.name() = word("patch") + name(newPatchi); + newPatch.name() = word("patch") + Foam::name(newPatchi); } if ( - (oldPatchi < patches_.size()) - && (patches_[oldPatchi].geometricType() != "") + newPatchi < patches_.size() + && !patches_[newPatchi].geometricType().empty() ) { - newPatch.geometricType() = patches_[oldPatchi].geometricType(); + newPatch.geometricType() = patches_[newPatchi].geometricType(); } else { @@ -829,6 +832,42 @@ void Foam::triSurface::cleanup(const bool verbose) } +Foam::List<Foam::surfZone> +Foam::triSurface::sortedZones(labelList& faceMap) const +{ + surfacePatchList patches(calcPatches(faceMap)); + + surfZoneList zones(patches.size()); + forAll(patches, patchi) + { + zones[patchi] = surfZone(patches[patchi]); + } + + return zones; +} + + +void Foam::triSurface::triFaceFaces(List<face>& plainFaces) const +{ + plainFaces.setSize(size()); + + forAll(*this, facei) + { + plainFaces[facei] = operator[](facei).triFaceFace(); + } +} + + +Foam::Xfer<Foam::List<Foam::point>> +Foam::triSurface::xferPoints() +{ + // Topology changed because of transfer + clearOut(); + + return this->storedPoints().xfer(); +} + + // Finds area, starting at facei, delimited by borderEdge. Marks all visited // faces (from face-edge-face walk) with currentZone. void Foam::triSurface::markZone diff --git a/src/triSurface/triSurface/triSurface.H b/src/triSurface/triSurface/triSurface.H index cfa253fbb3c9939273d123b5a58b69124ce4a2b7..ccf47c713e29bdc26f6990b5a221867cde3dd40b 100644 --- a/src/triSurface/triSurface/triSurface.H +++ b/src/triSurface/triSurface/triSurface.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -50,7 +50,7 @@ namespace Foam class Time; class IFstream; - +class surfZone; // Forward declaration of friend functions and operators @@ -354,6 +354,17 @@ public: } + // Interoperability with other surface mesh classes + + //- Sort faces according to zoneIds + // Returns a surfZoneList and sets faceMap to index within faces() + // (i.e. map from original,unsorted to sorted) + List<surfZone> sortedZones(labelList& faceMap) const; + + //- Create a list of faces from the triFaces + void triFaceFaces(List<face>& plainFaceList) const; + + // Edit //- Move points @@ -412,6 +423,10 @@ public: ) const; + //- Transfer stored points to an Xfer container + Xfer<List<point>> xferPoints(); + + // Write //- Write to Ostream in simple FOAM format diff --git a/tutorials/basic/potentialFoam/cylinder/Allrun b/tutorials/basic/potentialFoam/cylinder/Allrun index ad39e41c0a3660ad65637c2d83c085ae3986df4d..6e5e8f42de9a538b6f6f88ac9f040ad1fbce551d 100755 --- a/tutorials/basic/potentialFoam/cylinder/Allrun +++ b/tutorials/basic/potentialFoam/cylinder/Allrun @@ -7,6 +7,6 @@ cd ${0%/*} || exit 1 # Run from this directory restore0Dir runApplication blockMesh runApplication $(getApplication) -withFunctionObjects -writePhi -writep -runApplication streamFunction +runApplication postProcess -func streamFunction #------------------------------------------------------------------------------ diff --git a/tutorials/basic/potentialFoam/pitzDaily/Allrun b/tutorials/basic/potentialFoam/pitzDaily/Allrun index 2c9adcb14b53b9a3e33da88eb6d239d2422edda9..b4667497e463182f3b51997d62610e2ab32993a1 100755 --- a/tutorials/basic/potentialFoam/pitzDaily/Allrun +++ b/tutorials/basic/potentialFoam/pitzDaily/Allrun @@ -7,6 +7,6 @@ cd ${0%/*} || exit 1 # Run from this directory restore0Dir runApplication blockMesh runApplication $(getApplication) -writePhi -writep -runApplication streamFunction +runApplication postProcess -func streamFunction #------------------------------------------------------------------------------ diff --git a/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/constant/dynamicMeshDict b/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/constant/dynamicMeshDict index ea9757bb617222237add2a82f8f4d7e915202b64..5d93972d0be6372e6fb27a9649b8d46b6a3ae682 100644 --- a/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/constant/dynamicMeshDict +++ b/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/constant/dynamicMeshDict @@ -15,11 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -motionSolverLibs ( "libfvMotionSolvers.so" ); +solver solidBody; -solidBodyMotionFvMeshCoeffs +solidBodyCoeffs { cellZone rotating; diff --git a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/dynamicMeshDict b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/dynamicMeshDict index 2aec9f5a22feca83be85373f9475a8500a40e6cc..c26839558206b95ea65cc690405d84826e1fffb6 100644 --- a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/dynamicMeshDict +++ b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/dynamicMeshDict @@ -17,9 +17,11 @@ FoamFile #include "${FOAM_CASE}/constant/caseSettings" -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone rotatingZone; diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/T b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/T new file mode 100644 index 0000000000000000000000000000000000000000..1a28e71f552bf3ceaf9f02540b1cba242086be3c --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/T @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + inlet + { + type outletMappedUniformInletHeatAddition; + outletPatch outlet1; + Q 5; // Heat addition in W + TMin 300; + TMax 500; + value $internalField; + } + + outlet1 + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + outlet2 + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + defaultFaces + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/U b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/U new file mode 100644 index 0000000000000000000000000000000000000000..d0660ba682331fc94650ae9ede9288bc0a6d4d0c --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/U @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + inlet + { + type pressureInletOutletVelocity; + value uniform (0 0 0); + } + + outlet1 + { + type inletOutlet; + inletValue uniform (0 0 0); + value uniform (0 0 0); + } + + outlet2 + { + type inletOutlet; + inletValue uniform (0 0 0); + value uniform (0 0 0); + } + + defaultFaces + { + type noSlip; + } +} + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/alphat b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..258a1a4dcd1df05ed15abbd40776e551f55a3f55 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/alphat @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 1e-3; + +boundaryField +{ + inlet + { + type calculated; + value uniform 0; + } + + outlet1 + { + type calculated; + value uniform 0; + } + + outlet2 + { + type calculated; + value uniform 0; + } + + defaultFaces + { + type compressible::alphatWallFunction; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/epsilon b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..d50e8356fef4f67487ef183ffd6300a0765cebbb --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/epsilon @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 200; + +boundaryField +{ + inlet + { + type turbulentMixingLengthDissipationRateInlet; + mixingLength 0.01; // 1cm - half channel height + value $internalField; + } + + outlet1 + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + outlet2 + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + defaultFaces + { + type epsilonWallFunction; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/k b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/k new file mode 100644 index 0000000000000000000000000000000000000000..ba131054459d9c8f70c94f070888d0d93e520a1a --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/k @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 1; + +boundaryField +{ + inlet + { + type turbulentIntensityKineticEnergyInlet; + intensity 0.05; // 5% turbulent intensity + value $internalField; + } + + outlet1 + { + type inletOutlet; + inletValue $internalField; + } + + outlet2 + { + type inletOutlet; + inletValue $internalField; + } + + defaultFaces + { + type kqRWallFunction; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/nuTilda b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/nuTilda new file mode 100644 index 0000000000000000000000000000000000000000..2cc97ce1f31ecd5acbdf16ca7f81d7b7f17ee14a --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/nuTilda @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object nuTilda; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + inlet + { + type zeroGradient; + } + + outlet1 + { + type zeroGradient; + } + + outlet2 + { + type zeroGradient; + } + + defaultFaces + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/nut b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..aeab4d5ca21e56de7315c4fcff6336fe86d01005 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/nut @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + inlet + { + type calculated; + value uniform 0; + } + + outlet1 + { + type calculated; + value uniform 0; + } + + outlet2 + { + type calculated; + value uniform 0; + } + + defaultFaces + { + type nutkWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/p b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/p new file mode 100644 index 0000000000000000000000000000000000000000..a50bfa5bfc8b0f5851f6811865271579c621ee95 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/0/p @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + inlet + { + type uniformTotalPressure; + gamma 1.2; + + p0 table + ( + (0 1e5) + (1 1.4e5) + ); + } + + outlet1 + { + type fixedValue; + value $internalField; + } + + outlet2 + { + type fixedValue; + value $internalField; + } + + defaultFaces + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/README.txt b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..0905f8784d3f59c9372dcbf858c093d8c4477ee7 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/README.txt @@ -0,0 +1,2 @@ +15/8/8 Simple T-junction. Inlet on left, one outlet at bottom, one at top. +To test multiple outlets. diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/constant/thermophysicalProperties b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..bc9014c4fa5ff5bca7b17c51228c2ab220e5213e --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/constant/thermophysicalProperties @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type hePsiThermo; + mixture pureMixture; + transport sutherland; + thermo hConst; + equationOfState perfectGas; + specie specie; + energy sensibleEnthalpy; +} + +mixture +{ + specie + { + nMoles 1; + molWeight 28.9; + } + thermodynamics + { + Cp 1007; + Hf 0; + } + transport + { + As 1.4792e-06; + Ts 116; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..a5a2bbf76a0d3fb215816f97fffd28bf44055500 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/constant/turbulenceProperties @@ -0,0 +1,30 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence off; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/blockMeshDict b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..60af047d0414ddbcd35b7dc40819d9a3192b6ff6 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/blockMeshDict @@ -0,0 +1,127 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// outlet1 +// +-+ +// | | +// | | +// | | +// | | +// +-----------+ | +// |inlet | +// +-----------+ | +// | | +// | | +// | | +// | | +// +-+ +// outlet2 + +convertToMeters 1; + +vertices +( + (0.0 -0.01 0) //0 + (0.2 -0.01 0) + (0.2 0.01 0) //2 + (0.0 0.01 0) + + (0.22 -0.01 0) //4 + (0.22 0.01 0) + + (0.2 -0.21 0) //6 + (0.22 -0.21 0) + + (0.2 0.21 0) //8 + (0.22 0.21 0) + + // Z + (0.0 -0.01 0.02) //0 + (0.2 -0.01 0.02) + (0.2 0.01 0.02) //2 + (0.0 0.01 0.02) + + (0.22 -0.01 0.02) //4 + (0.22 0.01 0.02) + + (0.2 -0.21 0.02) //6 + (0.22 -0.21 0.02) + + (0.2 0.21 0.02) //8 + (0.22 0.21 0.02) + +); + +blocks +( + // inlet block + hex (0 1 2 3 10 11 12 13) (50 5 5) simpleGrading (1 1 1) + + // central block + hex (1 4 5 2 11 14 15 12) (5 5 5) simpleGrading (1 1 1) + + // bottom block + hex (6 7 4 1 16 17 14 11) (5 50 5) simpleGrading (1 1 1) + + // top block + hex (2 5 9 8 12 15 19 18) (5 50 5) simpleGrading (1 1 1) +); + +edges +( +); + +boundary +( + inlet + { + type patch; + faces + ( + (0 10 13 3) + ); + } + + outlet1 + { + type patch; + faces + ( + (6 7 17 16) + ); + } + + outlet2 + { + type patch; + faces + ( + (8 18 19 9) + ); + } + + defaultFaces + { + type wall; + faces (); + } +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..3698ec483f8f65e1dbf090a6f96401acd7ae8803 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application rhoPimpleFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 1.0; + +deltaT 0.001; + +writeControl adjustableRunTime; + +writeInterval 0.1; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable true; + +adjustTimeStep yes; + +maxCo 3; + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/fvSchemes b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..29b92d6e082d531bba78085564c0b720e8eb647c --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/fvSchemes @@ -0,0 +1,57 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss limitedLinearV 1; + div(phi,k) Gauss limitedLinear 1; + div(phi,epsilon) Gauss limitedLinear 1; + div(phi,h) Gauss limitedLinear 1; + div(phi,R) Gauss limitedLinear 1; + div(R) Gauss linear; + div(phi,K) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/fvSolution b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..360a17e88f02748ae247b57b3175c1157a0fd64e --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/fvSolution @@ -0,0 +1,69 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver GAMG; + tolerance 1e-06; + relTol 0.01; + smoother GaussSeidel; + } + + pFinal + { + solver GAMG; + tolerance 1e-06; + relTol 0; + smoother GaussSeidel; + } + + "(rho|U|k|epsilon|h)" + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-05; + relTol 0.1; + } + + "(rho|U|k|epsilon|h)Final" + { + $U; + tolerance 1e-05; + relTol 0; + } +} + +PIMPLE +{ + transonic no; + nOuterCorrectors 1; + nCorrectors 3; + nNonOrthogonalCorrectors 0; +} + +relaxationFactors +{ + equations + { + ".*" 1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimpleFoam/squareBend/system/fvSolution b/tutorials/compressible/rhoSimpleFoam/squareBend/system/fvSolution index ded27f6165f6eb1743af20df619080ca2e1e5b3d..6b7468052d42e87b4bbb828be334a61c276a0197 100644 --- a/tutorials/compressible/rhoSimpleFoam/squareBend/system/fvSolution +++ b/tutorials/compressible/rhoSimpleFoam/squareBend/system/fvSolution @@ -66,7 +66,7 @@ relaxationFactors { p 1; U 0.9; - e 0.9; + e 0.8; k 0.9; epsilon 0.9; } diff --git a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/transportProperties index 882305eb00cdeb6877903585105e20a60cfe89f4..06ee8fc8f435cec127f0721fb1789ae8528212dd 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/transportProperties +++ b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/transportProperties @@ -27,9 +27,9 @@ beta [0 0 0 -1 0 0 0] 3e-03; TRef [0 0 0 1 0 0 0] 300; // Laminar Prandtl number -Pr [0 0 0 0 0 0 0] 0.9; +Pr [0 0 0 0 0 0 0] 0.7; // Turbulent Prandtl number -Prt [0 0 0 0 0 0 0] 0.7; +Prt [0 0 0 0 0 0 0] 0.85; // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties index 882305eb00cdeb6877903585105e20a60cfe89f4..06ee8fc8f435cec127f0721fb1789ae8528212dd 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties @@ -27,9 +27,9 @@ beta [0 0 0 -1 0 0 0] 3e-03; TRef [0 0 0 1 0 0 0] 300; // Laminar Prandtl number -Pr [0 0 0 0 0 0 0] 0.9; +Pr [0 0 0 0 0 0 0] 0.7; // Turbulent Prandtl number -Prt [0 0 0 0 0 0 0] 0.7; +Prt [0 0 0 0 0 0 0] 0.85; // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties index 882305eb00cdeb6877903585105e20a60cfe89f4..06ee8fc8f435cec127f0721fb1789ae8528212dd 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties @@ -27,9 +27,9 @@ beta [0 0 0 -1 0 0 0] 3e-03; TRef [0 0 0 1 0 0 0] 300; // Laminar Prandtl number -Pr [0 0 0 0 0 0 0] 0.9; +Pr [0 0 0 0 0 0 0] 0.7; // Turbulent Prandtl number -Prt [0 0 0 0 0 0 0] 0.7; +Prt [0 0 0 0 0 0 0] 0.85; // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/bottomAir.stl b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/bottomAir.stl deleted file mode 100644 index 200e4e80fc588717c875ea1dd169b8c742145658..0000000000000000000000000000000000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/bottomAir.stl +++ /dev/null @@ -1,14632 +0,0 @@ -solid minX - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 -0.05 - vertex -0.1 -0.04 -0.04 - vertex -0.1 -0.032 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 -0.04 - vertex -0.1 -0.032 -0.05 - vertex -0.1 -0.04 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 -0.05 - vertex -0.1 -0.032 -0.04 - vertex -0.1 -0.024 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 -0.04 - vertex -0.1 -0.024 -0.05 - vertex -0.1 -0.032 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 -0.05 - vertex -0.1 -0.024 -0.04 - vertex -0.1 -0.016 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 -0.04 - vertex -0.1 -0.016 -0.05 - vertex -0.1 -0.024 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 -0.05 - vertex -0.1 -0.016 -0.04 - vertex -0.1 -0.008 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 -0.04 - vertex -0.1 -0.008 -0.05 - vertex -0.1 -0.016 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 -0.05 - vertex -0.1 -0.008 -0.04 - vertex -0.1 0 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 -0.04 - vertex -0.1 0 -0.05 - vertex -0.1 -0.008 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 -0.04 - vertex -0.1 -0.04 -0.03 - vertex -0.1 -0.032 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 -0.03 - vertex -0.1 -0.032 -0.04 - vertex -0.1 -0.04 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 -0.04 - vertex -0.1 -0.032 -0.03 - vertex -0.1 -0.024 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 -0.03 - vertex -0.1 -0.024 -0.04 - vertex -0.1 -0.032 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 -0.04 - vertex -0.1 -0.024 -0.03 - vertex -0.1 -0.016 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 -0.03 - vertex -0.1 -0.016 -0.04 - vertex -0.1 -0.024 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 -0.04 - vertex -0.1 -0.016 -0.03 - vertex -0.1 -0.008 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 -0.03 - vertex -0.1 -0.008 -0.04 - vertex -0.1 -0.016 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 -0.04 - vertex -0.1 -0.008 -0.03 - vertex -0.1 0 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 -0.03 - vertex -0.1 0 -0.04 - vertex -0.1 -0.008 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 -0.03 - vertex -0.1 -0.04 -0.02 - vertex -0.1 -0.032 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 -0.02 - vertex -0.1 -0.032 -0.03 - vertex -0.1 -0.04 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 -0.03 - vertex -0.1 -0.032 -0.02 - vertex -0.1 -0.024 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 -0.02 - vertex -0.1 -0.024 -0.03 - vertex -0.1 -0.032 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 -0.03 - vertex -0.1 -0.024 -0.02 - vertex -0.1 -0.016 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 -0.02 - vertex -0.1 -0.016 -0.03 - vertex -0.1 -0.024 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 -0.03 - vertex -0.1 -0.016 -0.02 - vertex -0.1 -0.008 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 -0.02 - vertex -0.1 -0.008 -0.03 - vertex -0.1 -0.016 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 -0.03 - vertex -0.1 -0.008 -0.02 - vertex -0.1 0 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 -0.02 - vertex -0.1 0 -0.03 - vertex -0.1 -0.008 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 -0.02 - vertex -0.1 -0.04 -0.01 - vertex -0.1 -0.032 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 -0.01 - vertex -0.1 -0.032 -0.02 - vertex -0.1 -0.04 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 -0.02 - vertex -0.1 -0.032 -0.01 - vertex -0.1 -0.024 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 -0.01 - vertex -0.1 -0.024 -0.02 - vertex -0.1 -0.032 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 -0.02 - vertex -0.1 -0.024 -0.01 - vertex -0.1 -0.016 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 -0.01 - vertex -0.1 -0.016 -0.02 - vertex -0.1 -0.024 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 -0.02 - vertex -0.1 -0.016 -0.01 - vertex -0.1 -0.008 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 -0.01 - vertex -0.1 -0.008 -0.02 - vertex -0.1 -0.016 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 -0.02 - vertex -0.1 -0.008 -0.01 - vertex -0.1 0 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 -0.01 - vertex -0.1 0 -0.02 - vertex -0.1 -0.008 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 -0.01 - vertex -0.1 -0.04 0 - vertex -0.1 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 1.156482e-18 - vertex -0.1 -0.032 -0.01 - vertex -0.1 -0.04 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 -0.01 - vertex -0.1 -0.032 1.156482e-18 - vertex -0.1 -0.024 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 0 - vertex -0.1 -0.024 -0.01 - vertex -0.1 -0.032 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 -0.01 - vertex -0.1 -0.024 0 - vertex -0.1 -0.016 -1.156482e-18 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 -1.156482e-18 - vertex -0.1 -0.016 -0.01 - vertex -0.1 -0.024 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 -0.01 - vertex -0.1 -0.016 -1.156482e-18 - vertex -0.1 -0.008 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 0 - vertex -0.1 -0.008 -0.01 - vertex -0.1 -0.016 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 -0.01 - vertex -0.1 -0.008 0 - vertex -0.1 0 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 0 - vertex -0.1 0 -0.01 - vertex -0.1 -0.008 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 0.01 - vertex -0.1 -0.032 0.01 - vertex -0.1 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -0.1 -0.032 1.156482e-18 - vertex -0.1 -0.04 0 - vertex -0.1 -0.04 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 1.156482e-18 - vertex -0.1 -0.032 0.01 - vertex -0.1 -0.024 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 0.01 - vertex -0.1 -0.024 0 - vertex -0.1 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 0 - vertex -0.1 -0.024 0.01 - vertex -0.1 -0.016 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 0.01 - vertex -0.1 -0.016 -1.156482e-18 - vertex -0.1 -0.024 0 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 0.01 - vertex -0.1 -0.008 0.01 - vertex -0.1 -0.008 0 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -0.1 -0.008 0 - vertex -0.1 -0.016 -1.156482e-18 - vertex -0.1 -0.016 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 0 - vertex -0.1 -0.008 0.01 - vertex -0.1 0 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 0.01 - vertex -0.1 0 0 - vertex -0.1 -0.008 0 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 0.01 - vertex -0.1 -0.04 0.02 - vertex -0.1 -0.032 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 0.02 - vertex -0.1 -0.032 0.01 - vertex -0.1 -0.04 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 0.01 - vertex -0.1 -0.032 0.02 - vertex -0.1 -0.024 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 0.02 - vertex -0.1 -0.024 0.01 - vertex -0.1 -0.032 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 0.01 - vertex -0.1 -0.024 0.02 - vertex -0.1 -0.016 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 0.02 - vertex -0.1 -0.016 0.01 - vertex -0.1 -0.024 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 0.01 - vertex -0.1 -0.016 0.02 - vertex -0.1 -0.008 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 0.02 - vertex -0.1 -0.008 0.01 - vertex -0.1 -0.016 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 0.01 - vertex -0.1 -0.008 0.02 - vertex -0.1 0 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 0.02 - vertex -0.1 0 0.01 - vertex -0.1 -0.008 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 0.02 - vertex -0.1 -0.04 0.03 - vertex -0.1 -0.032 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 0.03 - vertex -0.1 -0.032 0.02 - vertex -0.1 -0.04 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 0.02 - vertex -0.1 -0.032 0.03 - vertex -0.1 -0.024 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 0.03 - vertex -0.1 -0.024 0.02 - vertex -0.1 -0.032 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 0.02 - vertex -0.1 -0.024 0.03 - vertex -0.1 -0.016 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 0.03 - vertex -0.1 -0.016 0.02 - vertex -0.1 -0.024 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 0.02 - vertex -0.1 -0.016 0.03 - vertex -0.1 -0.008 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 0.03 - vertex -0.1 -0.008 0.02 - vertex -0.1 -0.016 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 0.02 - vertex -0.1 -0.008 0.03 - vertex -0.1 0 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 0.03 - vertex -0.1 0 0.02 - vertex -0.1 -0.008 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 0.03 - vertex -0.1 -0.04 0.04 - vertex -0.1 -0.032 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 0.04 - vertex -0.1 -0.032 0.03 - vertex -0.1 -0.04 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 0.03 - vertex -0.1 -0.032 0.04 - vertex -0.1 -0.024 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 0.04 - vertex -0.1 -0.024 0.03 - vertex -0.1 -0.032 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 0.03 - vertex -0.1 -0.024 0.04 - vertex -0.1 -0.016 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 0.04 - vertex -0.1 -0.016 0.03 - vertex -0.1 -0.024 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 0.03 - vertex -0.1 -0.016 0.04 - vertex -0.1 -0.008 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 0.04 - vertex -0.1 -0.008 0.03 - vertex -0.1 -0.016 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 0.03 - vertex -0.1 -0.008 0.04 - vertex -0.1 0 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 0.04 - vertex -0.1 0 0.03 - vertex -0.1 -0.008 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.04 0.04 - vertex -0.1 -0.04 0.05 - vertex -0.1 -0.032 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.032 0.05 - vertex -0.1 -0.032 0.04 - vertex -0.1 -0.04 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.032 0.04 - vertex -0.1 -0.032 0.05 - vertex -0.1 -0.024 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.024 0.05 - vertex -0.1 -0.024 0.04 - vertex -0.1 -0.032 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.024 0.04 - vertex -0.1 -0.024 0.05 - vertex -0.1 -0.016 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.016 0.05 - vertex -0.1 -0.016 0.04 - vertex -0.1 -0.024 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.016 0.04 - vertex -0.1 -0.016 0.05 - vertex -0.1 -0.008 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 -0.008 0.05 - vertex -0.1 -0.008 0.04 - vertex -0.1 -0.016 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 -0.008 0.04 - vertex -0.1 -0.008 0.05 - vertex -0.1 0 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0 0.05 - vertex -0.1 0 0.04 - vertex -0.1 -0.008 0.04 - endloop - endfacet -endsolid minX -solid maxX - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 -0.05 - vertex 0.1 -0.032 -0.05 - vertex 0.1 -0.032 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.04 - vertex 0.1 -0.04 -0.04 - vertex 0.1 -0.04 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.05 - vertex 0.1 -0.024 -0.05 - vertex 0.1 -0.024 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.04 - vertex 0.1 -0.032 -0.04 - vertex 0.1 -0.032 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.05 - vertex 0.1 -0.016 -0.05 - vertex 0.1 -0.016 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.04 - vertex 0.1 -0.024 -0.04 - vertex 0.1 -0.024 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.05 - vertex 0.1 -0.008 -0.05 - vertex 0.1 -0.008 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.04 - vertex 0.1 -0.016 -0.04 - vertex 0.1 -0.016 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.05 - vertex 0.1 0 -0.05 - vertex 0.1 0 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.04 - vertex 0.1 -0.008 -0.04 - vertex 0.1 -0.008 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 -0.04 - vertex 0.1 -0.032 -0.04 - vertex 0.1 -0.032 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.03 - vertex 0.1 -0.04 -0.03 - vertex 0.1 -0.04 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.04 - vertex 0.1 -0.024 -0.04 - vertex 0.1 -0.024 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.03 - vertex 0.1 -0.032 -0.03 - vertex 0.1 -0.032 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.04 - vertex 0.1 -0.016 -0.04 - vertex 0.1 -0.016 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.03 - vertex 0.1 -0.024 -0.03 - vertex 0.1 -0.024 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.04 - vertex 0.1 -0.008 -0.04 - vertex 0.1 -0.008 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.03 - vertex 0.1 -0.016 -0.03 - vertex 0.1 -0.016 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.04 - vertex 0.1 0 -0.04 - vertex 0.1 0 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.03 - vertex 0.1 -0.008 -0.03 - vertex 0.1 -0.008 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 -0.03 - vertex 0.1 -0.032 -0.03 - vertex 0.1 -0.032 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.02 - vertex 0.1 -0.04 -0.02 - vertex 0.1 -0.04 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.03 - vertex 0.1 -0.024 -0.03 - vertex 0.1 -0.024 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.02 - vertex 0.1 -0.032 -0.02 - vertex 0.1 -0.032 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.03 - vertex 0.1 -0.016 -0.03 - vertex 0.1 -0.016 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.02 - vertex 0.1 -0.024 -0.02 - vertex 0.1 -0.024 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.03 - vertex 0.1 -0.008 -0.03 - vertex 0.1 -0.008 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.02 - vertex 0.1 -0.016 -0.02 - vertex 0.1 -0.016 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.03 - vertex 0.1 0 -0.03 - vertex 0.1 0 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.02 - vertex 0.1 -0.008 -0.02 - vertex 0.1 -0.008 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 -0.02 - vertex 0.1 -0.032 -0.02 - vertex 0.1 -0.032 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.01 - vertex 0.1 -0.04 -0.01 - vertex 0.1 -0.04 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.02 - vertex 0.1 -0.024 -0.02 - vertex 0.1 -0.024 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.01 - vertex 0.1 -0.032 -0.01 - vertex 0.1 -0.032 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.02 - vertex 0.1 -0.016 -0.02 - vertex 0.1 -0.016 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.01 - vertex 0.1 -0.024 -0.01 - vertex 0.1 -0.024 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.02 - vertex 0.1 -0.008 -0.02 - vertex 0.1 -0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.01 - vertex 0.1 -0.016 -0.01 - vertex 0.1 -0.016 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.02 - vertex 0.1 0 -0.02 - vertex 0.1 0 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.01 - vertex 0.1 -0.008 -0.01 - vertex 0.1 -0.008 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 -0.01 - vertex 0.1 -0.032 -0.01 - vertex 0.1 -0.032 1.156482e-18 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 1.156482e-18 - vertex 0.1 -0.04 0 - vertex 0.1 -0.04 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 -0.01 - vertex 0.1 -0.024 -0.01 - vertex 0.1 -0.024 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0 - vertex 0.1 -0.032 1.156482e-18 - vertex 0.1 -0.032 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 -0.01 - vertex 0.1 -0.016 -0.01 - vertex 0.1 -0.016 -1.156482e-18 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -1.156482e-18 - vertex 0.1 -0.024 0 - vertex 0.1 -0.024 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 -0.01 - vertex 0.1 -0.008 -0.01 - vertex 0.1 -0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0 - vertex 0.1 -0.016 -1.156482e-18 - vertex 0.1 -0.016 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 -0.01 - vertex 0.1 0 -0.01 - vertex 0.1 0 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0 - vertex 0.1 -0.008 0 - vertex 0.1 -0.008 -0.01 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 0.1 -0.032 1.156482e-18 - vertex 0.1 -0.032 0.01 - vertex 0.1 -0.04 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 0.01 - vertex 0.1 -0.04 0 - vertex 0.1 -0.032 1.156482e-18 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.1 -0.032 1.156482e-18 - vertex 0.1 -0.024 0 - vertex 0.1 -0.024 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.01 - vertex 0.1 -0.032 0.01 - vertex 0.1 -0.032 1.156482e-18 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.1 -0.024 0 - vertex 0.1 -0.016 -1.156482e-18 - vertex 0.1 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.01 - vertex 0.1 -0.024 0.01 - vertex 0.1 -0.024 0 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 0.1 -0.008 0 - vertex 0.1 -0.008 0.01 - vertex 0.1 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.01 - vertex 0.1 -0.016 -1.156482e-18 - vertex 0.1 -0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0 - vertex 0.1 0 0 - vertex 0.1 0 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.01 - vertex 0.1 -0.008 0.01 - vertex 0.1 -0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 0.01 - vertex 0.1 -0.032 0.01 - vertex 0.1 -0.032 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.02 - vertex 0.1 -0.04 0.02 - vertex 0.1 -0.04 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.01 - vertex 0.1 -0.024 0.01 - vertex 0.1 -0.024 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.02 - vertex 0.1 -0.032 0.02 - vertex 0.1 -0.032 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.01 - vertex 0.1 -0.016 0.01 - vertex 0.1 -0.016 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.02 - vertex 0.1 -0.024 0.02 - vertex 0.1 -0.024 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.01 - vertex 0.1 -0.008 0.01 - vertex 0.1 -0.008 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.02 - vertex 0.1 -0.016 0.02 - vertex 0.1 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.01 - vertex 0.1 0 0.01 - vertex 0.1 0 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.02 - vertex 0.1 -0.008 0.02 - vertex 0.1 -0.008 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 0.02 - vertex 0.1 -0.032 0.02 - vertex 0.1 -0.032 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.03 - vertex 0.1 -0.04 0.03 - vertex 0.1 -0.04 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.02 - vertex 0.1 -0.024 0.02 - vertex 0.1 -0.024 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.03 - vertex 0.1 -0.032 0.03 - vertex 0.1 -0.032 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.02 - vertex 0.1 -0.016 0.02 - vertex 0.1 -0.016 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.03 - vertex 0.1 -0.024 0.03 - vertex 0.1 -0.024 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.02 - vertex 0.1 -0.008 0.02 - vertex 0.1 -0.008 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.03 - vertex 0.1 -0.016 0.03 - vertex 0.1 -0.016 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.02 - vertex 0.1 0 0.02 - vertex 0.1 0 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.03 - vertex 0.1 -0.008 0.03 - vertex 0.1 -0.008 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 0.03 - vertex 0.1 -0.032 0.03 - vertex 0.1 -0.032 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.04 - vertex 0.1 -0.04 0.04 - vertex 0.1 -0.04 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.03 - vertex 0.1 -0.024 0.03 - vertex 0.1 -0.024 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.04 - vertex 0.1 -0.032 0.04 - vertex 0.1 -0.032 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.03 - vertex 0.1 -0.016 0.03 - vertex 0.1 -0.016 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.04 - vertex 0.1 -0.024 0.04 - vertex 0.1 -0.024 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.03 - vertex 0.1 -0.008 0.03 - vertex 0.1 -0.008 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.04 - vertex 0.1 -0.016 0.04 - vertex 0.1 -0.016 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.03 - vertex 0.1 0 0.03 - vertex 0.1 0 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.04 - vertex 0.1 -0.008 0.04 - vertex 0.1 -0.008 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.04 0.04 - vertex 0.1 -0.032 0.04 - vertex 0.1 -0.032 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.05 - vertex 0.1 -0.04 0.05 - vertex 0.1 -0.04 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.032 0.04 - vertex 0.1 -0.024 0.04 - vertex 0.1 -0.024 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.05 - vertex 0.1 -0.032 0.05 - vertex 0.1 -0.032 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.024 0.04 - vertex 0.1 -0.016 0.04 - vertex 0.1 -0.016 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.05 - vertex 0.1 -0.024 0.05 - vertex 0.1 -0.024 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.016 0.04 - vertex 0.1 -0.008 0.04 - vertex 0.1 -0.008 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.05 - vertex 0.1 -0.016 0.05 - vertex 0.1 -0.016 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 -0.008 0.04 - vertex 0.1 0 0.04 - vertex 0.1 0 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.05 - vertex 0.1 -0.008 0.05 - vertex 0.1 -0.008 0.04 - endloop - endfacet -endsolid maxX -solid minY - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 -0.05 - vertex -0.09333333 -0.04 -0.05 - vertex -0.09333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.04 - vertex -0.1 -0.04 -0.04 - vertex -0.1 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 -0.04 - vertex -0.09333333 -0.04 -0.04 - vertex -0.09333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.03 - vertex -0.1 -0.04 -0.03 - vertex -0.1 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 -0.03 - vertex -0.09333333 -0.04 -0.03 - vertex -0.09333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.02 - vertex -0.1 -0.04 -0.02 - vertex -0.1 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 -0.02 - vertex -0.09333333 -0.04 -0.02 - vertex -0.09333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.01 - vertex -0.1 -0.04 -0.01 - vertex -0.1 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 -0.01 - vertex -0.09333333 -0.04 -0.01 - vertex -0.09333333 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 0 - vertex -0.1 -0.04 0 - vertex -0.1 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 0 - vertex -0.09333333 -0.04 0 - vertex -0.09333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.01 - vertex -0.1 -0.04 0.01 - vertex -0.1 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 0.01 - vertex -0.09333333 -0.04 0.01 - vertex -0.09333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.02 - vertex -0.1 -0.04 0.02 - vertex -0.1 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 0.02 - vertex -0.09333333 -0.04 0.02 - vertex -0.09333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.03 - vertex -0.1 -0.04 0.03 - vertex -0.1 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 0.03 - vertex -0.09333333 -0.04 0.03 - vertex -0.09333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.04 - vertex -0.1 -0.04 0.04 - vertex -0.1 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 -0.04 0.04 - vertex -0.09333333 -0.04 0.04 - vertex -0.09333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.05 - vertex -0.1 -0.04 0.05 - vertex -0.1 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.05 - vertex -0.08666667 -0.04 -0.05 - vertex -0.08666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.04 - vertex -0.09333333 -0.04 -0.04 - vertex -0.09333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.04 - vertex -0.08666667 -0.04 -0.04 - vertex -0.08666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.03 - vertex -0.09333333 -0.04 -0.03 - vertex -0.09333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.03 - vertex -0.08666667 -0.04 -0.03 - vertex -0.08666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.02 - vertex -0.09333333 -0.04 -0.02 - vertex -0.09333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.02 - vertex -0.08666667 -0.04 -0.02 - vertex -0.08666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.01 - vertex -0.09333333 -0.04 -0.01 - vertex -0.09333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 -0.01 - vertex -0.08666667 -0.04 -0.01 - vertex -0.08666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 0 - vertex -0.09333333 -0.04 0 - vertex -0.09333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 0 - vertex -0.08666667 -0.04 0 - vertex -0.08666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.01 - vertex -0.09333333 -0.04 0.01 - vertex -0.09333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.01 - vertex -0.08666667 -0.04 0.01 - vertex -0.08666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.02 - vertex -0.09333333 -0.04 0.02 - vertex -0.09333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.02 - vertex -0.08666667 -0.04 0.02 - vertex -0.08666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.03 - vertex -0.09333333 -0.04 0.03 - vertex -0.09333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.03 - vertex -0.08666667 -0.04 0.03 - vertex -0.08666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.04 - vertex -0.09333333 -0.04 0.04 - vertex -0.09333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 -0.04 0.04 - vertex -0.08666667 -0.04 0.04 - vertex -0.08666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.05 - vertex -0.09333333 -0.04 0.05 - vertex -0.09333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.05 - vertex -0.08 -0.04 -0.05 - vertex -0.08 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 -0.04 - vertex -0.08666667 -0.04 -0.04 - vertex -0.08666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.04 - vertex -0.08 -0.04 -0.04 - vertex -0.08 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 -0.03 - vertex -0.08666667 -0.04 -0.03 - vertex -0.08666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.03 - vertex -0.08 -0.04 -0.03 - vertex -0.08 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 -0.02 - vertex -0.08666667 -0.04 -0.02 - vertex -0.08666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 -0.02 - vertex -0.08 -0.04 -0.02 - vertex -0.08 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 -0.01 - vertex -0.08666667 -0.04 -0.01 - vertex -0.08666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 0 - vertex -0.08666667 -0.04 -0.01 - vertex -0.08 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 -0.01 - vertex -0.08 -0.04 1.156482e-18 - vertex -0.08666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 1.156482e-18 - vertex -0.08 -0.04 0.01 - vertex -0.08666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.01 - vertex -0.08666667 -0.04 0 - vertex -0.08 -0.04 1.156482e-18 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.01 - vertex -0.08 -0.04 0.01 - vertex -0.08 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 0.02 - vertex -0.08666667 -0.04 0.02 - vertex -0.08666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.02 - vertex -0.08 -0.04 0.02 - vertex -0.08 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 0.03 - vertex -0.08666667 -0.04 0.03 - vertex -0.08666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.03 - vertex -0.08 -0.04 0.03 - vertex -0.08 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 0.04 - vertex -0.08666667 -0.04 0.04 - vertex -0.08666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 -0.04 0.04 - vertex -0.08 -0.04 0.04 - vertex -0.08 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 -0.04 0.05 - vertex -0.08666667 -0.04 0.05 - vertex -0.08666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 -0.05 - vertex -0.07333333 -0.04 -0.05 - vertex -0.07333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.04 - vertex -0.08 -0.04 -0.04 - vertex -0.08 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 -0.04 - vertex -0.07333333 -0.04 -0.04 - vertex -0.07333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.03 - vertex -0.08 -0.04 -0.03 - vertex -0.08 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 -0.03 - vertex -0.07333333 -0.04 -0.03 - vertex -0.07333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.02 - vertex -0.08 -0.04 -0.02 - vertex -0.08 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 -0.02 - vertex -0.07333333 -0.04 -0.02 - vertex -0.07333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.01 - vertex -0.08 -0.04 -0.01 - vertex -0.08 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 0 - vertex -0.08 -0.04 1.156482e-18 - vertex -0.08 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 -0.01 - vertex -0.07333333 -0.04 -0.01 - vertex -0.07333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 1.156482e-18 - vertex -0.07333333 -0.04 0 - vertex -0.07333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.01 - vertex -0.08 -0.04 0.01 - vertex -0.08 -0.04 1.156482e-18 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 0.01 - vertex -0.07333333 -0.04 0.01 - vertex -0.07333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.02 - vertex -0.08 -0.04 0.02 - vertex -0.08 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 0.02 - vertex -0.07333333 -0.04 0.02 - vertex -0.07333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.03 - vertex -0.08 -0.04 0.03 - vertex -0.08 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 0.03 - vertex -0.07333333 -0.04 0.03 - vertex -0.07333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.04 - vertex -0.08 -0.04 0.04 - vertex -0.08 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 -0.04 0.04 - vertex -0.07333333 -0.04 0.04 - vertex -0.07333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.05 - vertex -0.08 -0.04 0.05 - vertex -0.08 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.05 - vertex -0.06666667 -0.04 -0.05 - vertex -0.06666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.04 - vertex -0.07333333 -0.04 -0.04 - vertex -0.07333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.04 - vertex -0.06666667 -0.04 -0.04 - vertex -0.06666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.03 - vertex -0.07333333 -0.04 -0.03 - vertex -0.07333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.03 - vertex -0.06666667 -0.04 -0.03 - vertex -0.06666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.02 - vertex -0.07333333 -0.04 -0.02 - vertex -0.07333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.02 - vertex -0.06666667 -0.04 -0.02 - vertex -0.06666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.01 - vertex -0.07333333 -0.04 -0.01 - vertex -0.07333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 -0.01 - vertex -0.06666667 -0.04 -0.01 - vertex -0.06666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 0 - vertex -0.07333333 -0.04 0 - vertex -0.07333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 0 - vertex -0.06666667 -0.04 0 - vertex -0.06666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.01 - vertex -0.07333333 -0.04 0.01 - vertex -0.07333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.01 - vertex -0.06666667 -0.04 0.01 - vertex -0.06666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.02 - vertex -0.07333333 -0.04 0.02 - vertex -0.07333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.02 - vertex -0.06666667 -0.04 0.02 - vertex -0.06666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.03 - vertex -0.07333333 -0.04 0.03 - vertex -0.07333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.03 - vertex -0.06666667 -0.04 0.03 - vertex -0.06666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.04 - vertex -0.07333333 -0.04 0.04 - vertex -0.07333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 -0.04 0.04 - vertex -0.06666667 -0.04 0.04 - vertex -0.06666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.05 - vertex -0.07333333 -0.04 0.05 - vertex -0.07333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.05 - vertex -0.06 -0.04 -0.05 - vertex -0.06 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 -0.04 - vertex -0.06666667 -0.04 -0.04 - vertex -0.06666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.04 - vertex -0.06 -0.04 -0.04 - vertex -0.06 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 -0.03 - vertex -0.06666667 -0.04 -0.03 - vertex -0.06666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.03 - vertex -0.06 -0.04 -0.03 - vertex -0.06 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 -0.02 - vertex -0.06666667 -0.04 -0.02 - vertex -0.06666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.02 - vertex -0.06 -0.04 -0.02 - vertex -0.06 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 -0.01 - vertex -0.06666667 -0.04 -0.01 - vertex -0.06666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 -0.01 - vertex -0.06 -0.04 -0.01 - vertex -0.06 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 0 - vertex -0.06666667 -0.04 0 - vertex -0.06666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 0 - vertex -0.06 -0.04 0 - vertex -0.06 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 0.01 - vertex -0.06666667 -0.04 0.01 - vertex -0.06666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.01 - vertex -0.06 -0.04 0.01 - vertex -0.06 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 0.02 - vertex -0.06666667 -0.04 0.02 - vertex -0.06666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.02 - vertex -0.06 -0.04 0.02 - vertex -0.06 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 0.03 - vertex -0.06666667 -0.04 0.03 - vertex -0.06666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.03 - vertex -0.06 -0.04 0.03 - vertex -0.06 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 0.04 - vertex -0.06666667 -0.04 0.04 - vertex -0.06666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 -0.04 0.04 - vertex -0.06 -0.04 0.04 - vertex -0.06 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 -0.04 0.05 - vertex -0.06666667 -0.04 0.05 - vertex -0.06666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 -0.05 - vertex -0.05333333 -0.04 -0.05 - vertex -0.05333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.04 - vertex -0.06 -0.04 -0.04 - vertex -0.06 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 -0.04 - vertex -0.05333333 -0.04 -0.04 - vertex -0.05333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.03 - vertex -0.06 -0.04 -0.03 - vertex -0.06 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 -0.03 - vertex -0.05333333 -0.04 -0.03 - vertex -0.05333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.02 - vertex -0.06 -0.04 -0.02 - vertex -0.06 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 -0.02 - vertex -0.05333333 -0.04 -0.02 - vertex -0.05333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.01 - vertex -0.06 -0.04 -0.01 - vertex -0.06 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 -0.01 - vertex -0.05333333 -0.04 -0.01 - vertex -0.05333333 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 0 - vertex -0.06 -0.04 0 - vertex -0.06 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 0 - vertex -0.05333333 -0.04 0 - vertex -0.05333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.01 - vertex -0.06 -0.04 0.01 - vertex -0.06 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 0.01 - vertex -0.05333333 -0.04 0.01 - vertex -0.05333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.02 - vertex -0.06 -0.04 0.02 - vertex -0.06 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 0.02 - vertex -0.05333333 -0.04 0.02 - vertex -0.05333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.03 - vertex -0.06 -0.04 0.03 - vertex -0.06 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 0.03 - vertex -0.05333333 -0.04 0.03 - vertex -0.05333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.04 - vertex -0.06 -0.04 0.04 - vertex -0.06 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 -0.04 0.04 - vertex -0.05333333 -0.04 0.04 - vertex -0.05333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.05 - vertex -0.06 -0.04 0.05 - vertex -0.06 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.05 - vertex -0.04666667 -0.04 -0.05 - vertex -0.04666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.04 - vertex -0.05333333 -0.04 -0.04 - vertex -0.05333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.04 - vertex -0.04666667 -0.04 -0.04 - vertex -0.04666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.03 - vertex -0.05333333 -0.04 -0.03 - vertex -0.05333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.03 - vertex -0.04666667 -0.04 -0.03 - vertex -0.04666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.02 - vertex -0.05333333 -0.04 -0.02 - vertex -0.05333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.02 - vertex -0.04666667 -0.04 -0.02 - vertex -0.04666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.01 - vertex -0.05333333 -0.04 -0.01 - vertex -0.05333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 -0.01 - vertex -0.04666667 -0.04 -0.01 - vertex -0.04666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 0 - vertex -0.05333333 -0.04 0 - vertex -0.05333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 0 - vertex -0.04666667 -0.04 0 - vertex -0.04666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.01 - vertex -0.05333333 -0.04 0.01 - vertex -0.05333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.01 - vertex -0.04666667 -0.04 0.01 - vertex -0.04666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.02 - vertex -0.05333333 -0.04 0.02 - vertex -0.05333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.02 - vertex -0.04666667 -0.04 0.02 - vertex -0.04666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.03 - vertex -0.05333333 -0.04 0.03 - vertex -0.05333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.03 - vertex -0.04666667 -0.04 0.03 - vertex -0.04666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.04 - vertex -0.05333333 -0.04 0.04 - vertex -0.05333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 -0.04 0.04 - vertex -0.04666667 -0.04 0.04 - vertex -0.04666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.05 - vertex -0.05333333 -0.04 0.05 - vertex -0.05333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.05 - vertex -0.04 -0.04 -0.05 - vertex -0.04 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 -0.04 - vertex -0.04666667 -0.04 -0.04 - vertex -0.04666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.04 - vertex -0.04 -0.04 -0.04 - vertex -0.04 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 -0.03 - vertex -0.04666667 -0.04 -0.03 - vertex -0.04666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.03 - vertex -0.04 -0.04 -0.03 - vertex -0.04 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 -0.02 - vertex -0.04666667 -0.04 -0.02 - vertex -0.04666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.02 - vertex -0.04 -0.04 -0.02 - vertex -0.04 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 -0.01 - vertex -0.04666667 -0.04 -0.01 - vertex -0.04666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 -0.01 - vertex -0.04 -0.04 -0.01 - vertex -0.04 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 0 - vertex -0.04666667 -0.04 0 - vertex -0.04666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 0 - vertex -0.04 -0.04 0 - vertex -0.04 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 0.01 - vertex -0.04666667 -0.04 0.01 - vertex -0.04666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.01 - vertex -0.04 -0.04 0.01 - vertex -0.04 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 0.02 - vertex -0.04666667 -0.04 0.02 - vertex -0.04666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.02 - vertex -0.04 -0.04 0.02 - vertex -0.04 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 0.03 - vertex -0.04666667 -0.04 0.03 - vertex -0.04666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.03 - vertex -0.04 -0.04 0.03 - vertex -0.04 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 0.04 - vertex -0.04666667 -0.04 0.04 - vertex -0.04666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 -0.04 0.04 - vertex -0.04 -0.04 0.04 - vertex -0.04 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 -0.04 0.05 - vertex -0.04666667 -0.04 0.05 - vertex -0.04666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 -0.05 - vertex -0.03333333 -0.04 -0.05 - vertex -0.03333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.04 - vertex -0.04 -0.04 -0.04 - vertex -0.04 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 -0.04 - vertex -0.03333333 -0.04 -0.04 - vertex -0.03333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.03 - vertex -0.04 -0.04 -0.03 - vertex -0.04 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 -0.03 - vertex -0.03333333 -0.04 -0.03 - vertex -0.03333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.02 - vertex -0.04 -0.04 -0.02 - vertex -0.04 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 -0.02 - vertex -0.03333333 -0.04 -0.02 - vertex -0.03333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.01 - vertex -0.04 -0.04 -0.01 - vertex -0.04 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 -0.01 - vertex -0.03333333 -0.04 -0.01 - vertex -0.03333333 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 0 - vertex -0.04 -0.04 0 - vertex -0.04 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 0 - vertex -0.03333333 -0.04 0 - vertex -0.03333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.01 - vertex -0.04 -0.04 0.01 - vertex -0.04 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 0.01 - vertex -0.03333333 -0.04 0.01 - vertex -0.03333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.02 - vertex -0.04 -0.04 0.02 - vertex -0.04 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 0.02 - vertex -0.03333333 -0.04 0.02 - vertex -0.03333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.03 - vertex -0.04 -0.04 0.03 - vertex -0.04 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 0.03 - vertex -0.03333333 -0.04 0.03 - vertex -0.03333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.04 - vertex -0.04 -0.04 0.04 - vertex -0.04 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 -0.04 0.04 - vertex -0.03333333 -0.04 0.04 - vertex -0.03333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.05 - vertex -0.04 -0.04 0.05 - vertex -0.04 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.05 - vertex -0.02666667 -0.04 -0.05 - vertex -0.02666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.04 - vertex -0.03333333 -0.04 -0.04 - vertex -0.03333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.04 - vertex -0.02666667 -0.04 -0.04 - vertex -0.02666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.03 - vertex -0.03333333 -0.04 -0.03 - vertex -0.03333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.03 - vertex -0.02666667 -0.04 -0.03 - vertex -0.02666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.02 - vertex -0.03333333 -0.04 -0.02 - vertex -0.03333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.02 - vertex -0.02666667 -0.04 -0.02 - vertex -0.02666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.01 - vertex -0.03333333 -0.04 -0.01 - vertex -0.03333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 -0.01 - vertex -0.02666667 -0.04 -0.01 - vertex -0.02666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 0 - vertex -0.03333333 -0.04 0 - vertex -0.03333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 0 - vertex -0.02666667 -0.04 0 - vertex -0.02666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.01 - vertex -0.03333333 -0.04 0.01 - vertex -0.03333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.01 - vertex -0.02666667 -0.04 0.01 - vertex -0.02666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.02 - vertex -0.03333333 -0.04 0.02 - vertex -0.03333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.02 - vertex -0.02666667 -0.04 0.02 - vertex -0.02666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.03 - vertex -0.03333333 -0.04 0.03 - vertex -0.03333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.03 - vertex -0.02666667 -0.04 0.03 - vertex -0.02666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.04 - vertex -0.03333333 -0.04 0.04 - vertex -0.03333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 -0.04 0.04 - vertex -0.02666667 -0.04 0.04 - vertex -0.02666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.05 - vertex -0.03333333 -0.04 0.05 - vertex -0.03333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.05 - vertex -0.02 -0.04 -0.05 - vertex -0.02 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 -0.04 - vertex -0.02666667 -0.04 -0.04 - vertex -0.02666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.04 - vertex -0.02 -0.04 -0.04 - vertex -0.02 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 -0.03 - vertex -0.02666667 -0.04 -0.03 - vertex -0.02666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.03 - vertex -0.02 -0.04 -0.03 - vertex -0.02 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 -0.02 - vertex -0.02666667 -0.04 -0.02 - vertex -0.02666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.02 - vertex -0.02 -0.04 -0.02 - vertex -0.02 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 -0.01 - vertex -0.02666667 -0.04 -0.01 - vertex -0.02666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 -0.01 - vertex -0.02 -0.04 -0.01 - vertex -0.02 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 0 - vertex -0.02666667 -0.04 0 - vertex -0.02666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 0 - vertex -0.02 -0.04 0 - vertex -0.02 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 0.01 - vertex -0.02666667 -0.04 0.01 - vertex -0.02666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.01 - vertex -0.02 -0.04 0.01 - vertex -0.02 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 0.02 - vertex -0.02666667 -0.04 0.02 - vertex -0.02666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.02 - vertex -0.02 -0.04 0.02 - vertex -0.02 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 0.03 - vertex -0.02666667 -0.04 0.03 - vertex -0.02666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.03 - vertex -0.02 -0.04 0.03 - vertex -0.02 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 0.04 - vertex -0.02666667 -0.04 0.04 - vertex -0.02666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 -0.04 0.04 - vertex -0.02 -0.04 0.04 - vertex -0.02 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 -0.04 0.05 - vertex -0.02666667 -0.04 0.05 - vertex -0.02666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 -0.05 - vertex -0.01333333 -0.04 -0.05 - vertex -0.01333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.04 - vertex -0.02 -0.04 -0.04 - vertex -0.02 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 -0.04 - vertex -0.01333333 -0.04 -0.04 - vertex -0.01333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.03 - vertex -0.02 -0.04 -0.03 - vertex -0.02 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 -0.03 - vertex -0.01333333 -0.04 -0.03 - vertex -0.01333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.02 - vertex -0.02 -0.04 -0.02 - vertex -0.02 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 -0.02 - vertex -0.01333333 -0.04 -0.02 - vertex -0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.01 - vertex -0.02 -0.04 -0.01 - vertex -0.02 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 -0.01 - vertex -0.01333333 -0.04 -0.01 - vertex -0.01333333 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 0 - vertex -0.02 -0.04 0 - vertex -0.02 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 0 - vertex -0.01333333 -0.04 0 - vertex -0.01333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.01 - vertex -0.02 -0.04 0.01 - vertex -0.02 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 0.01 - vertex -0.01333333 -0.04 0.01 - vertex -0.01333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.02 - vertex -0.02 -0.04 0.02 - vertex -0.02 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 0.02 - vertex -0.01333333 -0.04 0.02 - vertex -0.01333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.03 - vertex -0.02 -0.04 0.03 - vertex -0.02 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 0.03 - vertex -0.01333333 -0.04 0.03 - vertex -0.01333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.04 - vertex -0.02 -0.04 0.04 - vertex -0.02 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 -0.04 0.04 - vertex -0.01333333 -0.04 0.04 - vertex -0.01333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.05 - vertex -0.02 -0.04 0.05 - vertex -0.02 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.05 - vertex -0.006666667 -0.04 -0.05 - vertex -0.006666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.04 - vertex -0.01333333 -0.04 -0.04 - vertex -0.01333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.04 - vertex -0.006666667 -0.04 -0.04 - vertex -0.006666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.03 - vertex -0.01333333 -0.04 -0.03 - vertex -0.01333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.03 - vertex -0.006666667 -0.04 -0.03 - vertex -0.006666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.02 - vertex -0.01333333 -0.04 -0.02 - vertex -0.01333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.02 - vertex -0.006666667 -0.04 -0.02 - vertex -0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.01 - vertex -0.01333333 -0.04 -0.01 - vertex -0.01333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.01 - vertex -0.006666667 -0.04 0.01 - vertex -0.006666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.02 - vertex -0.01333333 -0.04 0.02 - vertex -0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.02 - vertex -0.006666667 -0.04 0.02 - vertex -0.006666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.03 - vertex -0.01333333 -0.04 0.03 - vertex -0.01333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.03 - vertex -0.006666667 -0.04 0.03 - vertex -0.006666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.04 - vertex -0.01333333 -0.04 0.04 - vertex -0.01333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 0.04 - vertex -0.006666667 -0.04 0.04 - vertex -0.006666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.05 - vertex -0.01333333 -0.04 0.05 - vertex -0.01333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.05 - vertex 0 -0.04 -0.05 - vertex 0 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 -0.04 - vertex -0.006666667 -0.04 -0.04 - vertex -0.006666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.04 - vertex 0 -0.04 -0.04 - vertex 0 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 -0.03 - vertex -0.006666667 -0.04 -0.03 - vertex -0.006666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.03 - vertex 0 -0.04 -0.03 - vertex 0 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 -0.02 - vertex -0.006666667 -0.04 -0.02 - vertex -0.006666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.02 - vertex 0 -0.04 -0.02 - vertex 0 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 -0.01 - vertex -0.006666667 -0.04 -0.01 - vertex -0.006666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.01 - vertex 0 -0.04 0.01 - vertex 0 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 0.02 - vertex -0.006666667 -0.04 0.02 - vertex -0.006666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.02 - vertex 0 -0.04 0.02 - vertex 0 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 0.03 - vertex -0.006666667 -0.04 0.03 - vertex -0.006666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.03 - vertex 0 -0.04 0.03 - vertex 0 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 0.04 - vertex -0.006666667 -0.04 0.04 - vertex -0.006666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.04 - vertex 0 -0.04 0.04 - vertex 0 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 0.05 - vertex -0.006666667 -0.04 0.05 - vertex -0.006666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 -0.05 - vertex 0.006666667 -0.04 -0.05 - vertex 0.006666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.04 - vertex 0 -0.04 -0.04 - vertex 0 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 -0.04 - vertex 0.006666667 -0.04 -0.04 - vertex 0.006666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.03 - vertex 0 -0.04 -0.03 - vertex 0 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 -0.03 - vertex 0.006666667 -0.04 -0.03 - vertex 0.006666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.02 - vertex 0 -0.04 -0.02 - vertex 0 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 -0.02 - vertex 0.006666667 -0.04 -0.02 - vertex 0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.01 - vertex 0 -0.04 -0.01 - vertex 0 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 0.01 - vertex 0.006666667 -0.04 0.01 - vertex 0.006666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.02 - vertex 0 -0.04 0.02 - vertex 0 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 0.02 - vertex 0.006666667 -0.04 0.02 - vertex 0.006666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.03 - vertex 0 -0.04 0.03 - vertex 0 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 0.03 - vertex 0.006666667 -0.04 0.03 - vertex 0.006666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.04 - vertex 0 -0.04 0.04 - vertex 0 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 0.04 - vertex 0.006666667 -0.04 0.04 - vertex 0.006666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.05 - vertex 0 -0.04 0.05 - vertex 0 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.05 - vertex 0.01333333 -0.04 -0.05 - vertex 0.01333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.04 - vertex 0.006666667 -0.04 -0.04 - vertex 0.006666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.04 - vertex 0.01333333 -0.04 -0.04 - vertex 0.01333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.03 - vertex 0.006666667 -0.04 -0.03 - vertex 0.006666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.03 - vertex 0.01333333 -0.04 -0.03 - vertex 0.01333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.02 - vertex 0.006666667 -0.04 -0.02 - vertex 0.006666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.02 - vertex 0.01333333 -0.04 -0.02 - vertex 0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.01 - vertex 0.006666667 -0.04 -0.01 - vertex 0.006666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.01 - vertex 0.01333333 -0.04 0.01 - vertex 0.01333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.02 - vertex 0.006666667 -0.04 0.02 - vertex 0.006666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.02 - vertex 0.01333333 -0.04 0.02 - vertex 0.01333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.03 - vertex 0.006666667 -0.04 0.03 - vertex 0.006666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.03 - vertex 0.01333333 -0.04 0.03 - vertex 0.01333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.04 - vertex 0.006666667 -0.04 0.04 - vertex 0.006666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.04 - vertex 0.01333333 -0.04 0.04 - vertex 0.01333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.05 - vertex 0.006666667 -0.04 0.05 - vertex 0.006666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.05 - vertex 0.02 -0.04 -0.05 - vertex 0.02 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 -0.04 - vertex 0.01333333 -0.04 -0.04 - vertex 0.01333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.04 - vertex 0.02 -0.04 -0.04 - vertex 0.02 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 -0.03 - vertex 0.01333333 -0.04 -0.03 - vertex 0.01333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.03 - vertex 0.02 -0.04 -0.03 - vertex 0.02 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 -0.02 - vertex 0.01333333 -0.04 -0.02 - vertex 0.01333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.02 - vertex 0.02 -0.04 -0.02 - vertex 0.02 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 -0.01 - vertex 0.01333333 -0.04 -0.01 - vertex 0.01333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 -0.01 - vertex 0.02 -0.04 -0.01 - vertex 0.02 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 0 - vertex 0.01333333 -0.04 0 - vertex 0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 0 - vertex 0.02 -0.04 0 - vertex 0.02 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 0.01 - vertex 0.01333333 -0.04 0.01 - vertex 0.01333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.01 - vertex 0.02 -0.04 0.01 - vertex 0.02 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 0.02 - vertex 0.01333333 -0.04 0.02 - vertex 0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.02 - vertex 0.02 -0.04 0.02 - vertex 0.02 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 0.03 - vertex 0.01333333 -0.04 0.03 - vertex 0.01333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.03 - vertex 0.02 -0.04 0.03 - vertex 0.02 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 0.04 - vertex 0.01333333 -0.04 0.04 - vertex 0.01333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.04 - vertex 0.02 -0.04 0.04 - vertex 0.02 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 -0.04 0.05 - vertex 0.01333333 -0.04 0.05 - vertex 0.01333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 -0.05 - vertex 0.02666667 -0.04 -0.05 - vertex 0.02666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.04 - vertex 0.02 -0.04 -0.04 - vertex 0.02 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 -0.04 - vertex 0.02666667 -0.04 -0.04 - vertex 0.02666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.03 - vertex 0.02 -0.04 -0.03 - vertex 0.02 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 -0.03 - vertex 0.02666667 -0.04 -0.03 - vertex 0.02666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.02 - vertex 0.02 -0.04 -0.02 - vertex 0.02 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 -0.02 - vertex 0.02666667 -0.04 -0.02 - vertex 0.02666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.01 - vertex 0.02 -0.04 -0.01 - vertex 0.02 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 -0.01 - vertex 0.02666667 -0.04 -0.01 - vertex 0.02666667 -0.04 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 5.782412e-19 - vertex 0.02 -0.04 0 - vertex 0.02 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 5.782412e-19 - vertex 0.02666667 -0.04 0.01 - vertex 0.02 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 0.01 - vertex 0.02 -0.04 0 - vertex 0.02666667 -0.04 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 0.01 - vertex 0.02666667 -0.04 0.01 - vertex 0.02666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.02 - vertex 0.02 -0.04 0.02 - vertex 0.02 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 0.02 - vertex 0.02666667 -0.04 0.02 - vertex 0.02666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.03 - vertex 0.02 -0.04 0.03 - vertex 0.02 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 0.03 - vertex 0.02666667 -0.04 0.03 - vertex 0.02666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.04 - vertex 0.02 -0.04 0.04 - vertex 0.02 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 -0.04 0.04 - vertex 0.02666667 -0.04 0.04 - vertex 0.02666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.05 - vertex 0.02 -0.04 0.05 - vertex 0.02 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.05 - vertex 0.03333333 -0.04 -0.05 - vertex 0.03333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.04 - vertex 0.02666667 -0.04 -0.04 - vertex 0.02666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.04 - vertex 0.03333333 -0.04 -0.04 - vertex 0.03333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.03 - vertex 0.02666667 -0.04 -0.03 - vertex 0.02666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.03 - vertex 0.03333333 -0.04 -0.03 - vertex 0.03333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.02 - vertex 0.02666667 -0.04 -0.02 - vertex 0.02666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.02 - vertex 0.03333333 -0.04 -0.02 - vertex 0.03333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.01 - vertex 0.02666667 -0.04 -0.01 - vertex 0.02666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 -0.01 - vertex 0.03333333 -0.04 -0.01 - vertex 0.03333333 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 0 - vertex 0.02666667 -0.04 5.782412e-19 - vertex 0.02666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 5.782412e-19 - vertex 0.03333333 -0.04 0 - vertex 0.03333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.01 - vertex 0.02666667 -0.04 0.01 - vertex 0.02666667 -0.04 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.01 - vertex 0.03333333 -0.04 0.01 - vertex 0.03333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.02 - vertex 0.02666667 -0.04 0.02 - vertex 0.02666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.02 - vertex 0.03333333 -0.04 0.02 - vertex 0.03333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.03 - vertex 0.02666667 -0.04 0.03 - vertex 0.02666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.03 - vertex 0.03333333 -0.04 0.03 - vertex 0.03333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.04 - vertex 0.02666667 -0.04 0.04 - vertex 0.02666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 -0.04 0.04 - vertex 0.03333333 -0.04 0.04 - vertex 0.03333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.05 - vertex 0.02666667 -0.04 0.05 - vertex 0.02666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.05 - vertex 0.04 -0.04 -0.05 - vertex 0.04 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 -0.04 - vertex 0.03333333 -0.04 -0.04 - vertex 0.03333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.04 - vertex 0.04 -0.04 -0.04 - vertex 0.04 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 -0.03 - vertex 0.03333333 -0.04 -0.03 - vertex 0.03333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.03 - vertex 0.04 -0.04 -0.03 - vertex 0.04 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 -0.02 - vertex 0.03333333 -0.04 -0.02 - vertex 0.03333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.02 - vertex 0.04 -0.04 -0.02 - vertex 0.04 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 -0.01 - vertex 0.03333333 -0.04 -0.01 - vertex 0.03333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 -0.01 - vertex 0.04 -0.04 -0.01 - vertex 0.04 -0.04 -5.782412e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 -5.782412e-19 - vertex 0.03333333 -0.04 0 - vertex 0.03333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 0 - vertex 0.04 -0.04 -5.782412e-19 - vertex 0.04 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 0.01 - vertex 0.03333333 -0.04 0.01 - vertex 0.03333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.01 - vertex 0.04 -0.04 0.01 - vertex 0.04 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 0.02 - vertex 0.03333333 -0.04 0.02 - vertex 0.03333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.02 - vertex 0.04 -0.04 0.02 - vertex 0.04 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 0.03 - vertex 0.03333333 -0.04 0.03 - vertex 0.03333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.03 - vertex 0.04 -0.04 0.03 - vertex 0.04 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 0.04 - vertex 0.03333333 -0.04 0.04 - vertex 0.03333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 -0.04 0.04 - vertex 0.04 -0.04 0.04 - vertex 0.04 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 -0.04 0.05 - vertex 0.03333333 -0.04 0.05 - vertex 0.03333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 -0.05 - vertex 0.04666667 -0.04 -0.05 - vertex 0.04666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.04 - vertex 0.04 -0.04 -0.04 - vertex 0.04 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 -0.04 - vertex 0.04666667 -0.04 -0.04 - vertex 0.04666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.03 - vertex 0.04 -0.04 -0.03 - vertex 0.04 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 -0.03 - vertex 0.04666667 -0.04 -0.03 - vertex 0.04666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.02 - vertex 0.04 -0.04 -0.02 - vertex 0.04 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 -0.02 - vertex 0.04666667 -0.04 -0.02 - vertex 0.04666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.01 - vertex 0.04 -0.04 -0.01 - vertex 0.04 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 -0.01 - vertex 0.04666667 -0.04 -0.01 - vertex 0.04666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0 - vertex 0.04 -0.04 -5.782412e-19 - vertex 0.04 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0 - vertex 0.04666667 -0.04 0.01 - vertex 0.04 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 0.01 - vertex 0.04 -0.04 -5.782412e-19 - vertex 0.04666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 0.01 - vertex 0.04666667 -0.04 0.01 - vertex 0.04666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.02 - vertex 0.04 -0.04 0.02 - vertex 0.04 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 0.02 - vertex 0.04666667 -0.04 0.02 - vertex 0.04666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.03 - vertex 0.04 -0.04 0.03 - vertex 0.04 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 0.03 - vertex 0.04666667 -0.04 0.03 - vertex 0.04666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.04 - vertex 0.04 -0.04 0.04 - vertex 0.04 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -0.04 0.04 - vertex 0.04666667 -0.04 0.04 - vertex 0.04666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.05 - vertex 0.04 -0.04 0.05 - vertex 0.04 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.05 - vertex 0.05333333 -0.04 -0.05 - vertex 0.05333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.04 - vertex 0.04666667 -0.04 -0.04 - vertex 0.04666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.04 - vertex 0.05333333 -0.04 -0.04 - vertex 0.05333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.03 - vertex 0.04666667 -0.04 -0.03 - vertex 0.04666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.03 - vertex 0.05333333 -0.04 -0.03 - vertex 0.05333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.02 - vertex 0.04666667 -0.04 -0.02 - vertex 0.04666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.02 - vertex 0.05333333 -0.04 -0.02 - vertex 0.05333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.01 - vertex 0.04666667 -0.04 -0.01 - vertex 0.04666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 -0.01 - vertex 0.05333333 -0.04 -0.01 - vertex 0.05333333 -0.04 -2.891206e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 -2.891206e-19 - vertex 0.04666667 -0.04 0 - vertex 0.04666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0 - vertex 0.05333333 -0.04 -2.891206e-19 - vertex 0.05333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.01 - vertex 0.04666667 -0.04 0.01 - vertex 0.04666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.01 - vertex 0.05333333 -0.04 0.01 - vertex 0.05333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.02 - vertex 0.04666667 -0.04 0.02 - vertex 0.04666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.02 - vertex 0.05333333 -0.04 0.02 - vertex 0.05333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.03 - vertex 0.04666667 -0.04 0.03 - vertex 0.04666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.03 - vertex 0.05333333 -0.04 0.03 - vertex 0.05333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.04 - vertex 0.04666667 -0.04 0.04 - vertex 0.04666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 -0.04 0.04 - vertex 0.05333333 -0.04 0.04 - vertex 0.05333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.05 - vertex 0.04666667 -0.04 0.05 - vertex 0.04666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.05 - vertex 0.06 -0.04 -0.05 - vertex 0.06 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 -0.04 - vertex 0.05333333 -0.04 -0.04 - vertex 0.05333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.04 - vertex 0.06 -0.04 -0.04 - vertex 0.06 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 -0.03 - vertex 0.05333333 -0.04 -0.03 - vertex 0.05333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.03 - vertex 0.06 -0.04 -0.03 - vertex 0.06 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 -0.02 - vertex 0.05333333 -0.04 -0.02 - vertex 0.05333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.02 - vertex 0.06 -0.04 -0.02 - vertex 0.06 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 -0.01 - vertex 0.05333333 -0.04 -0.01 - vertex 0.05333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 -0.01 - vertex 0.06 -0.04 -0.01 - vertex 0.06 -0.04 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 5.782412e-19 - vertex 0.05333333 -0.04 -2.891206e-19 - vertex 0.05333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 5.782412e-19 - vertex 0.06 -0.04 0.01 - vertex 0.05333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.01 - vertex 0.05333333 -0.04 -2.891206e-19 - vertex 0.06 -0.04 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.01 - vertex 0.06 -0.04 0.01 - vertex 0.06 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 0.02 - vertex 0.05333333 -0.04 0.02 - vertex 0.05333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.02 - vertex 0.06 -0.04 0.02 - vertex 0.06 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 0.03 - vertex 0.05333333 -0.04 0.03 - vertex 0.05333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.03 - vertex 0.06 -0.04 0.03 - vertex 0.06 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 0.04 - vertex 0.05333333 -0.04 0.04 - vertex 0.05333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 -0.04 0.04 - vertex 0.06 -0.04 0.04 - vertex 0.06 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 -0.04 0.05 - vertex 0.05333333 -0.04 0.05 - vertex 0.05333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 -0.05 - vertex 0.06666667 -0.04 -0.05 - vertex 0.06666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.04 - vertex 0.06 -0.04 -0.04 - vertex 0.06 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 -0.04 - vertex 0.06666667 -0.04 -0.04 - vertex 0.06666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.03 - vertex 0.06 -0.04 -0.03 - vertex 0.06 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 -0.03 - vertex 0.06666667 -0.04 -0.03 - vertex 0.06666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.02 - vertex 0.06 -0.04 -0.02 - vertex 0.06 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 -0.02 - vertex 0.06666667 -0.04 -0.02 - vertex 0.06666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.01 - vertex 0.06 -0.04 -0.01 - vertex 0.06 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 -0.01 - vertex 0.06666667 -0.04 -0.01 - vertex 0.06666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 0 - vertex 0.06 -0.04 5.782412e-19 - vertex 0.06 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 5.782412e-19 - vertex 0.06666667 -0.04 0 - vertex 0.06666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.01 - vertex 0.06 -0.04 0.01 - vertex 0.06 -0.04 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 0.01 - vertex 0.06666667 -0.04 0.01 - vertex 0.06666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.02 - vertex 0.06 -0.04 0.02 - vertex 0.06 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 0.02 - vertex 0.06666667 -0.04 0.02 - vertex 0.06666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.03 - vertex 0.06 -0.04 0.03 - vertex 0.06 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 0.03 - vertex 0.06666667 -0.04 0.03 - vertex 0.06666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.04 - vertex 0.06 -0.04 0.04 - vertex 0.06 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 -0.04 0.04 - vertex 0.06666667 -0.04 0.04 - vertex 0.06666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.05 - vertex 0.06 -0.04 0.05 - vertex 0.06 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.05 - vertex 0.07333333 -0.04 -0.05 - vertex 0.07333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.04 - vertex 0.06666667 -0.04 -0.04 - vertex 0.06666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.04 - vertex 0.07333333 -0.04 -0.04 - vertex 0.07333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.03 - vertex 0.06666667 -0.04 -0.03 - vertex 0.06666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.03 - vertex 0.07333333 -0.04 -0.03 - vertex 0.07333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.02 - vertex 0.06666667 -0.04 -0.02 - vertex 0.06666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.02 - vertex 0.07333333 -0.04 -0.02 - vertex 0.07333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.01 - vertex 0.06666667 -0.04 -0.01 - vertex 0.06666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 -0.01 - vertex 0.07333333 -0.04 -0.01 - vertex 0.07333333 -0.04 -4.336809e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 -4.336809e-19 - vertex 0.06666667 -0.04 0 - vertex 0.06666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 0 - vertex 0.07333333 -0.04 -4.336809e-19 - vertex 0.07333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.01 - vertex 0.06666667 -0.04 0.01 - vertex 0.06666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.01 - vertex 0.07333333 -0.04 0.01 - vertex 0.07333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.02 - vertex 0.06666667 -0.04 0.02 - vertex 0.06666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.02 - vertex 0.07333333 -0.04 0.02 - vertex 0.07333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.03 - vertex 0.06666667 -0.04 0.03 - vertex 0.06666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.03 - vertex 0.07333333 -0.04 0.03 - vertex 0.07333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.04 - vertex 0.06666667 -0.04 0.04 - vertex 0.06666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 -0.04 0.04 - vertex 0.07333333 -0.04 0.04 - vertex 0.07333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.05 - vertex 0.06666667 -0.04 0.05 - vertex 0.06666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.05 - vertex 0.08 -0.04 -0.05 - vertex 0.08 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 -0.04 - vertex 0.07333333 -0.04 -0.04 - vertex 0.07333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.04 - vertex 0.08 -0.04 -0.04 - vertex 0.08 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 -0.03 - vertex 0.07333333 -0.04 -0.03 - vertex 0.07333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.03 - vertex 0.08 -0.04 -0.03 - vertex 0.08 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 -0.02 - vertex 0.07333333 -0.04 -0.02 - vertex 0.07333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.02 - vertex 0.08 -0.04 -0.02 - vertex 0.08 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 -0.01 - vertex 0.07333333 -0.04 -0.01 - vertex 0.07333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 -0.01 - vertex 0.08 -0.04 -0.01 - vertex 0.08 -0.04 2.891206e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 2.891206e-19 - vertex 0.07333333 -0.04 -4.336809e-19 - vertex 0.07333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 2.891206e-19 - vertex 0.08 -0.04 0.01 - vertex 0.07333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.01 - vertex 0.07333333 -0.04 -4.336809e-19 - vertex 0.08 -0.04 2.891206e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.01 - vertex 0.08 -0.04 0.01 - vertex 0.08 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 0.02 - vertex 0.07333333 -0.04 0.02 - vertex 0.07333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.02 - vertex 0.08 -0.04 0.02 - vertex 0.08 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 0.03 - vertex 0.07333333 -0.04 0.03 - vertex 0.07333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.03 - vertex 0.08 -0.04 0.03 - vertex 0.08 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 0.04 - vertex 0.07333333 -0.04 0.04 - vertex 0.07333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 -0.04 0.04 - vertex 0.08 -0.04 0.04 - vertex 0.08 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 -0.04 0.05 - vertex 0.07333333 -0.04 0.05 - vertex 0.07333333 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 -0.05 - vertex 0.08666667 -0.04 -0.05 - vertex 0.08666667 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.04 - vertex 0.08 -0.04 -0.04 - vertex 0.08 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 -0.04 - vertex 0.08666667 -0.04 -0.04 - vertex 0.08666667 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.03 - vertex 0.08 -0.04 -0.03 - vertex 0.08 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 -0.03 - vertex 0.08666667 -0.04 -0.03 - vertex 0.08666667 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.02 - vertex 0.08 -0.04 -0.02 - vertex 0.08 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 -0.02 - vertex 0.08666667 -0.04 -0.02 - vertex 0.08666667 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.01 - vertex 0.08 -0.04 -0.01 - vertex 0.08 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 -0.01 - vertex 0.08666667 -0.04 -0.01 - vertex 0.08666667 -0.04 -2.168404e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 -2.168404e-19 - vertex 0.08 -0.04 2.891206e-19 - vertex 0.08 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 2.891206e-19 - vertex 0.08666667 -0.04 -2.168404e-19 - vertex 0.08666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.01 - vertex 0.08 -0.04 0.01 - vertex 0.08 -0.04 2.891206e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 0.01 - vertex 0.08666667 -0.04 0.01 - vertex 0.08666667 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.02 - vertex 0.08 -0.04 0.02 - vertex 0.08 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 0.02 - vertex 0.08666667 -0.04 0.02 - vertex 0.08666667 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.03 - vertex 0.08 -0.04 0.03 - vertex 0.08 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 0.03 - vertex 0.08666667 -0.04 0.03 - vertex 0.08666667 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.04 - vertex 0.08 -0.04 0.04 - vertex 0.08 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 -0.04 0.04 - vertex 0.08666667 -0.04 0.04 - vertex 0.08666667 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.05 - vertex 0.08 -0.04 0.05 - vertex 0.08 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.05 - vertex 0.09333333 -0.04 -0.05 - vertex 0.09333333 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.04 - vertex 0.08666667 -0.04 -0.04 - vertex 0.08666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.04 - vertex 0.09333333 -0.04 -0.04 - vertex 0.09333333 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.03 - vertex 0.08666667 -0.04 -0.03 - vertex 0.08666667 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.03 - vertex 0.09333333 -0.04 -0.03 - vertex 0.09333333 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.02 - vertex 0.08666667 -0.04 -0.02 - vertex 0.08666667 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.02 - vertex 0.09333333 -0.04 -0.02 - vertex 0.09333333 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.01 - vertex 0.08666667 -0.04 -0.01 - vertex 0.08666667 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 -0.01 - vertex 0.09333333 -0.04 -0.01 - vertex 0.09333333 -0.04 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 4.698209e-19 - vertex 0.08666667 -0.04 -2.168404e-19 - vertex 0.08666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 4.698209e-19 - vertex 0.09333333 -0.04 0.01 - vertex 0.08666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.01 - vertex 0.08666667 -0.04 -2.168404e-19 - vertex 0.09333333 -0.04 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.01 - vertex 0.09333333 -0.04 0.01 - vertex 0.09333333 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.02 - vertex 0.08666667 -0.04 0.02 - vertex 0.08666667 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.02 - vertex 0.09333333 -0.04 0.02 - vertex 0.09333333 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.03 - vertex 0.08666667 -0.04 0.03 - vertex 0.08666667 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.03 - vertex 0.09333333 -0.04 0.03 - vertex 0.09333333 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.04 - vertex 0.08666667 -0.04 0.04 - vertex 0.08666667 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 -0.04 0.04 - vertex 0.09333333 -0.04 0.04 - vertex 0.09333333 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.05 - vertex 0.08666667 -0.04 0.05 - vertex 0.08666667 -0.04 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.05 - vertex 0.1 -0.04 -0.05 - vertex 0.1 -0.04 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 -0.04 - vertex 0.09333333 -0.04 -0.04 - vertex 0.09333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.04 - vertex 0.1 -0.04 -0.04 - vertex 0.1 -0.04 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 -0.03 - vertex 0.09333333 -0.04 -0.03 - vertex 0.09333333 -0.04 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.03 - vertex 0.1 -0.04 -0.03 - vertex 0.1 -0.04 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 -0.02 - vertex 0.09333333 -0.04 -0.02 - vertex 0.09333333 -0.04 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.02 - vertex 0.1 -0.04 -0.02 - vertex 0.1 -0.04 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 -0.01 - vertex 0.09333333 -0.04 -0.01 - vertex 0.09333333 -0.04 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 -0.01 - vertex 0.1 -0.04 -0.01 - vertex 0.1 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 0 - vertex 0.09333333 -0.04 4.698209e-19 - vertex 0.09333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 4.698209e-19 - vertex 0.1 -0.04 0 - vertex 0.1 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 0.01 - vertex 0.09333333 -0.04 0.01 - vertex 0.09333333 -0.04 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.01 - vertex 0.1 -0.04 0.01 - vertex 0.1 -0.04 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 0.02 - vertex 0.09333333 -0.04 0.02 - vertex 0.09333333 -0.04 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.02 - vertex 0.1 -0.04 0.02 - vertex 0.1 -0.04 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 0.03 - vertex 0.09333333 -0.04 0.03 - vertex 0.09333333 -0.04 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.03 - vertex 0.1 -0.04 0.03 - vertex 0.1 -0.04 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 0.04 - vertex 0.09333333 -0.04 0.04 - vertex 0.09333333 -0.04 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 -0.04 0.04 - vertex 0.1 -0.04 0.04 - vertex 0.1 -0.04 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 -0.04 0.05 - vertex 0.09333333 -0.04 0.05 - vertex 0.09333333 -0.04 0.04 - endloop - endfacet -endsolid minY -solid minZ - facet normal 0 0 -1 - outer loop - vertex -0.1 -0.04 -0.05 - vertex -0.1 -0.032 -0.05 - vertex -0.09333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 -0.032 -0.05 - vertex -0.09333333 -0.04 -0.05 - vertex -0.1 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 -0.032 -0.05 - vertex -0.1 -0.024 -0.05 - vertex -0.09333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 -0.024 -0.05 - vertex -0.09333333 -0.032 -0.05 - vertex -0.1 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 -0.024 -0.05 - vertex -0.1 -0.016 -0.05 - vertex -0.09333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 -0.016 -0.05 - vertex -0.09333333 -0.024 -0.05 - vertex -0.1 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 -0.016 -0.05 - vertex -0.1 -0.008 -0.05 - vertex -0.09333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 -0.008 -0.05 - vertex -0.09333333 -0.016 -0.05 - vertex -0.1 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 -0.008 -0.05 - vertex -0.1 0 -0.05 - vertex -0.09333333 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 0 -0.05 - vertex -0.09333333 -0.008 -0.05 - vertex -0.1 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 -0.04 -0.05 - vertex -0.09333333 -0.032 -0.05 - vertex -0.08666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 -0.032 -0.05 - vertex -0.08666667 -0.04 -0.05 - vertex -0.09333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 -0.032 -0.05 - vertex -0.09333333 -0.024 -0.05 - vertex -0.08666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 -0.024 -0.05 - vertex -0.08666667 -0.032 -0.05 - vertex -0.09333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 -0.024 -0.05 - vertex -0.09333333 -0.016 -0.05 - vertex -0.08666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 -0.016 -0.05 - vertex -0.08666667 -0.024 -0.05 - vertex -0.09333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 -0.016 -0.05 - vertex -0.09333333 -0.008 -0.05 - vertex -0.08666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 -0.008 -0.05 - vertex -0.08666667 -0.016 -0.05 - vertex -0.09333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 -0.008 -0.05 - vertex -0.09333333 0 -0.05 - vertex -0.08666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 0 -0.05 - vertex -0.08666667 -0.008 -0.05 - vertex -0.09333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 -0.04 -0.05 - vertex -0.08666667 -0.032 -0.05 - vertex -0.08 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 -0.032 -0.05 - vertex -0.08 -0.04 -0.05 - vertex -0.08666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 -0.032 -0.05 - vertex -0.08666667 -0.024 -0.05 - vertex -0.08 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 -0.024 -0.05 - vertex -0.08 -0.032 -0.05 - vertex -0.08666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 -0.024 -0.05 - vertex -0.08666667 -0.016 -0.05 - vertex -0.08 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 -0.016 -0.05 - vertex -0.08 -0.024 -0.05 - vertex -0.08666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 -0.016 -0.05 - vertex -0.08666667 -0.008 -0.05 - vertex -0.08 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 -0.008 -0.05 - vertex -0.08 -0.016 -0.05 - vertex -0.08666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 -0.008 -0.05 - vertex -0.08666667 0 -0.05 - vertex -0.08 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 0 -0.05 - vertex -0.08 -0.008 -0.05 - vertex -0.08666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 -0.04 -0.05 - vertex -0.08 -0.032 -0.05 - vertex -0.07333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 -0.032 -0.05 - vertex -0.07333333 -0.04 -0.05 - vertex -0.08 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 -0.032 -0.05 - vertex -0.08 -0.024 -0.05 - vertex -0.07333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 -0.024 -0.05 - vertex -0.07333333 -0.032 -0.05 - vertex -0.08 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 -0.024 -0.05 - vertex -0.08 -0.016 -0.05 - vertex -0.07333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 -0.016 -0.05 - vertex -0.07333333 -0.024 -0.05 - vertex -0.08 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 -0.016 -0.05 - vertex -0.08 -0.008 -0.05 - vertex -0.07333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 -0.008 -0.05 - vertex -0.07333333 -0.016 -0.05 - vertex -0.08 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 -0.008 -0.05 - vertex -0.08 0 -0.05 - vertex -0.07333333 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 0 -0.05 - vertex -0.07333333 -0.008 -0.05 - vertex -0.08 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 -0.04 -0.05 - vertex -0.07333333 -0.032 -0.05 - vertex -0.06666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 -0.032 -0.05 - vertex -0.06666667 -0.04 -0.05 - vertex -0.07333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 -0.032 -0.05 - vertex -0.07333333 -0.024 -0.05 - vertex -0.06666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 -0.024 -0.05 - vertex -0.06666667 -0.032 -0.05 - vertex -0.07333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 -0.024 -0.05 - vertex -0.07333333 -0.016 -0.05 - vertex -0.06666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 -0.016 -0.05 - vertex -0.06666667 -0.024 -0.05 - vertex -0.07333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 -0.016 -0.05 - vertex -0.07333333 -0.008 -0.05 - vertex -0.06666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 -0.008 -0.05 - vertex -0.06666667 -0.016 -0.05 - vertex -0.07333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 -0.008 -0.05 - vertex -0.07333333 0 -0.05 - vertex -0.06666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 0 -0.05 - vertex -0.06666667 -0.008 -0.05 - vertex -0.07333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 -0.04 -0.05 - vertex -0.06666667 -0.032 -0.05 - vertex -0.06 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 -0.032 -0.05 - vertex -0.06 -0.04 -0.05 - vertex -0.06666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 -0.032 -0.05 - vertex -0.06666667 -0.024 -0.05 - vertex -0.06 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 -0.024 -0.05 - vertex -0.06 -0.032 -0.05 - vertex -0.06666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 -0.024 -0.05 - vertex -0.06666667 -0.016 -0.05 - vertex -0.06 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 -0.016 -0.05 - vertex -0.06 -0.024 -0.05 - vertex -0.06666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 -0.016 -0.05 - vertex -0.06666667 -0.008 -0.05 - vertex -0.06 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 -0.008 -0.05 - vertex -0.06 -0.016 -0.05 - vertex -0.06666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 -0.008 -0.05 - vertex -0.06666667 0 -0.05 - vertex -0.06 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 0 -0.05 - vertex -0.06 -0.008 -0.05 - vertex -0.06666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 -0.04 -0.05 - vertex -0.06 -0.032 -0.05 - vertex -0.05333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 -0.032 -0.05 - vertex -0.05333333 -0.04 -0.05 - vertex -0.06 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 -0.032 -0.05 - vertex -0.06 -0.024 -0.05 - vertex -0.05333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 -0.024 -0.05 - vertex -0.05333333 -0.032 -0.05 - vertex -0.06 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 -0.024 -0.05 - vertex -0.06 -0.016 -0.05 - vertex -0.05333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 -0.016 -0.05 - vertex -0.05333333 -0.024 -0.05 - vertex -0.06 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 -0.016 -0.05 - vertex -0.06 -0.008 -0.05 - vertex -0.05333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 -0.008 -0.05 - vertex -0.05333333 -0.016 -0.05 - vertex -0.06 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 -0.008 -0.05 - vertex -0.06 0 -0.05 - vertex -0.05333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.05333333 -0.008 -0.05 - vertex -0.06 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 -0.04 -0.05 - vertex -0.05333333 -0.032 -0.05 - vertex -0.04666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 -0.032 -0.05 - vertex -0.04666667 -0.04 -0.05 - vertex -0.05333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 -0.032 -0.05 - vertex -0.05333333 -0.024 -0.05 - vertex -0.04666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 -0.024 -0.05 - vertex -0.04666667 -0.032 -0.05 - vertex -0.05333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 -0.024 -0.05 - vertex -0.05333333 -0.016 -0.05 - vertex -0.04666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 -0.016 -0.05 - vertex -0.04666667 -0.024 -0.05 - vertex -0.05333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 -0.016 -0.05 - vertex -0.05333333 -0.008 -0.05 - vertex -0.04666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 -0.008 -0.05 - vertex -0.04666667 -0.016 -0.05 - vertex -0.05333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 -0.008 -0.05 - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.04666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 0 -0.05 - vertex -0.04666667 -0.008 -0.05 - vertex -0.05333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 -0.04 -0.05 - vertex -0.04666667 -0.032 -0.05 - vertex -0.04 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 -0.032 -0.05 - vertex -0.04 -0.04 -0.05 - vertex -0.04666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 -0.032 -0.05 - vertex -0.04666667 -0.024 -0.05 - vertex -0.04 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 -0.024 -0.05 - vertex -0.04 -0.032 -0.05 - vertex -0.04666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 -0.024 -0.05 - vertex -0.04666667 -0.016 -0.05 - vertex -0.04 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 -0.016 -0.05 - vertex -0.04 -0.024 -0.05 - vertex -0.04666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 -0.016 -0.05 - vertex -0.04666667 -0.008 -0.05 - vertex -0.04 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 -0.008 -0.05 - vertex -0.04 -0.016 -0.05 - vertex -0.04666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 -0.008 -0.05 - vertex -0.04666667 0 -0.05 - vertex -0.04 5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 5.782412e-19 -0.05 - vertex -0.04 -0.008 -0.05 - vertex -0.04666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 -0.04 -0.05 - vertex -0.04 -0.032 -0.05 - vertex -0.03333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 -0.032 -0.05 - vertex -0.03333333 -0.04 -0.05 - vertex -0.04 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 -0.032 -0.05 - vertex -0.04 -0.024 -0.05 - vertex -0.03333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 -0.024 -0.05 - vertex -0.03333333 -0.032 -0.05 - vertex -0.04 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 -0.024 -0.05 - vertex -0.04 -0.016 -0.05 - vertex -0.03333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 -0.016 -0.05 - vertex -0.03333333 -0.024 -0.05 - vertex -0.04 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 -0.016 -0.05 - vertex -0.04 -0.008 -0.05 - vertex -0.03333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 -0.008 -0.05 - vertex -0.03333333 -0.016 -0.05 - vertex -0.04 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.03333333 -0.008 -0.05 - vertex -0.04 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 -0.008 -0.05 - vertex -0.04 5.782412e-19 -0.05 - vertex -0.03333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 -0.04 -0.05 - vertex -0.03333333 -0.032 -0.05 - vertex -0.02666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 -0.032 -0.05 - vertex -0.02666667 -0.04 -0.05 - vertex -0.03333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 -0.032 -0.05 - vertex -0.03333333 -0.024 -0.05 - vertex -0.02666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 -0.024 -0.05 - vertex -0.02666667 -0.032 -0.05 - vertex -0.03333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 -0.024 -0.05 - vertex -0.03333333 -0.016 -0.05 - vertex -0.02666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 -0.016 -0.05 - vertex -0.02666667 -0.024 -0.05 - vertex -0.03333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 -0.016 -0.05 - vertex -0.03333333 -0.008 -0.05 - vertex -0.02666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 -0.008 -0.05 - vertex -0.02666667 -0.016 -0.05 - vertex -0.03333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 -0.008 -0.05 - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.02666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 0 -0.05 - vertex -0.02666667 -0.008 -0.05 - vertex -0.03333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 -0.04 -0.05 - vertex -0.02666667 -0.032 -0.05 - vertex -0.02 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 -0.032 -0.05 - vertex -0.02 -0.04 -0.05 - vertex -0.02666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 -0.032 -0.05 - vertex -0.02666667 -0.024 -0.05 - vertex -0.02 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 -0.024 -0.05 - vertex -0.02 -0.032 -0.05 - vertex -0.02666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 -0.024 -0.05 - vertex -0.02666667 -0.016 -0.05 - vertex -0.02 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 -0.016 -0.05 - vertex -0.02 -0.024 -0.05 - vertex -0.02666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 -0.016 -0.05 - vertex -0.02666667 -0.008 -0.05 - vertex -0.02 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 -0.008 -0.05 - vertex -0.02 -0.016 -0.05 - vertex -0.02666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 -0.008 -0.05 - vertex -0.02666667 0 -0.05 - vertex -0.02 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 0 -0.05 - vertex -0.02 -0.008 -0.05 - vertex -0.02666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 -0.04 -0.05 - vertex -0.02 -0.032 -0.05 - vertex -0.01333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 -0.032 -0.05 - vertex -0.01333333 -0.04 -0.05 - vertex -0.02 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 -0.032 -0.05 - vertex -0.02 -0.024 -0.05 - vertex -0.01333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 -0.024 -0.05 - vertex -0.01333333 -0.032 -0.05 - vertex -0.02 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 -0.024 -0.05 - vertex -0.02 -0.016 -0.05 - vertex -0.01333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 -0.016 -0.05 - vertex -0.01333333 -0.024 -0.05 - vertex -0.02 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 -0.016 -0.05 - vertex -0.02 -0.008 -0.05 - vertex -0.01333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 -0.008 -0.05 - vertex -0.01333333 -0.016 -0.05 - vertex -0.02 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 -0.008 -0.05 - vertex -0.02 0 -0.05 - vertex -0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 0 -0.05 - vertex -0.01333333 -0.008 -0.05 - vertex -0.02 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.04 -0.05 - vertex -0.01333333 -0.032 -0.05 - vertex -0.006666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.032 -0.05 - vertex -0.006666667 -0.04 -0.05 - vertex -0.01333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.032 -0.05 - vertex -0.01333333 -0.024 -0.05 - vertex -0.006666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.024 -0.05 - vertex -0.006666667 -0.032 -0.05 - vertex -0.01333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.024 -0.05 - vertex -0.01333333 -0.016 -0.05 - vertex -0.006666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.016 -0.05 - vertex -0.006666667 -0.024 -0.05 - vertex -0.01333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.016 -0.05 - vertex -0.01333333 -0.008 -0.05 - vertex -0.006666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.008 -0.05 - vertex -0.006666667 -0.016 -0.05 - vertex -0.01333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.008 -0.05 - vertex -0.01333333 0 -0.05 - vertex -0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0 -0.05 - vertex -0.006666667 -0.008 -0.05 - vertex -0.01333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.04 -0.05 - vertex -0.006666667 -0.032 -0.05 - vertex 0 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.032 -0.05 - vertex 0 -0.04 -0.05 - vertex -0.006666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.032 -0.05 - vertex -0.006666667 -0.024 -0.05 - vertex 0 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.024 -0.05 - vertex 0 -0.032 -0.05 - vertex -0.006666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.024 -0.05 - vertex -0.006666667 -0.016 -0.05 - vertex 0 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.016 -0.05 - vertex 0 -0.024 -0.05 - vertex -0.006666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.016 -0.05 - vertex -0.006666667 -0.008 -0.05 - vertex 0 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.008 -0.05 - vertex 0 -0.016 -0.05 - vertex -0.006666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.008 -0.05 - vertex -0.006666667 0 -0.05 - vertex 0 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0 -0.05 - vertex 0 -0.008 -0.05 - vertex -0.006666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.04 -0.05 - vertex 0 -0.032 -0.05 - vertex 0.006666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.032 -0.05 - vertex 0.006666667 -0.04 -0.05 - vertex 0 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.032 -0.05 - vertex 0 -0.024 -0.05 - vertex 0.006666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.024 -0.05 - vertex 0.006666667 -0.032 -0.05 - vertex 0 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.024 -0.05 - vertex 0 -0.016 -0.05 - vertex 0.006666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.016 -0.05 - vertex 0.006666667 -0.024 -0.05 - vertex 0 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.016 -0.05 - vertex 0 -0.008 -0.05 - vertex 0.006666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.008 -0.05 - vertex 0.006666667 -0.016 -0.05 - vertex 0 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.008 -0.05 - vertex 0 0 -0.05 - vertex 0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0 -0.05 - vertex 0.006666667 -0.008 -0.05 - vertex 0 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.04 -0.05 - vertex 0.006666667 -0.032 -0.05 - vertex 0.01333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.032 -0.05 - vertex 0.01333333 -0.04 -0.05 - vertex 0.006666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.032 -0.05 - vertex 0.006666667 -0.024 -0.05 - vertex 0.01333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.024 -0.05 - vertex 0.01333333 -0.032 -0.05 - vertex 0.006666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.024 -0.05 - vertex 0.006666667 -0.016 -0.05 - vertex 0.01333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.016 -0.05 - vertex 0.01333333 -0.024 -0.05 - vertex 0.006666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.016 -0.05 - vertex 0.006666667 -0.008 -0.05 - vertex 0.01333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.008 -0.05 - vertex 0.01333333 -0.016 -0.05 - vertex 0.006666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.008 -0.05 - vertex 0.006666667 0 -0.05 - vertex 0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0 -0.05 - vertex 0.01333333 -0.008 -0.05 - vertex 0.006666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 -0.04 -0.05 - vertex 0.01333333 -0.032 -0.05 - vertex 0.02 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 -0.032 -0.05 - vertex 0.02 -0.04 -0.05 - vertex 0.01333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 -0.032 -0.05 - vertex 0.01333333 -0.024 -0.05 - vertex 0.02 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 -0.024 -0.05 - vertex 0.02 -0.032 -0.05 - vertex 0.01333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 -0.024 -0.05 - vertex 0.01333333 -0.016 -0.05 - vertex 0.02 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 -0.016 -0.05 - vertex 0.02 -0.024 -0.05 - vertex 0.01333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 -0.016 -0.05 - vertex 0.01333333 -0.008 -0.05 - vertex 0.02 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 -0.008 -0.05 - vertex 0.02 -0.016 -0.05 - vertex 0.01333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 -0.008 -0.05 - vertex 0.01333333 0 -0.05 - vertex 0.02 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 0 -0.05 - vertex 0.02 -0.008 -0.05 - vertex 0.01333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 -0.04 -0.05 - vertex 0.02 -0.032 -0.05 - vertex 0.02666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 -0.032 -0.05 - vertex 0.02666667 -0.04 -0.05 - vertex 0.02 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 -0.032 -0.05 - vertex 0.02 -0.024 -0.05 - vertex 0.02666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 -0.024 -0.05 - vertex 0.02666667 -0.032 -0.05 - vertex 0.02 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 -0.024 -0.05 - vertex 0.02 -0.016 -0.05 - vertex 0.02666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 -0.016 -0.05 - vertex 0.02666667 -0.024 -0.05 - vertex 0.02 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 -0.016 -0.05 - vertex 0.02 -0.008 -0.05 - vertex 0.02666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 -0.008 -0.05 - vertex 0.02666667 -0.016 -0.05 - vertex 0.02 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 -0.008 -0.05 - vertex 0.02 0 -0.05 - vertex 0.02666667 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 0 -0.05 - vertex 0.02666667 -0.008 -0.05 - vertex 0.02 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 -0.04 -0.05 - vertex 0.02666667 -0.032 -0.05 - vertex 0.03333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 -0.032 -0.05 - vertex 0.03333333 -0.04 -0.05 - vertex 0.02666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 -0.032 -0.05 - vertex 0.02666667 -0.024 -0.05 - vertex 0.03333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 -0.024 -0.05 - vertex 0.03333333 -0.032 -0.05 - vertex 0.02666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 -0.024 -0.05 - vertex 0.02666667 -0.016 -0.05 - vertex 0.03333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 -0.016 -0.05 - vertex 0.03333333 -0.024 -0.05 - vertex 0.02666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 -0.016 -0.05 - vertex 0.02666667 -0.008 -0.05 - vertex 0.03333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 -0.008 -0.05 - vertex 0.03333333 -0.016 -0.05 - vertex 0.02666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 -0.008 -0.05 - vertex 0.02666667 0 -0.05 - vertex 0.03333333 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 0 -0.05 - vertex 0.03333333 -0.008 -0.05 - vertex 0.02666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 -0.04 -0.05 - vertex 0.03333333 -0.032 -0.05 - vertex 0.04 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 -0.032 -0.05 - vertex 0.04 -0.04 -0.05 - vertex 0.03333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 -0.032 -0.05 - vertex 0.03333333 -0.024 -0.05 - vertex 0.04 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 -0.024 -0.05 - vertex 0.04 -0.032 -0.05 - vertex 0.03333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 -0.024 -0.05 - vertex 0.03333333 -0.016 -0.05 - vertex 0.04 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 -0.016 -0.05 - vertex 0.04 -0.024 -0.05 - vertex 0.03333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 -0.016 -0.05 - vertex 0.03333333 -0.008 -0.05 - vertex 0.04 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 -0.008 -0.05 - vertex 0.04 -0.016 -0.05 - vertex 0.03333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 -0.008 -0.05 - vertex 0.03333333 0 -0.05 - vertex 0.04 -2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.04 -0.008 -0.05 - vertex 0.03333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 -0.04 -0.05 - vertex 0.04 -0.032 -0.05 - vertex 0.04666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 -0.032 -0.05 - vertex 0.04666667 -0.04 -0.05 - vertex 0.04 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 -0.032 -0.05 - vertex 0.04 -0.024 -0.05 - vertex 0.04666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 -0.024 -0.05 - vertex 0.04666667 -0.032 -0.05 - vertex 0.04 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 -0.024 -0.05 - vertex 0.04 -0.016 -0.05 - vertex 0.04666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 -0.016 -0.05 - vertex 0.04666667 -0.024 -0.05 - vertex 0.04 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 -0.016 -0.05 - vertex 0.04 -0.008 -0.05 - vertex 0.04666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 -0.008 -0.05 - vertex 0.04666667 -0.016 -0.05 - vertex 0.04 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 -0.008 -0.05 - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.04666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.04666667 -0.008 -0.05 - vertex 0.04 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 -0.04 -0.05 - vertex 0.04666667 -0.032 -0.05 - vertex 0.05333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 -0.032 -0.05 - vertex 0.05333333 -0.04 -0.05 - vertex 0.04666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 -0.032 -0.05 - vertex 0.04666667 -0.024 -0.05 - vertex 0.05333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 -0.024 -0.05 - vertex 0.05333333 -0.032 -0.05 - vertex 0.04666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 -0.024 -0.05 - vertex 0.04666667 -0.016 -0.05 - vertex 0.05333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 -0.016 -0.05 - vertex 0.05333333 -0.024 -0.05 - vertex 0.04666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 -0.016 -0.05 - vertex 0.04666667 -0.008 -0.05 - vertex 0.05333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 -0.008 -0.05 - vertex 0.05333333 -0.016 -0.05 - vertex 0.04666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 -0.008 -0.05 - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.05333333 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 0 -0.05 - vertex 0.05333333 -0.008 -0.05 - vertex 0.04666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 -0.04 -0.05 - vertex 0.05333333 -0.032 -0.05 - vertex 0.06 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 -0.032 -0.05 - vertex 0.06 -0.04 -0.05 - vertex 0.05333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 -0.032 -0.05 - vertex 0.05333333 -0.024 -0.05 - vertex 0.06 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 -0.024 -0.05 - vertex 0.06 -0.032 -0.05 - vertex 0.05333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 -0.024 -0.05 - vertex 0.05333333 -0.016 -0.05 - vertex 0.06 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 -0.016 -0.05 - vertex 0.06 -0.024 -0.05 - vertex 0.05333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 -0.016 -0.05 - vertex 0.05333333 -0.008 -0.05 - vertex 0.06 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 -0.008 -0.05 - vertex 0.06 -0.016 -0.05 - vertex 0.05333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 -0.008 -0.05 - vertex 0.05333333 0 -0.05 - vertex 0.06 -2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.06 -0.008 -0.05 - vertex 0.05333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 -0.04 -0.05 - vertex 0.06 -0.032 -0.05 - vertex 0.06666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 -0.032 -0.05 - vertex 0.06666667 -0.04 -0.05 - vertex 0.06 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 -0.032 -0.05 - vertex 0.06 -0.024 -0.05 - vertex 0.06666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 -0.024 -0.05 - vertex 0.06666667 -0.032 -0.05 - vertex 0.06 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 -0.024 -0.05 - vertex 0.06 -0.016 -0.05 - vertex 0.06666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 -0.016 -0.05 - vertex 0.06666667 -0.024 -0.05 - vertex 0.06 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 -0.016 -0.05 - vertex 0.06 -0.008 -0.05 - vertex 0.06666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 -0.008 -0.05 - vertex 0.06666667 -0.016 -0.05 - vertex 0.06 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 -0.008 -0.05 - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.06666667 -4.336809e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.06666667 -0.008 -0.05 - vertex 0.06 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 -0.04 -0.05 - vertex 0.06666667 -0.032 -0.05 - vertex 0.07333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 -0.032 -0.05 - vertex 0.07333333 -0.04 -0.05 - vertex 0.06666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 -0.032 -0.05 - vertex 0.06666667 -0.024 -0.05 - vertex 0.07333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 -0.024 -0.05 - vertex 0.07333333 -0.032 -0.05 - vertex 0.06666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 -0.024 -0.05 - vertex 0.06666667 -0.016 -0.05 - vertex 0.07333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 -0.016 -0.05 - vertex 0.07333333 -0.024 -0.05 - vertex 0.06666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 -0.016 -0.05 - vertex 0.06666667 -0.008 -0.05 - vertex 0.07333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 -0.008 -0.05 - vertex 0.07333333 -0.016 -0.05 - vertex 0.06666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 -0.008 -0.05 - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.07333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.07333333 -0.008 -0.05 - vertex 0.06666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 -0.04 -0.05 - vertex 0.07333333 -0.032 -0.05 - vertex 0.08 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 -0.032 -0.05 - vertex 0.08 -0.04 -0.05 - vertex 0.07333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 -0.032 -0.05 - vertex 0.07333333 -0.024 -0.05 - vertex 0.08 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 -0.024 -0.05 - vertex 0.08 -0.032 -0.05 - vertex 0.07333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 -0.024 -0.05 - vertex 0.07333333 -0.016 -0.05 - vertex 0.08 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 -0.016 -0.05 - vertex 0.08 -0.024 -0.05 - vertex 0.07333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 -0.016 -0.05 - vertex 0.07333333 -0.008 -0.05 - vertex 0.08 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 -0.008 -0.05 - vertex 0.08 -0.016 -0.05 - vertex 0.07333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 -0.008 -0.05 - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.08 4.336809e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 4.336809e-19 -0.05 - vertex 0.08 -0.008 -0.05 - vertex 0.07333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 -0.04 -0.05 - vertex 0.08 -0.032 -0.05 - vertex 0.08666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 -0.032 -0.05 - vertex 0.08666667 -0.04 -0.05 - vertex 0.08 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 -0.032 -0.05 - vertex 0.08 -0.024 -0.05 - vertex 0.08666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 -0.024 -0.05 - vertex 0.08666667 -0.032 -0.05 - vertex 0.08 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 -0.024 -0.05 - vertex 0.08 -0.016 -0.05 - vertex 0.08666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 -0.016 -0.05 - vertex 0.08666667 -0.024 -0.05 - vertex 0.08 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 -0.016 -0.05 - vertex 0.08 -0.008 -0.05 - vertex 0.08666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 -0.008 -0.05 - vertex 0.08666667 -0.016 -0.05 - vertex 0.08 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 -0.008 -0.05 - vertex 0.08 4.336809e-19 -0.05 - vertex 0.08666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.08666667 -0.008 -0.05 - vertex 0.08 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 -0.04 -0.05 - vertex 0.08666667 -0.032 -0.05 - vertex 0.09333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 -0.032 -0.05 - vertex 0.09333333 -0.04 -0.05 - vertex 0.08666667 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 -0.032 -0.05 - vertex 0.08666667 -0.024 -0.05 - vertex 0.09333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 -0.024 -0.05 - vertex 0.09333333 -0.032 -0.05 - vertex 0.08666667 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 -0.024 -0.05 - vertex 0.08666667 -0.016 -0.05 - vertex 0.09333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 -0.016 -0.05 - vertex 0.09333333 -0.024 -0.05 - vertex 0.08666667 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 -0.016 -0.05 - vertex 0.08666667 -0.008 -0.05 - vertex 0.09333333 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 -0.008 -0.05 - vertex 0.09333333 -0.016 -0.05 - vertex 0.08666667 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 -0.008 -0.05 - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.09333333 1.445603e-19 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.09333333 -0.008 -0.05 - vertex 0.08666667 -0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 -0.04 -0.05 - vertex 0.09333333 -0.032 -0.05 - vertex 0.1 -0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 -0.032 -0.05 - vertex 0.1 -0.04 -0.05 - vertex 0.09333333 -0.04 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 -0.032 -0.05 - vertex 0.09333333 -0.024 -0.05 - vertex 0.1 -0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 -0.024 -0.05 - vertex 0.1 -0.032 -0.05 - vertex 0.09333333 -0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 -0.024 -0.05 - vertex 0.09333333 -0.016 -0.05 - vertex 0.1 -0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 -0.016 -0.05 - vertex 0.1 -0.024 -0.05 - vertex 0.09333333 -0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 -0.016 -0.05 - vertex 0.09333333 -0.008 -0.05 - vertex 0.1 -0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 -0.008 -0.05 - vertex 0.1 -0.016 -0.05 - vertex 0.09333333 -0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 -0.008 -0.05 - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.1 0 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 0 -0.05 - vertex 0.1 -0.008 -0.05 - vertex 0.09333333 -0.008 -0.05 - endloop - endfacet -endsolid minZ -solid maxZ - facet normal 0 0 1 - outer loop - vertex -0.1 -0.04 0.05 - vertex -0.09333333 -0.04 0.05 - vertex -0.09333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.032 0.05 - vertex -0.1 -0.032 0.05 - vertex -0.1 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 -0.032 0.05 - vertex -0.09333333 -0.032 0.05 - vertex -0.09333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.024 0.05 - vertex -0.1 -0.024 0.05 - vertex -0.1 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 -0.024 0.05 - vertex -0.09333333 -0.024 0.05 - vertex -0.09333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.016 0.05 - vertex -0.1 -0.016 0.05 - vertex -0.1 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 -0.016 0.05 - vertex -0.09333333 -0.016 0.05 - vertex -0.09333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.008 0.05 - vertex -0.1 -0.008 0.05 - vertex -0.1 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 -0.008 0.05 - vertex -0.09333333 -0.008 0.05 - vertex -0.09333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0 0.05 - vertex -0.1 0 0.05 - vertex -0.1 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.04 0.05 - vertex -0.08666667 -0.04 0.05 - vertex -0.08666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.032 0.05 - vertex -0.09333333 -0.032 0.05 - vertex -0.09333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.032 0.05 - vertex -0.08666667 -0.032 0.05 - vertex -0.08666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.024 0.05 - vertex -0.09333333 -0.024 0.05 - vertex -0.09333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.024 0.05 - vertex -0.08666667 -0.024 0.05 - vertex -0.08666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.016 0.05 - vertex -0.09333333 -0.016 0.05 - vertex -0.09333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.016 0.05 - vertex -0.08666667 -0.016 0.05 - vertex -0.08666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.008 0.05 - vertex -0.09333333 -0.008 0.05 - vertex -0.09333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 -0.008 0.05 - vertex -0.08666667 -0.008 0.05 - vertex -0.08666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0 0.05 - vertex -0.09333333 0 0.05 - vertex -0.09333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.04 0.05 - vertex -0.08 -0.04 0.05 - vertex -0.08 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.032 0.05 - vertex -0.08666667 -0.032 0.05 - vertex -0.08666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.032 0.05 - vertex -0.08 -0.032 0.05 - vertex -0.08 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.024 0.05 - vertex -0.08666667 -0.024 0.05 - vertex -0.08666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.024 0.05 - vertex -0.08 -0.024 0.05 - vertex -0.08 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.016 0.05 - vertex -0.08666667 -0.016 0.05 - vertex -0.08666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.016 0.05 - vertex -0.08 -0.016 0.05 - vertex -0.08 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.008 0.05 - vertex -0.08666667 -0.008 0.05 - vertex -0.08666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 -0.008 0.05 - vertex -0.08 -0.008 0.05 - vertex -0.08 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0 0.05 - vertex -0.08666667 0 0.05 - vertex -0.08666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.04 0.05 - vertex -0.07333333 -0.04 0.05 - vertex -0.07333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.032 0.05 - vertex -0.08 -0.032 0.05 - vertex -0.08 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.032 0.05 - vertex -0.07333333 -0.032 0.05 - vertex -0.07333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.024 0.05 - vertex -0.08 -0.024 0.05 - vertex -0.08 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.024 0.05 - vertex -0.07333333 -0.024 0.05 - vertex -0.07333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.016 0.05 - vertex -0.08 -0.016 0.05 - vertex -0.08 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.016 0.05 - vertex -0.07333333 -0.016 0.05 - vertex -0.07333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.008 0.05 - vertex -0.08 -0.008 0.05 - vertex -0.08 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 -0.008 0.05 - vertex -0.07333333 -0.008 0.05 - vertex -0.07333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0 0.05 - vertex -0.08 0 0.05 - vertex -0.08 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.04 0.05 - vertex -0.06666667 -0.04 0.05 - vertex -0.06666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.032 0.05 - vertex -0.07333333 -0.032 0.05 - vertex -0.07333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.032 0.05 - vertex -0.06666667 -0.032 0.05 - vertex -0.06666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.024 0.05 - vertex -0.07333333 -0.024 0.05 - vertex -0.07333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.024 0.05 - vertex -0.06666667 -0.024 0.05 - vertex -0.06666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.016 0.05 - vertex -0.07333333 -0.016 0.05 - vertex -0.07333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.016 0.05 - vertex -0.06666667 -0.016 0.05 - vertex -0.06666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.008 0.05 - vertex -0.07333333 -0.008 0.05 - vertex -0.07333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 -0.008 0.05 - vertex -0.06666667 -0.008 0.05 - vertex -0.06666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0 0.05 - vertex -0.07333333 0 0.05 - vertex -0.07333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.04 0.05 - vertex -0.06 -0.04 0.05 - vertex -0.06 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.032 0.05 - vertex -0.06666667 -0.032 0.05 - vertex -0.06666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.032 0.05 - vertex -0.06 -0.032 0.05 - vertex -0.06 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.024 0.05 - vertex -0.06666667 -0.024 0.05 - vertex -0.06666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.024 0.05 - vertex -0.06 -0.024 0.05 - vertex -0.06 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.016 0.05 - vertex -0.06666667 -0.016 0.05 - vertex -0.06666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.016 0.05 - vertex -0.06 -0.016 0.05 - vertex -0.06 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.008 0.05 - vertex -0.06666667 -0.008 0.05 - vertex -0.06666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 -0.008 0.05 - vertex -0.06 -0.008 0.05 - vertex -0.06 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0 0.05 - vertex -0.06666667 0 0.05 - vertex -0.06666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.04 0.05 - vertex -0.05333333 -0.04 0.05 - vertex -0.05333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.032 0.05 - vertex -0.06 -0.032 0.05 - vertex -0.06 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.032 0.05 - vertex -0.05333333 -0.032 0.05 - vertex -0.05333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.024 0.05 - vertex -0.06 -0.024 0.05 - vertex -0.06 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.024 0.05 - vertex -0.05333333 -0.024 0.05 - vertex -0.05333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.016 0.05 - vertex -0.06 -0.016 0.05 - vertex -0.06 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.016 0.05 - vertex -0.05333333 -0.016 0.05 - vertex -0.05333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.008 0.05 - vertex -0.06 -0.008 0.05 - vertex -0.06 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 -0.008 0.05 - vertex -0.05333333 -0.008 0.05 - vertex -0.05333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.06 0 0.05 - vertex -0.06 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.04 0.05 - vertex -0.04666667 -0.04 0.05 - vertex -0.04666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.032 0.05 - vertex -0.05333333 -0.032 0.05 - vertex -0.05333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.032 0.05 - vertex -0.04666667 -0.032 0.05 - vertex -0.04666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.024 0.05 - vertex -0.05333333 -0.024 0.05 - vertex -0.05333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.024 0.05 - vertex -0.04666667 -0.024 0.05 - vertex -0.04666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.016 0.05 - vertex -0.05333333 -0.016 0.05 - vertex -0.05333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.016 0.05 - vertex -0.04666667 -0.016 0.05 - vertex -0.04666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.008 0.05 - vertex -0.05333333 -0.008 0.05 - vertex -0.05333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 -0.008 0.05 - vertex -0.04666667 -0.008 0.05 - vertex -0.04666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0 0.05 - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.05333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.04 0.05 - vertex -0.04 -0.04 0.05 - vertex -0.04 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.032 0.05 - vertex -0.04666667 -0.032 0.05 - vertex -0.04666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.032 0.05 - vertex -0.04 -0.032 0.05 - vertex -0.04 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.024 0.05 - vertex -0.04666667 -0.024 0.05 - vertex -0.04666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.024 0.05 - vertex -0.04 -0.024 0.05 - vertex -0.04 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.016 0.05 - vertex -0.04666667 -0.016 0.05 - vertex -0.04666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.016 0.05 - vertex -0.04 -0.016 0.05 - vertex -0.04 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.008 0.05 - vertex -0.04666667 -0.008 0.05 - vertex -0.04666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 -0.008 0.05 - vertex -0.04 -0.008 0.05 - vertex -0.04 5.782412e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 5.782412e-19 0.05 - vertex -0.04666667 0 0.05 - vertex -0.04666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.04 0.05 - vertex -0.03333333 -0.04 0.05 - vertex -0.03333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.032 0.05 - vertex -0.04 -0.032 0.05 - vertex -0.04 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.032 0.05 - vertex -0.03333333 -0.032 0.05 - vertex -0.03333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.024 0.05 - vertex -0.04 -0.024 0.05 - vertex -0.04 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.024 0.05 - vertex -0.03333333 -0.024 0.05 - vertex -0.03333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.016 0.05 - vertex -0.04 -0.016 0.05 - vertex -0.04 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.016 0.05 - vertex -0.03333333 -0.016 0.05 - vertex -0.03333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.008 0.05 - vertex -0.04 -0.008 0.05 - vertex -0.04 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.04 5.782412e-19 0.05 - vertex -0.04 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 -0.008 0.05 - vertex -0.03333333 -0.008 0.05 - vertex -0.03333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.04 0.05 - vertex -0.02666667 -0.04 0.05 - vertex -0.02666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.032 0.05 - vertex -0.03333333 -0.032 0.05 - vertex -0.03333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.032 0.05 - vertex -0.02666667 -0.032 0.05 - vertex -0.02666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.024 0.05 - vertex -0.03333333 -0.024 0.05 - vertex -0.03333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.024 0.05 - vertex -0.02666667 -0.024 0.05 - vertex -0.02666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.016 0.05 - vertex -0.03333333 -0.016 0.05 - vertex -0.03333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.016 0.05 - vertex -0.02666667 -0.016 0.05 - vertex -0.02666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.008 0.05 - vertex -0.03333333 -0.008 0.05 - vertex -0.03333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 -0.008 0.05 - vertex -0.02666667 -0.008 0.05 - vertex -0.02666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0 0.05 - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.03333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.04 0.05 - vertex -0.02 -0.04 0.05 - vertex -0.02 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.032 0.05 - vertex -0.02666667 -0.032 0.05 - vertex -0.02666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.032 0.05 - vertex -0.02 -0.032 0.05 - vertex -0.02 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.024 0.05 - vertex -0.02666667 -0.024 0.05 - vertex -0.02666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.024 0.05 - vertex -0.02 -0.024 0.05 - vertex -0.02 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.016 0.05 - vertex -0.02666667 -0.016 0.05 - vertex -0.02666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.016 0.05 - vertex -0.02 -0.016 0.05 - vertex -0.02 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.008 0.05 - vertex -0.02666667 -0.008 0.05 - vertex -0.02666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 -0.008 0.05 - vertex -0.02 -0.008 0.05 - vertex -0.02 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0 0.05 - vertex -0.02666667 0 0.05 - vertex -0.02666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.04 0.05 - vertex -0.01333333 -0.04 0.05 - vertex -0.01333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.032 0.05 - vertex -0.02 -0.032 0.05 - vertex -0.02 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.032 0.05 - vertex -0.01333333 -0.032 0.05 - vertex -0.01333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.024 0.05 - vertex -0.02 -0.024 0.05 - vertex -0.02 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.024 0.05 - vertex -0.01333333 -0.024 0.05 - vertex -0.01333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.016 0.05 - vertex -0.02 -0.016 0.05 - vertex -0.02 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.016 0.05 - vertex -0.01333333 -0.016 0.05 - vertex -0.01333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.008 0.05 - vertex -0.02 -0.008 0.05 - vertex -0.02 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 -0.008 0.05 - vertex -0.01333333 -0.008 0.05 - vertex -0.01333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0 0.05 - vertex -0.02 0 0.05 - vertex -0.02 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.04 0.05 - vertex -0.006666667 -0.04 0.05 - vertex -0.006666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.032 0.05 - vertex -0.01333333 -0.032 0.05 - vertex -0.01333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.032 0.05 - vertex -0.006666667 -0.032 0.05 - vertex -0.006666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.024 0.05 - vertex -0.01333333 -0.024 0.05 - vertex -0.01333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.024 0.05 - vertex -0.006666667 -0.024 0.05 - vertex -0.006666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.016 0.05 - vertex -0.01333333 -0.016 0.05 - vertex -0.01333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.016 0.05 - vertex -0.006666667 -0.016 0.05 - vertex -0.006666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.008 0.05 - vertex -0.01333333 -0.008 0.05 - vertex -0.01333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.008 0.05 - vertex -0.006666667 -0.008 0.05 - vertex -0.006666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0 0.05 - vertex -0.01333333 0 0.05 - vertex -0.01333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.04 0.05 - vertex 0 -0.04 0.05 - vertex 0 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.032 0.05 - vertex -0.006666667 -0.032 0.05 - vertex -0.006666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.032 0.05 - vertex 0 -0.032 0.05 - vertex 0 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.024 0.05 - vertex -0.006666667 -0.024 0.05 - vertex -0.006666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.024 0.05 - vertex 0 -0.024 0.05 - vertex 0 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.016 0.05 - vertex -0.006666667 -0.016 0.05 - vertex -0.006666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.016 0.05 - vertex 0 -0.016 0.05 - vertex 0 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.008 0.05 - vertex -0.006666667 -0.008 0.05 - vertex -0.006666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.008 0.05 - vertex 0 -0.008 0.05 - vertex 0 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0 0.05 - vertex -0.006666667 0 0.05 - vertex -0.006666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.04 0.05 - vertex 0.006666667 -0.04 0.05 - vertex 0.006666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.032 0.05 - vertex 0 -0.032 0.05 - vertex 0 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.032 0.05 - vertex 0.006666667 -0.032 0.05 - vertex 0.006666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.024 0.05 - vertex 0 -0.024 0.05 - vertex 0 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.024 0.05 - vertex 0.006666667 -0.024 0.05 - vertex 0.006666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.016 0.05 - vertex 0 -0.016 0.05 - vertex 0 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.016 0.05 - vertex 0.006666667 -0.016 0.05 - vertex 0.006666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.008 0.05 - vertex 0 -0.008 0.05 - vertex 0 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.008 0.05 - vertex 0.006666667 -0.008 0.05 - vertex 0.006666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0 0.05 - vertex 0 0 0.05 - vertex 0 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.04 0.05 - vertex 0.01333333 -0.04 0.05 - vertex 0.01333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.032 0.05 - vertex 0.006666667 -0.032 0.05 - vertex 0.006666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.032 0.05 - vertex 0.01333333 -0.032 0.05 - vertex 0.01333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.024 0.05 - vertex 0.006666667 -0.024 0.05 - vertex 0.006666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.024 0.05 - vertex 0.01333333 -0.024 0.05 - vertex 0.01333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.016 0.05 - vertex 0.006666667 -0.016 0.05 - vertex 0.006666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.016 0.05 - vertex 0.01333333 -0.016 0.05 - vertex 0.01333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.008 0.05 - vertex 0.006666667 -0.008 0.05 - vertex 0.006666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.008 0.05 - vertex 0.01333333 -0.008 0.05 - vertex 0.01333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0 0.05 - vertex 0.006666667 0 0.05 - vertex 0.006666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.04 0.05 - vertex 0.02 -0.04 0.05 - vertex 0.02 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.032 0.05 - vertex 0.01333333 -0.032 0.05 - vertex 0.01333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.032 0.05 - vertex 0.02 -0.032 0.05 - vertex 0.02 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.024 0.05 - vertex 0.01333333 -0.024 0.05 - vertex 0.01333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.024 0.05 - vertex 0.02 -0.024 0.05 - vertex 0.02 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.016 0.05 - vertex 0.01333333 -0.016 0.05 - vertex 0.01333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.016 0.05 - vertex 0.02 -0.016 0.05 - vertex 0.02 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.008 0.05 - vertex 0.01333333 -0.008 0.05 - vertex 0.01333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.008 0.05 - vertex 0.02 -0.008 0.05 - vertex 0.02 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0 0.05 - vertex 0.01333333 0 0.05 - vertex 0.01333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.04 0.05 - vertex 0.02666667 -0.04 0.05 - vertex 0.02666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.032 0.05 - vertex 0.02 -0.032 0.05 - vertex 0.02 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.032 0.05 - vertex 0.02666667 -0.032 0.05 - vertex 0.02666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.024 0.05 - vertex 0.02 -0.024 0.05 - vertex 0.02 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.024 0.05 - vertex 0.02666667 -0.024 0.05 - vertex 0.02666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.016 0.05 - vertex 0.02 -0.016 0.05 - vertex 0.02 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.016 0.05 - vertex 0.02666667 -0.016 0.05 - vertex 0.02666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.008 0.05 - vertex 0.02 -0.008 0.05 - vertex 0.02 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 -0.008 0.05 - vertex 0.02666667 -0.008 0.05 - vertex 0.02666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0 0.05 - vertex 0.02 0 0.05 - vertex 0.02 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.04 0.05 - vertex 0.03333333 -0.04 0.05 - vertex 0.03333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.032 0.05 - vertex 0.02666667 -0.032 0.05 - vertex 0.02666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.032 0.05 - vertex 0.03333333 -0.032 0.05 - vertex 0.03333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.024 0.05 - vertex 0.02666667 -0.024 0.05 - vertex 0.02666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.024 0.05 - vertex 0.03333333 -0.024 0.05 - vertex 0.03333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.016 0.05 - vertex 0.02666667 -0.016 0.05 - vertex 0.02666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.016 0.05 - vertex 0.03333333 -0.016 0.05 - vertex 0.03333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.008 0.05 - vertex 0.02666667 -0.008 0.05 - vertex 0.02666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 -0.008 0.05 - vertex 0.03333333 -0.008 0.05 - vertex 0.03333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0 0.05 - vertex 0.02666667 0 0.05 - vertex 0.02666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.04 0.05 - vertex 0.04 -0.04 0.05 - vertex 0.04 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.032 0.05 - vertex 0.03333333 -0.032 0.05 - vertex 0.03333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.032 0.05 - vertex 0.04 -0.032 0.05 - vertex 0.04 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.024 0.05 - vertex 0.03333333 -0.024 0.05 - vertex 0.03333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.024 0.05 - vertex 0.04 -0.024 0.05 - vertex 0.04 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.016 0.05 - vertex 0.03333333 -0.016 0.05 - vertex 0.03333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.016 0.05 - vertex 0.04 -0.016 0.05 - vertex 0.04 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.008 0.05 - vertex 0.03333333 -0.008 0.05 - vertex 0.03333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 -0.008 0.05 - vertex 0.04 -0.008 0.05 - vertex 0.04 -2.891206e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -2.891206e-19 0.05 - vertex 0.03333333 0 0.05 - vertex 0.03333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.04 0.05 - vertex 0.04666667 -0.04 0.05 - vertex 0.04666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.032 0.05 - vertex 0.04 -0.032 0.05 - vertex 0.04 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.032 0.05 - vertex 0.04666667 -0.032 0.05 - vertex 0.04666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.024 0.05 - vertex 0.04 -0.024 0.05 - vertex 0.04 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.024 0.05 - vertex 0.04666667 -0.024 0.05 - vertex 0.04666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.016 0.05 - vertex 0.04 -0.016 0.05 - vertex 0.04 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.016 0.05 - vertex 0.04666667 -0.016 0.05 - vertex 0.04666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.008 0.05 - vertex 0.04 -0.008 0.05 - vertex 0.04 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 -0.008 0.05 - vertex 0.04666667 -0.008 0.05 - vertex 0.04666667 2.891206e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.04 -2.891206e-19 0.05 - vertex 0.04 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.04 0.05 - vertex 0.05333333 -0.04 0.05 - vertex 0.05333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.032 0.05 - vertex 0.04666667 -0.032 0.05 - vertex 0.04666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.032 0.05 - vertex 0.05333333 -0.032 0.05 - vertex 0.05333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.024 0.05 - vertex 0.04666667 -0.024 0.05 - vertex 0.04666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.024 0.05 - vertex 0.05333333 -0.024 0.05 - vertex 0.05333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.016 0.05 - vertex 0.04666667 -0.016 0.05 - vertex 0.04666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.016 0.05 - vertex 0.05333333 -0.016 0.05 - vertex 0.05333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.008 0.05 - vertex 0.04666667 -0.008 0.05 - vertex 0.04666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 -0.008 0.05 - vertex 0.05333333 -0.008 0.05 - vertex 0.05333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0 0.05 - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.04666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.04 0.05 - vertex 0.06 -0.04 0.05 - vertex 0.06 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.032 0.05 - vertex 0.05333333 -0.032 0.05 - vertex 0.05333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.032 0.05 - vertex 0.06 -0.032 0.05 - vertex 0.06 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.024 0.05 - vertex 0.05333333 -0.024 0.05 - vertex 0.05333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.024 0.05 - vertex 0.06 -0.024 0.05 - vertex 0.06 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.016 0.05 - vertex 0.05333333 -0.016 0.05 - vertex 0.05333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.016 0.05 - vertex 0.06 -0.016 0.05 - vertex 0.06 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.008 0.05 - vertex 0.05333333 -0.008 0.05 - vertex 0.05333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 -0.008 0.05 - vertex 0.06 -0.008 0.05 - vertex 0.06 -2.891206e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -2.891206e-19 0.05 - vertex 0.05333333 0 0.05 - vertex 0.05333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.04 0.05 - vertex 0.06666667 -0.04 0.05 - vertex 0.06666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.032 0.05 - vertex 0.06 -0.032 0.05 - vertex 0.06 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.032 0.05 - vertex 0.06666667 -0.032 0.05 - vertex 0.06666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.024 0.05 - vertex 0.06 -0.024 0.05 - vertex 0.06 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.024 0.05 - vertex 0.06666667 -0.024 0.05 - vertex 0.06666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.016 0.05 - vertex 0.06 -0.016 0.05 - vertex 0.06 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.016 0.05 - vertex 0.06666667 -0.016 0.05 - vertex 0.06666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.008 0.05 - vertex 0.06 -0.008 0.05 - vertex 0.06 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 -0.008 0.05 - vertex 0.06666667 -0.008 0.05 - vertex 0.06666667 -4.336809e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.06 -2.891206e-19 0.05 - vertex 0.06 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.04 0.05 - vertex 0.07333333 -0.04 0.05 - vertex 0.07333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.032 0.05 - vertex 0.06666667 -0.032 0.05 - vertex 0.06666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.032 0.05 - vertex 0.07333333 -0.032 0.05 - vertex 0.07333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.024 0.05 - vertex 0.06666667 -0.024 0.05 - vertex 0.06666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.024 0.05 - vertex 0.07333333 -0.024 0.05 - vertex 0.07333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.016 0.05 - vertex 0.06666667 -0.016 0.05 - vertex 0.06666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.016 0.05 - vertex 0.07333333 -0.016 0.05 - vertex 0.07333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.008 0.05 - vertex 0.06666667 -0.008 0.05 - vertex 0.06666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 -0.008 0.05 - vertex 0.07333333 -0.008 0.05 - vertex 0.07333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.06666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.04 0.05 - vertex 0.08 -0.04 0.05 - vertex 0.08 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.032 0.05 - vertex 0.07333333 -0.032 0.05 - vertex 0.07333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.032 0.05 - vertex 0.08 -0.032 0.05 - vertex 0.08 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.024 0.05 - vertex 0.07333333 -0.024 0.05 - vertex 0.07333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.024 0.05 - vertex 0.08 -0.024 0.05 - vertex 0.08 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.016 0.05 - vertex 0.07333333 -0.016 0.05 - vertex 0.07333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.016 0.05 - vertex 0.08 -0.016 0.05 - vertex 0.08 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.008 0.05 - vertex 0.07333333 -0.008 0.05 - vertex 0.07333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 -0.008 0.05 - vertex 0.08 -0.008 0.05 - vertex 0.08 4.336809e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 4.336809e-19 0.05 - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.07333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.04 0.05 - vertex 0.08666667 -0.04 0.05 - vertex 0.08666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.032 0.05 - vertex 0.08 -0.032 0.05 - vertex 0.08 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.032 0.05 - vertex 0.08666667 -0.032 0.05 - vertex 0.08666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.024 0.05 - vertex 0.08 -0.024 0.05 - vertex 0.08 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.024 0.05 - vertex 0.08666667 -0.024 0.05 - vertex 0.08666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.016 0.05 - vertex 0.08 -0.016 0.05 - vertex 0.08 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.016 0.05 - vertex 0.08666667 -0.016 0.05 - vertex 0.08666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.008 0.05 - vertex 0.08 -0.008 0.05 - vertex 0.08 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 -0.008 0.05 - vertex 0.08666667 -0.008 0.05 - vertex 0.08666667 2.891206e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.08 4.336809e-19 0.05 - vertex 0.08 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.04 0.05 - vertex 0.09333333 -0.04 0.05 - vertex 0.09333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.032 0.05 - vertex 0.08666667 -0.032 0.05 - vertex 0.08666667 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.032 0.05 - vertex 0.09333333 -0.032 0.05 - vertex 0.09333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.024 0.05 - vertex 0.08666667 -0.024 0.05 - vertex 0.08666667 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.024 0.05 - vertex 0.09333333 -0.024 0.05 - vertex 0.09333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.016 0.05 - vertex 0.08666667 -0.016 0.05 - vertex 0.08666667 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.016 0.05 - vertex 0.09333333 -0.016 0.05 - vertex 0.09333333 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.008 0.05 - vertex 0.08666667 -0.008 0.05 - vertex 0.08666667 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 -0.008 0.05 - vertex 0.09333333 -0.008 0.05 - vertex 0.09333333 1.445603e-19 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.08666667 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.04 0.05 - vertex 0.1 -0.04 0.05 - vertex 0.1 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 -0.032 0.05 - vertex 0.09333333 -0.032 0.05 - vertex 0.09333333 -0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.032 0.05 - vertex 0.1 -0.032 0.05 - vertex 0.1 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 -0.024 0.05 - vertex 0.09333333 -0.024 0.05 - vertex 0.09333333 -0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.024 0.05 - vertex 0.1 -0.024 0.05 - vertex 0.1 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 -0.016 0.05 - vertex 0.09333333 -0.016 0.05 - vertex 0.09333333 -0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.016 0.05 - vertex 0.1 -0.016 0.05 - vertex 0.1 -0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 -0.008 0.05 - vertex 0.09333333 -0.008 0.05 - vertex 0.09333333 -0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 -0.008 0.05 - vertex 0.1 -0.008 0.05 - vertex 0.1 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 0 0.05 - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.09333333 -0.008 0.05 - endloop - endfacet -endsolid maxZ -solid bottomAir_to_rightSolid - facet normal 8.673614e-17 1 -0 - outer loop - vertex 0.01333333 0 -0.05 - vertex 0.01333333 0 -0.04 - vertex 0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 1 5.782412e-17 - outer loop - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.02 0 -0.05 - vertex 0.01333333 0 -0.05 - endloop - endfacet - facet normal -8.673614e-17 1 5.782412e-17 - outer loop - vertex 0.02 0 -0.05 - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.02666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.04 - vertex 0.02666667 0 -0.05 - vertex 0.02 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.05 - vertex 0.02666667 0 -0.04 - vertex 0.03333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 -0.04 - vertex 0.03333333 0 -0.05 - vertex 0.02666667 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 -0.05 - vertex 0.03333333 0 -0.04 - vertex 0.04 0 -0.04 - endloop - endfacet - facet normal 4.336807e-17 1 -2.891206e-17 - outer loop - vertex 0.04 0 -0.04 - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.03333333 0 -0.05 - endloop - endfacet - facet normal -4.336807e-17 1 -2.891206e-17 - outer loop - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.04 0 -0.04 - vertex 0.04666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.04 -2.891206e-19 -0.05 - endloop - endfacet - facet normal 4.336813e-17 1 -0 - outer loop - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.05333333 0 -0.04 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 -0.04 - vertex 0.05333333 0 -0.05 - vertex 0.04666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 -0.05 - vertex 0.05333333 0 -0.04 - vertex 0.06 -2.891206e-19 -0.04 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.05333333 0 -0.05 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.04 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.06 -2.891206e-19 -0.05 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.06666667 -4.336809e-19 -0.05 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.08 4.336809e-19 -0.04 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 -0.04 - vertex 0.08 4.336809e-19 -0.05 - vertex 0.07333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 -0.05 - vertex 0.08 4.336809e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.08 4.336809e-19 -0.05 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.09333333 1.445603e-19 -0.04 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.08666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.1 0 -0.04 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 -0.04 - vertex 0.1 0 -0.05 - vertex 0.09333333 1.445603e-19 -0.05 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0 -0.03 - vertex 0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.01333333 0 -0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.02666667 0 -0.03 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.02666667 0 -0.03 - vertex 0.02666667 0 -0.04 - vertex 0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.04 - vertex 0.02666667 0 -0.03 - vertex 0.03333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 -0.03 - vertex 0.03333333 0 -0.04 - vertex 0.02666667 0 -0.04 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 -0.04 - vertex 0.03333333 0 -0.03 - vertex 0.04 -2.891206e-19 -0.03 - endloop - endfacet - facet normal 0 1 2.891206e-17 - outer loop - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.04 0 -0.04 - vertex 0.03333333 0 -0.04 - endloop - endfacet - facet normal 0 1 2.891206e-17 - outer loop - vertex 0.04 0 -0.04 - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.04666667 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -4.336807e-17 1 5.782412e-17 - outer loop - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.04 0 -0.04 - endloop - endfacet - facet normal -8.673627e-17 1 5.782412e-17 - outer loop - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.05333333 2.891206e-19 -0.03 - endloop - endfacet - facet normal 4.336813e-17 1 -2.891206e-17 - outer loop - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.05333333 0 -0.04 - vertex 0.04666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal 8.673614e-17 1 -2.891206e-17 - outer loop - vertex 0.05333333 0 -0.04 - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.03 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.05333333 0 -0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.03 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.06 -2.891206e-19 -0.04 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.04 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.08 4.336809e-19 -0.03 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 -0.03 - vertex 0.08 4.336809e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 -0.04 - vertex 0.08 4.336809e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.03 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.08 4.336809e-19 -0.04 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.09333333 1.445603e-19 -0.03 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.1 0 -0.03 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 -0.03 - vertex 0.1 0 -0.04 - vertex 0.09333333 1.445603e-19 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0 -0.02 - vertex 0.02 0 -0.02 - endloop - endfacet - facet normal 8.673614e-17 1 -5.782412e-17 - outer loop - vertex 0.02 0 -0.02 - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.01333333 0 -0.03 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.02 0 -0.02 - vertex 0.02666667 0 -0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.02666667 0 -0.02 - vertex 0.02666667 0 -0.03 - vertex 0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.03 - vertex 0.02666667 0 -0.02 - vertex 0.03333333 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 -0.02 - vertex 0.03333333 0 -0.03 - vertex 0.02666667 0 -0.03 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 -0.03 - vertex 0.03333333 0 -0.02 - vertex 0.04 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.03333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.04666667 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.04 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -4.336813e-17 1 0 - outer loop - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.05333333 0 -0.02 - endloop - endfacet - facet normal -8.673627e-17 1 2.891206e-17 - outer loop - vertex 0.05333333 0 -0.02 - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.04666667 -2.891206e-19 -0.03 - endloop - endfacet - facet normal 4.336807e-17 1 2.891206e-17 - outer loop - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.05333333 0 -0.02 - vertex 0.06 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.05333333 2.891206e-19 -0.03 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.02 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.03 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.03 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.08 4.336809e-19 -0.02 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 -0.02 - vertex 0.08 4.336809e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 -0.03 - vertex 0.08 4.336809e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.02 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.08 4.336809e-19 -0.03 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.09333333 1.445603e-19 -0.02 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.03 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.1 0 -0.02 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 -0.02 - vertex 0.1 0 -0.03 - vertex 0.09333333 1.445603e-19 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0 -0.01 - vertex 0.02 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 -0.01 - vertex 0.02 0 -0.02 - vertex 0.01333333 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 -0.02 - vertex 0.02 0 -0.01 - vertex 0.02666667 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.01 - vertex 0.02666667 0 -0.02 - vertex 0.02 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.02 - vertex 0.02666667 0 -0.01 - vertex 0.03333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 -0.01 - vertex 0.03333333 0 -0.02 - vertex 0.02666667 0 -0.02 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 -0.02 - vertex 0.03333333 0 -0.01 - vertex 0.04 -2.891206e-19 -0.01 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.03333333 0 -0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.04666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.04 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 4.336813e-17 1 -5.782412e-17 - outer loop - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.05333333 0 -0.01 - endloop - endfacet - facet normal -4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 -0.01 - vertex 0.05333333 0 -0.02 - vertex 0.04666667 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 -0.02 - vertex 0.05333333 0 -0.01 - vertex 0.06 -2.891206e-19 -0.01 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.05333333 0 -0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.06666667 -4.336809e-19 -0.01 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.06 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.02 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.08 4.336809e-19 -0.01 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 -0.01 - vertex 0.08 4.336809e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 -0.02 - vertex 0.08 4.336809e-19 -0.01 - vertex 0.08666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.08 4.336809e-19 -0.02 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.09333333 1.445603e-19 -0.01 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.1 0 -0.01 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 -0.01 - vertex 0.1 0 -0.02 - vertex 0.09333333 1.445603e-19 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0 0 - vertex 0.02 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0 - vertex 0.02 0 -0.01 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 -0.01 - vertex 0.02 0 0 - vertex 0.02666667 0 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 5.782412e-19 - vertex 0.02666667 0 -0.01 - vertex 0.02 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 -0.01 - vertex 0.02666667 0 5.782412e-19 - vertex 0.03333333 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 0 - vertex 0.03333333 0 -0.01 - vertex 0.02666667 0 -0.01 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 -0.01 - vertex 0.03333333 0 0 - vertex 0.04 -2.891206e-19 -5.782412e-19 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.03333333 0 -0.01 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.04666667 2.891206e-19 0 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04666667 2.891206e-19 0 - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.04 -2.891206e-19 -0.01 - endloop - endfacet - facet normal 4.336813e-17 1 -0 - outer loop - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.04666667 2.891206e-19 0 - vertex 0.05333333 0 -2.891206e-19 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 -2.891206e-19 - vertex 0.05333333 0 -0.01 - vertex 0.04666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 -0.01 - vertex 0.05333333 0 -2.891206e-19 - vertex 0.06 -2.891206e-19 5.782412e-19 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.05333333 0 -0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.06666667 -4.336809e-19 0 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0 - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.06 -2.891206e-19 -0.01 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.06666667 -4.336809e-19 0 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.06666667 -4.336809e-19 -0.01 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.08 4.336809e-19 2.891206e-19 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.08 4.336809e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 -0.01 - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.08 4.336809e-19 -0.01 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.09333333 1.445603e-19 4.698209e-19 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.08666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.1 0 0 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 0 - vertex 0.1 0 -0.01 - vertex 0.09333333 1.445603e-19 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0 - vertex 0.01333333 0 0.01 - vertex 0.02 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.01 - vertex 0.02 0 0 - vertex 0.01333333 0 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.02 0 0.01 - vertex 0.02666667 0 0.01 - vertex 0.02666667 0 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 5.782412e-19 - vertex 0.02 0 0 - vertex 0.02 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 5.782412e-19 - vertex 0.02666667 0 0.01 - vertex 0.03333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 0.01 - vertex 0.03333333 0 0 - vertex 0.02666667 0 5.782412e-19 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 0 - vertex 0.03333333 0 0.01 - vertex 0.04 -2.891206e-19 0.01 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.01 - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.03333333 0 0 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.01 - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.04666667 2.891206e-19 0 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04666667 2.891206e-19 0 - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.04 -2.891206e-19 0.01 - endloop - endfacet - facet normal 4.336813e-17 1 -0 - outer loop - vertex 0.04666667 2.891206e-19 0 - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.05333333 0 0.01 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 0.01 - vertex 0.05333333 0 -2.891206e-19 - vertex 0.04666667 2.891206e-19 0 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.05333333 0 0.01 - vertex 0.06 -2.891206e-19 0.01 - vertex 0.06 -2.891206e-19 5.782412e-19 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.05333333 0 -2.891206e-19 - vertex 0.05333333 0 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.06 -2.891206e-19 0.01 - vertex 0.06666667 -4.336809e-19 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.06666667 -4.336809e-19 0 - vertex 0.06 -2.891206e-19 5.782412e-19 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.06666667 -4.336809e-19 0 - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.07333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.06666667 -4.336809e-19 0 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.08 4.336809e-19 0.01 - vertex 0.08 4.336809e-19 2.891206e-19 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.07333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.08 4.336809e-19 0.01 - vertex 0.08666667 2.891206e-19 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.08 4.336809e-19 2.891206e-19 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.09333333 1.445603e-19 4.698209e-19 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.08666667 2.891206e-19 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.1 0 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 0.01 - vertex 0.1 0 0 - vertex 0.09333333 1.445603e-19 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.01333333 0 0.02 - vertex 0.02 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.02 - vertex 0.02 0 0.01 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.01 - vertex 0.02 0 0.02 - vertex 0.02666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.02 - vertex 0.02666667 0 0.01 - vertex 0.02 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.01 - vertex 0.02666667 0 0.02 - vertex 0.03333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 0.02 - vertex 0.03333333 0 0.01 - vertex 0.02666667 0 0.01 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 0.01 - vertex 0.03333333 0 0.02 - vertex 0.04 -2.891206e-19 0.02 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.02 - vertex 0.04 -2.891206e-19 0.01 - vertex 0.03333333 0 0.01 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.01 - vertex 0.04 -2.891206e-19 0.02 - vertex 0.04666667 2.891206e-19 0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.04 -2.891206e-19 0.01 - endloop - endfacet - facet normal 4.336813e-17 1 -0 - outer loop - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.05333333 0 0.02 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 0.02 - vertex 0.05333333 0 0.01 - vertex 0.04666667 2.891206e-19 0.01 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 0.01 - vertex 0.05333333 0 0.02 - vertex 0.06 -2.891206e-19 0.02 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 0.02 - vertex 0.06 -2.891206e-19 0.01 - vertex 0.05333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 -2.891206e-19 0.01 - vertex 0.06 -2.891206e-19 0.02 - vertex 0.06666667 -2.891206e-19 0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -1.445603e-17 - outer loop - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.06 -2.891206e-19 0.01 - endloop - endfacet - facet normal 4.336813e-17 1 -1.445603e-17 - outer loop - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.06666667 -4.336809e-19 0.01 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.08 4.336809e-19 0.02 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 0.02 - vertex 0.08 4.336809e-19 0.01 - vertex 0.07333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 0.01 - vertex 0.08 4.336809e-19 0.02 - vertex 0.08666667 2.891206e-19 0.02 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.08 4.336809e-19 0.01 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.09333333 1.445603e-19 0.02 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.08666667 2.891206e-19 0.01 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.1 0 0.02 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 0.02 - vertex 0.1 0 0.01 - vertex 0.09333333 1.445603e-19 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.02 - vertex 0.01333333 0 0.03 - vertex 0.02 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.03 - vertex 0.02 0 0.02 - vertex 0.01333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.02 - vertex 0.02 0 0.03 - vertex 0.02666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.03 - vertex 0.02666667 0 0.02 - vertex 0.02 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.02 - vertex 0.02666667 0 0.03 - vertex 0.03333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 0.03 - vertex 0.03333333 0 0.02 - vertex 0.02666667 0 0.02 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 0.02 - vertex 0.03333333 0 0.03 - vertex 0.04 -2.891206e-19 0.03 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.03 - vertex 0.04 -2.891206e-19 0.02 - vertex 0.03333333 0 0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.02 - vertex 0.04 -2.891206e-19 0.03 - vertex 0.04666667 2.891206e-19 0.03 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.04 -2.891206e-19 0.02 - endloop - endfacet - facet normal 4.336813e-17 1 -0 - outer loop - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.05333333 0 0.03 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 0.03 - vertex 0.05333333 0 0.02 - vertex 0.04666667 2.891206e-19 0.02 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 0.02 - vertex 0.05333333 0 0.03 - vertex 0.06 -2.891206e-19 0.03 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 0.03 - vertex 0.06 -2.891206e-19 0.02 - vertex 0.05333333 0 0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 0.02 - vertex 0.06 -2.891206e-19 0.03 - vertex 0.06666667 -4.336809e-19 0.03 - endloop - endfacet - facet normal 0 1 1.445603e-17 - outer loop - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.06 -2.891206e-19 0.02 - endloop - endfacet - facet normal 2.168407e-17 1 1.445603e-17 - outer loop - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.06666667 -2.891206e-19 0.02 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.08 4.336809e-19 0.03 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 0.03 - vertex 0.08 4.336809e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 0.02 - vertex 0.08 4.336809e-19 0.03 - vertex 0.08666667 2.891206e-19 0.03 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.08 4.336809e-19 0.02 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.09333333 1.445603e-19 0.03 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.08666667 2.891206e-19 0.02 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.1 0 0.03 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 0.03 - vertex 0.1 0 0.02 - vertex 0.09333333 1.445603e-19 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.03 - vertex 0.01333333 0 0.04 - vertex 0.02 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.04 - vertex 0.02 0 0.03 - vertex 0.01333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.03 - vertex 0.02 0 0.04 - vertex 0.02666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.04 - vertex 0.02666667 0 0.03 - vertex 0.02 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.03 - vertex 0.02666667 0 0.04 - vertex 0.03333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 0.04 - vertex 0.03333333 0 0.03 - vertex 0.02666667 0 0.03 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 0.03 - vertex 0.03333333 0 0.04 - vertex 0.04 -2.891206e-19 0.04 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.04 - vertex 0.04 -2.891206e-19 0.03 - vertex 0.03333333 0 0.03 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.04 -2.891206e-19 0.03 - vertex 0.04 -2.891206e-19 0.04 - vertex 0.04666667 -5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673614e-17 1 8.673618e-17 - outer loop - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.04 -2.891206e-19 0.03 - endloop - endfacet - facet normal -8.673627e-17 1 8.673618e-17 - outer loop - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.05333333 0 0.04 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.05333333 0 0.04 - vertex 0.05333333 0 0.03 - vertex 0.04666667 2.891206e-19 0.03 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 0.03 - vertex 0.05333333 0 0.04 - vertex 0.06 -2.891206e-19 0.04 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 0.04 - vertex 0.06 -2.891206e-19 0.03 - vertex 0.05333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 -2.891206e-19 0.03 - vertex 0.06 -2.891206e-19 0.04 - vertex 0.06666667 -2.891206e-19 0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -1.445603e-17 - outer loop - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.06 -2.891206e-19 0.03 - endloop - endfacet - facet normal 4.336813e-17 1 -1.445603e-17 - outer loop - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.06666667 -4.336809e-19 0.03 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.08 4.336809e-19 0.04 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 0.04 - vertex 0.08 4.336809e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 0.03 - vertex 0.08 4.336809e-19 0.04 - vertex 0.08666667 2.891206e-19 0.04 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.08 4.336809e-19 0.03 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.09333333 1.445603e-19 0.04 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.08666667 2.891206e-19 0.03 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.1 0 0.04 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 0.04 - vertex 0.1 0 0.03 - vertex 0.09333333 1.445603e-19 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.04 - vertex 0.01333333 0 0.05 - vertex 0.02 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.05 - vertex 0.02 0 0.04 - vertex 0.01333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0 0.04 - vertex 0.02 0 0.05 - vertex 0.02666667 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.05 - vertex 0.02666667 0 0.04 - vertex 0.02 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0 0.04 - vertex 0.02666667 0 0.05 - vertex 0.03333333 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0 0.05 - vertex 0.03333333 0 0.04 - vertex 0.02666667 0 0.04 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.03333333 0 0.04 - vertex 0.03333333 0 0.05 - vertex 0.04 -2.891206e-19 0.05 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.05 - vertex 0.04 -2.891206e-19 0.04 - vertex 0.03333333 0 0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex 0.04 -2.891206e-19 0.04 - vertex 0.04 -2.891206e-19 0.05 - vertex 0.04666667 2.891206e-19 0.05 - endloop - endfacet - facet normal 4.336807e-17 1 -8.673618e-17 - outer loop - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.04 -2.891206e-19 0.04 - endloop - endfacet - facet normal 4.336813e-17 1 -8.673618e-17 - outer loop - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.05333333 0 0.05 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex 0.05333333 0 0.05 - vertex 0.05333333 0 0.04 - vertex 0.04666667 -5.782412e-19 0.04 - endloop - endfacet - facet normal 4.336807e-17 1 -0 - outer loop - vertex 0.05333333 0 0.04 - vertex 0.05333333 0 0.05 - vertex 0.06 -2.891206e-19 0.05 - endloop - endfacet - facet normal 4.336807e-17 1 0 - outer loop - vertex 0.06 -2.891206e-19 0.05 - vertex 0.06 -2.891206e-19 0.04 - vertex 0.05333333 0 0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.06 -2.891206e-19 0.04 - vertex 0.06 -2.891206e-19 0.05 - vertex 0.06666667 -4.336809e-19 0.05 - endloop - endfacet - facet normal 0 1 1.445603e-17 - outer loop - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.06 -2.891206e-19 0.04 - endloop - endfacet - facet normal 2.168407e-17 1 1.445603e-17 - outer loop - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.07333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal 4.336813e-17 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.06666667 -2.891206e-19 0.04 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.08 4.336809e-19 0.05 - endloop - endfacet - facet normal -1.517882e-16 1 0 - outer loop - vertex 0.08 4.336809e-19 0.05 - vertex 0.08 4.336809e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.08 4.336809e-19 0.04 - vertex 0.08 4.336809e-19 0.05 - vertex 0.08666667 2.891206e-19 0.05 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.08 4.336809e-19 0.04 - endloop - endfacet - facet normal 2.168407e-17 1 -0 - outer loop - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.09333333 1.445603e-19 0.05 - endloop - endfacet - facet normal 2.168407e-17 1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.08666667 2.891206e-19 0.04 - endloop - endfacet - facet normal 2.168403e-17 1 -0 - outer loop - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.1 0 0.05 - endloop - endfacet - facet normal 2.168403e-17 1 0 - outer loop - vertex 0.1 0 0.05 - vertex 0.1 0 0.04 - vertex 0.09333333 1.445603e-19 0.04 - endloop - endfacet -endsolid bottomAir_to_rightSolid -solid bottomAir_to_leftSolid - facet normal 0 1 0 - outer loop - vertex -0.1 0 -0.05 - vertex -0.1 0 -0.04 - vertex -0.09333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.04 - vertex -0.09333333 0 -0.05 - vertex -0.1 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.05 - vertex -0.09333333 0 -0.04 - vertex -0.08666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.04 - vertex -0.08666667 0 -0.05 - vertex -0.09333333 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.05 - vertex -0.08666667 0 -0.04 - vertex -0.08 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 -0.04 - vertex -0.08 0 -0.05 - vertex -0.08666667 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 -0.05 - vertex -0.08 0 -0.04 - vertex -0.07333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.04 - vertex -0.07333333 0 -0.05 - vertex -0.08 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.05 - vertex -0.07333333 0 -0.04 - vertex -0.06666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.04 - vertex -0.06666667 0 -0.05 - vertex -0.07333333 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.05 - vertex -0.06666667 0 -0.04 - vertex -0.06 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 -0.04 - vertex -0.06 0 -0.05 - vertex -0.06666667 0 -0.05 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 -0.05 - vertex -0.06 0 -0.04 - vertex -0.05333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.06 0 -0.05 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.04666667 0 -0.04 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 -0.04 - vertex -0.04666667 0 -0.05 - vertex -0.05333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0 -0.05 - vertex -0.04666667 0 -0.04 - vertex -0.04 0 -0.04 - endloop - endfacet - facet normal -8.673614e-17 1 5.782412e-17 - outer loop - vertex -0.04 0 -0.04 - vertex -0.04 5.782412e-19 -0.05 - vertex -0.04666667 0 -0.05 - endloop - endfacet - facet normal 8.673614e-17 1 5.782412e-17 - outer loop - vertex -0.04 5.782412e-19 -0.05 - vertex -0.04 0 -0.04 - vertex -0.03333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.04 5.782412e-19 -0.05 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.02666667 0 -0.04 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.02666667 0 -0.04 - vertex -0.02666667 0 -0.05 - vertex -0.03333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.02666667 0 -0.05 - vertex -0.02666667 0 -0.04 - vertex -0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 1 5.782412e-17 - outer loop - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.02 0 -0.05 - vertex -0.02666667 0 -0.05 - endloop - endfacet - facet normal -8.673614e-17 1 5.782412e-17 - outer loop - vertex -0.02 0 -0.05 - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.01333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0 -0.05 - vertex -0.02 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 -0.04 - vertex -0.1 0 -0.03 - vertex -0.09333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.03 - vertex -0.09333333 0 -0.04 - vertex -0.1 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.04 - vertex -0.09333333 0 -0.03 - vertex -0.08666667 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.03 - vertex -0.08666667 0 -0.04 - vertex -0.09333333 0 -0.04 - endloop - endfacet - facet normal -1.734722e-16 1 0 - outer loop - vertex -0.08666667 0 -0.04 - vertex -0.08666667 0 -0.03 - vertex -0.08 1.156482e-18 -0.03 - endloop - endfacet - facet normal 0 1 -1.156482e-16 - outer loop - vertex -0.08 1.156482e-18 -0.03 - vertex -0.08 0 -0.04 - vertex -0.08666667 0 -0.04 - endloop - endfacet - facet normal 1.734722e-16 1 -1.156482e-16 - outer loop - vertex -0.08 0 -0.04 - vertex -0.08 1.156482e-18 -0.03 - vertex -0.07333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.03 - vertex -0.07333333 0 -0.04 - vertex -0.08 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.04 - vertex -0.07333333 0 -0.03 - vertex -0.06666667 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.03 - vertex -0.06666667 0 -0.04 - vertex -0.07333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.04 - vertex -0.06666667 0 -0.03 - vertex -0.06 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 -0.03 - vertex -0.06 0 -0.04 - vertex -0.06666667 0 -0.04 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 -0.04 - vertex -0.06 0 -0.03 - vertex -0.05333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.06 0 -0.04 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.04666667 0 -0.03 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 -0.03 - vertex -0.04666667 0 -0.04 - vertex -0.05333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 -0.04 - vertex -0.04666667 0 -0.03 - vertex -0.04 5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex -0.04 5.782412e-19 -0.03 - vertex -0.04 0 -0.04 - vertex -0.04666667 0 -0.04 - endloop - endfacet - facet normal 1.734723e-16 1 -5.782412e-17 - outer loop - vertex -0.04 0 -0.04 - vertex -0.04 5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.04 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.02666667 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -8.673627e-17 1 5.782412e-17 - outer loop - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.02666667 0 -0.04 - vertex -0.03333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 1 5.782412e-17 - outer loop - vertex -0.02666667 0 -0.04 - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.02666667 0 -0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.01333333 0 -0.03 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0 -0.04 - vertex -0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 -0.03 - vertex -0.1 0 -0.02 - vertex -0.09333333 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.02 - vertex -0.09333333 0 -0.03 - vertex -0.1 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.03 - vertex -0.09333333 0 -0.02 - vertex -0.08666667 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.02 - vertex -0.08666667 0 -0.03 - vertex -0.09333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.03 - vertex -0.08666667 0 -0.02 - vertex -0.08 0 -0.02 - endloop - endfacet - facet normal -1.734722e-16 1 1.156482e-16 - outer loop - vertex -0.08 0 -0.02 - vertex -0.08 1.156482e-18 -0.03 - vertex -0.08666667 0 -0.03 - endloop - endfacet - facet normal 0 1 1.156482e-16 - outer loop - vertex -0.08 1.156482e-18 -0.03 - vertex -0.08 0 -0.02 - vertex -0.07333333 0 -0.02 - endloop - endfacet - facet normal 1.734722e-16 1 0 - outer loop - vertex -0.07333333 0 -0.02 - vertex -0.07333333 0 -0.03 - vertex -0.08 1.156482e-18 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.03 - vertex -0.07333333 0 -0.02 - vertex -0.06666667 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.02 - vertex -0.06666667 0 -0.03 - vertex -0.07333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.03 - vertex -0.06666667 0 -0.02 - vertex -0.06 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 -0.02 - vertex -0.06 0 -0.03 - vertex -0.06666667 0 -0.03 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 -0.03 - vertex -0.06 0 -0.02 - vertex -0.05333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.06 0 -0.03 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.04666667 0 -0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 -0.02 - vertex -0.04666667 0 -0.03 - vertex -0.05333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 -0.03 - vertex -0.04666667 0 -0.02 - vertex -0.04 5.782412e-19 -0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 -0.02 - vertex -0.04 5.782412e-19 -0.03 - vertex -0.04666667 0 -0.03 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 -0.03 - vertex -0.04 5.782412e-19 -0.02 - vertex -0.03333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.04 5.782412e-19 -0.03 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.02666667 0 -0.02 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex -0.02666667 0 -0.02 - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.02666667 0 -0.02 - vertex -0.02 0 -0.02 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex -0.02 0 -0.02 - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.02666667 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 1 -5.782412e-17 - outer loop - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.02 0 -0.02 - vertex -0.01333333 0 -0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0 -0.03 - vertex -0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 -0.02 - vertex -0.1 0 -0.01 - vertex -0.09333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.01 - vertex -0.09333333 0 -0.02 - vertex -0.1 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.02 - vertex -0.09333333 0 -0.01 - vertex -0.08666667 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.01 - vertex -0.08666667 0 -0.02 - vertex -0.09333333 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 -0.02 - vertex -0.08666667 0 -0.01 - vertex -0.08 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 -0.01 - vertex -0.08 0 -0.02 - vertex -0.08666667 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 -0.02 - vertex -0.08 0 -0.01 - vertex -0.07333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.01 - vertex -0.07333333 0 -0.02 - vertex -0.08 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.02 - vertex -0.07333333 0 -0.01 - vertex -0.06666667 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.01 - vertex -0.06666667 0 -0.02 - vertex -0.07333333 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.02 - vertex -0.06666667 0 -0.01 - vertex -0.06 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 -0.01 - vertex -0.06 0 -0.02 - vertex -0.06666667 0 -0.02 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 -0.02 - vertex -0.06 0 -0.01 - vertex -0.05333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.06 0 -0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.04666667 0 -0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 -0.01 - vertex -0.04666667 0 -0.02 - vertex -0.05333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 -0.02 - vertex -0.04666667 0 -0.01 - vertex -0.04 5.782412e-19 -0.01 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 -0.01 - vertex -0.04 5.782412e-19 -0.02 - vertex -0.04666667 0 -0.02 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 -0.02 - vertex -0.04 5.782412e-19 -0.01 - vertex -0.03333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.04 5.782412e-19 -0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.02666667 0 -0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.02666667 0 -0.01 - vertex -0.02666667 0 -0.02 - vertex -0.03333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0 -0.02 - vertex -0.02666667 0 -0.01 - vertex -0.02 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 -0.01 - vertex -0.02 0 -0.02 - vertex -0.02666667 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 -0.02 - vertex -0.02 0 -0.01 - vertex -0.01333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0 -0.02 - vertex -0.02 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 -0.01 - vertex -0.1 0 0 - vertex -0.09333333 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0 - vertex -0.09333333 0 -0.01 - vertex -0.1 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 -0.01 - vertex -0.09333333 0 0 - vertex -0.08666667 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0 - vertex -0.08666667 0 -0.01 - vertex -0.09333333 0 -0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.08666667 0 0 - vertex -0.08 0 1.156482e-18 - vertex -0.08 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 -0.01 - vertex -0.08666667 0 -0.01 - vertex -0.08666667 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0 - vertex -0.07333333 0 -0.01 - vertex -0.08 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 -0.01 - vertex -0.08 0 1.156482e-18 - vertex -0.07333333 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 -0.01 - vertex -0.07333333 0 0 - vertex -0.06666667 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0 - vertex -0.06666667 0 -0.01 - vertex -0.07333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 -0.01 - vertex -0.06666667 0 0 - vertex -0.06 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 0 - vertex -0.06 0 -0.01 - vertex -0.06666667 0 -0.01 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 -0.01 - vertex -0.06 0 0 - vertex -0.05333333 -5.782412e-19 0 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0 - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.06 0 -0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.05333333 -5.782412e-19 0 - vertex -0.04666667 0 0 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 0 - vertex -0.04666667 0 -0.01 - vertex -0.05333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 -0.01 - vertex -0.04666667 0 0 - vertex -0.04 5.782412e-19 0 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 0 - vertex -0.04 5.782412e-19 -0.01 - vertex -0.04666667 0 -0.01 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 -0.01 - vertex -0.04 5.782412e-19 0 - vertex -0.03333333 -5.782412e-19 0 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0 - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.04 5.782412e-19 -0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.03333333 -5.782412e-19 0 - vertex -0.02666667 0 0 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.02666667 0 0 - vertex -0.02666667 0 -0.01 - vertex -0.03333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0 -0.01 - vertex -0.02666667 0 0 - vertex -0.02 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0 - vertex -0.02 0 -0.01 - vertex -0.02666667 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 -0.01 - vertex -0.02 0 0 - vertex -0.01333333 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0 - vertex -0.01333333 0 -0.01 - vertex -0.02 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 0 - vertex -0.1 0 0.01 - vertex -0.09333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.01 - vertex -0.09333333 0 0 - vertex -0.1 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0 - vertex -0.09333333 0 0.01 - vertex -0.08666667 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.01 - vertex -0.08666667 0 0 - vertex -0.09333333 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 1.156482e-18 - vertex -0.08666667 0 0 - vertex -0.08666667 0 0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.08666667 0 0.01 - vertex -0.08 0 0.01 - vertex -0.08 0 1.156482e-18 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 1.156482e-18 - vertex -0.08 0 0.01 - vertex -0.07333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.01 - vertex -0.07333333 0 0 - vertex -0.08 0 1.156482e-18 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0 - vertex -0.07333333 0 0.01 - vertex -0.06666667 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.01 - vertex -0.06666667 0 0 - vertex -0.07333333 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0 - vertex -0.06666667 0 0.01 - vertex -0.06 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 0.01 - vertex -0.06 0 0 - vertex -0.06666667 0 0 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 0 - vertex -0.06 0 0.01 - vertex -0.05333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.05333333 -5.782412e-19 0 - vertex -0.06 0 0 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0 - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.04666667 0 0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 0.01 - vertex -0.04666667 0 0 - vertex -0.05333333 -5.782412e-19 0 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 0 - vertex -0.04666667 0 0.01 - vertex -0.04 5.782412e-19 0.01 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 0.01 - vertex -0.04 5.782412e-19 0 - vertex -0.04666667 0 0 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 0 - vertex -0.04 5.782412e-19 0.01 - vertex -0.03333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.03333333 -5.782412e-19 0 - vertex -0.04 5.782412e-19 0 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0 - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.02666667 0 0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.02666667 0 0.01 - vertex -0.02666667 0 0 - vertex -0.03333333 -5.782412e-19 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0 0 - vertex -0.02666667 0 0.01 - vertex -0.02 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.01 - vertex -0.02 0 0 - vertex -0.02666667 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0 - vertex -0.02 0 0.01 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.01333333 0 0 - vertex -0.02 0 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 0.01 - vertex -0.1 0 0.02 - vertex -0.09333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.02 - vertex -0.09333333 0 0.01 - vertex -0.1 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.01 - vertex -0.09333333 0 0.02 - vertex -0.08666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.02 - vertex -0.08666667 0 0.01 - vertex -0.09333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.01 - vertex -0.08666667 0 0.02 - vertex -0.08 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.02 - vertex -0.08 0 0.01 - vertex -0.08666667 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.01 - vertex -0.08 0 0.02 - vertex -0.07333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.02 - vertex -0.07333333 0 0.01 - vertex -0.08 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.01 - vertex -0.07333333 0 0.02 - vertex -0.06666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.02 - vertex -0.06666667 0 0.01 - vertex -0.07333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.01 - vertex -0.06666667 0 0.02 - vertex -0.06 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 0.02 - vertex -0.06 0 0.01 - vertex -0.06666667 0 0.01 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 0.01 - vertex -0.06 0 0.02 - vertex -0.05333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.06 0 0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.04666667 0 0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 0.02 - vertex -0.04666667 0 0.01 - vertex -0.05333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 0.01 - vertex -0.04666667 0 0.02 - vertex -0.04 5.782412e-19 0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 0.02 - vertex -0.04 5.782412e-19 0.01 - vertex -0.04666667 0 0.01 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 0.01 - vertex -0.04 5.782412e-19 0.02 - vertex -0.03333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.04 5.782412e-19 0.01 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.02666667 0 0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.02666667 0 0.02 - vertex -0.02666667 0 0.01 - vertex -0.03333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0 0.01 - vertex -0.02666667 0 0.02 - vertex -0.02 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.02 - vertex -0.02 0 0.01 - vertex -0.02666667 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.01 - vertex -0.02 0 0.02 - vertex -0.01333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.02 - vertex -0.01333333 0 0.01 - vertex -0.02 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 0.02 - vertex -0.1 0 0.03 - vertex -0.09333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.03 - vertex -0.09333333 0 0.02 - vertex -0.1 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.02 - vertex -0.09333333 0 0.03 - vertex -0.08666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.03 - vertex -0.08666667 0 0.02 - vertex -0.09333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.02 - vertex -0.08666667 0 0.03 - vertex -0.08 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.03 - vertex -0.08 0 0.02 - vertex -0.08666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.02 - vertex -0.08 0 0.03 - vertex -0.07333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.03 - vertex -0.07333333 0 0.02 - vertex -0.08 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.02 - vertex -0.07333333 0 0.03 - vertex -0.06666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.03 - vertex -0.06666667 0 0.02 - vertex -0.07333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.02 - vertex -0.06666667 0 0.03 - vertex -0.06 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 0.03 - vertex -0.06 0 0.02 - vertex -0.06666667 0 0.02 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 0.02 - vertex -0.06 0 0.03 - vertex -0.05333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.06 0 0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.04666667 0 0.03 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 0.03 - vertex -0.04666667 0 0.02 - vertex -0.05333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 0.02 - vertex -0.04666667 0 0.03 - vertex -0.04 5.782412e-19 0.03 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 0.03 - vertex -0.04 5.782412e-19 0.02 - vertex -0.04666667 0 0.02 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 0.02 - vertex -0.04 5.782412e-19 0.03 - vertex -0.03333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.04 5.782412e-19 0.02 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.02666667 0 0.03 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.02666667 0 0.03 - vertex -0.02666667 0 0.02 - vertex -0.03333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0 0.02 - vertex -0.02666667 0 0.03 - vertex -0.02 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.03 - vertex -0.02 0 0.02 - vertex -0.02666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.02 - vertex -0.02 0 0.03 - vertex -0.01333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.03 - vertex -0.01333333 0 0.02 - vertex -0.02 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 0.03 - vertex -0.1 0 0.04 - vertex -0.09333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.04 - vertex -0.09333333 0 0.03 - vertex -0.1 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.03 - vertex -0.09333333 0 0.04 - vertex -0.08666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.04 - vertex -0.08666667 0 0.03 - vertex -0.09333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.03 - vertex -0.08666667 0 0.04 - vertex -0.08 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.04 - vertex -0.08 0 0.03 - vertex -0.08666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.03 - vertex -0.08 0 0.04 - vertex -0.07333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.04 - vertex -0.07333333 0 0.03 - vertex -0.08 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.03 - vertex -0.07333333 0 0.04 - vertex -0.06666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.04 - vertex -0.06666667 0 0.03 - vertex -0.07333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.03 - vertex -0.06666667 0 0.04 - vertex -0.06 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 0.04 - vertex -0.06 0 0.03 - vertex -0.06666667 0 0.03 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 0.03 - vertex -0.06 0 0.04 - vertex -0.05333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.06 0 0.03 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.04666667 0 0.04 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 0.04 - vertex -0.04666667 0 0.03 - vertex -0.05333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 0.03 - vertex -0.04666667 0 0.04 - vertex -0.04 5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 0.04 - vertex -0.04 5.782412e-19 0.03 - vertex -0.04666667 0 0.03 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 0.03 - vertex -0.04 5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.04 5.782412e-19 0.03 - endloop - endfacet - facet normal -1.734725e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.02666667 5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673627e-17 1 -5.782412e-17 - outer loop - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.02666667 0 0.03 - vertex -0.03333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 8.673614e-17 1 -5.782412e-17 - outer loop - vertex -0.02666667 0 0.03 - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.02 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.04 - vertex -0.02 0 0.03 - vertex -0.02666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.03 - vertex -0.02 0 0.04 - vertex -0.01333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.04 - vertex -0.01333333 0 0.03 - vertex -0.02 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0 0.04 - vertex -0.1 0 0.05 - vertex -0.09333333 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.05 - vertex -0.09333333 0 0.04 - vertex -0.1 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0 0.04 - vertex -0.09333333 0 0.05 - vertex -0.08666667 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.05 - vertex -0.08666667 0 0.04 - vertex -0.09333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0 0.04 - vertex -0.08666667 0 0.05 - vertex -0.08 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.05 - vertex -0.08 0 0.04 - vertex -0.08666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0 0.04 - vertex -0.08 0 0.05 - vertex -0.07333333 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.05 - vertex -0.07333333 0 0.04 - vertex -0.08 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0 0.04 - vertex -0.07333333 0 0.05 - vertex -0.06666667 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.05 - vertex -0.06666667 0 0.04 - vertex -0.07333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0 0.04 - vertex -0.06666667 0 0.05 - vertex -0.06 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0 0.05 - vertex -0.06 0 0.04 - vertex -0.06666667 0 0.04 - endloop - endfacet - facet normal 8.673614e-17 1 -0 - outer loop - vertex -0.06 0 0.04 - vertex -0.06 0 0.05 - vertex -0.05333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.06 0 0.04 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.04666667 0 0.05 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.04666667 0 0.05 - vertex -0.04666667 0 0.04 - vertex -0.05333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04666667 0 0.04 - vertex -0.04666667 0 0.05 - vertex -0.04 5.782412e-19 0.05 - endloop - endfacet - facet normal -8.673614e-17 1 0 - outer loop - vertex -0.04 5.782412e-19 0.05 - vertex -0.04 5.782412e-19 0.04 - vertex -0.04666667 0 0.04 - endloop - endfacet - facet normal 1.734723e-16 1 -0 - outer loop - vertex -0.04 5.782412e-19 0.04 - vertex -0.04 5.782412e-19 0.05 - vertex -0.03333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal 1.734723e-16 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.04 5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673627e-17 1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.02666667 0 0.05 - endloop - endfacet - facet normal -1.734725e-16 1 5.782412e-17 - outer loop - vertex -0.02666667 0 0.05 - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal 0 1 5.782412e-17 - outer loop - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.02666667 0 0.05 - vertex -0.02 0 0.05 - endloop - endfacet - facet normal 8.673614e-17 1 0 - outer loop - vertex -0.02 0 0.05 - vertex -0.02 0 0.04 - vertex -0.02666667 5.782412e-19 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0 0.04 - vertex -0.02 0 0.05 - vertex -0.01333333 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.05 - vertex -0.01333333 0 0.04 - vertex -0.02 0 0.04 - endloop - endfacet -endsolid bottomAir_to_leftSolid -solid bottomAir_to_heater - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 -0.05 - vertex -0.01333333 0 -0.04 - vertex -0.006666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.04 - vertex -0.006666667 0 -0.05 - vertex -0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.05 - vertex -0.006666667 0 -0.04 - vertex 0 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.04 - vertex 0 0 -0.05 - vertex -0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.05 - vertex 0 0 -0.04 - vertex 0.006666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.04 - vertex 0.006666667 0 -0.05 - vertex 0 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.05 - vertex 0.006666667 0 -0.04 - vertex 0.01333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0 -0.05 - vertex 0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0 -0.03 - vertex -0.006666667 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.03 - vertex -0.006666667 0 -0.04 - vertex -0.01333333 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.04 - vertex -0.006666667 0 -0.03 - vertex 0 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.03 - vertex 0 0 -0.04 - vertex -0.006666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.04 - vertex 0 0 -0.03 - vertex 0.006666667 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.03 - vertex 0.006666667 0 -0.04 - vertex 0 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.04 - vertex 0.006666667 0 -0.03 - vertex 0.01333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0 -0.04 - vertex 0.006666667 0 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0 -0.02 - vertex -0.006666667 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.02 - vertex -0.006666667 0 -0.03 - vertex -0.01333333 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.03 - vertex -0.006666667 0 -0.02 - vertex 0 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.02 - vertex 0 0 -0.03 - vertex -0.006666667 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.03 - vertex 0 0 -0.02 - vertex 0.006666667 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.02 - vertex 0.006666667 0 -0.03 - vertex 0 0 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.03 - vertex 0.006666667 0 -0.02 - vertex 0.01333333 0 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0 -0.03 - vertex 0.006666667 0 -0.03 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.04 -0.01 - vertex -0.006666667 -0.04 -0.01 - vertex -0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.032 -0.01 - vertex -0.01333333 -0.032 -0.01 - vertex -0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.04 -0.01 - vertex 0 -0.04 -0.01 - vertex 0 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.032 -0.01 - vertex -0.006666667 -0.032 -0.01 - vertex -0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.04 -0.01 - vertex 0.006666667 -0.04 -0.01 - vertex 0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.032 -0.01 - vertex 0 -0.032 -0.01 - vertex 0 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.04 -0.01 - vertex 0.01333333 -0.04 -0.01 - vertex 0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.032 -0.01 - vertex 0.006666667 -0.032 -0.01 - vertex 0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.032 -0.01 - vertex -0.006666667 -0.032 -0.01 - vertex -0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.024 -0.01 - vertex -0.01333333 -0.024 -0.01 - vertex -0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.032 -0.01 - vertex 0 -0.032 -0.01 - vertex 0 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.024 -0.01 - vertex -0.006666667 -0.024 -0.01 - vertex -0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.032 -0.01 - vertex 0.006666667 -0.032 -0.01 - vertex 0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.024 -0.01 - vertex 0 -0.024 -0.01 - vertex 0 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.032 -0.01 - vertex 0.01333333 -0.032 -0.01 - vertex 0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.024 -0.01 - vertex 0.006666667 -0.024 -0.01 - vertex 0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.024 -0.01 - vertex -0.006666667 -0.024 -0.01 - vertex -0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.016 -0.01 - vertex -0.01333333 -0.016 -0.01 - vertex -0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.024 -0.01 - vertex 0 -0.024 -0.01 - vertex 0 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.016 -0.01 - vertex -0.006666667 -0.016 -0.01 - vertex -0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.024 -0.01 - vertex 0.006666667 -0.024 -0.01 - vertex 0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.016 -0.01 - vertex 0 -0.016 -0.01 - vertex 0 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.024 -0.01 - vertex 0.01333333 -0.024 -0.01 - vertex 0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.016 -0.01 - vertex 0.006666667 -0.016 -0.01 - vertex 0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.016 -0.01 - vertex -0.006666667 -0.016 -0.01 - vertex -0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.008 -0.01 - vertex -0.01333333 -0.008 -0.01 - vertex -0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.016 -0.01 - vertex 0 -0.016 -0.01 - vertex 0 -0.008 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.008 -0.01 - vertex -0.006666667 -0.008 -0.01 - vertex -0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.016 -0.01 - vertex 0.006666667 -0.016 -0.01 - vertex 0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.008 -0.01 - vertex 0 -0.008 -0.01 - vertex 0 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.016 -0.01 - vertex 0.01333333 -0.016 -0.01 - vertex 0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.008 -0.01 - vertex 0.006666667 -0.008 -0.01 - vertex 0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0 -0.01 - vertex -0.006666667 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.01 - vertex -0.006666667 0 -0.02 - vertex -0.01333333 0 -0.02 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.008 -0.01 - vertex -0.006666667 -0.008 -0.01 - vertex -0.006666667 0 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0 -0.01 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 -0.02 - vertex -0.006666667 0 -0.01 - vertex 0 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.01 - vertex 0 0 -0.02 - vertex -0.006666667 0 -0.02 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.008 -0.01 - vertex 0 -0.008 -0.01 - vertex 0 0 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0 -0.01 - vertex -0.006666667 0 -0.01 - vertex -0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 -0.02 - vertex 0 0 -0.01 - vertex 0.006666667 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.01 - vertex 0.006666667 0 -0.02 - vertex 0 0 -0.02 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.008 -0.01 - vertex 0.006666667 -0.008 -0.01 - vertex 0.006666667 0 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0 -0.01 - vertex 0 0 -0.01 - vertex 0 -0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 -0.02 - vertex 0.006666667 0 -0.01 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0 -0.02 - vertex 0.006666667 0 -0.02 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.008 -0.01 - vertex 0.01333333 -0.008 -0.01 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.006666667 0 -0.01 - vertex 0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.04 -0.01 - vertex -0.01333333 -0.032 -0.01 - vertex -0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.04 0 - vertex -0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.04 -0.01 - vertex 0.01333333 -0.04 0 - vertex 0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.032 -0.01 - vertex 0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.032 -0.01 - vertex -0.01333333 -0.024 -0.01 - vertex -0.01333333 -0.024 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.032 -0.01 - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.024 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.024 -0.01 - vertex 0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.024 -0.01 - vertex -0.01333333 -0.016 -0.01 - vertex -0.01333333 -0.016 -1.156482e-18 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.024 -0.01 - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.016 -1.156482e-18 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.016 -0.01 - vertex 0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.016 -0.01 - vertex -0.01333333 -0.008 -0.01 - vertex -0.01333333 -0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.008 0 - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.016 -0.01 - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.008 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 -0.008 0 - vertex 0.01333333 -0.008 -0.01 - vertex 0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.008 -0.01 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0 - vertex -0.01333333 -0.008 0 - vertex -0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.008 -0.01 - vertex 0.01333333 -0.008 0 - vertex 0.01333333 0 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0 0 - vertex 0.01333333 0 -0.01 - vertex 0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.032 0.01 - vertex -0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.04 0.01 - vertex -0.01333333 -0.04 0 - vertex -0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.04 0.01 - vertex -0.01333333 -0.032 0.01 - vertex -0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.032 0.01 - vertex -0.006666667 -0.04 0.01 - vertex -0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.04 0.01 - vertex -0.006666667 -0.032 0.01 - vertex 0 -0.032 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.032 0.01 - vertex 0 -0.04 0.01 - vertex -0.006666667 -0.04 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.04 0.01 - vertex 0 -0.032 0.01 - vertex 0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.032 0.01 - vertex 0.006666667 -0.04 0.01 - vertex 0 -0.04 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.04 0.01 - vertex 0.01333333 -0.032 0.01 - vertex 0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.04 0 - vertex 0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.04 0.01 - vertex 0.006666667 -0.032 0.01 - vertex 0.01333333 -0.032 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.032 0.01 - vertex 0.01333333 -0.04 0.01 - vertex 0.006666667 -0.04 0.01 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.024 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.024 0.01 - vertex -0.01333333 -0.032 0.01 - vertex -0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.032 0.01 - vertex -0.01333333 -0.024 0.01 - vertex -0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.024 0.01 - vertex -0.006666667 -0.032 0.01 - vertex -0.01333333 -0.032 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.032 0.01 - vertex -0.006666667 -0.024 0.01 - vertex 0 -0.024 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.024 0.01 - vertex 0 -0.032 0.01 - vertex -0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.032 0.01 - vertex 0 -0.024 0.01 - vertex 0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.024 0.01 - vertex 0.006666667 -0.032 0.01 - vertex 0 -0.032 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.032 0.01 - vertex 0.01333333 -0.024 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 -0.024 0.01 - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.032 0.01 - vertex 0.006666667 -0.024 0.01 - vertex 0.01333333 -0.024 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.024 0.01 - vertex 0.01333333 -0.032 0.01 - vertex 0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.016 0.01 - vertex -0.01333333 -0.024 0.01 - vertex -0.01333333 -0.024 0 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.024 0.01 - vertex -0.01333333 -0.016 0.01 - vertex -0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.016 0.01 - vertex -0.006666667 -0.024 0.01 - vertex -0.01333333 -0.024 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.024 0.01 - vertex -0.006666667 -0.016 0.01 - vertex 0 -0.016 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.016 0.01 - vertex 0 -0.024 0.01 - vertex -0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.024 0.01 - vertex 0 -0.016 0.01 - vertex 0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.016 0.01 - vertex 0.006666667 -0.024 0.01 - vertex 0 -0.024 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.024 0.01 - vertex 0.01333333 -0.016 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 -0.016 0.01 - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.024 0 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.024 0.01 - vertex 0.006666667 -0.016 0.01 - vertex 0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.016 0.01 - vertex 0.01333333 -0.024 0.01 - vertex 0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex -0.01333333 -0.008 0 - vertex -0.01333333 -0.008 0.01 - vertex -0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.016 0.01 - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.008 0 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.016 0.01 - vertex -0.01333333 -0.008 0.01 - vertex -0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.008 0.01 - vertex -0.006666667 -0.016 0.01 - vertex -0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.016 0.01 - vertex -0.006666667 -0.008 0.01 - vertex 0 -0.008 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.008 0.01 - vertex 0 -0.016 0.01 - vertex -0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.016 0.01 - vertex 0 -0.008 0.01 - vertex 0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.008 0.01 - vertex 0.006666667 -0.016 0.01 - vertex 0 -0.016 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.016 0.01 - vertex 0.01333333 -0.008 0.01 - vertex 0.01333333 -0.008 0 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 0.01333333 -0.008 0 - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.016 0.01 - vertex 0.006666667 -0.008 0.01 - vertex 0.01333333 -0.008 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.008 0.01 - vertex 0.01333333 -0.016 0.01 - vertex 0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 -0.008 0 - vertex -0.01333333 0 0 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.01333333 -0.008 0.01 - vertex -0.01333333 -0.008 0 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.008 0.01 - vertex -0.01333333 0 0.01 - vertex -0.006666667 0 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0 0.01 - vertex -0.006666667 -0.008 0.01 - vertex -0.01333333 -0.008 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.008 0.01 - vertex -0.006666667 0 0.01 - vertex 0 0 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0 0.01 - vertex 0 -0.008 0.01 - vertex -0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.008 0.01 - vertex 0 0 0.01 - vertex 0.006666667 0 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0 0.01 - vertex 0.006666667 -0.008 0.01 - vertex 0 -0.008 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 -0.008 0 - vertex 0.01333333 -0.008 0.01 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.01333333 0 0 - vertex 0.01333333 -0.008 0 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.008 0.01 - vertex 0.006666667 0 0.01 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.01333333 -0.008 0.01 - vertex 0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.01333333 0 0.02 - vertex -0.006666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.02 - vertex -0.006666667 0 0.01 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.01 - vertex -0.006666667 0 0.02 - vertex 0 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.02 - vertex 0 0 0.01 - vertex -0.006666667 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.01 - vertex 0 0 0.02 - vertex 0.006666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.02 - vertex 0.006666667 0 0.01 - vertex 0 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.01 - vertex 0.006666667 0 0.02 - vertex 0.01333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.02 - vertex 0.01333333 0 0.01 - vertex 0.006666667 0 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.02 - vertex -0.01333333 0 0.03 - vertex -0.006666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.03 - vertex -0.006666667 0 0.02 - vertex -0.01333333 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.02 - vertex -0.006666667 0 0.03 - vertex 0 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.03 - vertex 0 0 0.02 - vertex -0.006666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.02 - vertex 0 0 0.03 - vertex 0.006666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.03 - vertex 0.006666667 0 0.02 - vertex 0 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.02 - vertex 0.006666667 0 0.03 - vertex 0.01333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.03 - vertex 0.01333333 0 0.02 - vertex 0.006666667 0 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.03 - vertex -0.01333333 0 0.04 - vertex -0.006666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.04 - vertex -0.006666667 0 0.03 - vertex -0.01333333 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.03 - vertex -0.006666667 0 0.04 - vertex 0 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.04 - vertex 0 0 0.03 - vertex -0.006666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.03 - vertex 0 0 0.04 - vertex 0.006666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.04 - vertex 0.006666667 0 0.03 - vertex 0 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.03 - vertex 0.006666667 0 0.04 - vertex 0.01333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.04 - vertex 0.01333333 0 0.03 - vertex 0.006666667 0 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0 0.04 - vertex -0.01333333 0 0.05 - vertex -0.006666667 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.05 - vertex -0.006666667 0 0.04 - vertex -0.01333333 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0 0.04 - vertex -0.006666667 0 0.05 - vertex 0 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.05 - vertex 0 0 0.04 - vertex -0.006666667 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0 0.04 - vertex 0 0 0.05 - vertex 0.006666667 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.05 - vertex 0.006666667 0 0.04 - vertex 0 0 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0 0.04 - vertex 0.006666667 0 0.05 - vertex 0.01333333 0 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0 0.05 - vertex 0.01333333 0 0.04 - vertex 0.006666667 0 0.04 - endloop - endfacet -endsolid bottomAir_to_heater diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/geom.stl b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/geom.stl new file mode 100644 index 0000000000000000000000000000000000000000..8c8ad841e5ea3c3f3b00fd6552e32efeaa52a0db --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/geom.stl @@ -0,0 +1,9424 @@ +solid topAir_to_heater + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -5.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -5.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -5.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -5.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -5.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -5.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-03 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex 0.000000000e+00 8.000000000e-03 0.000000000e+00 + vertex 0.000000000e+00 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex 6.666670000e-03 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-03 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex 0.000000000e+00 8.000000000e-03 0.000000000e+00 + vertex 0.000000000e+00 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 0.000000000e+00 + vertex 6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex 6.666670000e-03 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 2.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 3.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 5.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 4.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 5.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 5.000000000e-02 + vertex -6.666670000e-03 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 5.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 5.000000000e-02 + vertex 0.000000000e+00 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 8.000000000e-03 4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 -1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 5.000000000e-02 + vertex 6.666670000e-03 8.000000000e-03 4.000000000e-02 + endloop + endfacet +endsolid +solid leftSolid_to_topAir + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 -4.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -5.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 -3.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 -2.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 -1.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 -2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 2.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex 2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + vertex 2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + vertex 3.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 4.000000000e-02 8.000000000e-03 -5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -5.782410000e-19 + vertex 4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -5.782410000e-19 + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 5.333330000e-02 8.000000000e-03 -2.891210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -2.891210000e-19 + vertex 5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -2.891210000e-19 + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + vertex 6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + vertex 6.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 7.333330000e-02 8.000000000e-03 -4.336810000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -4.336810000e-19 + vertex 7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -4.336810000e-19 + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + vertex 8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + vertex 8.666670000e-02 8.000000000e-03 -2.168400000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -2.168400000e-19 + vertex 8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -2.168400000e-19 + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + vertex 9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + vertex 1.000000000e-01 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 0.000000000e+00 + vertex 1.000000000e-01 8.000000000e-03 -1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + vertex 2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + vertex 2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 2.666670000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 -5.782410000e-19 + vertex 3.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 4.000000000e-02 8.000000000e-03 -5.782410000e-19 + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 -2.891210000e-19 + vertex 4.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + vertex 5.333330000e-02 8.000000000e-03 -2.891210000e-19 + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + vertex 6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 6.000000000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex 6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 -4.336810000e-19 + vertex 6.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + vertex 7.333330000e-02 8.000000000e-03 -4.336810000e-19 + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + vertex 8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 -2.168400000e-19 + vertex 8.000000000e-02 8.000000000e-03 2.891210000e-19 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + vertex 8.666670000e-02 8.000000000e-03 -2.168400000e-19 + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + vertex 9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 1.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 0.000000000e+00 + vertex 9.333330000e-02 8.000000000e-03 4.698210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 2.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 1.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 3.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 2.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 4.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 3.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 2.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 3.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 4.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 5.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 6.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 7.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 8.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 8.000000000e-03 5.000000000e-02 + vertex 1.000000000e-01 8.000000000e-03 4.000000000e-02 + vertex 9.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet +endsolid +solid rightSolid_to_topAir + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 -5.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -5.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -5.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 -4.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 -3.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 -2.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 -1.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 0.000000000e+00 + vertex -9.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -6.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -5.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -5.782410000e-19 + vertex -2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -2.666670000e-02 8.000000000e-03 -5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -5.782410000e-19 + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 0.000000000e+00 + vertex -1.000000000e-01 8.000000000e-03 1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -1.000000000e-01 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -9.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -8.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -7.333330000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -6.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -5.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.666670000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -4.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + vertex -3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 -5.782410000e-19 + vertex -3.333330000e-02 8.000000000e-03 5.782410000e-19 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -2.666670000e-02 8.000000000e-03 -5.782410000e-19 + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + vertex -2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -2.000000000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 1.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 2.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 3.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 8.000000000e-03 4.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 5.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -1.000000000e-01 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -9.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -8.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -7.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -6.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -5.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -4.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -3.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 5.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.666670000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 5.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -2.000000000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet +endsolid +solid leftSolid_to_heater + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex 1.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet +endsolid +solid rightSolid_to_heater + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -5.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 -2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 5.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 8.000000000e-03 5.000000000e-02 + vertex -1.333330000e-02 8.000000000e-03 4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet +endsolid +solid leftSolid_to_bottomAir + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 5.782410000e-17 + outer loop + vertex 2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 5.782410000e-17 + outer loop + vertex 2.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 4.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -2.891210000e-17 + outer loop + vertex 4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -5.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal -4.336793316e-17 1.000000000e+00 -2.891210000e-17 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -5.000000000e-02 + vertex 4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -4.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -5.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 -5.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -5.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -5.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -4.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -4.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -5.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -5.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -5.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -5.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -5.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -4.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -5.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -5.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -5.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -5.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -5.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -5.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -4.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 -4.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -5.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 2.891210000e-17 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 2.891210000e-17 + outer loop + vertex 4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -4.336793316e-17 1.000000000e+00 5.782420000e-17 + outer loop + vertex 4.666670000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 4.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673716737e-17 1.000000000e+00 5.782420000e-17 + outer loop + vertex 4.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 5.333330000e-02 2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -2.891210000e-17 + outer loop + vertex 5.333330000e-02 2.891210000e-19 -3.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 8.673586632e-17 1.000000000e+00 -2.891210000e-17 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 5.333330000e-02 2.891210000e-19 -3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -3.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -4.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -4.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -3.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 -3.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -5.782410000e-17 + outer loop + vertex 2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782410000e-17 + outer loop + vertex 2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex 2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -8.673716737e-17 1.000000000e+00 2.891210000e-17 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 5.333330000e-02 2.891210000e-19 -3.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 2.891210000e-17 + outer loop + vertex 5.333330000e-02 2.891210000e-19 -3.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 5.333330000e-02 2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -2.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -3.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -2.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -2.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 -2.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782420000e-17 + outer loop + vertex 4.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -5.782420000e-17 + outer loop + vertex 4.666670000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 4.666670000e-02 -2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -2.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -2.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -1.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -1.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 -1.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 -2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 2.000000000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex 2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + vertex 2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + vertex 3.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 3.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 4.000000000e-02 -2.891210000e-19 -5.782410000e-19 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -5.782410000e-19 + vertex 4.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -5.782410000e-19 + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + vertex 4.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + vertex 5.333330000e-02 0.000000000e+00 -2.891210000e-19 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -2.891210000e-19 + vertex 5.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -2.891210000e-19 + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + vertex 6.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 -1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + vertex 6.666670000e-02 -4.336810000e-19 0.000000000e+00 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 0.000000000e+00 + vertex 6.666670000e-02 -4.336810000e-19 -1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 -1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 0.000000000e+00 + vertex 7.333330000e-02 -5.782410000e-19 -4.336810000e-19 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -4.336810000e-19 + vertex 7.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 -1.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -4.336810000e-19 + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + vertex 8.000000000e-02 4.336810000e-19 -1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 -1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + vertex 8.666670000e-02 2.891210000e-19 -2.168400000e-19 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -2.168400000e-19 + vertex 8.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 -1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -2.168400000e-19 + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + vertex 9.333330000e-02 1.445600000e-19 -1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 -1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + vertex 1.000000000e-01 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 0.000000000e+00 + vertex 1.000000000e-01 0.000000000e+00 -1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + vertex 2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + vertex 2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 2.666670000e-02 0.000000000e+00 5.782410000e-19 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 3.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 -5.782410000e-19 + vertex 3.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + vertex 4.000000000e-02 -2.891210000e-19 -5.782410000e-19 + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + vertex 4.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 -2.891210000e-19 + vertex 4.666670000e-02 2.891210000e-19 0.000000000e+00 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + vertex 5.333330000e-02 0.000000000e+00 -2.891210000e-19 + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + vertex 6.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 0.000000000e+00 + vertex 6.000000000e-02 -2.891210000e-19 5.782410000e-19 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 0.000000000e+00 + vertex 6.666670000e-02 -4.336810000e-19 1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 -4.336810000e-19 + vertex 6.666670000e-02 -4.336810000e-19 0.000000000e+00 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + vertex 7.333330000e-02 -5.782410000e-19 -4.336810000e-19 + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + vertex 8.000000000e-02 4.336810000e-19 1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 -2.168400000e-19 + vertex 8.000000000e-02 4.336810000e-19 2.891210000e-19 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + vertex 8.666670000e-02 2.891210000e-19 -2.168400000e-19 + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + vertex 9.333330000e-02 1.445600000e-19 1.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 1.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 0.000000000e+00 + vertex 9.333330000e-02 1.445600000e-19 4.698210000e-19 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -1.445600000e-17 + outer loop + vertex 6.666670000e-02 -2.891210000e-19 2.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 1.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 4.336843368e-17 1.000000000e+00 -1.445600000e-17 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 1.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 1.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 2.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 1.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 1.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 1.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 2.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 2.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 1.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 4.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 1.445600000e-17 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 3.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 2.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 1.445600000e-17 + outer loop + vertex 6.666670000e-02 -2.891210000e-19 2.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal 4.336843368e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 3.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 2.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 3.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 2.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 2.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 3.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 3.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 2.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 4.336778316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 4.666670000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 8.673620000e-17 + outer loop + vertex 4.666670000e-02 -5.782410000e-19 4.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 8.673620000e-17 + outer loop + vertex 4.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 4.666670000e-02 -5.782410000e-19 4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -1.445600000e-17 + outer loop + vertex 6.666670000e-02 -2.891210000e-19 4.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 3.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal 4.336843368e-17 1.000000000e+00 -1.445600000e-17 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 3.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 3.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 4.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 3.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 3.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 3.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 3.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 4.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 4.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 3.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 2.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 2.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 3.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 5.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 5.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 3.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal -8.673586632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 4.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 5.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 5.000000000e-02 + endloop + endfacet + facet normal 4.336778316e-17 1.000000000e+00 -8.673620000e-17 + outer loop + vertex 4.666670000e-02 2.891210000e-19 5.000000000e-02 + vertex 4.666670000e-02 -5.782410000e-19 4.000000000e-02 + vertex 4.000000000e-02 -2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 4.336858369e-17 1.000000000e+00 -8.673620000e-17 + outer loop + vertex 4.666670000e-02 -5.782410000e-19 4.000000000e-02 + vertex 4.666670000e-02 2.891210000e-19 5.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 4.666670000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 5.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 5.000000000e-02 + endloop + endfacet + facet normal 4.336793316e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 5.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 5.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 6.000000000e-02 -2.891210000e-19 4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 5.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 1.445600000e-17 + outer loop + vertex 6.666670000e-02 -4.336810000e-19 5.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 4.000000000e-02 + vertex 6.000000000e-02 -2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168421684e-17 1.000000000e+00 1.445600000e-17 + outer loop + vertex 6.666670000e-02 -2.891210000e-19 4.000000000e-02 + vertex 6.666670000e-02 -4.336810000e-19 5.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 5.000000000e-02 + endloop + endfacet + facet normal 4.336843368e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 5.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex 6.666670000e-02 -2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 7.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 5.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 5.000000000e-02 + endloop + endfacet + facet normal -1.517875411e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 5.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 4.000000000e-02 + vertex 7.333330000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.000000000e-02 4.336810000e-19 4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 5.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 5.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 5.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 4.000000000e-02 + vertex 8.000000000e-02 4.336810000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 8.666670000e-02 2.891210000e-19 4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 5.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 5.000000000e-02 + endloop + endfacet + facet normal 2.168436684e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 5.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 4.000000000e-02 + vertex 8.666670000e-02 2.891210000e-19 4.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex 9.333330000e-02 1.445600000e-19 4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 5.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 2.168389158e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.000000000e-01 0.000000000e+00 5.000000000e-02 + vertex 1.000000000e-01 0.000000000e+00 4.000000000e-02 + vertex 9.333330000e-02 1.445600000e-19 4.000000000e-02 + endloop + endfacet +endsolid +solid rightSolid_to_bottomAir + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 -5.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -5.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -5.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -4.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 5.782410000e-17 + outer loop + vertex -4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -5.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 5.782410000e-17 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -5.000000000e-02 + vertex -4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -5.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -5.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -5.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -5.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -5.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 5.782410000e-17 + outer loop + vertex -2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 5.782410000e-17 + outer loop + vertex -2.000000000e-02 0.000000000e+00 -5.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 -4.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -1.734711326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -8.000000000e-02 1.156480000e-18 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -1.156480000e-16 + outer loop + vertex -8.000000000e-02 1.156480000e-18 -3.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 1.734711326e-16 1.000000000e+00 -1.156480000e-16 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.000000000e-02 1.156480000e-18 -3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -3.000000000e-02 + vertex -4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -4.000000000e-02 0.000000000e+00 -4.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -4.000000000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.666670000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 5.782410000e-17 + outer loop + vertex -2.666670000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 5.782410000e-17 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -4.000000000e-02 + vertex -2.666670000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 -3.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -1.734711326e-16 1.000000000e+00 1.156480000e-16 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.000000000e-02 1.156480000e-18 -3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 1.156480000e-16 + outer loop + vertex -8.000000000e-02 1.156480000e-18 -3.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 1.734711326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -8.000000000e-02 1.156480000e-18 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.666670000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -2.666670000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.666670000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -2.000000000e-02 -5.782410000e-19 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 -2.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 -1.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 0.000000000e+00 + vertex -9.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -9.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -8.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -8.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -8.000000000e-02 0.000000000e+00 1.156480000e-18 + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -7.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 1.156480000e-18 + vertex -7.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.000000000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -5.333330000e-02 -5.782410000e-19 0.000000000e+00 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -5.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -4.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -4.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -4.000000000e-02 5.782410000e-19 0.000000000e+00 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 0.000000000e+00 + vertex -4.000000000e-02 5.782410000e-19 -1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 -1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 0.000000000e+00 + vertex -3.333330000e-02 -5.782410000e-19 0.000000000e+00 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -3.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 -1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -2.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.000000000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 0.000000000e+00 + vertex -1.000000000e-01 0.000000000e+00 1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.000000000e-01 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -9.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -9.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 1.156480000e-18 + vertex -8.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 1.156480000e-18 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 1.156480000e-18 + vertex -8.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -8.000000000e-02 0.000000000e+00 1.156480000e-18 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -7.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -7.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -6.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -6.000000000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -5.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -5.333330000e-02 -5.782410000e-19 0.000000000e+00 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -4.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 0.000000000e+00 + vertex -4.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 0.000000000e+00 + vertex -4.000000000e-02 5.782410000e-19 1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -4.000000000e-02 5.782410000e-19 0.000000000e+00 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 0.000000000e+00 + vertex -3.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -3.333330000e-02 -5.782410000e-19 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.666670000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -2.000000000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 1.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 1.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 2.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 2.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.666670000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 3.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 4.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 3.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal -1.734740347e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -2.666670000e-02 5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -2.666670000e-02 5.782410000e-19 4.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 3.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -5.782410000e-17 + outer loop + vertex -2.666670000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.666670000e-02 5.782410000e-19 4.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.000000000e-01 0.000000000e+00 4.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 5.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -1.000000000e-01 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -9.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -9.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -8.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -8.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -7.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -7.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -6.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 5.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 5.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -6.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -5.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 5.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -5.333330000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.666670000e-02 0.000000000e+00 4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 5.000000000e-02 + endloop + endfacet + facet normal -8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 5.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 4.000000000e-02 + vertex -4.666670000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 -0.000000000e+00 + outer loop + vertex -4.000000000e-02 5.782410000e-19 4.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 5.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 5.000000000e-02 + endloop + endfacet + facet normal 1.734714326e-16 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 5.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -4.000000000e-02 5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal -8.673701737e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -3.333330000e-02 -5.782410000e-19 4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 5.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal -1.734740347e-16 1.000000000e+00 5.782410000e-17 + outer loop + vertex -2.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -2.666670000e-02 5.782410000e-19 4.000000000e-02 + vertex -3.333330000e-02 -5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 5.782410000e-17 + outer loop + vertex -2.666670000e-02 5.782410000e-19 4.000000000e-02 + vertex -2.666670000e-02 0.000000000e+00 5.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 8.673571632e-17 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -2.666670000e-02 5.782410000e-19 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -2.000000000e-02 0.000000000e+00 4.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 5.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -2.000000000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet +endsolid +solid heater_to_bottomAir + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -5.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -5.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -5.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -5.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -5.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -5.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -5.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -4.000000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -4.000000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -4.000000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -3.200000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -4.000000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -4.000000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -4.000000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -4.000000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -4.000000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -4.000000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -2.400000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -3.200000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -1.600000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -2.400000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 -1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -1.600000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex -6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 -1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 -2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 0.000000000e+00 -8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 -1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 -2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 -1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex -1.333330000e-02 -4.000000000e-02 0.000000000e+00 + vertex -1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -4.000000000e-02 0.000000000e+00 + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex 1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -4.000000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 0.000000000e+00 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex -1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex 1.333330000e-02 -2.400000000e-02 0.000000000e+00 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex 1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex -1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex -1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex 1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex 1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex -1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 1.333330000e-02 0.000000000e+00 -1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 -1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex -1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -4.000000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -4.000000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -4.000000000e-02 0.000000000e+00 + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -1.333330000e-02 -4.000000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -4.000000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -4.000000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -4.000000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -3.200000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -4.000000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -4.000000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -4.000000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -4.000000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -4.000000000e-02 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -4.000000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + endloop + endfacet + facet normal -1.000000000e+00 -0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex 1.333330000e-02 -4.000000000e-02 0.000000000e+00 + vertex 1.333330000e-02 -4.000000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -4.000000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -4.000000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -4.000000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 -0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex -1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex -1.333330000e-02 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 1.156480000e-18 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -2.400000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -3.200000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + vertex 1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex 1.333330000e-02 -3.200000000e-02 1.156480000e-18 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -3.200000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -3.200000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -3.200000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 -0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex -1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -1.600000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -2.400000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -2.400000000e-02 0.000000000e+00 + vertex 1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex 1.333330000e-02 -2.400000000e-02 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -2.400000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -2.400000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -2.400000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex -1.333330000e-02 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 1.000000000e-02 + vertex -6.666670000e-03 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -1.600000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex 0.000000000e+00 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal -1.000000000e+00 -0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 -1.600000000e-02 -1.156480000e-18 + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -1.600000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 -1.600000000e-02 1.000000000e-02 + vertex 6.666670000e-03 -1.600000000e-02 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex -1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex -1.333330000e-02 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex -6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 1.000000000e-02 + vertex -6.666670000e-03 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 0.000000000e+00 -8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex 0.000000000e+00 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + vertex 1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal -1.000000000e+00 0.000000000e+00 -0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 0.000000000e+00 + vertex 1.333330000e-02 -8.000000000e-03 0.000000000e+00 + endloop + endfacet + facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00 + outer loop + vertex 6.666670000e-03 -8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 -0.000000000e+00 -1.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 1.333330000e-02 -8.000000000e-03 1.000000000e-02 + vertex 6.666670000e-03 -8.000000000e-03 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 1.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 1.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 1.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 2.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 2.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 2.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 3.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 3.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 3.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 5.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex -1.333330000e-02 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex -6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 5.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 5.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 4.000000000e-02 + vertex -6.666670000e-03 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 0.000000000e+00 0.000000000e+00 4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 5.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 5.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex 0.000000000e+00 0.000000000e+00 4.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 6.666670000e-03 0.000000000e+00 4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 5.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 5.000000000e-02 + endloop + endfacet + facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00 + outer loop + vertex 1.333330000e-02 0.000000000e+00 5.000000000e-02 + vertex 1.333330000e-02 0.000000000e+00 4.000000000e-02 + vertex 6.666670000e-03 0.000000000e+00 4.000000000e-02 + endloop + endfacet +endsolid diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/heater.stl b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/heater.stl deleted file mode 100644 index a9b98f11f2d6fdfa038bab142d4a99ef2df0d11c..0000000000000000000000000000000000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/heater.stl +++ /dev/null @@ -1,2366 +0,0 @@ -solid minY - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 -0.01 - vertex -0.006666667 -0.04 -0.01 - vertex -0.006666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 0 - vertex -0.01333333 -0.04 0 - vertex -0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 -0.04 0 - vertex -0.006666667 -0.04 0 - vertex -0.006666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 -0.04 0.01 - vertex -0.01333333 -0.04 0.01 - vertex -0.01333333 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 -0.01 - vertex 0 -0.04 -0.01 - vertex 0 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 0 - vertex -0.006666667 -0.04 0 - vertex -0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 -0.04 0 - vertex 0 -0.04 0 - vertex 0 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 -0.04 0.01 - vertex -0.006666667 -0.04 0.01 - vertex -0.006666667 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 -0.01 - vertex 0.006666667 -0.04 -0.01 - vertex 0.006666667 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 0 - vertex 0 -0.04 0 - vertex 0 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 -0.04 0 - vertex 0.006666667 -0.04 0 - vertex 0.006666667 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 -0.04 0.01 - vertex 0 -0.04 0.01 - vertex 0 -0.04 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 -0.01 - vertex 0.01333333 -0.04 -0.01 - vertex 0.01333333 -0.04 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 0 - vertex 0.006666667 -0.04 0 - vertex 0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 -0.04 0 - vertex 0.01333333 -0.04 0 - vertex 0.01333333 -0.04 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 -0.04 0.01 - vertex 0.006666667 -0.04 0.01 - vertex 0.006666667 -0.04 0 - endloop - endfacet -endsolid minY -solid minZ - facet normal 0 0 -1 - outer loop - vertex -0.01333333 0 -0.05 - vertex -0.01333333 0.008 -0.05 - vertex -0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0.008 -0.05 - vertex -0.006666667 0 -0.05 - vertex -0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 0 -0.05 - vertex -0.006666667 0.008 -0.05 - vertex 0 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0.008 -0.05 - vertex 0 0 -0.05 - vertex -0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 0 -0.05 - vertex 0 0.008 -0.05 - vertex 0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0.008 -0.05 - vertex 0.006666667 0 -0.05 - vertex 0 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 0 -0.05 - vertex 0.006666667 0.008 -0.05 - vertex 0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0.008 -0.05 - vertex 0.01333333 0 -0.05 - vertex 0.006666667 0 -0.05 - endloop - endfacet -endsolid minZ -solid maxZ - facet normal 0 0 1 - outer loop - vertex -0.01333333 0 0.05 - vertex -0.006666667 0 0.05 - vertex -0.006666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.008 0.05 - vertex -0.01333333 0.008 0.05 - vertex -0.01333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0 0.05 - vertex 0 0 0.05 - vertex 0 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.008 0.05 - vertex -0.006666667 0.008 0.05 - vertex -0.006666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0 0.05 - vertex 0.006666667 0 0.05 - vertex 0.006666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.008 0.05 - vertex 0 0.008 0.05 - vertex 0 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0 0.05 - vertex 0.01333333 0 0.05 - vertex 0.01333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.008 0.05 - vertex 0.006666667 0.008 0.05 - vertex 0.006666667 0 0.05 - endloop - endfacet -endsolid maxZ -solid heater_to_topAir - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.05 - vertex -0.01333333 0.008 -0.04 - vertex -0.006666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.04 - vertex -0.006666667 0.008 -0.05 - vertex -0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.05 - vertex -0.006666667 0.008 -0.04 - vertex 0 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.04 - vertex 0 0.008 -0.05 - vertex -0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.05 - vertex 0 0.008 -0.04 - vertex 0.006666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.04 - vertex 0.006666667 0.008 -0.05 - vertex 0 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.05 - vertex 0.006666667 0.008 -0.04 - vertex 0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0.008 -0.05 - vertex 0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0.008 -0.03 - vertex -0.006666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.03 - vertex -0.006666667 0.008 -0.04 - vertex -0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.04 - vertex -0.006666667 0.008 -0.03 - vertex 0 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.03 - vertex 0 0.008 -0.04 - vertex -0.006666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.04 - vertex 0 0.008 -0.03 - vertex 0.006666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.03 - vertex 0.006666667 0.008 -0.04 - vertex 0 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.04 - vertex 0.006666667 0.008 -0.03 - vertex 0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0.008 -0.04 - vertex 0.006666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0.008 -0.02 - vertex -0.006666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.02 - vertex -0.006666667 0.008 -0.03 - vertex -0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.03 - vertex -0.006666667 0.008 -0.02 - vertex 0 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.02 - vertex 0 0.008 -0.03 - vertex -0.006666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.03 - vertex 0 0.008 -0.02 - vertex 0.006666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.02 - vertex 0.006666667 0.008 -0.03 - vertex 0 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.03 - vertex 0.006666667 0.008 -0.02 - vertex 0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0.008 -0.03 - vertex 0.006666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0.008 -0.01 - vertex -0.006666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.01 - vertex -0.006666667 0.008 -0.02 - vertex -0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.02 - vertex -0.006666667 0.008 -0.01 - vertex 0 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.01 - vertex 0 0.008 -0.02 - vertex -0.006666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.02 - vertex 0 0.008 -0.01 - vertex 0.006666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.01 - vertex 0.006666667 0.008 -0.02 - vertex 0 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.02 - vertex 0.006666667 0.008 -0.01 - vertex 0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0.008 -0.02 - vertex 0.006666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0.008 0 - vertex -0.006666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0 - vertex -0.006666667 0.008 -0.01 - vertex -0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 -0.01 - vertex -0.006666667 0.008 0 - vertex 0 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0 - vertex 0 0.008 -0.01 - vertex -0.006666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 -0.01 - vertex 0 0.008 0 - vertex 0.006666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0 - vertex 0.006666667 0.008 -0.01 - vertex 0 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 -0.01 - vertex 0.006666667 0.008 0 - vertex 0.01333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0 - vertex 0.01333333 0.008 -0.01 - vertex 0.006666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0 - vertex -0.01333333 0.008 0.01 - vertex -0.006666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.01 - vertex -0.006666667 0.008 0 - vertex -0.01333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0 - vertex -0.006666667 0.008 0.01 - vertex 0 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.01 - vertex 0 0.008 0 - vertex -0.006666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0 - vertex 0 0.008 0.01 - vertex 0.006666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.01 - vertex 0.006666667 0.008 0 - vertex 0 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0 - vertex 0.006666667 0.008 0.01 - vertex 0.01333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0.008 0 - vertex 0.006666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0.008 0.02 - vertex -0.006666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.02 - vertex -0.006666667 0.008 0.01 - vertex -0.01333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.01 - vertex -0.006666667 0.008 0.02 - vertex 0 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.02 - vertex 0 0.008 0.01 - vertex -0.006666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.01 - vertex 0 0.008 0.02 - vertex 0.006666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.02 - vertex 0.006666667 0.008 0.01 - vertex 0 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.01 - vertex 0.006666667 0.008 0.02 - vertex 0.01333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0.008 0.01 - vertex 0.006666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0.008 0.03 - vertex -0.006666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.03 - vertex -0.006666667 0.008 0.02 - vertex -0.01333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.02 - vertex -0.006666667 0.008 0.03 - vertex 0 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.03 - vertex 0 0.008 0.02 - vertex -0.006666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.02 - vertex 0 0.008 0.03 - vertex 0.006666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.03 - vertex 0.006666667 0.008 0.02 - vertex 0 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.02 - vertex 0.006666667 0.008 0.03 - vertex 0.01333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0.008 0.02 - vertex 0.006666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0.008 0.04 - vertex -0.006666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.04 - vertex -0.006666667 0.008 0.03 - vertex -0.01333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.03 - vertex -0.006666667 0.008 0.04 - vertex 0 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.04 - vertex 0 0.008 0.03 - vertex -0.006666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.03 - vertex 0 0.008 0.04 - vertex 0.006666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.04 - vertex 0.006666667 0.008 0.03 - vertex 0 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.03 - vertex 0.006666667 0.008 0.04 - vertex 0.01333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0.008 0.03 - vertex 0.006666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0.008 0.05 - vertex -0.006666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.05 - vertex -0.006666667 0.008 0.04 - vertex -0.01333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.008 0.04 - vertex -0.006666667 0.008 0.05 - vertex 0 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.05 - vertex 0 0.008 0.04 - vertex -0.006666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.008 0.04 - vertex 0 0.008 0.05 - vertex 0.006666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.05 - vertex 0.006666667 0.008 0.04 - vertex 0 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.008 0.04 - vertex 0.006666667 0.008 0.05 - vertex 0.01333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.05 - vertex 0.01333333 0.008 0.04 - vertex 0.006666667 0.008 0.04 - endloop - endfacet -endsolid heater_to_topAir -solid heater_to_rightSolid - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 -0.05 - vertex 0.01333333 0.008 -0.05 - vertex 0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 0 - vertex 0.01333333 0 0 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0 - vertex 0.01333333 0.008 0 - vertex 0.01333333 0.008 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0 0.01 - vertex 0.01333333 0 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0.008 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0 0.02 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0.02 - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0.008 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0 0.03 - vertex 0.01333333 0 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0.03 - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0.008 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0 0.04 - vertex 0.01333333 0 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0.04 - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0.008 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0.008 0.05 - vertex 0.01333333 0 0.05 - vertex 0.01333333 0 0.04 - endloop - endfacet -endsolid heater_to_rightSolid -solid heater_to_leftSolid - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 -0.05 - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0.008 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0.008 -0.05 - vertex -0.01333333 0 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0.008 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0.008 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0.008 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0 0 - vertex -0.01333333 0.008 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 0 - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 0 - vertex -0.01333333 0 0.01 - vertex -0.01333333 0.008 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0.008 0 - vertex -0.01333333 0 0 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.01333333 0 0.02 - vertex -0.01333333 0.008 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 0.02 - vertex -0.01333333 0 0.03 - vertex -0.01333333 0.008 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 0.03 - vertex -0.01333333 0 0.04 - vertex -0.01333333 0.008 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 0 0.04 - vertex -0.01333333 0 0.05 - vertex -0.01333333 0.008 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0.008 0.05 - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0 0.04 - endloop - endfacet -endsolid heater_to_leftSolid -solid heater_to_bottomAir - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 -0.05 - vertex -0.006666667 0 -0.05 - vertex -0.006666667 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 -0.04 - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 -0.05 - vertex 0 0 -0.05 - vertex 0 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 -0.04 - vertex -0.006666667 0 -0.04 - vertex -0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 -0.05 - vertex 0.006666667 0 -0.05 - vertex 0.006666667 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 -0.04 - vertex 0 0 -0.04 - vertex 0 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 -0.05 - vertex 0.01333333 0 -0.05 - vertex 0.01333333 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 -0.04 - vertex 0.006666667 0 -0.04 - vertex 0.006666667 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 -0.04 - vertex -0.006666667 0 -0.04 - vertex -0.006666667 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 -0.03 - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 -0.04 - vertex 0 0 -0.04 - vertex 0 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 -0.03 - vertex -0.006666667 0 -0.03 - vertex -0.006666667 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 -0.04 - vertex 0.006666667 0 -0.04 - vertex 0.006666667 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 -0.03 - vertex 0 0 -0.03 - vertex 0 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 -0.04 - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 -0.03 - vertex 0.006666667 0 -0.03 - vertex 0.006666667 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 -0.03 - vertex -0.006666667 0 -0.03 - vertex -0.006666667 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 -0.02 - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 -0.03 - vertex 0 0 -0.03 - vertex 0 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 -0.02 - vertex -0.006666667 0 -0.02 - vertex -0.006666667 0 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 -0.03 - vertex 0.006666667 0 -0.03 - vertex 0.006666667 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 -0.02 - vertex 0 0 -0.02 - vertex 0 0 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 -0.03 - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 -0.02 - vertex 0.006666667 0 -0.02 - vertex 0.006666667 0 -0.03 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.04 -0.01 - vertex -0.01333333 -0.032 -0.01 - vertex -0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.032 -0.01 - vertex -0.006666667 -0.04 -0.01 - vertex -0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.04 -0.01 - vertex -0.006666667 -0.032 -0.01 - vertex 0 -0.032 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.032 -0.01 - vertex 0 -0.04 -0.01 - vertex -0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.04 -0.01 - vertex 0 -0.032 -0.01 - vertex 0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.032 -0.01 - vertex 0.006666667 -0.04 -0.01 - vertex 0 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.04 -0.01 - vertex 0.006666667 -0.032 -0.01 - vertex 0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.032 -0.01 - vertex 0.01333333 -0.04 -0.01 - vertex 0.006666667 -0.04 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.032 -0.01 - vertex -0.01333333 -0.024 -0.01 - vertex -0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.024 -0.01 - vertex -0.006666667 -0.032 -0.01 - vertex -0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.032 -0.01 - vertex -0.006666667 -0.024 -0.01 - vertex 0 -0.024 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.024 -0.01 - vertex 0 -0.032 -0.01 - vertex -0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.032 -0.01 - vertex 0 -0.024 -0.01 - vertex 0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.024 -0.01 - vertex 0.006666667 -0.032 -0.01 - vertex 0 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.032 -0.01 - vertex 0.006666667 -0.024 -0.01 - vertex 0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.024 -0.01 - vertex 0.01333333 -0.032 -0.01 - vertex 0.006666667 -0.032 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.024 -0.01 - vertex -0.01333333 -0.016 -0.01 - vertex -0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.016 -0.01 - vertex -0.006666667 -0.024 -0.01 - vertex -0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.024 -0.01 - vertex -0.006666667 -0.016 -0.01 - vertex 0 -0.016 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.016 -0.01 - vertex 0 -0.024 -0.01 - vertex -0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.024 -0.01 - vertex 0 -0.016 -0.01 - vertex 0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.016 -0.01 - vertex 0.006666667 -0.024 -0.01 - vertex 0 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.024 -0.01 - vertex 0.006666667 -0.016 -0.01 - vertex 0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.016 -0.01 - vertex 0.01333333 -0.024 -0.01 - vertex 0.006666667 -0.024 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.016 -0.01 - vertex -0.01333333 -0.008 -0.01 - vertex -0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 -0.008 -0.01 - vertex -0.006666667 -0.016 -0.01 - vertex -0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.016 -0.01 - vertex -0.006666667 -0.008 -0.01 - vertex 0 -0.008 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 -0.008 -0.01 - vertex 0 -0.016 -0.01 - vertex -0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.016 -0.01 - vertex 0 -0.008 -0.01 - vertex 0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 -0.008 -0.01 - vertex 0.006666667 -0.016 -0.01 - vertex 0 -0.016 -0.01 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.016 -0.01 - vertex 0.006666667 -0.008 -0.01 - vertex 0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 -0.008 -0.01 - vertex 0.01333333 -0.016 -0.01 - vertex 0.006666667 -0.016 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 -0.02 - vertex -0.006666667 0 -0.02 - vertex -0.006666667 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 -0.01 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0 -0.02 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 -0.008 -0.01 - vertex -0.01333333 0 -0.01 - vertex -0.006666667 0 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0 -0.01 - vertex -0.006666667 -0.008 -0.01 - vertex -0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 -0.02 - vertex 0 0 -0.02 - vertex 0 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 -0.01 - vertex -0.006666667 0 -0.01 - vertex -0.006666667 0 -0.02 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 -0.008 -0.01 - vertex -0.006666667 0 -0.01 - vertex 0 0 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0 -0.01 - vertex 0 -0.008 -0.01 - vertex -0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 -0.02 - vertex 0.006666667 0 -0.02 - vertex 0.006666667 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 -0.01 - vertex 0 0 -0.01 - vertex 0 0 -0.02 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 -0.008 -0.01 - vertex 0 0 -0.01 - vertex 0.006666667 0 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0 -0.01 - vertex 0.006666667 -0.008 -0.01 - vertex 0 -0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 -0.02 - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.006666667 0 -0.01 - vertex 0.006666667 0 -0.02 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 -0.008 -0.01 - vertex 0.006666667 0 -0.01 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.01333333 -0.008 -0.01 - vertex 0.006666667 -0.008 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.04 -0.01 - vertex -0.01333333 -0.04 0 - vertex -0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.032 -0.01 - vertex -0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.04 -0.01 - vertex 0.01333333 -0.032 -0.01 - vertex 0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.04 0 - vertex 0.01333333 -0.04 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.032 -0.01 - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.024 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.024 -0.01 - vertex -0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.032 -0.01 - vertex 0.01333333 -0.024 -0.01 - vertex 0.01333333 -0.024 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.032 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.024 -0.01 - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.016 -1.156482e-18 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.016 -0.01 - vertex -0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.024 -0.01 - vertex 0.01333333 -0.016 -0.01 - vertex 0.01333333 -0.016 -1.156482e-18 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.024 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.016 -0.01 - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.008 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 -0.008 0 - vertex -0.01333333 -0.008 -0.01 - vertex -0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.016 -0.01 - vertex 0.01333333 -0.008 -0.01 - vertex 0.01333333 -0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.008 0 - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.016 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.008 -0.01 - vertex -0.01333333 -0.008 0 - vertex -0.01333333 0 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0 0 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.008 -0.01 - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0 - vertex 0.01333333 -0.008 0 - vertex 0.01333333 -0.008 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.04 0.01 - vertex -0.01333333 -0.032 0.01 - vertex -0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.04 0 - vertex -0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.04 0.01 - vertex -0.006666667 -0.04 0.01 - vertex -0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.032 0.01 - vertex -0.01333333 -0.032 0.01 - vertex -0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.04 0.01 - vertex 0 -0.04 0.01 - vertex 0 -0.032 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.032 0.01 - vertex -0.006666667 -0.032 0.01 - vertex -0.006666667 -0.04 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.04 0.01 - vertex 0.006666667 -0.04 0.01 - vertex 0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.032 0.01 - vertex 0 -0.032 0.01 - vertex 0 -0.04 0.01 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.032 0.01 - vertex 0.01333333 -0.04 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.04 0.01 - vertex 0.01333333 -0.04 0 - vertex 0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.04 0.01 - vertex 0.01333333 -0.04 0.01 - vertex 0.01333333 -0.032 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.032 0.01 - vertex 0.006666667 -0.032 0.01 - vertex 0.006666667 -0.04 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.032 1.156482e-18 - vertex -0.01333333 -0.032 0.01 - vertex -0.01333333 -0.024 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 -0.024 0.01 - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.032 0.01 - vertex -0.006666667 -0.032 0.01 - vertex -0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.024 0.01 - vertex -0.01333333 -0.024 0.01 - vertex -0.01333333 -0.032 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.032 0.01 - vertex 0 -0.032 0.01 - vertex 0 -0.024 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.024 0.01 - vertex -0.006666667 -0.024 0.01 - vertex -0.006666667 -0.032 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.032 0.01 - vertex 0.006666667 -0.032 0.01 - vertex 0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.024 0.01 - vertex 0 -0.024 0.01 - vertex 0 -0.032 0.01 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.01333333 -0.032 1.156482e-18 - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.024 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.024 0.01 - vertex 0.01333333 -0.032 0.01 - vertex 0.01333333 -0.032 1.156482e-18 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.032 0.01 - vertex 0.01333333 -0.032 0.01 - vertex 0.01333333 -0.024 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.024 0.01 - vertex 0.006666667 -0.024 0.01 - vertex 0.006666667 -0.032 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.024 0 - vertex -0.01333333 -0.024 0.01 - vertex -0.01333333 -0.016 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 -0.016 0.01 - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.024 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.024 0.01 - vertex -0.006666667 -0.024 0.01 - vertex -0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.016 0.01 - vertex -0.01333333 -0.016 0.01 - vertex -0.01333333 -0.024 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.024 0.01 - vertex 0 -0.024 0.01 - vertex 0 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.016 0.01 - vertex -0.006666667 -0.016 0.01 - vertex -0.006666667 -0.024 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.024 0.01 - vertex 0.006666667 -0.024 0.01 - vertex 0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.016 0.01 - vertex 0 -0.016 0.01 - vertex 0 -0.024 0.01 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.01333333 -0.024 0 - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.016 0.01 - vertex 0.01333333 -0.024 0.01 - vertex 0.01333333 -0.024 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.024 0.01 - vertex 0.01333333 -0.024 0.01 - vertex 0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.016 0.01 - vertex 0.006666667 -0.016 0.01 - vertex 0.006666667 -0.024 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.016 0.01 - vertex -0.01333333 -0.008 0.01 - vertex -0.01333333 -0.008 0 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -0.01333333 -0.008 0 - vertex -0.01333333 -0.016 -1.156482e-18 - vertex -0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.016 0.01 - vertex -0.006666667 -0.016 0.01 - vertex -0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.008 0.01 - vertex -0.01333333 -0.008 0.01 - vertex -0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.016 0.01 - vertex 0 -0.016 0.01 - vertex 0 -0.008 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.008 0.01 - vertex -0.006666667 -0.008 0.01 - vertex -0.006666667 -0.016 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.016 0.01 - vertex 0.006666667 -0.016 0.01 - vertex 0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.008 0.01 - vertex 0 -0.008 0.01 - vertex 0 -0.016 0.01 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 0.01333333 -0.008 0 - vertex 0.01333333 -0.008 0.01 - vertex 0.01333333 -0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.016 0.01 - vertex 0.01333333 -0.016 -1.156482e-18 - vertex 0.01333333 -0.008 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.016 0.01 - vertex 0.01333333 -0.016 0.01 - vertex 0.01333333 -0.008 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 -0.008 0.01 - vertex 0.006666667 -0.008 0.01 - vertex 0.006666667 -0.016 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.01333333 -0.008 0 - vertex -0.01333333 -0.008 0.01 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.01333333 0 0 - vertex -0.01333333 -0.008 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 -0.008 0.01 - vertex -0.006666667 -0.008 0.01 - vertex -0.006666667 0 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0 0.01 - vertex -0.01333333 0 0.01 - vertex -0.01333333 -0.008 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 -0.008 0.01 - vertex 0 -0.008 0.01 - vertex 0 0 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0 0.01 - vertex -0.006666667 0 0.01 - vertex -0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 -0.008 0.01 - vertex 0.006666667 -0.008 0.01 - vertex 0.006666667 0 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0 0.01 - vertex 0 0 0.01 - vertex 0 -0.008 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 -0.008 0 - vertex 0.01333333 0 0 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.01333333 -0.008 0.01 - vertex 0.01333333 -0.008 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 -0.008 0.01 - vertex 0.01333333 -0.008 0.01 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.006666667 0 0.01 - vertex 0.006666667 -0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.006666667 0 0.01 - vertex -0.006666667 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 0.02 - vertex -0.01333333 0 0.02 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 0.01 - vertex 0 0 0.01 - vertex 0 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 0.02 - vertex -0.006666667 0 0.02 - vertex -0.006666667 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 0.01 - vertex 0.006666667 0 0.01 - vertex 0.006666667 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 0.02 - vertex 0 0 0.02 - vertex 0 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 0.01 - vertex 0.01333333 0 0.01 - vertex 0.01333333 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 0.02 - vertex 0.006666667 0 0.02 - vertex 0.006666667 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 0.02 - vertex -0.006666667 0 0.02 - vertex -0.006666667 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 0.03 - vertex -0.01333333 0 0.03 - vertex -0.01333333 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 0.02 - vertex 0 0 0.02 - vertex 0 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 0.03 - vertex -0.006666667 0 0.03 - vertex -0.006666667 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 0.02 - vertex 0.006666667 0 0.02 - vertex 0.006666667 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 0.03 - vertex 0 0 0.03 - vertex 0 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 0.02 - vertex 0.01333333 0 0.02 - vertex 0.01333333 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 0.03 - vertex 0.006666667 0 0.03 - vertex 0.006666667 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 0.03 - vertex -0.006666667 0 0.03 - vertex -0.006666667 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 0.04 - vertex -0.01333333 0 0.04 - vertex -0.01333333 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 0.03 - vertex 0 0 0.03 - vertex 0 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 0.04 - vertex -0.006666667 0 0.04 - vertex -0.006666667 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 0.03 - vertex 0.006666667 0 0.03 - vertex 0.006666667 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 0.04 - vertex 0 0 0.04 - vertex 0 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 0.03 - vertex 0.01333333 0 0.03 - vertex 0.01333333 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 0.04 - vertex 0.006666667 0 0.04 - vertex 0.006666667 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0 0.04 - vertex -0.006666667 0 0.04 - vertex -0.006666667 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0 0.05 - vertex -0.01333333 0 0.05 - vertex -0.01333333 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0 0.04 - vertex 0 0 0.04 - vertex 0 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0 0.05 - vertex -0.006666667 0 0.05 - vertex -0.006666667 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0 0.04 - vertex 0.006666667 0 0.04 - vertex 0.006666667 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0 0.05 - vertex 0 0 0.05 - vertex 0 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0 0.04 - vertex 0.01333333 0 0.04 - vertex 0.01333333 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0 0.05 - vertex 0.006666667 0 0.05 - vertex 0.006666667 0 0.04 - endloop - endfacet -endsolid heater_to_bottomAir diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/leftSolid.stl b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/leftSolid.stl deleted file mode 100644 index 0cdc26c08492dad27cf5b7afde642f83f6045908..0000000000000000000000000000000000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/leftSolid.stl +++ /dev/null @@ -1,4296 +0,0 @@ -solid minX - facet normal -1 0 0 - outer loop - vertex -0.1 0 -0.05 - vertex -0.1 0 -0.04 - vertex -0.1 0.008 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 -0.04 - vertex -0.1 0.008 -0.05 - vertex -0.1 0 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 -0.04 - vertex -0.1 0 -0.03 - vertex -0.1 0.008 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 -0.03 - vertex -0.1 0.008 -0.04 - vertex -0.1 0 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 -0.03 - vertex -0.1 0 -0.02 - vertex -0.1 0.008 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 -0.02 - vertex -0.1 0.008 -0.03 - vertex -0.1 0 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 -0.02 - vertex -0.1 0 -0.01 - vertex -0.1 0.008 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 -0.01 - vertex -0.1 0.008 -0.02 - vertex -0.1 0 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 -0.01 - vertex -0.1 0 0 - vertex -0.1 0.008 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 0 - vertex -0.1 0.008 -0.01 - vertex -0.1 0 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 0 - vertex -0.1 0 0.01 - vertex -0.1 0.008 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 0.01 - vertex -0.1 0.008 0 - vertex -0.1 0 0 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 0.01 - vertex -0.1 0 0.02 - vertex -0.1 0.008 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 0.02 - vertex -0.1 0.008 0.01 - vertex -0.1 0 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 0.02 - vertex -0.1 0 0.03 - vertex -0.1 0.008 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 0.03 - vertex -0.1 0.008 0.02 - vertex -0.1 0 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 0.03 - vertex -0.1 0 0.04 - vertex -0.1 0.008 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 0.04 - vertex -0.1 0.008 0.03 - vertex -0.1 0 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0 0.04 - vertex -0.1 0 0.05 - vertex -0.1 0.008 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.008 0.05 - vertex -0.1 0.008 0.04 - vertex -0.1 0 0.04 - endloop - endfacet -endsolid minX -solid minZ - facet normal 0 0 -1 - outer loop - vertex -0.1 0 -0.05 - vertex -0.1 0.008 -0.05 - vertex -0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 0.008 -0.05 - vertex -0.09333333 0 -0.05 - vertex -0.1 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 0 -0.05 - vertex -0.09333333 0.008 -0.05 - vertex -0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 0.008 -0.05 - vertex -0.08666667 0 -0.05 - vertex -0.09333333 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 0 -0.05 - vertex -0.08666667 0.008 -0.05 - vertex -0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 0.008 -0.05 - vertex -0.08 0 -0.05 - vertex -0.08666667 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 0 -0.05 - vertex -0.08 0.008 -0.05 - vertex -0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 0.008 -0.05 - vertex -0.07333333 0 -0.05 - vertex -0.08 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 0 -0.05 - vertex -0.07333333 0.008 -0.05 - vertex -0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 0.008 -0.05 - vertex -0.06666667 0 -0.05 - vertex -0.07333333 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 0 -0.05 - vertex -0.06666667 0.008 -0.05 - vertex -0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 0.008 -0.05 - vertex -0.06 0 -0.05 - vertex -0.06666667 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 0 -0.05 - vertex -0.06 0.008 -0.05 - vertex -0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 0.008 -0.05 - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.06 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 0.008 -0.05 - vertex -0.04666667 0.008 -0.05 - vertex -0.04666667 0 -0.05 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -0.04666667 0 -0.05 - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 0.008 -0.05 - vertex -0.04 0.008 -0.05 - vertex -0.04 5.782412e-19 -0.05 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -0.04 5.782412e-19 -0.05 - vertex -0.04666667 0 -0.05 - vertex -0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 5.782412e-19 -0.05 - vertex -0.04 0.008 -0.05 - vertex -0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 0.008 -0.05 - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.04 5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 0.008 -0.05 - vertex -0.02666667 0.008 -0.05 - vertex -0.02666667 0 -0.05 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -0.02666667 0 -0.05 - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 0 -0.05 - vertex -0.02666667 0.008 -0.05 - vertex -0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 0.008 -0.05 - vertex -0.02 0 -0.05 - vertex -0.02666667 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 0 -0.05 - vertex -0.02 0.008 -0.05 - vertex -0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 0.008 -0.05 - vertex -0.01333333 0 -0.05 - vertex -0.02 0 -0.05 - endloop - endfacet -endsolid minZ -solid maxZ - facet normal 0 0 1 - outer loop - vertex -0.1 0 0.05 - vertex -0.09333333 0 0.05 - vertex -0.09333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.008 0.05 - vertex -0.1 0.008 0.05 - vertex -0.1 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0 0.05 - vertex -0.08666667 0 0.05 - vertex -0.08666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.008 0.05 - vertex -0.09333333 0.008 0.05 - vertex -0.09333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0 0.05 - vertex -0.08 0 0.05 - vertex -0.08 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.008 0.05 - vertex -0.08666667 0.008 0.05 - vertex -0.08666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0 0.05 - vertex -0.07333333 0 0.05 - vertex -0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.008 0.05 - vertex -0.08 0.008 0.05 - vertex -0.08 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0 0.05 - vertex -0.06666667 0 0.05 - vertex -0.06666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.008 0.05 - vertex -0.07333333 0.008 0.05 - vertex -0.07333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0 0.05 - vertex -0.06 0 0.05 - vertex -0.06 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.008 0.05 - vertex -0.06666667 0.008 0.05 - vertex -0.06666667 0 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -0.06 0 0.05 - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.008 0.05 - vertex -0.06 0.008 0.05 - vertex -0.06 0 0.05 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -0.04666667 0 0.05 - vertex -0.04666667 0.008 0.05 - vertex -0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.008 0.05 - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.04666667 0 0.05 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -0.04 5.782412e-19 0.05 - vertex -0.04 0.008 0.05 - vertex -0.04666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.008 0.05 - vertex -0.04666667 0 0.05 - vertex -0.04 5.782412e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -0.04 5.782412e-19 0.05 - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.008 0.05 - vertex -0.04 0.008 0.05 - vertex -0.04 5.782412e-19 0.05 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -0.02666667 0 0.05 - vertex -0.02666667 0.008 0.05 - vertex -0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.008 0.05 - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.02666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0 0.05 - vertex -0.02 0 0.05 - vertex -0.02 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.008 0.05 - vertex -0.02666667 0.008 0.05 - vertex -0.02666667 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0 0.05 - vertex -0.01333333 0 0.05 - vertex -0.01333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.008 0.05 - vertex -0.02 0.008 0.05 - vertex -0.02 0 0.05 - endloop - endfacet -endsolid maxZ -solid leftSolid_to_bottomAir - facet normal 0 -1 0 - outer loop - vertex -0.1 0 -0.05 - vertex -0.09333333 0 -0.05 - vertex -0.09333333 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 -0.04 - vertex -0.1 0 -0.04 - vertex -0.1 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 -0.05 - vertex -0.08666667 0 -0.05 - vertex -0.08666667 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 -0.04 - vertex -0.09333333 0 -0.04 - vertex -0.09333333 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 -0.05 - vertex -0.08 0 -0.05 - vertex -0.08 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 -0.04 - vertex -0.08666667 0 -0.04 - vertex -0.08666667 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 -0.05 - vertex -0.07333333 0 -0.05 - vertex -0.07333333 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 -0.04 - vertex -0.08 0 -0.04 - vertex -0.08 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 -0.05 - vertex -0.06666667 0 -0.05 - vertex -0.06666667 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 -0.04 - vertex -0.07333333 0 -0.04 - vertex -0.07333333 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 -0.05 - vertex -0.06 0 -0.05 - vertex -0.06 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 -0.04 - vertex -0.06666667 0 -0.04 - vertex -0.06666667 0 -0.05 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 -0.05 - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.05333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.06 0 -0.04 - vertex -0.06 0 -0.05 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.05 - vertex -0.04666667 0 -0.05 - vertex -0.04666667 0 -0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.04 - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.05333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 8.673614e-17 -1 -5.782412e-17 - outer loop - vertex -0.04666667 0 -0.05 - vertex -0.04 5.782412e-19 -0.05 - vertex -0.04 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0 -0.04 - vertex -0.04666667 0 -0.04 - vertex -0.04666667 0 -0.05 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.05 - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.03333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 -5.782412e-17 - outer loop - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.04 0 -0.04 - vertex -0.04 5.782412e-19 -0.05 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.05 - vertex -0.02666667 0 -0.05 - vertex -0.02666667 0 -0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 -0.04 - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.03333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal 0 -1 -5.782412e-17 - outer loop - vertex -0.02666667 0 -0.05 - vertex -0.02 0 -0.05 - vertex -0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.02666667 0 -0.04 - vertex -0.02666667 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 -0.05 - vertex -0.01333333 0 -0.05 - vertex -0.01333333 0 -0.04 - endloop - endfacet - facet normal 8.673614e-17 -1 -5.782412e-17 - outer loop - vertex -0.01333333 0 -0.04 - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.02 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 -0.04 - vertex -0.09333333 0 -0.04 - vertex -0.09333333 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 -0.03 - vertex -0.1 0 -0.03 - vertex -0.1 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 -0.04 - vertex -0.08666667 0 -0.04 - vertex -0.08666667 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 -0.03 - vertex -0.09333333 0 -0.03 - vertex -0.09333333 0 -0.04 - endloop - endfacet - facet normal 0 -1 1.156482e-16 - outer loop - vertex -0.08666667 0 -0.04 - vertex -0.08 0 -0.04 - vertex -0.08 1.156482e-18 -0.03 - endloop - endfacet - facet normal 1.734722e-16 -1 0 - outer loop - vertex -0.08 1.156482e-18 -0.03 - vertex -0.08666667 0 -0.03 - vertex -0.08666667 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 -0.04 - vertex -0.07333333 0 -0.04 - vertex -0.07333333 0 -0.03 - endloop - endfacet - facet normal -1.734722e-16 -1 1.156482e-16 - outer loop - vertex -0.07333333 0 -0.03 - vertex -0.08 1.156482e-18 -0.03 - vertex -0.08 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 -0.04 - vertex -0.06666667 0 -0.04 - vertex -0.06666667 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 -0.03 - vertex -0.07333333 0 -0.03 - vertex -0.07333333 0 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 -0.04 - vertex -0.06 0 -0.04 - vertex -0.06 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 -0.03 - vertex -0.06666667 0 -0.03 - vertex -0.06666667 0 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 -0.04 - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.05333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.06 0 -0.03 - vertex -0.06 0 -0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.04 - vertex -0.04666667 0 -0.04 - vertex -0.04666667 0 -0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.03 - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.05333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex -0.04666667 0 -0.04 - vertex -0.04 0 -0.04 - vertex -0.04 5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.03 - vertex -0.04666667 0 -0.03 - vertex -0.04666667 0 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.04 0 -0.04 - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.03333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -1.734723e-16 -1 5.782412e-17 - outer loop - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.04 5.782412e-19 -0.03 - vertex -0.04 0 -0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 -5.782412e-17 - outer loop - vertex -0.03333333 -5.782412e-19 -0.04 - vertex -0.02666667 0 -0.04 - vertex -0.02666667 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.02666667 0 -0.04 - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -0 -1 -5.782412e-17 - outer loop - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.02666667 0 -0.04 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.02 -5.782412e-19 -0.04 - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0 -0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.01333333 0 -0.03 - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 -0.03 - vertex -0.09333333 0 -0.03 - vertex -0.09333333 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 -0.02 - vertex -0.1 0 -0.02 - vertex -0.1 0 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 -0.03 - vertex -0.08666667 0 -0.03 - vertex -0.08666667 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 -0.02 - vertex -0.09333333 0 -0.02 - vertex -0.09333333 0 -0.03 - endloop - endfacet - facet normal 1.734722e-16 -1 -1.156482e-16 - outer loop - vertex -0.08666667 0 -0.03 - vertex -0.08 1.156482e-18 -0.03 - vertex -0.08 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 -0.02 - vertex -0.08666667 0 -0.02 - vertex -0.08666667 0 -0.03 - endloop - endfacet - facet normal -1.734722e-16 -1 0 - outer loop - vertex -0.08 1.156482e-18 -0.03 - vertex -0.07333333 0 -0.03 - vertex -0.07333333 0 -0.02 - endloop - endfacet - facet normal -0 -1 -1.156482e-16 - outer loop - vertex -0.07333333 0 -0.02 - vertex -0.08 0 -0.02 - vertex -0.08 1.156482e-18 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 -0.03 - vertex -0.06666667 0 -0.03 - vertex -0.06666667 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 -0.02 - vertex -0.07333333 0 -0.02 - vertex -0.07333333 0 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 -0.03 - vertex -0.06 0 -0.03 - vertex -0.06 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 -0.02 - vertex -0.06666667 0 -0.02 - vertex -0.06666667 0 -0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 -0.03 - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.05333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.06 0 -0.02 - vertex -0.06 0 -0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.03 - vertex -0.04666667 0 -0.03 - vertex -0.04666667 0 -0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.02 - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.05333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.03 - vertex -0.04 5.782412e-19 -0.03 - vertex -0.04 5.782412e-19 -0.02 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.02 - vertex -0.04666667 0 -0.02 - vertex -0.04666667 0 -0.03 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.03333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.04 5.782412e-19 -0.02 - vertex -0.04 5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex -0.03333333 -5.782412e-19 -0.03 - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.02666667 0 -0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 -0.02 - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.03333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex -0.02666667 -5.782412e-19 -0.03 - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.02 0 -0.02 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex -0.02 0 -0.02 - vertex -0.02666667 0 -0.02 - vertex -0.02666667 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.02 -5.782412e-19 -0.03 - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0 -0.02 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex -0.01333333 0 -0.02 - vertex -0.02 0 -0.02 - vertex -0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 -0.02 - vertex -0.09333333 0 -0.02 - vertex -0.09333333 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 -0.01 - vertex -0.1 0 -0.01 - vertex -0.1 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 -0.02 - vertex -0.08666667 0 -0.02 - vertex -0.08666667 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 -0.01 - vertex -0.09333333 0 -0.01 - vertex -0.09333333 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 -0.02 - vertex -0.08 0 -0.02 - vertex -0.08 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 -0.01 - vertex -0.08666667 0 -0.01 - vertex -0.08666667 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 -0.02 - vertex -0.07333333 0 -0.02 - vertex -0.07333333 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 -0.01 - vertex -0.08 0 -0.01 - vertex -0.08 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 -0.02 - vertex -0.06666667 0 -0.02 - vertex -0.06666667 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 -0.01 - vertex -0.07333333 0 -0.01 - vertex -0.07333333 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 -0.02 - vertex -0.06 0 -0.02 - vertex -0.06 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 -0.01 - vertex -0.06666667 0 -0.01 - vertex -0.06666667 0 -0.02 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 -0.02 - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.05333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.06 0 -0.01 - vertex -0.06 0 -0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.02 - vertex -0.04666667 0 -0.02 - vertex -0.04666667 0 -0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.01 - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.05333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.02 - vertex -0.04 5.782412e-19 -0.02 - vertex -0.04 5.782412e-19 -0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.01 - vertex -0.04666667 0 -0.01 - vertex -0.04666667 0 -0.02 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.02 - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.03333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.04 5.782412e-19 -0.01 - vertex -0.04 5.782412e-19 -0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.02 - vertex -0.02666667 0 -0.02 - vertex -0.02666667 0 -0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 -0.01 - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.03333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0 -0.02 - vertex -0.02 0 -0.02 - vertex -0.02 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0 -0.01 - vertex -0.02666667 0 -0.01 - vertex -0.02666667 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 -0.02 - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 -0.01 - vertex -0.02 0 -0.01 - vertex -0.02 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 -0.01 - vertex -0.09333333 0 -0.01 - vertex -0.09333333 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 0 - vertex -0.1 0 0 - vertex -0.1 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 -0.01 - vertex -0.08666667 0 -0.01 - vertex -0.08666667 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 0 - vertex -0.09333333 0 0 - vertex -0.09333333 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 0 - vertex -0.08666667 0 -0.01 - vertex -0.08 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 -0.01 - vertex -0.08 0 1.156482e-18 - vertex -0.08666667 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 0 - vertex -0.08 0 1.156482e-18 - vertex -0.08 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 -0.01 - vertex -0.07333333 0 -0.01 - vertex -0.07333333 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 -0.01 - vertex -0.06666667 0 -0.01 - vertex -0.06666667 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 0 - vertex -0.07333333 0 0 - vertex -0.07333333 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 -0.01 - vertex -0.06 0 -0.01 - vertex -0.06 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 0 - vertex -0.06666667 0 0 - vertex -0.06666667 0 -0.01 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 -0.01 - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.05333333 -5.782412e-19 0 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0 - vertex -0.06 0 0 - vertex -0.06 0 -0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 -0.01 - vertex -0.04666667 0 -0.01 - vertex -0.04666667 0 0 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 0 - vertex -0.05333333 -5.782412e-19 0 - vertex -0.05333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 -0.01 - vertex -0.04 5.782412e-19 -0.01 - vertex -0.04 5.782412e-19 0 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 0 - vertex -0.04666667 0 0 - vertex -0.04666667 0 -0.01 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 -0.01 - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.03333333 -5.782412e-19 0 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0 - vertex -0.04 5.782412e-19 0 - vertex -0.04 5.782412e-19 -0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 -0.01 - vertex -0.02666667 0 -0.01 - vertex -0.02666667 0 0 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 0 - vertex -0.03333333 -5.782412e-19 0 - vertex -0.03333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0 -0.01 - vertex -0.02 0 -0.01 - vertex -0.02 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0 0 - vertex -0.02666667 0 0 - vertex -0.02666667 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 -0.01 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 0 - vertex -0.02 0 0 - vertex -0.02 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 0 - vertex -0.09333333 0 0 - vertex -0.09333333 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 0.01 - vertex -0.1 0 0.01 - vertex -0.1 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 0 - vertex -0.08666667 0 0 - vertex -0.08666667 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 0.01 - vertex -0.09333333 0 0.01 - vertex -0.09333333 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 1.156482e-18 - vertex -0.08 0 0.01 - vertex -0.08666667 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 0.01 - vertex -0.08666667 0 0 - vertex -0.08 0 1.156482e-18 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 1.156482e-18 - vertex -0.07333333 0 0 - vertex -0.07333333 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 0.01 - vertex -0.08 0 0.01 - vertex -0.08 0 1.156482e-18 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 0 - vertex -0.06666667 0 0 - vertex -0.06666667 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 0.01 - vertex -0.07333333 0 0.01 - vertex -0.07333333 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 0 - vertex -0.06 0 0 - vertex -0.06 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 0.01 - vertex -0.06666667 0 0.01 - vertex -0.06666667 0 0 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 0 - vertex -0.05333333 -5.782412e-19 0 - vertex -0.05333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.06 0 0.01 - vertex -0.06 0 0 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0 - vertex -0.04666667 0 0 - vertex -0.04666667 0 0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 0.01 - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.05333333 -5.782412e-19 0 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 0 - vertex -0.04 5.782412e-19 0 - vertex -0.04 5.782412e-19 0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.01 - vertex -0.04666667 0 0.01 - vertex -0.04666667 0 0 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 0 - vertex -0.03333333 -5.782412e-19 0 - vertex -0.03333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.04 5.782412e-19 0.01 - vertex -0.04 5.782412e-19 0 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0 - vertex -0.02666667 0 0 - vertex -0.02666667 0 0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 0.01 - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.03333333 -5.782412e-19 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0 0 - vertex -0.02 0 0 - vertex -0.02 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0 0.01 - vertex -0.02666667 0 0.01 - vertex -0.02666667 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 0 - vertex -0.01333333 0 0 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.02 0 0.01 - vertex -0.02 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 0.01 - vertex -0.09333333 0 0.01 - vertex -0.09333333 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 0.02 - vertex -0.1 0 0.02 - vertex -0.1 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 0.01 - vertex -0.08666667 0 0.01 - vertex -0.08666667 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 0.02 - vertex -0.09333333 0 0.02 - vertex -0.09333333 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 0.01 - vertex -0.08 0 0.01 - vertex -0.08 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 0.02 - vertex -0.08666667 0 0.02 - vertex -0.08666667 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 0.01 - vertex -0.07333333 0 0.01 - vertex -0.07333333 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 0.02 - vertex -0.08 0 0.02 - vertex -0.08 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 0.01 - vertex -0.06666667 0 0.01 - vertex -0.06666667 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 0.02 - vertex -0.07333333 0 0.02 - vertex -0.07333333 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 0.01 - vertex -0.06 0 0.01 - vertex -0.06 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 0.02 - vertex -0.06666667 0 0.02 - vertex -0.06666667 0 0.01 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 0.01 - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.05333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.06 0 0.02 - vertex -0.06 0 0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.01 - vertex -0.04666667 0 0.01 - vertex -0.04666667 0 0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 0.02 - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.05333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 0.01 - vertex -0.04 5.782412e-19 0.01 - vertex -0.04 5.782412e-19 0.02 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.02 - vertex -0.04666667 0 0.02 - vertex -0.04666667 0 0.01 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.01 - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.03333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.04 5.782412e-19 0.02 - vertex -0.04 5.782412e-19 0.01 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.01 - vertex -0.02666667 0 0.01 - vertex -0.02666667 0 0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 0.02 - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.03333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0 0.01 - vertex -0.02 0 0.01 - vertex -0.02 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0 0.02 - vertex -0.02666667 0 0.02 - vertex -0.02666667 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 0.01 - vertex -0.01333333 0 0.01 - vertex -0.01333333 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 0.02 - vertex -0.02 0 0.02 - vertex -0.02 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 0.02 - vertex -0.09333333 0 0.02 - vertex -0.09333333 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 0.03 - vertex -0.1 0 0.03 - vertex -0.1 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 0.02 - vertex -0.08666667 0 0.02 - vertex -0.08666667 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 0.03 - vertex -0.09333333 0 0.03 - vertex -0.09333333 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 0.02 - vertex -0.08 0 0.02 - vertex -0.08 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 0.03 - vertex -0.08666667 0 0.03 - vertex -0.08666667 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 0.02 - vertex -0.07333333 0 0.02 - vertex -0.07333333 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 0.03 - vertex -0.08 0 0.03 - vertex -0.08 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 0.02 - vertex -0.06666667 0 0.02 - vertex -0.06666667 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 0.03 - vertex -0.07333333 0 0.03 - vertex -0.07333333 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 0.02 - vertex -0.06 0 0.02 - vertex -0.06 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 0.03 - vertex -0.06666667 0 0.03 - vertex -0.06666667 0 0.02 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 0.02 - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.05333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.06 0 0.03 - vertex -0.06 0 0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.02 - vertex -0.04666667 0 0.02 - vertex -0.04666667 0 0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 0.03 - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.05333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 0.02 - vertex -0.04 5.782412e-19 0.02 - vertex -0.04 5.782412e-19 0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.03 - vertex -0.04666667 0 0.03 - vertex -0.04666667 0 0.02 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.02 - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.03333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.04 5.782412e-19 0.03 - vertex -0.04 5.782412e-19 0.02 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.02 - vertex -0.02666667 0 0.02 - vertex -0.02666667 0 0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 0.03 - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.03333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0 0.02 - vertex -0.02 0 0.02 - vertex -0.02 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0 0.03 - vertex -0.02666667 0 0.03 - vertex -0.02666667 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 0.02 - vertex -0.01333333 0 0.02 - vertex -0.01333333 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 0.03 - vertex -0.02 0 0.03 - vertex -0.02 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 0.03 - vertex -0.09333333 0 0.03 - vertex -0.09333333 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 0.04 - vertex -0.1 0 0.04 - vertex -0.1 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 0.03 - vertex -0.08666667 0 0.03 - vertex -0.08666667 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 0.04 - vertex -0.09333333 0 0.04 - vertex -0.09333333 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 0.03 - vertex -0.08 0 0.03 - vertex -0.08 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 0.04 - vertex -0.08666667 0 0.04 - vertex -0.08666667 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 0.03 - vertex -0.07333333 0 0.03 - vertex -0.07333333 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 0.04 - vertex -0.08 0 0.04 - vertex -0.08 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 0.03 - vertex -0.06666667 0 0.03 - vertex -0.06666667 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 0.04 - vertex -0.07333333 0 0.04 - vertex -0.07333333 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 0.03 - vertex -0.06 0 0.03 - vertex -0.06 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 0.04 - vertex -0.06666667 0 0.04 - vertex -0.06666667 0 0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 0.03 - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.05333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.06 0 0.04 - vertex -0.06 0 0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.03 - vertex -0.04666667 0 0.03 - vertex -0.04666667 0 0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 0.04 - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.05333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 0.03 - vertex -0.04 5.782412e-19 0.03 - vertex -0.04 5.782412e-19 0.04 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.04 - vertex -0.04666667 0 0.04 - vertex -0.04666667 0 0.03 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.03 - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.03333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.04 5.782412e-19 0.04 - vertex -0.04 5.782412e-19 0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 5.782412e-17 - outer loop - vertex -0.03333333 -5.782412e-19 0.03 - vertex -0.02666667 0 0.03 - vertex -0.02666667 5.782412e-19 0.04 - endloop - endfacet - facet normal 1.734725e-16 -1 0 - outer loop - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0 0.03 - vertex -0.02 0 0.03 - vertex -0.02 0 0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 5.782412e-17 - outer loop - vertex -0.02 0 0.04 - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.02666667 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 0.03 - vertex -0.01333333 0 0.03 - vertex -0.01333333 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 0.04 - vertex -0.02 0 0.04 - vertex -0.02 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0 0.04 - vertex -0.09333333 0 0.04 - vertex -0.09333333 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0 0.05 - vertex -0.1 0 0.05 - vertex -0.1 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0 0.04 - vertex -0.08666667 0 0.04 - vertex -0.08666667 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0 0.05 - vertex -0.09333333 0 0.05 - vertex -0.09333333 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0 0.04 - vertex -0.08 0 0.04 - vertex -0.08 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0 0.05 - vertex -0.08666667 0 0.05 - vertex -0.08666667 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0 0.04 - vertex -0.07333333 0 0.04 - vertex -0.07333333 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0 0.05 - vertex -0.08 0 0.05 - vertex -0.08 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0 0.04 - vertex -0.06666667 0 0.04 - vertex -0.06666667 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0 0.05 - vertex -0.07333333 0 0.05 - vertex -0.07333333 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0 0.04 - vertex -0.06 0 0.04 - vertex -0.06 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0 0.05 - vertex -0.06666667 0 0.05 - vertex -0.06666667 0 0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.06 0 0.04 - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.05333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.06 0 0.05 - vertex -0.06 0 0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.05333333 -5.782412e-19 0.04 - vertex -0.04666667 0 0.04 - vertex -0.04666667 0 0.05 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.04666667 0 0.05 - vertex -0.05333333 -5.782412e-19 0.05 - vertex -0.05333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04666667 0 0.04 - vertex -0.04 5.782412e-19 0.04 - vertex -0.04 5.782412e-19 0.05 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.05 - vertex -0.04666667 0 0.05 - vertex -0.04666667 0 0.04 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.04 5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.03333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal -1.734723e-16 -1 0 - outer loop - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.04 5.782412e-19 0.05 - vertex -0.04 5.782412e-19 0.04 - endloop - endfacet - facet normal 1.734725e-16 -1 -5.782412e-17 - outer loop - vertex -0.03333333 -5.782412e-19 0.04 - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.02666667 0 0.05 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex -0.02666667 0 0.05 - vertex -0.03333333 -5.782412e-19 0.05 - vertex -0.03333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex -0.02666667 5.782412e-19 0.04 - vertex -0.02 0 0.04 - vertex -0.02 0 0.05 - endloop - endfacet - facet normal -0 -1 -5.782412e-17 - outer loop - vertex -0.02 0 0.05 - vertex -0.02666667 0 0.05 - vertex -0.02666667 5.782412e-19 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0 0.04 - vertex -0.01333333 0 0.04 - vertex -0.01333333 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0 0.05 - vertex -0.02 0 0.05 - vertex -0.02 0 0.04 - endloop - endfacet -endsolid leftSolid_to_bottomAir -solid leftSolid_to_heater - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 -0.05 - vertex -0.01333333 0.008 -0.05 - vertex -0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 -0.04 - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 -0.03 - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 -0.02 - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 -0.01 - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 0 - vertex -0.01333333 0 0 - vertex -0.01333333 0 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0 - vertex -0.01333333 0.008 0 - vertex -0.01333333 0.008 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0 0.01 - vertex -0.01333333 0 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0.01 - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0.008 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0 0.02 - vertex -0.01333333 0 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0.02 - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0.008 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0 0.03 - vertex -0.01333333 0 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0.03 - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0.008 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0 0.04 - vertex -0.01333333 0 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0 0.04 - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0.008 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -0.01333333 0.008 0.05 - vertex -0.01333333 0 0.05 - vertex -0.01333333 0 0.04 - endloop - endfacet -endsolid leftSolid_to_heater -solid leftSolid_to_topAir - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 -0.05 - vertex -0.1 0.008 -0.04 - vertex -0.09333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.04 - vertex -0.09333333 0.008 -0.05 - vertex -0.1 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.05 - vertex -0.09333333 0.008 -0.04 - vertex -0.08666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.04 - vertex -0.08666667 0.008 -0.05 - vertex -0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.05 - vertex -0.08666667 0.008 -0.04 - vertex -0.08 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.04 - vertex -0.08 0.008 -0.05 - vertex -0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.05 - vertex -0.08 0.008 -0.04 - vertex -0.07333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.04 - vertex -0.07333333 0.008 -0.05 - vertex -0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.05 - vertex -0.07333333 0.008 -0.04 - vertex -0.06666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.04 - vertex -0.06666667 0.008 -0.05 - vertex -0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.05 - vertex -0.06666667 0.008 -0.04 - vertex -0.06 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.04 - vertex -0.06 0.008 -0.05 - vertex -0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.05 - vertex -0.06 0.008 -0.04 - vertex -0.05333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.04 - vertex -0.05333333 0.008 -0.05 - vertex -0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.05 - vertex -0.05333333 0.008 -0.04 - vertex -0.04666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.04 - vertex -0.04666667 0.008 -0.05 - vertex -0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.05 - vertex -0.04666667 0.008 -0.04 - vertex -0.04 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.04 - vertex -0.04 0.008 -0.05 - vertex -0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.05 - vertex -0.04 0.008 -0.04 - vertex -0.03333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.04 - vertex -0.03333333 0.008 -0.05 - vertex -0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.05 - vertex -0.03333333 0.008 -0.04 - vertex -0.02666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.04 - vertex -0.02666667 0.008 -0.05 - vertex -0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.05 - vertex -0.02666667 0.008 -0.04 - vertex -0.02 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.04 - vertex -0.02 0.008 -0.05 - vertex -0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.05 - vertex -0.02 0.008 -0.04 - vertex -0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0.008 -0.05 - vertex -0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 -0.04 - vertex -0.1 0.008 -0.03 - vertex -0.09333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.03 - vertex -0.09333333 0.008 -0.04 - vertex -0.1 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.04 - vertex -0.09333333 0.008 -0.03 - vertex -0.08666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.03 - vertex -0.08666667 0.008 -0.04 - vertex -0.09333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.04 - vertex -0.08666667 0.008 -0.03 - vertex -0.08 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.03 - vertex -0.08 0.008 -0.04 - vertex -0.08666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.04 - vertex -0.08 0.008 -0.03 - vertex -0.07333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.03 - vertex -0.07333333 0.008 -0.04 - vertex -0.08 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.04 - vertex -0.07333333 0.008 -0.03 - vertex -0.06666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.03 - vertex -0.06666667 0.008 -0.04 - vertex -0.07333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.04 - vertex -0.06666667 0.008 -0.03 - vertex -0.06 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.03 - vertex -0.06 0.008 -0.04 - vertex -0.06666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.04 - vertex -0.06 0.008 -0.03 - vertex -0.05333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.03 - vertex -0.05333333 0.008 -0.04 - vertex -0.06 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.04 - vertex -0.05333333 0.008 -0.03 - vertex -0.04666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.03 - vertex -0.04666667 0.008 -0.04 - vertex -0.05333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.04 - vertex -0.04666667 0.008 -0.03 - vertex -0.04 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.03 - vertex -0.04 0.008 -0.04 - vertex -0.04666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.04 - vertex -0.04 0.008 -0.03 - vertex -0.03333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.03 - vertex -0.03333333 0.008 -0.04 - vertex -0.04 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.04 - vertex -0.03333333 0.008 -0.03 - vertex -0.02666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.03 - vertex -0.02666667 0.008 -0.04 - vertex -0.03333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.04 - vertex -0.02666667 0.008 -0.03 - vertex -0.02 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.03 - vertex -0.02 0.008 -0.04 - vertex -0.02666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.04 - vertex -0.02 0.008 -0.03 - vertex -0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0.008 -0.04 - vertex -0.02 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 -0.03 - vertex -0.1 0.008 -0.02 - vertex -0.09333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.02 - vertex -0.09333333 0.008 -0.03 - vertex -0.1 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.03 - vertex -0.09333333 0.008 -0.02 - vertex -0.08666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.02 - vertex -0.08666667 0.008 -0.03 - vertex -0.09333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.03 - vertex -0.08666667 0.008 -0.02 - vertex -0.08 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.02 - vertex -0.08 0.008 -0.03 - vertex -0.08666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.03 - vertex -0.08 0.008 -0.02 - vertex -0.07333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.02 - vertex -0.07333333 0.008 -0.03 - vertex -0.08 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.03 - vertex -0.07333333 0.008 -0.02 - vertex -0.06666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.02 - vertex -0.06666667 0.008 -0.03 - vertex -0.07333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.03 - vertex -0.06666667 0.008 -0.02 - vertex -0.06 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.02 - vertex -0.06 0.008 -0.03 - vertex -0.06666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.03 - vertex -0.06 0.008 -0.02 - vertex -0.05333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.02 - vertex -0.05333333 0.008 -0.03 - vertex -0.06 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.03 - vertex -0.05333333 0.008 -0.02 - vertex -0.04666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.02 - vertex -0.04666667 0.008 -0.03 - vertex -0.05333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.03 - vertex -0.04666667 0.008 -0.02 - vertex -0.04 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.02 - vertex -0.04 0.008 -0.03 - vertex -0.04666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.03 - vertex -0.04 0.008 -0.02 - vertex -0.03333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.02 - vertex -0.03333333 0.008 -0.03 - vertex -0.04 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.03 - vertex -0.03333333 0.008 -0.02 - vertex -0.02666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.02 - vertex -0.02666667 0.008 -0.03 - vertex -0.03333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.03 - vertex -0.02666667 0.008 -0.02 - vertex -0.02 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.02 - vertex -0.02 0.008 -0.03 - vertex -0.02666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.03 - vertex -0.02 0.008 -0.02 - vertex -0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0.008 -0.03 - vertex -0.02 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 -0.02 - vertex -0.1 0.008 -0.01 - vertex -0.09333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.01 - vertex -0.09333333 0.008 -0.02 - vertex -0.1 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.02 - vertex -0.09333333 0.008 -0.01 - vertex -0.08666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.01 - vertex -0.08666667 0.008 -0.02 - vertex -0.09333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.02 - vertex -0.08666667 0.008 -0.01 - vertex -0.08 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.01 - vertex -0.08 0.008 -0.02 - vertex -0.08666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.02 - vertex -0.08 0.008 -0.01 - vertex -0.07333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.01 - vertex -0.07333333 0.008 -0.02 - vertex -0.08 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.02 - vertex -0.07333333 0.008 -0.01 - vertex -0.06666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.01 - vertex -0.06666667 0.008 -0.02 - vertex -0.07333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.02 - vertex -0.06666667 0.008 -0.01 - vertex -0.06 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.01 - vertex -0.06 0.008 -0.02 - vertex -0.06666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.02 - vertex -0.06 0.008 -0.01 - vertex -0.05333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.01 - vertex -0.05333333 0.008 -0.02 - vertex -0.06 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.02 - vertex -0.05333333 0.008 -0.01 - vertex -0.04666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.01 - vertex -0.04666667 0.008 -0.02 - vertex -0.05333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.02 - vertex -0.04666667 0.008 -0.01 - vertex -0.04 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.01 - vertex -0.04 0.008 -0.02 - vertex -0.04666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.02 - vertex -0.04 0.008 -0.01 - vertex -0.03333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.01 - vertex -0.03333333 0.008 -0.02 - vertex -0.04 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.02 - vertex -0.03333333 0.008 -0.01 - vertex -0.02666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.01 - vertex -0.02666667 0.008 -0.02 - vertex -0.03333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.02 - vertex -0.02666667 0.008 -0.01 - vertex -0.02 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.01 - vertex -0.02 0.008 -0.02 - vertex -0.02666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.02 - vertex -0.02 0.008 -0.01 - vertex -0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0.008 -0.02 - vertex -0.02 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 -0.01 - vertex -0.1 0.008 0 - vertex -0.09333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0 - vertex -0.09333333 0.008 -0.01 - vertex -0.1 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 -0.01 - vertex -0.09333333 0.008 0 - vertex -0.08666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0 - vertex -0.08666667 0.008 -0.01 - vertex -0.09333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 -0.01 - vertex -0.08666667 0.008 0 - vertex -0.08 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0 - vertex -0.08 0.008 -0.01 - vertex -0.08666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 -0.01 - vertex -0.08 0.008 0 - vertex -0.07333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.07333333 0.008 -0.01 - vertex -0.08 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 -0.01 - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.06666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0 - vertex -0.06666667 0.008 -0.01 - vertex -0.07333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 -0.01 - vertex -0.06666667 0.008 0 - vertex -0.06 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0 - vertex -0.06 0.008 -0.01 - vertex -0.06666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 -0.01 - vertex -0.06 0.008 0 - vertex -0.05333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0 - vertex -0.05333333 0.008 -0.01 - vertex -0.06 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 -0.01 - vertex -0.05333333 0.008 0 - vertex -0.04666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0 - vertex -0.04666667 0.008 -0.01 - vertex -0.05333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 -0.01 - vertex -0.04666667 0.008 0 - vertex -0.04 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0 - vertex -0.04 0.008 -0.01 - vertex -0.04666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 -0.01 - vertex -0.04 0.008 0 - vertex -0.03333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.03333333 0.008 -0.01 - vertex -0.04 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.02666667 0.008 -0.01 - vertex -0.03333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 -0.01 - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.02666667 0.008 -5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 -0.01 - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.02 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0 - vertex -0.02 0.008 -0.01 - vertex -0.02666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 -0.01 - vertex -0.02 0.008 0 - vertex -0.01333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0 - vertex -0.01333333 0.008 -0.01 - vertex -0.02 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 0 - vertex -0.1 0.008 0.01 - vertex -0.09333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.01 - vertex -0.09333333 0.008 0 - vertex -0.1 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0 - vertex -0.09333333 0.008 0.01 - vertex -0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.01 - vertex -0.08666667 0.008 0 - vertex -0.09333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0 - vertex -0.08666667 0.008 0.01 - vertex -0.08 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.01 - vertex -0.08 0.008 0 - vertex -0.08666667 0.008 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.08 0.008 0.01 - vertex -0.07333333 0.008 0.01 - vertex -0.07333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.08 0.008 0 - vertex -0.08 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.07333333 0.008 0.01 - vertex -0.06666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.01 - vertex -0.06666667 0.008 0 - vertex -0.07333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0 - vertex -0.06666667 0.008 0.01 - vertex -0.06 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.01 - vertex -0.06 0.008 0 - vertex -0.06666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0 - vertex -0.06 0.008 0.01 - vertex -0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.01 - vertex -0.05333333 0.008 0 - vertex -0.06 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0 - vertex -0.05333333 0.008 0.01 - vertex -0.04666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.01 - vertex -0.04666667 0.008 0 - vertex -0.05333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0 - vertex -0.04666667 0.008 0.01 - vertex -0.04 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.01 - vertex -0.04 0.008 0 - vertex -0.04666667 0.008 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.04 0.008 0.01 - vertex -0.03333333 0.008 0.01 - vertex -0.03333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.04 0.008 0 - vertex -0.04 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.03333333 0.008 0.01 - vertex -0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.01 - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.03333333 0.008 5.782412e-19 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.02666667 0.008 0.01 - vertex -0.02 0.008 0.01 - vertex -0.02 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0 - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0 - vertex -0.02 0.008 0.01 - vertex -0.01333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0.008 0 - vertex -0.02 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 0.01 - vertex -0.1 0.008 0.02 - vertex -0.09333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.02 - vertex -0.09333333 0.008 0.01 - vertex -0.1 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.01 - vertex -0.09333333 0.008 0.02 - vertex -0.08666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.02 - vertex -0.08666667 0.008 0.01 - vertex -0.09333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.01 - vertex -0.08666667 0.008 0.02 - vertex -0.08 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.02 - vertex -0.08 0.008 0.01 - vertex -0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.01 - vertex -0.08 0.008 0.02 - vertex -0.07333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.02 - vertex -0.07333333 0.008 0.01 - vertex -0.08 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.01 - vertex -0.07333333 0.008 0.02 - vertex -0.06666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.02 - vertex -0.06666667 0.008 0.01 - vertex -0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.01 - vertex -0.06666667 0.008 0.02 - vertex -0.06 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.02 - vertex -0.06 0.008 0.01 - vertex -0.06666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.01 - vertex -0.06 0.008 0.02 - vertex -0.05333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.02 - vertex -0.05333333 0.008 0.01 - vertex -0.06 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.01 - vertex -0.05333333 0.008 0.02 - vertex -0.04666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.02 - vertex -0.04666667 0.008 0.01 - vertex -0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.01 - vertex -0.04666667 0.008 0.02 - vertex -0.04 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.02 - vertex -0.04 0.008 0.01 - vertex -0.04666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.01 - vertex -0.04 0.008 0.02 - vertex -0.03333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.02 - vertex -0.03333333 0.008 0.01 - vertex -0.04 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.01 - vertex -0.03333333 0.008 0.02 - vertex -0.02666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.02 - vertex -0.02666667 0.008 0.01 - vertex -0.03333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.01 - vertex -0.02666667 0.008 0.02 - vertex -0.02 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.02 - vertex -0.02 0.008 0.01 - vertex -0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.01 - vertex -0.02 0.008 0.02 - vertex -0.01333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0.008 0.01 - vertex -0.02 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 0.02 - vertex -0.1 0.008 0.03 - vertex -0.09333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.03 - vertex -0.09333333 0.008 0.02 - vertex -0.1 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.02 - vertex -0.09333333 0.008 0.03 - vertex -0.08666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.03 - vertex -0.08666667 0.008 0.02 - vertex -0.09333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.02 - vertex -0.08666667 0.008 0.03 - vertex -0.08 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.03 - vertex -0.08 0.008 0.02 - vertex -0.08666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.02 - vertex -0.08 0.008 0.03 - vertex -0.07333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.03 - vertex -0.07333333 0.008 0.02 - vertex -0.08 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.02 - vertex -0.07333333 0.008 0.03 - vertex -0.06666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.03 - vertex -0.06666667 0.008 0.02 - vertex -0.07333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.02 - vertex -0.06666667 0.008 0.03 - vertex -0.06 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.03 - vertex -0.06 0.008 0.02 - vertex -0.06666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.02 - vertex -0.06 0.008 0.03 - vertex -0.05333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.03 - vertex -0.05333333 0.008 0.02 - vertex -0.06 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.02 - vertex -0.05333333 0.008 0.03 - vertex -0.04666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.03 - vertex -0.04666667 0.008 0.02 - vertex -0.05333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.02 - vertex -0.04666667 0.008 0.03 - vertex -0.04 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.03 - vertex -0.04 0.008 0.02 - vertex -0.04666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.02 - vertex -0.04 0.008 0.03 - vertex -0.03333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.03 - vertex -0.03333333 0.008 0.02 - vertex -0.04 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.02 - vertex -0.03333333 0.008 0.03 - vertex -0.02666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.03 - vertex -0.02666667 0.008 0.02 - vertex -0.03333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.02 - vertex -0.02666667 0.008 0.03 - vertex -0.02 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.03 - vertex -0.02 0.008 0.02 - vertex -0.02666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.02 - vertex -0.02 0.008 0.03 - vertex -0.01333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0.008 0.02 - vertex -0.02 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 0.03 - vertex -0.1 0.008 0.04 - vertex -0.09333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.04 - vertex -0.09333333 0.008 0.03 - vertex -0.1 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.03 - vertex -0.09333333 0.008 0.04 - vertex -0.08666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.04 - vertex -0.08666667 0.008 0.03 - vertex -0.09333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.03 - vertex -0.08666667 0.008 0.04 - vertex -0.08 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.04 - vertex -0.08 0.008 0.03 - vertex -0.08666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.03 - vertex -0.08 0.008 0.04 - vertex -0.07333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.04 - vertex -0.07333333 0.008 0.03 - vertex -0.08 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.03 - vertex -0.07333333 0.008 0.04 - vertex -0.06666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.04 - vertex -0.06666667 0.008 0.03 - vertex -0.07333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.03 - vertex -0.06666667 0.008 0.04 - vertex -0.06 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.04 - vertex -0.06 0.008 0.03 - vertex -0.06666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.03 - vertex -0.06 0.008 0.04 - vertex -0.05333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.04 - vertex -0.05333333 0.008 0.03 - vertex -0.06 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.03 - vertex -0.05333333 0.008 0.04 - vertex -0.04666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.04 - vertex -0.04666667 0.008 0.03 - vertex -0.05333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.03 - vertex -0.04666667 0.008 0.04 - vertex -0.04 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.04 - vertex -0.04 0.008 0.03 - vertex -0.04666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.03 - vertex -0.04 0.008 0.04 - vertex -0.03333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.04 - vertex -0.03333333 0.008 0.03 - vertex -0.04 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.03 - vertex -0.03333333 0.008 0.04 - vertex -0.02666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.04 - vertex -0.02666667 0.008 0.03 - vertex -0.03333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.03 - vertex -0.02666667 0.008 0.04 - vertex -0.02 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.04 - vertex -0.02 0.008 0.03 - vertex -0.02666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.03 - vertex -0.02 0.008 0.04 - vertex -0.01333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0.008 0.03 - vertex -0.02 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.008 0.04 - vertex -0.1 0.008 0.05 - vertex -0.09333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.05 - vertex -0.09333333 0.008 0.04 - vertex -0.1 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.008 0.04 - vertex -0.09333333 0.008 0.05 - vertex -0.08666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.05 - vertex -0.08666667 0.008 0.04 - vertex -0.09333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.008 0.04 - vertex -0.08666667 0.008 0.05 - vertex -0.08 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.05 - vertex -0.08 0.008 0.04 - vertex -0.08666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.008 0.04 - vertex -0.08 0.008 0.05 - vertex -0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.05 - vertex -0.07333333 0.008 0.04 - vertex -0.08 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.008 0.04 - vertex -0.07333333 0.008 0.05 - vertex -0.06666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.05 - vertex -0.06666667 0.008 0.04 - vertex -0.07333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.008 0.04 - vertex -0.06666667 0.008 0.05 - vertex -0.06 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.05 - vertex -0.06 0.008 0.04 - vertex -0.06666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.008 0.04 - vertex -0.06 0.008 0.05 - vertex -0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.05 - vertex -0.05333333 0.008 0.04 - vertex -0.06 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.008 0.04 - vertex -0.05333333 0.008 0.05 - vertex -0.04666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.05 - vertex -0.04666667 0.008 0.04 - vertex -0.05333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.008 0.04 - vertex -0.04666667 0.008 0.05 - vertex -0.04 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.05 - vertex -0.04 0.008 0.04 - vertex -0.04666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.008 0.04 - vertex -0.04 0.008 0.05 - vertex -0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.05 - vertex -0.03333333 0.008 0.04 - vertex -0.04 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.008 0.04 - vertex -0.03333333 0.008 0.05 - vertex -0.02666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.05 - vertex -0.02666667 0.008 0.04 - vertex -0.03333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.008 0.04 - vertex -0.02666667 0.008 0.05 - vertex -0.02 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.05 - vertex -0.02 0.008 0.04 - vertex -0.02666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.008 0.04 - vertex -0.02 0.008 0.05 - vertex -0.01333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.008 0.05 - vertex -0.01333333 0.008 0.04 - vertex -0.02 0.008 0.04 - endloop - endfacet -endsolid leftSolid_to_topAir diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/rightSolid.stl b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/rightSolid.stl deleted file mode 100644 index 35d7ba781aac003d0bec68b81f3720ac99c15a01..0000000000000000000000000000000000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/rightSolid.stl +++ /dev/null @@ -1,4296 +0,0 @@ -solid maxX - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.05 - vertex 0.1 0.008 -0.05 - vertex 0.1 0.008 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.04 - vertex 0.1 0 -0.04 - vertex 0.1 0 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.04 - vertex 0.1 0.008 -0.04 - vertex 0.1 0.008 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.03 - vertex 0.1 0 -0.03 - vertex 0.1 0 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.03 - vertex 0.1 0.008 -0.03 - vertex 0.1 0.008 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.02 - vertex 0.1 0 -0.02 - vertex 0.1 0 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.02 - vertex 0.1 0.008 -0.02 - vertex 0.1 0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.01 - vertex 0.1 0 -0.01 - vertex 0.1 0 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 -0.01 - vertex 0.1 0.008 -0.01 - vertex 0.1 0.008 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0 - vertex 0.1 0 0 - vertex 0.1 0 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0 - vertex 0.1 0.008 0 - vertex 0.1 0.008 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.01 - vertex 0.1 0 0.01 - vertex 0.1 0 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.01 - vertex 0.1 0.008 0.01 - vertex 0.1 0.008 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.02 - vertex 0.1 0 0.02 - vertex 0.1 0 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.02 - vertex 0.1 0.008 0.02 - vertex 0.1 0.008 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.03 - vertex 0.1 0 0.03 - vertex 0.1 0 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.03 - vertex 0.1 0.008 0.03 - vertex 0.1 0.008 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.04 - vertex 0.1 0 0.04 - vertex 0.1 0 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0 0.04 - vertex 0.1 0.008 0.04 - vertex 0.1 0.008 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.05 - vertex 0.1 0 0.05 - vertex 0.1 0 0.04 - endloop - endfacet -endsolid maxX -solid minZ - facet normal 0 0 -1 - outer loop - vertex 0.01333333 0 -0.05 - vertex 0.01333333 0.008 -0.05 - vertex 0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 0.008 -0.05 - vertex 0.02 0 -0.05 - vertex 0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 0 -0.05 - vertex 0.02 0.008 -0.05 - vertex 0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 0.008 -0.05 - vertex 0.02666667 0 -0.05 - vertex 0.02 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 0 -0.05 - vertex 0.02666667 0.008 -0.05 - vertex 0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 0.008 -0.05 - vertex 0.03333333 0 -0.05 - vertex 0.02666667 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 0 -0.05 - vertex 0.03333333 0.008 -0.05 - vertex 0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 0.008 -0.05 - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.03333333 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 0.008 -0.05 - vertex 0.04666667 0.008 -0.05 - vertex 0.04666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.04666667 0.008 -0.05 - vertex 0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 0.008 -0.05 - vertex 0.05333333 0 -0.05 - vertex 0.04666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 0 -0.05 - vertex 0.05333333 0.008 -0.05 - vertex 0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 0.008 -0.05 - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.05333333 0 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.06 0.008 -0.05 - vertex 0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 0.008 -0.05 - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.06 -2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.06666667 0.008 -0.05 - vertex 0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 0.008 -0.05 - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.06666667 -4.336809e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 0.008 -0.05 - vertex 0.08 0.008 -0.05 - vertex 0.08 4.336809e-19 -0.05 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 0.08 4.336809e-19 -0.05 - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 4.336809e-19 -0.05 - vertex 0.08 0.008 -0.05 - vertex 0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 0.008 -0.05 - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.08 4.336809e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.08666667 0.008 -0.05 - vertex 0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 0.008 -0.05 - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.08666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.09333333 0.008 -0.05 - vertex 0.1 0.008 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 0.008 -0.05 - vertex 0.1 0 -0.05 - vertex 0.09333333 1.445603e-19 -0.05 - endloop - endfacet -endsolid minZ -solid maxZ - facet normal 0 0 1 - outer loop - vertex 0.01333333 0 0.05 - vertex 0.02 0 0.05 - vertex 0.02 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.008 0.05 - vertex 0.01333333 0.008 0.05 - vertex 0.01333333 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0 0.05 - vertex 0.02666667 0 0.05 - vertex 0.02666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.008 0.05 - vertex 0.02 0.008 0.05 - vertex 0.02 0 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0 0.05 - vertex 0.03333333 0 0.05 - vertex 0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.008 0.05 - vertex 0.02666667 0.008 0.05 - vertex 0.02666667 0 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.03333333 0 0.05 - vertex 0.04 -2.891206e-19 0.05 - vertex 0.04 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.008 0.05 - vertex 0.03333333 0.008 0.05 - vertex 0.03333333 0 0.05 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.04666667 0.008 0.05 - vertex 0.04 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.008 0.05 - vertex 0.04 -2.891206e-19 0.05 - vertex 0.04666667 2.891206e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.05333333 0 0.05 - vertex 0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.008 0.05 - vertex 0.04666667 0.008 0.05 - vertex 0.04666667 2.891206e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.05333333 0 0.05 - vertex 0.06 -2.891206e-19 0.05 - vertex 0.06 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.008 0.05 - vertex 0.05333333 0.008 0.05 - vertex 0.05333333 0 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.06 -2.891206e-19 0.05 - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.06666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.008 0.05 - vertex 0.06 0.008 0.05 - vertex 0.06 -2.891206e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.008 0.05 - vertex 0.06666667 0.008 0.05 - vertex 0.06666667 -4.336809e-19 0.05 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 0.08 4.336809e-19 0.05 - vertex 0.08 0.008 0.05 - vertex 0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.008 0.05 - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.08 4.336809e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.08 4.336809e-19 0.05 - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.08666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.008 0.05 - vertex 0.08 0.008 0.05 - vertex 0.08 4.336809e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.09333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.008 0.05 - vertex 0.08666667 0.008 0.05 - vertex 0.08666667 2.891206e-19 0.05 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.1 0 0.05 - vertex 0.1 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 0.008 0.05 - vertex 0.09333333 0.008 0.05 - vertex 0.09333333 1.445603e-19 0.05 - endloop - endfacet -endsolid maxZ -solid rightSolid_to_bottomAir - facet normal 0 -1 -5.782412e-17 - outer loop - vertex 0.01333333 0 -0.05 - vertex 0.02 0 -0.05 - vertex 0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 -0.05 - vertex 0.02666667 0 -0.05 - vertex 0.02666667 0 -0.04 - endloop - endfacet - facet normal 8.673614e-17 -1 -5.782412e-17 - outer loop - vertex 0.02666667 0 -0.04 - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.02 0 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 -0.05 - vertex 0.03333333 0 -0.05 - vertex 0.03333333 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 -0.04 - vertex 0.02666667 0 -0.04 - vertex 0.02666667 0 -0.05 - endloop - endfacet - facet normal -4.336807e-17 -1 2.891206e-17 - outer loop - vertex 0.03333333 0 -0.05 - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.04 0 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0 -0.04 - vertex 0.03333333 0 -0.04 - vertex 0.03333333 0 -0.05 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.05 - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.04666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal 4.336807e-17 -1 2.891206e-17 - outer loop - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.04 0 -0.04 - vertex 0.04 -2.891206e-19 -0.05 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 -0.05 - vertex 0.05333333 0 -0.05 - vertex 0.05333333 0 -0.04 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.05333333 0 -0.04 - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.04666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 -0.05 - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.06 -2.891206e-19 -0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.05333333 0 -0.04 - vertex 0.05333333 0 -0.05 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.05 - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.06666667 -4.336809e-19 -0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.06 -2.891206e-19 -0.05 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.05 - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.07333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.05 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.05 - vertex 0.08 4.336809e-19 -0.05 - vertex 0.08 4.336809e-19 -0.04 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.05 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.05 - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.08666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.08 4.336809e-19 -0.04 - vertex 0.08 4.336809e-19 -0.05 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.05 - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.09333333 1.445603e-19 -0.04 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.05 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.05 - vertex 0.1 0 -0.05 - vertex 0.1 0 -0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 -0.04 - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.09333333 1.445603e-19 -0.05 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex 0.01333333 0 -0.04 - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0 -0.04 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.02 -5.782412e-19 -0.04 - vertex 0.02666667 0 -0.04 - vertex 0.02666667 0 -0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.02666667 0 -0.03 - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.02 -5.782412e-19 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 -0.04 - vertex 0.03333333 0 -0.04 - vertex 0.03333333 0 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 -0.03 - vertex 0.02666667 0 -0.03 - vertex 0.02666667 0 -0.04 - endloop - endfacet - facet normal 0 -1 -2.891206e-17 - outer loop - vertex 0.03333333 0 -0.04 - vertex 0.04 0 -0.04 - vertex 0.04 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.03333333 0 -0.03 - vertex 0.03333333 0 -0.04 - endloop - endfacet - facet normal 4.336807e-17 -1 -5.782412e-17 - outer loop - vertex 0.04 0 -0.04 - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.04666667 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -0 -1 -2.891206e-17 - outer loop - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.04 0 -0.04 - endloop - endfacet - facet normal -4.336813e-17 -1 2.891206e-17 - outer loop - vertex 0.04666667 2.891206e-19 -0.04 - vertex 0.05333333 0 -0.04 - vertex 0.05333333 2.891206e-19 -0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 -5.782412e-17 - outer loop - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.04666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 -0.04 - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.06 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 2.891206e-17 - outer loop - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.05333333 0 -0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.06666667 -4.336809e-19 -0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.04 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.07333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.04 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.04 - vertex 0.08 4.336809e-19 -0.04 - vertex 0.08 4.336809e-19 -0.03 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.08666667 2.891206e-19 -0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.08 4.336809e-19 -0.03 - vertex 0.08 4.336809e-19 -0.04 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.04 - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.09333333 1.445603e-19 -0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.04 - vertex 0.1 0 -0.04 - vertex 0.1 0 -0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 -0.03 - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.09333333 1.445603e-19 -0.04 - endloop - endfacet - facet normal -8.673614e-17 -1 5.782412e-17 - outer loop - vertex 0.01333333 0 -0.03 - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.02 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 -0.02 - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0 -0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.02 -5.782412e-19 -0.03 - vertex 0.02666667 0 -0.03 - vertex 0.02666667 0 -0.02 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex 0.02666667 0 -0.02 - vertex 0.02 0 -0.02 - vertex 0.02 -5.782412e-19 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 -0.03 - vertex 0.03333333 0 -0.03 - vertex 0.03333333 0 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 -0.02 - vertex 0.02666667 0 -0.02 - vertex 0.02666667 0 -0.03 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 -0.03 - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.04 -2.891206e-19 -0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.03333333 0 -0.02 - vertex 0.03333333 0 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.03 - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.04666667 -2.891206e-19 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.04 -2.891206e-19 -0.03 - endloop - endfacet - facet normal 8.673627e-17 -1 -2.891206e-17 - outer loop - vertex 0.04666667 -2.891206e-19 -0.03 - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.05333333 0 -0.02 - endloop - endfacet - facet normal 4.336813e-17 -1 0 - outer loop - vertex 0.05333333 0 -0.02 - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.04666667 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -8.673614e-17 -1 0 - outer loop - vertex 0.05333333 2.891206e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.06 -2.891206e-19 -0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 -2.891206e-17 - outer loop - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.05333333 0 -0.02 - vertex 0.05333333 2.891206e-19 -0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.06666667 -4.336809e-19 -0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.06 -2.891206e-19 -0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.07333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.03 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.03 - vertex 0.08 4.336809e-19 -0.03 - vertex 0.08 4.336809e-19 -0.02 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.08666667 2.891206e-19 -0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.08 4.336809e-19 -0.02 - vertex 0.08 4.336809e-19 -0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.03 - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.09333333 1.445603e-19 -0.02 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.03 - vertex 0.1 0 -0.03 - vertex 0.1 0 -0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 -0.02 - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.09333333 1.445603e-19 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 -0.02 - vertex 0.02 0 -0.02 - vertex 0.02 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 -0.01 - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 -0.02 - vertex 0.02666667 0 -0.02 - vertex 0.02666667 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0 -0.01 - vertex 0.02 0 -0.01 - vertex 0.02 0 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 -0.02 - vertex 0.03333333 0 -0.02 - vertex 0.03333333 0 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 -0.01 - vertex 0.02666667 0 -0.01 - vertex 0.02666667 0 -0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 -0.02 - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.04 -2.891206e-19 -0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.03333333 0 -0.01 - vertex 0.03333333 0 -0.02 - endloop - endfacet - facet normal 0 -1 5.782412e-17 - outer loop - vertex 0.04 -2.891206e-19 -0.02 - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.04666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.04 -2.891206e-19 -0.02 - endloop - endfacet - facet normal 4.336813e-17 -1 0 - outer loop - vertex 0.04666667 -2.891206e-19 -0.02 - vertex 0.05333333 0 -0.02 - vertex 0.05333333 0 -0.01 - endloop - endfacet - facet normal -4.336813e-17 -1 5.782412e-17 - outer loop - vertex 0.05333333 0 -0.01 - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.04666667 -2.891206e-19 -0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 -0.02 - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.06 -2.891206e-19 -0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.05333333 0 -0.01 - vertex 0.05333333 0 -0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.06666667 -4.336809e-19 -0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.06 -2.891206e-19 -0.02 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.07333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.06666667 -4.336809e-19 -0.02 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.02 - vertex 0.08 4.336809e-19 -0.02 - vertex 0.08 4.336809e-19 -0.01 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.08666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.08 4.336809e-19 -0.01 - vertex 0.08 4.336809e-19 -0.02 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.02 - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.09333333 1.445603e-19 -0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.08666667 2.891206e-19 -0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.02 - vertex 0.1 0 -0.02 - vertex 0.1 0 -0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 -0.01 - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.09333333 1.445603e-19 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.02 0 -0.01 - vertex 0.02 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 0 - vertex 0.01333333 0 0 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 -0.01 - vertex 0.02666667 0 -0.01 - vertex 0.02666667 0 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 5.782412e-19 - vertex 0.02 0 0 - vertex 0.02 0 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 -0.01 - vertex 0.03333333 0 -0.01 - vertex 0.03333333 0 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 0 - vertex 0.02666667 0 5.782412e-19 - vertex 0.02666667 0 -0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 -0.01 - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.04 -2.891206e-19 -5.782412e-19 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.03333333 0 0 - vertex 0.03333333 0 -0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 -0.01 - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.04666667 2.891206e-19 0 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0 - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.04 -2.891206e-19 -0.01 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 -0.01 - vertex 0.05333333 0 -0.01 - vertex 0.05333333 0 -2.891206e-19 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.05333333 0 -2.891206e-19 - vertex 0.04666667 2.891206e-19 0 - vertex 0.04666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 -0.01 - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.06 -2.891206e-19 5.782412e-19 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.05333333 0 -2.891206e-19 - vertex 0.05333333 0 -0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 -0.01 - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.06666667 -4.336809e-19 0 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0 - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.06 -2.891206e-19 -0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.06666667 -4.336809e-19 0 - vertex 0.06666667 -4.336809e-19 -0.01 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 -0.01 - vertex 0.08 4.336809e-19 -0.01 - vertex 0.08 4.336809e-19 2.891206e-19 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.07333333 -5.782412e-19 -0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 -0.01 - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.08 4.336809e-19 -0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 -0.01 - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.09333333 1.445603e-19 4.698209e-19 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.08666667 2.891206e-19 -0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 -0.01 - vertex 0.1 0 -0.01 - vertex 0.1 0 0 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 0 - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.09333333 1.445603e-19 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 0 - vertex 0.02 0 0 - vertex 0.02 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 0.01 - vertex 0.01333333 0 0.01 - vertex 0.01333333 0 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 5.782412e-19 - vertex 0.02666667 0 0.01 - vertex 0.02 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 0.01 - vertex 0.02 0 0 - vertex 0.02666667 0 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 5.782412e-19 - vertex 0.03333333 0 0 - vertex 0.03333333 0 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 0.01 - vertex 0.02666667 0 0.01 - vertex 0.02666667 0 5.782412e-19 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 0 - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.04 -2.891206e-19 0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.01 - vertex 0.03333333 0 0.01 - vertex 0.03333333 0 0 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0 - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.04 -2.891206e-19 0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.01 - vertex 0.04 -2.891206e-19 -5.782412e-19 - vertex 0.04666667 2.891206e-19 0 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0 - vertex 0.05333333 0 -2.891206e-19 - vertex 0.05333333 0 0.01 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.05333333 0 0.01 - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.04666667 2.891206e-19 0 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.06 -2.891206e-19 0.01 - vertex 0.05333333 0 0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 -0 - outer loop - vertex 0.05333333 0 0.01 - vertex 0.05333333 0 -2.891206e-19 - vertex 0.06 -2.891206e-19 5.782412e-19 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 5.782412e-19 - vertex 0.06666667 -4.336809e-19 0 - vertex 0.06666667 -4.336809e-19 0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.06 -2.891206e-19 0.01 - vertex 0.06 -2.891206e-19 5.782412e-19 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.07333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.06666667 -4.336809e-19 0 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.08 4.336809e-19 0.01 - vertex 0.07333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.07333333 -5.782412e-19 -4.336809e-19 - vertex 0.08 4.336809e-19 2.891206e-19 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 2.891206e-19 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.08666667 2.891206e-19 0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.08 4.336809e-19 0.01 - vertex 0.08 4.336809e-19 2.891206e-19 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.08666667 2.891206e-19 0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 -0 - outer loop - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.08666667 2.891206e-19 -2.168404e-19 - vertex 0.09333333 1.445603e-19 4.698209e-19 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 4.698209e-19 - vertex 0.1 0 0 - vertex 0.1 0 0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 0.01 - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.09333333 1.445603e-19 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.02 0 0.01 - vertex 0.02 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 0.02 - vertex 0.01333333 0 0.02 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 0.01 - vertex 0.02666667 0 0.01 - vertex 0.02666667 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0 0.02 - vertex 0.02 0 0.02 - vertex 0.02 0 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 0.01 - vertex 0.03333333 0 0.01 - vertex 0.03333333 0 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 0.02 - vertex 0.02666667 0 0.02 - vertex 0.02666667 0 0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 0.01 - vertex 0.04 -2.891206e-19 0.01 - vertex 0.04 -2.891206e-19 0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.02 - vertex 0.03333333 0 0.02 - vertex 0.03333333 0 0.01 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.01 - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.04666667 2.891206e-19 0.02 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.04 -2.891206e-19 0.02 - vertex 0.04 -2.891206e-19 0.01 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.01 - vertex 0.05333333 0 0.01 - vertex 0.05333333 0 0.02 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.05333333 0 0.02 - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.04666667 2.891206e-19 0.01 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 0.01 - vertex 0.06 -2.891206e-19 0.01 - vertex 0.06 -2.891206e-19 0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 0.02 - vertex 0.05333333 0 0.02 - vertex 0.05333333 0 0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 1.445603e-17 - outer loop - vertex 0.06 -2.891206e-19 0.01 - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.06666667 -2.891206e-19 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.06 -2.891206e-19 0.02 - vertex 0.06 -2.891206e-19 0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0.01 - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.07333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal -4.336813e-17 -1 1.445603e-17 - outer loop - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.06666667 -4.336809e-19 0.01 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.01 - vertex 0.08 4.336809e-19 0.01 - vertex 0.08 4.336809e-19 0.02 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.01 - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.08666667 2.891206e-19 0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.08 4.336809e-19 0.02 - vertex 0.08 4.336809e-19 0.01 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.01 - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.09333333 1.445603e-19 0.02 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.08666667 2.891206e-19 0.01 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.01 - vertex 0.1 0 0.01 - vertex 0.1 0 0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 0.02 - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.09333333 1.445603e-19 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 0.02 - vertex 0.02 0 0.02 - vertex 0.02 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 0.03 - vertex 0.01333333 0 0.03 - vertex 0.01333333 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 0.02 - vertex 0.02666667 0 0.02 - vertex 0.02666667 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0 0.03 - vertex 0.02 0 0.03 - vertex 0.02 0 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 0.02 - vertex 0.03333333 0 0.02 - vertex 0.03333333 0 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 0.03 - vertex 0.02666667 0 0.03 - vertex 0.02666667 0 0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 0.02 - vertex 0.04 -2.891206e-19 0.02 - vertex 0.04 -2.891206e-19 0.03 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.03 - vertex 0.03333333 0 0.03 - vertex 0.03333333 0 0.02 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.02 - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.04666667 2.891206e-19 0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.04 -2.891206e-19 0.03 - vertex 0.04 -2.891206e-19 0.02 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.02 - vertex 0.05333333 0 0.02 - vertex 0.05333333 0 0.03 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.05333333 0 0.03 - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.04666667 2.891206e-19 0.02 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 0.02 - vertex 0.06 -2.891206e-19 0.02 - vertex 0.06 -2.891206e-19 0.03 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 0.03 - vertex 0.05333333 0 0.03 - vertex 0.05333333 0 0.02 - endloop - endfacet - facet normal 0 -1 -1.445603e-17 - outer loop - vertex 0.06 -2.891206e-19 0.02 - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.06666667 -4.336809e-19 0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.06 -2.891206e-19 0.03 - vertex 0.06 -2.891206e-19 0.02 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.06666667 -2.891206e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.07333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 -1.445603e-17 - outer loop - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.06666667 -2.891206e-19 0.02 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.02 - vertex 0.08 4.336809e-19 0.02 - vertex 0.08 4.336809e-19 0.03 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.02 - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.08666667 2.891206e-19 0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.08 4.336809e-19 0.03 - vertex 0.08 4.336809e-19 0.02 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.02 - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.09333333 1.445603e-19 0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.08666667 2.891206e-19 0.02 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.02 - vertex 0.1 0 0.02 - vertex 0.1 0 0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 0.03 - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.09333333 1.445603e-19 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 0.03 - vertex 0.02 0 0.03 - vertex 0.02 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 0.04 - vertex 0.01333333 0 0.04 - vertex 0.01333333 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 0.03 - vertex 0.02666667 0 0.03 - vertex 0.02666667 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0 0.04 - vertex 0.02 0 0.04 - vertex 0.02 0 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 0.03 - vertex 0.03333333 0 0.03 - vertex 0.03333333 0 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 0.04 - vertex 0.02666667 0 0.04 - vertex 0.02666667 0 0.03 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 0.03 - vertex 0.04 -2.891206e-19 0.03 - vertex 0.04 -2.891206e-19 0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.04 - vertex 0.03333333 0 0.04 - vertex 0.03333333 0 0.03 - endloop - endfacet - facet normal 8.673614e-17 -1 -8.673618e-17 - outer loop - vertex 0.04 -2.891206e-19 0.03 - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.04666667 -5.782412e-19 0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.04 -2.891206e-19 0.04 - vertex 0.04 -2.891206e-19 0.03 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.03 - vertex 0.05333333 0 0.03 - vertex 0.05333333 0 0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 -8.673618e-17 - outer loop - vertex 0.05333333 0 0.04 - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.04666667 2.891206e-19 0.03 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 0.03 - vertex 0.06 -2.891206e-19 0.03 - vertex 0.06 -2.891206e-19 0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 0.04 - vertex 0.05333333 0 0.04 - vertex 0.05333333 0 0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 1.445603e-17 - outer loop - vertex 0.06 -2.891206e-19 0.03 - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.06666667 -2.891206e-19 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.06 -2.891206e-19 0.04 - vertex 0.06 -2.891206e-19 0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.07333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal -4.336813e-17 -1 1.445603e-17 - outer loop - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.06666667 -4.336809e-19 0.03 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.03 - vertex 0.08 4.336809e-19 0.03 - vertex 0.08 4.336809e-19 0.04 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.03 - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.08666667 2.891206e-19 0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.08 4.336809e-19 0.04 - vertex 0.08 4.336809e-19 0.03 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.03 - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.09333333 1.445603e-19 0.04 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.08666667 2.891206e-19 0.03 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.03 - vertex 0.1 0 0.03 - vertex 0.1 0 0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 0.04 - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.09333333 1.445603e-19 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0 0.04 - vertex 0.02 0 0.04 - vertex 0.02 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0 0.05 - vertex 0.01333333 0 0.05 - vertex 0.01333333 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0 0.04 - vertex 0.02666667 0 0.04 - vertex 0.02666667 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0 0.05 - vertex 0.02 0 0.05 - vertex 0.02 0 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0 0.04 - vertex 0.03333333 0 0.04 - vertex 0.03333333 0 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0 0.05 - vertex 0.02666667 0 0.05 - vertex 0.02666667 0 0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.03333333 0 0.04 - vertex 0.04 -2.891206e-19 0.04 - vertex 0.04 -2.891206e-19 0.05 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.04 -2.891206e-19 0.05 - vertex 0.03333333 0 0.05 - vertex 0.03333333 0 0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 8.673618e-17 - outer loop - vertex 0.04 -2.891206e-19 0.04 - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.04666667 2.891206e-19 0.05 - endloop - endfacet - facet normal 8.673614e-17 -1 0 - outer loop - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.04 -2.891206e-19 0.05 - vertex 0.04 -2.891206e-19 0.04 - endloop - endfacet - facet normal 8.673627e-17 -1 0 - outer loop - vertex 0.04666667 -5.782412e-19 0.04 - vertex 0.05333333 0 0.04 - vertex 0.05333333 0 0.05 - endloop - endfacet - facet normal -4.336813e-17 -1 8.673618e-17 - outer loop - vertex 0.05333333 0 0.05 - vertex 0.04666667 2.891206e-19 0.05 - vertex 0.04666667 -5.782412e-19 0.04 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.05333333 0 0.04 - vertex 0.06 -2.891206e-19 0.04 - vertex 0.06 -2.891206e-19 0.05 - endloop - endfacet - facet normal -4.336807e-17 -1 0 - outer loop - vertex 0.06 -2.891206e-19 0.05 - vertex 0.05333333 0 0.05 - vertex 0.05333333 0 0.04 - endloop - endfacet - facet normal 0 -1 -1.445603e-17 - outer loop - vertex 0.06 -2.891206e-19 0.04 - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.06666667 -4.336809e-19 0.05 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.06 -2.891206e-19 0.05 - vertex 0.06 -2.891206e-19 0.04 - endloop - endfacet - facet normal -4.336813e-17 -1 0 - outer loop - vertex 0.06666667 -2.891206e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.07333333 -5.782412e-19 0.05 - endloop - endfacet - facet normal -2.168407e-17 -1 -1.445603e-17 - outer loop - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.06666667 -4.336809e-19 0.05 - vertex 0.06666667 -2.891206e-19 0.04 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.07333333 -5.782412e-19 0.04 - vertex 0.08 4.336809e-19 0.04 - vertex 0.08 4.336809e-19 0.05 - endloop - endfacet - facet normal 1.517882e-16 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.05 - vertex 0.07333333 -5.782412e-19 0.05 - vertex 0.07333333 -5.782412e-19 0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08 4.336809e-19 0.04 - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.08666667 2.891206e-19 0.05 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.08 4.336809e-19 0.05 - vertex 0.08 4.336809e-19 0.04 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.08666667 2.891206e-19 0.04 - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.09333333 1.445603e-19 0.05 - endloop - endfacet - facet normal -2.168407e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.08666667 2.891206e-19 0.05 - vertex 0.08666667 2.891206e-19 0.04 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.09333333 1.445603e-19 0.04 - vertex 0.1 0 0.04 - vertex 0.1 0 0.05 - endloop - endfacet - facet normal -2.168403e-17 -1 0 - outer loop - vertex 0.1 0 0.05 - vertex 0.09333333 1.445603e-19 0.05 - vertex 0.09333333 1.445603e-19 0.04 - endloop - endfacet -endsolid rightSolid_to_bottomAir -solid rightSolid_to_topAir - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.05 - vertex 0.01333333 0.008 -0.04 - vertex 0.02 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.04 - vertex 0.02 0.008 -0.05 - vertex 0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.05 - vertex 0.02 0.008 -0.04 - vertex 0.02666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.04 - vertex 0.02666667 0.008 -0.05 - vertex 0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.05 - vertex 0.02666667 0.008 -0.04 - vertex 0.03333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.04 - vertex 0.03333333 0.008 -0.05 - vertex 0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.05 - vertex 0.03333333 0.008 -0.04 - vertex 0.04 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.04 - vertex 0.04 0.008 -0.05 - vertex 0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.05 - vertex 0.04 0.008 -0.04 - vertex 0.04666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.04 - vertex 0.04666667 0.008 -0.05 - vertex 0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.05 - vertex 0.04666667 0.008 -0.04 - vertex 0.05333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.04 - vertex 0.05333333 0.008 -0.05 - vertex 0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.05 - vertex 0.05333333 0.008 -0.04 - vertex 0.06 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.04 - vertex 0.06 0.008 -0.05 - vertex 0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.05 - vertex 0.06 0.008 -0.04 - vertex 0.06666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.04 - vertex 0.06666667 0.008 -0.05 - vertex 0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.05 - vertex 0.06666667 0.008 -0.04 - vertex 0.07333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.04 - vertex 0.07333333 0.008 -0.05 - vertex 0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.05 - vertex 0.07333333 0.008 -0.04 - vertex 0.08 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.04 - vertex 0.08 0.008 -0.05 - vertex 0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.05 - vertex 0.08 0.008 -0.04 - vertex 0.08666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.04 - vertex 0.08666667 0.008 -0.05 - vertex 0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.05 - vertex 0.08666667 0.008 -0.04 - vertex 0.09333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.04 - vertex 0.09333333 0.008 -0.05 - vertex 0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.05 - vertex 0.09333333 0.008 -0.04 - vertex 0.1 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 -0.04 - vertex 0.1 0.008 -0.05 - vertex 0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0.008 -0.03 - vertex 0.02 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.03 - vertex 0.02 0.008 -0.04 - vertex 0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.04 - vertex 0.02 0.008 -0.03 - vertex 0.02666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.03 - vertex 0.02666667 0.008 -0.04 - vertex 0.02 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.04 - vertex 0.02666667 0.008 -0.03 - vertex 0.03333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.03 - vertex 0.03333333 0.008 -0.04 - vertex 0.02666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.04 - vertex 0.03333333 0.008 -0.03 - vertex 0.04 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.03 - vertex 0.04 0.008 -0.04 - vertex 0.03333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.04 - vertex 0.04 0.008 -0.03 - vertex 0.04666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.03 - vertex 0.04666667 0.008 -0.04 - vertex 0.04 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.04 - vertex 0.04666667 0.008 -0.03 - vertex 0.05333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.03 - vertex 0.05333333 0.008 -0.04 - vertex 0.04666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.04 - vertex 0.05333333 0.008 -0.03 - vertex 0.06 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.03 - vertex 0.06 0.008 -0.04 - vertex 0.05333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.04 - vertex 0.06 0.008 -0.03 - vertex 0.06666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.03 - vertex 0.06666667 0.008 -0.04 - vertex 0.06 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.04 - vertex 0.06666667 0.008 -0.03 - vertex 0.07333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.03 - vertex 0.07333333 0.008 -0.04 - vertex 0.06666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.04 - vertex 0.07333333 0.008 -0.03 - vertex 0.08 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.03 - vertex 0.08 0.008 -0.04 - vertex 0.07333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.04 - vertex 0.08 0.008 -0.03 - vertex 0.08666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.03 - vertex 0.08666667 0.008 -0.04 - vertex 0.08 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.04 - vertex 0.08666667 0.008 -0.03 - vertex 0.09333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.03 - vertex 0.09333333 0.008 -0.04 - vertex 0.08666667 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.04 - vertex 0.09333333 0.008 -0.03 - vertex 0.1 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 -0.03 - vertex 0.1 0.008 -0.04 - vertex 0.09333333 0.008 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0.008 -0.02 - vertex 0.02 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.02 - vertex 0.02 0.008 -0.03 - vertex 0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.03 - vertex 0.02 0.008 -0.02 - vertex 0.02666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.02 - vertex 0.02666667 0.008 -0.03 - vertex 0.02 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.03 - vertex 0.02666667 0.008 -0.02 - vertex 0.03333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.02 - vertex 0.03333333 0.008 -0.03 - vertex 0.02666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.03 - vertex 0.03333333 0.008 -0.02 - vertex 0.04 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.02 - vertex 0.04 0.008 -0.03 - vertex 0.03333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.03 - vertex 0.04 0.008 -0.02 - vertex 0.04666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.02 - vertex 0.04666667 0.008 -0.03 - vertex 0.04 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.03 - vertex 0.04666667 0.008 -0.02 - vertex 0.05333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.02 - vertex 0.05333333 0.008 -0.03 - vertex 0.04666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.03 - vertex 0.05333333 0.008 -0.02 - vertex 0.06 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.02 - vertex 0.06 0.008 -0.03 - vertex 0.05333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.03 - vertex 0.06 0.008 -0.02 - vertex 0.06666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.02 - vertex 0.06666667 0.008 -0.03 - vertex 0.06 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.03 - vertex 0.06666667 0.008 -0.02 - vertex 0.07333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.02 - vertex 0.07333333 0.008 -0.03 - vertex 0.06666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.03 - vertex 0.07333333 0.008 -0.02 - vertex 0.08 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.02 - vertex 0.08 0.008 -0.03 - vertex 0.07333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.03 - vertex 0.08 0.008 -0.02 - vertex 0.08666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.02 - vertex 0.08666667 0.008 -0.03 - vertex 0.08 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.03 - vertex 0.08666667 0.008 -0.02 - vertex 0.09333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.02 - vertex 0.09333333 0.008 -0.03 - vertex 0.08666667 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.03 - vertex 0.09333333 0.008 -0.02 - vertex 0.1 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 -0.02 - vertex 0.1 0.008 -0.03 - vertex 0.09333333 0.008 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0.008 -0.01 - vertex 0.02 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.01 - vertex 0.02 0.008 -0.02 - vertex 0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.02 - vertex 0.02 0.008 -0.01 - vertex 0.02666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.01 - vertex 0.02666667 0.008 -0.02 - vertex 0.02 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.02 - vertex 0.02666667 0.008 -0.01 - vertex 0.03333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.01 - vertex 0.03333333 0.008 -0.02 - vertex 0.02666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.02 - vertex 0.03333333 0.008 -0.01 - vertex 0.04 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.01 - vertex 0.04 0.008 -0.02 - vertex 0.03333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.02 - vertex 0.04 0.008 -0.01 - vertex 0.04666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.01 - vertex 0.04666667 0.008 -0.02 - vertex 0.04 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.02 - vertex 0.04666667 0.008 -0.01 - vertex 0.05333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.01 - vertex 0.05333333 0.008 -0.02 - vertex 0.04666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.02 - vertex 0.05333333 0.008 -0.01 - vertex 0.06 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.01 - vertex 0.06 0.008 -0.02 - vertex 0.05333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.02 - vertex 0.06 0.008 -0.01 - vertex 0.06666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.01 - vertex 0.06666667 0.008 -0.02 - vertex 0.06 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.02 - vertex 0.06666667 0.008 -0.01 - vertex 0.07333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.01 - vertex 0.07333333 0.008 -0.02 - vertex 0.06666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.02 - vertex 0.07333333 0.008 -0.01 - vertex 0.08 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.01 - vertex 0.08 0.008 -0.02 - vertex 0.07333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.02 - vertex 0.08 0.008 -0.01 - vertex 0.08666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.01 - vertex 0.08666667 0.008 -0.02 - vertex 0.08 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.02 - vertex 0.08666667 0.008 -0.01 - vertex 0.09333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.01 - vertex 0.09333333 0.008 -0.02 - vertex 0.08666667 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.02 - vertex 0.09333333 0.008 -0.01 - vertex 0.1 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 -0.01 - vertex 0.1 0.008 -0.02 - vertex 0.09333333 0.008 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0.008 0 - vertex 0.02 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0 - vertex 0.02 0.008 -0.01 - vertex 0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 -0.01 - vertex 0.02 0.008 0 - vertex 0.02666667 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.02666667 0.008 -0.01 - vertex 0.02 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 -0.01 - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.03333333 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0 - vertex 0.03333333 0.008 -0.01 - vertex 0.02666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 -0.01 - vertex 0.03333333 0.008 0 - vertex 0.04 0.008 -5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -5.782412e-19 - vertex 0.04 0.008 -0.01 - vertex 0.03333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 -0.01 - vertex 0.04 0.008 -5.782412e-19 - vertex 0.04666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0 - vertex 0.04666667 0.008 -0.01 - vertex 0.04 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 -0.01 - vertex 0.04666667 0.008 0 - vertex 0.05333333 0.008 -2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.05333333 0.008 -0.01 - vertex 0.04666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 -0.01 - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.06 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 5.782412e-19 - vertex 0.06 0.008 -0.01 - vertex 0.05333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 -0.01 - vertex 0.06 0.008 5.782412e-19 - vertex 0.06666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0 - vertex 0.06666667 0.008 -0.01 - vertex 0.06 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 -0.01 - vertex 0.06666667 0.008 0 - vertex 0.07333333 0.008 -4.336809e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.07333333 0.008 -0.01 - vertex 0.06666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 -0.01 - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.08 0.008 2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 2.891206e-19 - vertex 0.08 0.008 -0.01 - vertex 0.07333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 -0.01 - vertex 0.08 0.008 2.891206e-19 - vertex 0.08666667 0.008 -2.168404e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.08666667 0.008 -0.01 - vertex 0.08 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 -0.01 - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.09333333 0.008 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.09333333 0.008 -0.01 - vertex 0.08666667 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 -0.01 - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.1 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 0 - vertex 0.1 0.008 -0.01 - vertex 0.09333333 0.008 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0 - vertex 0.01333333 0.008 0.01 - vertex 0.02 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.01 - vertex 0.02 0.008 0 - vertex 0.01333333 0.008 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.02 0.008 0.01 - vertex 0.02666667 0.008 0.01 - vertex 0.02666667 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.02 0.008 0 - vertex 0.02 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.02666667 0.008 0.01 - vertex 0.03333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.01 - vertex 0.03333333 0.008 0 - vertex 0.02666667 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0 - vertex 0.03333333 0.008 0.01 - vertex 0.04 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.01 - vertex 0.04 0.008 -5.782412e-19 - vertex 0.03333333 0.008 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.04 0.008 0.01 - vertex 0.04666667 0.008 0.01 - vertex 0.04666667 0.008 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0 - vertex 0.04 0.008 -5.782412e-19 - vertex 0.04 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0 - vertex 0.04666667 0.008 0.01 - vertex 0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.01 - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.04666667 0.008 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.05333333 0.008 0.01 - vertex 0.06 0.008 0.01 - vertex 0.06 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 5.782412e-19 - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 5.782412e-19 - vertex 0.06 0.008 0.01 - vertex 0.06666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.01 - vertex 0.06666667 0.008 0 - vertex 0.06 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0 - vertex 0.06666667 0.008 0.01 - vertex 0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.01 - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.06666667 0.008 0 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.07333333 0.008 0.01 - vertex 0.08 0.008 0.01 - vertex 0.08 0.008 2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 2.891206e-19 - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 2.891206e-19 - vertex 0.08 0.008 0.01 - vertex 0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.01 - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.08 0.008 2.891206e-19 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.08666667 0.008 0.01 - vertex 0.09333333 0.008 0.01 - vertex 0.09333333 0.008 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.09333333 0.008 0.01 - vertex 0.1 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 0.01 - vertex 0.1 0.008 0 - vertex 0.09333333 0.008 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0.008 0.02 - vertex 0.02 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.02 - vertex 0.02 0.008 0.01 - vertex 0.01333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.01 - vertex 0.02 0.008 0.02 - vertex 0.02666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.02 - vertex 0.02666667 0.008 0.01 - vertex 0.02 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.01 - vertex 0.02666667 0.008 0.02 - vertex 0.03333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.02 - vertex 0.03333333 0.008 0.01 - vertex 0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.01 - vertex 0.03333333 0.008 0.02 - vertex 0.04 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.02 - vertex 0.04 0.008 0.01 - vertex 0.03333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.01 - vertex 0.04 0.008 0.02 - vertex 0.04666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.02 - vertex 0.04666667 0.008 0.01 - vertex 0.04 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.01 - vertex 0.04666667 0.008 0.02 - vertex 0.05333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.02 - vertex 0.05333333 0.008 0.01 - vertex 0.04666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.01 - vertex 0.05333333 0.008 0.02 - vertex 0.06 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.02 - vertex 0.06 0.008 0.01 - vertex 0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.01 - vertex 0.06 0.008 0.02 - vertex 0.06666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.02 - vertex 0.06666667 0.008 0.01 - vertex 0.06 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.01 - vertex 0.06666667 0.008 0.02 - vertex 0.07333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.02 - vertex 0.07333333 0.008 0.01 - vertex 0.06666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.01 - vertex 0.07333333 0.008 0.02 - vertex 0.08 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.02 - vertex 0.08 0.008 0.01 - vertex 0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.01 - vertex 0.08 0.008 0.02 - vertex 0.08666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.02 - vertex 0.08666667 0.008 0.01 - vertex 0.08 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.01 - vertex 0.08666667 0.008 0.02 - vertex 0.09333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.02 - vertex 0.09333333 0.008 0.01 - vertex 0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.01 - vertex 0.09333333 0.008 0.02 - vertex 0.1 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 0.02 - vertex 0.1 0.008 0.01 - vertex 0.09333333 0.008 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0.008 0.03 - vertex 0.02 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.03 - vertex 0.02 0.008 0.02 - vertex 0.01333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.02 - vertex 0.02 0.008 0.03 - vertex 0.02666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.03 - vertex 0.02666667 0.008 0.02 - vertex 0.02 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.02 - vertex 0.02666667 0.008 0.03 - vertex 0.03333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.03 - vertex 0.03333333 0.008 0.02 - vertex 0.02666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.02 - vertex 0.03333333 0.008 0.03 - vertex 0.04 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.03 - vertex 0.04 0.008 0.02 - vertex 0.03333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.02 - vertex 0.04 0.008 0.03 - vertex 0.04666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.03 - vertex 0.04666667 0.008 0.02 - vertex 0.04 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.02 - vertex 0.04666667 0.008 0.03 - vertex 0.05333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.03 - vertex 0.05333333 0.008 0.02 - vertex 0.04666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.02 - vertex 0.05333333 0.008 0.03 - vertex 0.06 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.03 - vertex 0.06 0.008 0.02 - vertex 0.05333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.02 - vertex 0.06 0.008 0.03 - vertex 0.06666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.03 - vertex 0.06666667 0.008 0.02 - vertex 0.06 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.02 - vertex 0.06666667 0.008 0.03 - vertex 0.07333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.03 - vertex 0.07333333 0.008 0.02 - vertex 0.06666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.02 - vertex 0.07333333 0.008 0.03 - vertex 0.08 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.03 - vertex 0.08 0.008 0.02 - vertex 0.07333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.02 - vertex 0.08 0.008 0.03 - vertex 0.08666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.03 - vertex 0.08666667 0.008 0.02 - vertex 0.08 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.02 - vertex 0.08666667 0.008 0.03 - vertex 0.09333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.03 - vertex 0.09333333 0.008 0.02 - vertex 0.08666667 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.02 - vertex 0.09333333 0.008 0.03 - vertex 0.1 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 0.03 - vertex 0.1 0.008 0.02 - vertex 0.09333333 0.008 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0.008 0.04 - vertex 0.02 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.04 - vertex 0.02 0.008 0.03 - vertex 0.01333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.03 - vertex 0.02 0.008 0.04 - vertex 0.02666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.04 - vertex 0.02666667 0.008 0.03 - vertex 0.02 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.03 - vertex 0.02666667 0.008 0.04 - vertex 0.03333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.04 - vertex 0.03333333 0.008 0.03 - vertex 0.02666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.03 - vertex 0.03333333 0.008 0.04 - vertex 0.04 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.04 - vertex 0.04 0.008 0.03 - vertex 0.03333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.03 - vertex 0.04 0.008 0.04 - vertex 0.04666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.04 - vertex 0.04666667 0.008 0.03 - vertex 0.04 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.03 - vertex 0.04666667 0.008 0.04 - vertex 0.05333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.04 - vertex 0.05333333 0.008 0.03 - vertex 0.04666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.03 - vertex 0.05333333 0.008 0.04 - vertex 0.06 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.04 - vertex 0.06 0.008 0.03 - vertex 0.05333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.03 - vertex 0.06 0.008 0.04 - vertex 0.06666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.04 - vertex 0.06666667 0.008 0.03 - vertex 0.06 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.03 - vertex 0.06666667 0.008 0.04 - vertex 0.07333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.04 - vertex 0.07333333 0.008 0.03 - vertex 0.06666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.03 - vertex 0.07333333 0.008 0.04 - vertex 0.08 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.04 - vertex 0.08 0.008 0.03 - vertex 0.07333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.03 - vertex 0.08 0.008 0.04 - vertex 0.08666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.04 - vertex 0.08666667 0.008 0.03 - vertex 0.08 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.03 - vertex 0.08666667 0.008 0.04 - vertex 0.09333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.04 - vertex 0.09333333 0.008 0.03 - vertex 0.08666667 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.03 - vertex 0.09333333 0.008 0.04 - vertex 0.1 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 0.04 - vertex 0.1 0.008 0.03 - vertex 0.09333333 0.008 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0.008 0.05 - vertex 0.02 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.05 - vertex 0.02 0.008 0.04 - vertex 0.01333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.008 0.04 - vertex 0.02 0.008 0.05 - vertex 0.02666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.05 - vertex 0.02666667 0.008 0.04 - vertex 0.02 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.008 0.04 - vertex 0.02666667 0.008 0.05 - vertex 0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.05 - vertex 0.03333333 0.008 0.04 - vertex 0.02666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.008 0.04 - vertex 0.03333333 0.008 0.05 - vertex 0.04 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.05 - vertex 0.04 0.008 0.04 - vertex 0.03333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.008 0.04 - vertex 0.04 0.008 0.05 - vertex 0.04666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.05 - vertex 0.04666667 0.008 0.04 - vertex 0.04 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.008 0.04 - vertex 0.04666667 0.008 0.05 - vertex 0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.05 - vertex 0.05333333 0.008 0.04 - vertex 0.04666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.008 0.04 - vertex 0.05333333 0.008 0.05 - vertex 0.06 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.05 - vertex 0.06 0.008 0.04 - vertex 0.05333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.008 0.04 - vertex 0.06 0.008 0.05 - vertex 0.06666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.05 - vertex 0.06666667 0.008 0.04 - vertex 0.06 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.008 0.04 - vertex 0.06666667 0.008 0.05 - vertex 0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.05 - vertex 0.07333333 0.008 0.04 - vertex 0.06666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.008 0.04 - vertex 0.07333333 0.008 0.05 - vertex 0.08 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.05 - vertex 0.08 0.008 0.04 - vertex 0.07333333 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.008 0.04 - vertex 0.08 0.008 0.05 - vertex 0.08666667 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.05 - vertex 0.08666667 0.008 0.04 - vertex 0.08 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.008 0.04 - vertex 0.08666667 0.008 0.05 - vertex 0.09333333 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.05 - vertex 0.09333333 0.008 0.04 - vertex 0.08666667 0.008 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.008 0.04 - vertex 0.09333333 0.008 0.05 - vertex 0.1 0.008 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.008 0.05 - vertex 0.1 0.008 0.04 - vertex 0.09333333 0.008 0.04 - endloop - endfacet -endsolid rightSolid_to_topAir -solid rightSolid_to_heater - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 -0.05 - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0.008 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0.008 -0.05 - vertex 0.01333333 0 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 -0.04 - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0.008 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 -0.03 - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0.008 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 -0.02 - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0.008 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 -0.01 - vertex 0.01333333 0 0 - vertex 0.01333333 0.008 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 0 - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 0 - vertex 0.01333333 0 0.01 - vertex 0.01333333 0.008 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0.008 0 - vertex 0.01333333 0 0 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 0.01 - vertex 0.01333333 0 0.02 - vertex 0.01333333 0.008 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 0.02 - vertex 0.01333333 0 0.03 - vertex 0.01333333 0.008 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 0.03 - vertex 0.01333333 0 0.04 - vertex 0.01333333 0.008 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 0.01333333 0 0.04 - vertex 0.01333333 0 0.05 - vertex 0.01333333 0.008 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex 0.01333333 0.008 0.05 - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0 0.04 - endloop - endfacet -endsolid rightSolid_to_heater diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/topAir.stl b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/topAir.stl deleted file mode 100644 index 227f0317cd7ef09979234ddbf2055c7eb57f2b4b..0000000000000000000000000000000000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/triSurface/topAir.stl +++ /dev/null @@ -1,12896 +0,0 @@ -solid maxY - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 -0.05 - vertex -0.1 0.04 -0.04 - vertex -0.09333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.04 - vertex -0.09333333 0.04 -0.05 - vertex -0.1 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 -0.04 - vertex -0.1 0.04 -0.03 - vertex -0.09333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.03 - vertex -0.09333333 0.04 -0.04 - vertex -0.1 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 -0.03 - vertex -0.1 0.04 -0.02 - vertex -0.09333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.02 - vertex -0.09333333 0.04 -0.03 - vertex -0.1 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 -0.02 - vertex -0.1 0.04 -0.01 - vertex -0.09333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.01 - vertex -0.09333333 0.04 -0.02 - vertex -0.1 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 -0.01 - vertex -0.1 0.04 0 - vertex -0.09333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0 - vertex -0.09333333 0.04 -0.01 - vertex -0.1 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 0 - vertex -0.1 0.04 0.01 - vertex -0.09333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.01 - vertex -0.09333333 0.04 0 - vertex -0.1 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 0.01 - vertex -0.1 0.04 0.02 - vertex -0.09333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.02 - vertex -0.09333333 0.04 0.01 - vertex -0.1 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 0.02 - vertex -0.1 0.04 0.03 - vertex -0.09333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.03 - vertex -0.09333333 0.04 0.02 - vertex -0.1 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 0.03 - vertex -0.1 0.04 0.04 - vertex -0.09333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.04 - vertex -0.09333333 0.04 0.03 - vertex -0.1 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.1 0.04 0.04 - vertex -0.1 0.04 0.05 - vertex -0.09333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.05 - vertex -0.09333333 0.04 0.04 - vertex -0.1 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.05 - vertex -0.09333333 0.04 -0.04 - vertex -0.08666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.04 - vertex -0.08666667 0.04 -0.05 - vertex -0.09333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.04 - vertex -0.09333333 0.04 -0.03 - vertex -0.08666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.03 - vertex -0.08666667 0.04 -0.04 - vertex -0.09333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.03 - vertex -0.09333333 0.04 -0.02 - vertex -0.08666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.02 - vertex -0.08666667 0.04 -0.03 - vertex -0.09333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.02 - vertex -0.09333333 0.04 -0.01 - vertex -0.08666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.01 - vertex -0.08666667 0.04 -0.02 - vertex -0.09333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 -0.01 - vertex -0.09333333 0.04 0 - vertex -0.08666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0 - vertex -0.08666667 0.04 -0.01 - vertex -0.09333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0 - vertex -0.09333333 0.04 0.01 - vertex -0.08666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.01 - vertex -0.08666667 0.04 0 - vertex -0.09333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.01 - vertex -0.09333333 0.04 0.02 - vertex -0.08666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.02 - vertex -0.08666667 0.04 0.01 - vertex -0.09333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.02 - vertex -0.09333333 0.04 0.03 - vertex -0.08666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.03 - vertex -0.08666667 0.04 0.02 - vertex -0.09333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.03 - vertex -0.09333333 0.04 0.04 - vertex -0.08666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.04 - vertex -0.08666667 0.04 0.03 - vertex -0.09333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.09333333 0.04 0.04 - vertex -0.09333333 0.04 0.05 - vertex -0.08666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.05 - vertex -0.08666667 0.04 0.04 - vertex -0.09333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.05 - vertex -0.08666667 0.04 -0.04 - vertex -0.08 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.04 - vertex -0.08 0.04 -0.05 - vertex -0.08666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.04 - vertex -0.08666667 0.04 -0.03 - vertex -0.08 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.03 - vertex -0.08 0.04 -0.04 - vertex -0.08666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.03 - vertex -0.08666667 0.04 -0.02 - vertex -0.08 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.02 - vertex -0.08 0.04 -0.03 - vertex -0.08666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 -0.02 - vertex -0.08666667 0.04 -0.01 - vertex -0.08 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.01 - vertex -0.08 0.04 -0.02 - vertex -0.08666667 0.04 -0.02 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.08666667 0.04 0 - vertex -0.08 0.04 1.156482e-18 - vertex -0.08 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.01 - vertex -0.08666667 0.04 -0.01 - vertex -0.08666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 1.156482e-18 - vertex -0.08666667 0.04 0 - vertex -0.08666667 0.04 0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex -0.08666667 0.04 0.01 - vertex -0.08 0.04 0.01 - vertex -0.08 0.04 1.156482e-18 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.01 - vertex -0.08666667 0.04 0.02 - vertex -0.08 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.02 - vertex -0.08 0.04 0.01 - vertex -0.08666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.02 - vertex -0.08666667 0.04 0.03 - vertex -0.08 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.03 - vertex -0.08 0.04 0.02 - vertex -0.08666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.03 - vertex -0.08666667 0.04 0.04 - vertex -0.08 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.04 - vertex -0.08 0.04 0.03 - vertex -0.08666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08666667 0.04 0.04 - vertex -0.08666667 0.04 0.05 - vertex -0.08 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.05 - vertex -0.08 0.04 0.04 - vertex -0.08666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.05 - vertex -0.08 0.04 -0.04 - vertex -0.07333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.04 - vertex -0.07333333 0.04 -0.05 - vertex -0.08 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.04 - vertex -0.08 0.04 -0.03 - vertex -0.07333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.03 - vertex -0.07333333 0.04 -0.04 - vertex -0.08 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.03 - vertex -0.08 0.04 -0.02 - vertex -0.07333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.02 - vertex -0.07333333 0.04 -0.03 - vertex -0.08 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.02 - vertex -0.08 0.04 -0.01 - vertex -0.07333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.01 - vertex -0.07333333 0.04 -0.02 - vertex -0.08 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0 - vertex -0.07333333 0.04 -0.01 - vertex -0.08 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 -0.01 - vertex -0.08 0.04 1.156482e-18 - vertex -0.07333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 1.156482e-18 - vertex -0.08 0.04 0.01 - vertex -0.07333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.01 - vertex -0.07333333 0.04 0 - vertex -0.08 0.04 1.156482e-18 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.01 - vertex -0.08 0.04 0.02 - vertex -0.07333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.02 - vertex -0.07333333 0.04 0.01 - vertex -0.08 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.02 - vertex -0.08 0.04 0.03 - vertex -0.07333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.03 - vertex -0.07333333 0.04 0.02 - vertex -0.08 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.03 - vertex -0.08 0.04 0.04 - vertex -0.07333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.04 - vertex -0.07333333 0.04 0.03 - vertex -0.08 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.08 0.04 0.04 - vertex -0.08 0.04 0.05 - vertex -0.07333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.05 - vertex -0.07333333 0.04 0.04 - vertex -0.08 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.05 - vertex -0.07333333 0.04 -0.04 - vertex -0.06666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.04 - vertex -0.06666667 0.04 -0.05 - vertex -0.07333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.04 - vertex -0.07333333 0.04 -0.03 - vertex -0.06666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.03 - vertex -0.06666667 0.04 -0.04 - vertex -0.07333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.03 - vertex -0.07333333 0.04 -0.02 - vertex -0.06666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.02 - vertex -0.06666667 0.04 -0.03 - vertex -0.07333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.02 - vertex -0.07333333 0.04 -0.01 - vertex -0.06666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.01 - vertex -0.06666667 0.04 -0.02 - vertex -0.07333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 -0.01 - vertex -0.07333333 0.04 0 - vertex -0.06666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0 - vertex -0.06666667 0.04 -0.01 - vertex -0.07333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0 - vertex -0.07333333 0.04 0.01 - vertex -0.06666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.01 - vertex -0.06666667 0.04 0 - vertex -0.07333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.01 - vertex -0.07333333 0.04 0.02 - vertex -0.06666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.02 - vertex -0.06666667 0.04 0.01 - vertex -0.07333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.02 - vertex -0.07333333 0.04 0.03 - vertex -0.06666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.03 - vertex -0.06666667 0.04 0.02 - vertex -0.07333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.03 - vertex -0.07333333 0.04 0.04 - vertex -0.06666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.04 - vertex -0.06666667 0.04 0.03 - vertex -0.07333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.07333333 0.04 0.04 - vertex -0.07333333 0.04 0.05 - vertex -0.06666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.05 - vertex -0.06666667 0.04 0.04 - vertex -0.07333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.05 - vertex -0.06666667 0.04 -0.04 - vertex -0.06 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.04 - vertex -0.06 0.04 -0.05 - vertex -0.06666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.04 - vertex -0.06666667 0.04 -0.03 - vertex -0.06 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.03 - vertex -0.06 0.04 -0.04 - vertex -0.06666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.03 - vertex -0.06666667 0.04 -0.02 - vertex -0.06 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.02 - vertex -0.06 0.04 -0.03 - vertex -0.06666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.02 - vertex -0.06666667 0.04 -0.01 - vertex -0.06 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.01 - vertex -0.06 0.04 -0.02 - vertex -0.06666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 -0.01 - vertex -0.06666667 0.04 0 - vertex -0.06 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0 - vertex -0.06 0.04 -0.01 - vertex -0.06666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0 - vertex -0.06666667 0.04 0.01 - vertex -0.06 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.01 - vertex -0.06 0.04 0 - vertex -0.06666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.01 - vertex -0.06666667 0.04 0.02 - vertex -0.06 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.02 - vertex -0.06 0.04 0.01 - vertex -0.06666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.02 - vertex -0.06666667 0.04 0.03 - vertex -0.06 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.03 - vertex -0.06 0.04 0.02 - vertex -0.06666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.03 - vertex -0.06666667 0.04 0.04 - vertex -0.06 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.04 - vertex -0.06 0.04 0.03 - vertex -0.06666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06666667 0.04 0.04 - vertex -0.06666667 0.04 0.05 - vertex -0.06 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.05 - vertex -0.06 0.04 0.04 - vertex -0.06666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.05 - vertex -0.06 0.04 -0.04 - vertex -0.05333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.04 - vertex -0.05333333 0.04 -0.05 - vertex -0.06 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.04 - vertex -0.06 0.04 -0.03 - vertex -0.05333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.03 - vertex -0.05333333 0.04 -0.04 - vertex -0.06 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.03 - vertex -0.06 0.04 -0.02 - vertex -0.05333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.02 - vertex -0.05333333 0.04 -0.03 - vertex -0.06 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.02 - vertex -0.06 0.04 -0.01 - vertex -0.05333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.01 - vertex -0.05333333 0.04 -0.02 - vertex -0.06 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 -0.01 - vertex -0.06 0.04 0 - vertex -0.05333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0 - vertex -0.05333333 0.04 -0.01 - vertex -0.06 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0 - vertex -0.06 0.04 0.01 - vertex -0.05333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.01 - vertex -0.05333333 0.04 0 - vertex -0.06 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.01 - vertex -0.06 0.04 0.02 - vertex -0.05333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.02 - vertex -0.05333333 0.04 0.01 - vertex -0.06 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.02 - vertex -0.06 0.04 0.03 - vertex -0.05333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.03 - vertex -0.05333333 0.04 0.02 - vertex -0.06 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.03 - vertex -0.06 0.04 0.04 - vertex -0.05333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.04 - vertex -0.05333333 0.04 0.03 - vertex -0.06 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.06 0.04 0.04 - vertex -0.06 0.04 0.05 - vertex -0.05333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.05 - vertex -0.05333333 0.04 0.04 - vertex -0.06 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.05 - vertex -0.05333333 0.04 -0.04 - vertex -0.04666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.04 - vertex -0.04666667 0.04 -0.05 - vertex -0.05333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.04 - vertex -0.05333333 0.04 -0.03 - vertex -0.04666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.03 - vertex -0.04666667 0.04 -0.04 - vertex -0.05333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.03 - vertex -0.05333333 0.04 -0.02 - vertex -0.04666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.02 - vertex -0.04666667 0.04 -0.03 - vertex -0.05333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.02 - vertex -0.05333333 0.04 -0.01 - vertex -0.04666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.01 - vertex -0.04666667 0.04 -0.02 - vertex -0.05333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 -0.01 - vertex -0.05333333 0.04 0 - vertex -0.04666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0 - vertex -0.04666667 0.04 -0.01 - vertex -0.05333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0 - vertex -0.05333333 0.04 0.01 - vertex -0.04666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.01 - vertex -0.04666667 0.04 0 - vertex -0.05333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.01 - vertex -0.05333333 0.04 0.02 - vertex -0.04666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.02 - vertex -0.04666667 0.04 0.01 - vertex -0.05333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.02 - vertex -0.05333333 0.04 0.03 - vertex -0.04666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.03 - vertex -0.04666667 0.04 0.02 - vertex -0.05333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.03 - vertex -0.05333333 0.04 0.04 - vertex -0.04666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.04 - vertex -0.04666667 0.04 0.03 - vertex -0.05333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.05333333 0.04 0.04 - vertex -0.05333333 0.04 0.05 - vertex -0.04666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.05 - vertex -0.04666667 0.04 0.04 - vertex -0.05333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.05 - vertex -0.04666667 0.04 -0.04 - vertex -0.04 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.04 - vertex -0.04 0.04 -0.05 - vertex -0.04666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.04 - vertex -0.04666667 0.04 -0.03 - vertex -0.04 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.03 - vertex -0.04 0.04 -0.04 - vertex -0.04666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.03 - vertex -0.04666667 0.04 -0.02 - vertex -0.04 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.02 - vertex -0.04 0.04 -0.03 - vertex -0.04666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.02 - vertex -0.04666667 0.04 -0.01 - vertex -0.04 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.01 - vertex -0.04 0.04 -0.02 - vertex -0.04666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 -0.01 - vertex -0.04666667 0.04 0 - vertex -0.04 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0 - vertex -0.04 0.04 -0.01 - vertex -0.04666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0 - vertex -0.04666667 0.04 0.01 - vertex -0.04 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.01 - vertex -0.04 0.04 0 - vertex -0.04666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.01 - vertex -0.04666667 0.04 0.02 - vertex -0.04 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.02 - vertex -0.04 0.04 0.01 - vertex -0.04666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.02 - vertex -0.04666667 0.04 0.03 - vertex -0.04 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.03 - vertex -0.04 0.04 0.02 - vertex -0.04666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.03 - vertex -0.04666667 0.04 0.04 - vertex -0.04 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.04 - vertex -0.04 0.04 0.03 - vertex -0.04666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04666667 0.04 0.04 - vertex -0.04666667 0.04 0.05 - vertex -0.04 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.05 - vertex -0.04 0.04 0.04 - vertex -0.04666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.05 - vertex -0.04 0.04 -0.04 - vertex -0.03333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.04 - vertex -0.03333333 0.04 -0.05 - vertex -0.04 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.04 - vertex -0.04 0.04 -0.03 - vertex -0.03333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.03 - vertex -0.03333333 0.04 -0.04 - vertex -0.04 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.03 - vertex -0.04 0.04 -0.02 - vertex -0.03333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.02 - vertex -0.03333333 0.04 -0.03 - vertex -0.04 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.02 - vertex -0.04 0.04 -0.01 - vertex -0.03333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.01 - vertex -0.03333333 0.04 -0.02 - vertex -0.04 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 -0.01 - vertex -0.04 0.04 0 - vertex -0.03333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0 - vertex -0.03333333 0.04 -0.01 - vertex -0.04 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0 - vertex -0.04 0.04 0.01 - vertex -0.03333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.01 - vertex -0.03333333 0.04 0 - vertex -0.04 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.01 - vertex -0.04 0.04 0.02 - vertex -0.03333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.02 - vertex -0.03333333 0.04 0.01 - vertex -0.04 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.02 - vertex -0.04 0.04 0.03 - vertex -0.03333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.03 - vertex -0.03333333 0.04 0.02 - vertex -0.04 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.03 - vertex -0.04 0.04 0.04 - vertex -0.03333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.04 - vertex -0.03333333 0.04 0.03 - vertex -0.04 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.04 0.04 0.04 - vertex -0.04 0.04 0.05 - vertex -0.03333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.05 - vertex -0.03333333 0.04 0.04 - vertex -0.04 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.05 - vertex -0.03333333 0.04 -0.04 - vertex -0.02666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.04 - vertex -0.02666667 0.04 -0.05 - vertex -0.03333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.04 - vertex -0.03333333 0.04 -0.03 - vertex -0.02666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.03 - vertex -0.02666667 0.04 -0.04 - vertex -0.03333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.03 - vertex -0.03333333 0.04 -0.02 - vertex -0.02666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.02 - vertex -0.02666667 0.04 -0.03 - vertex -0.03333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.02 - vertex -0.03333333 0.04 -0.01 - vertex -0.02666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.01 - vertex -0.02666667 0.04 -0.02 - vertex -0.03333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 -0.01 - vertex -0.03333333 0.04 0 - vertex -0.02666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0 - vertex -0.02666667 0.04 -0.01 - vertex -0.03333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0 - vertex -0.03333333 0.04 0.01 - vertex -0.02666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.01 - vertex -0.02666667 0.04 0 - vertex -0.03333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.01 - vertex -0.03333333 0.04 0.02 - vertex -0.02666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.02 - vertex -0.02666667 0.04 0.01 - vertex -0.03333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.02 - vertex -0.03333333 0.04 0.03 - vertex -0.02666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.03 - vertex -0.02666667 0.04 0.02 - vertex -0.03333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.03 - vertex -0.03333333 0.04 0.04 - vertex -0.02666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.04 - vertex -0.02666667 0.04 0.03 - vertex -0.03333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.03333333 0.04 0.04 - vertex -0.03333333 0.04 0.05 - vertex -0.02666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.05 - vertex -0.02666667 0.04 0.04 - vertex -0.03333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.05 - vertex -0.02666667 0.04 -0.04 - vertex -0.02 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.04 - vertex -0.02 0.04 -0.05 - vertex -0.02666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.04 - vertex -0.02666667 0.04 -0.03 - vertex -0.02 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.03 - vertex -0.02 0.04 -0.04 - vertex -0.02666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.03 - vertex -0.02666667 0.04 -0.02 - vertex -0.02 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.02 - vertex -0.02 0.04 -0.03 - vertex -0.02666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.02 - vertex -0.02666667 0.04 -0.01 - vertex -0.02 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.01 - vertex -0.02 0.04 -0.02 - vertex -0.02666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 -0.01 - vertex -0.02666667 0.04 0 - vertex -0.02 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0 - vertex -0.02 0.04 -0.01 - vertex -0.02666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0 - vertex -0.02666667 0.04 0.01 - vertex -0.02 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.01 - vertex -0.02 0.04 0 - vertex -0.02666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.01 - vertex -0.02666667 0.04 0.02 - vertex -0.02 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.02 - vertex -0.02 0.04 0.01 - vertex -0.02666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.02 - vertex -0.02666667 0.04 0.03 - vertex -0.02 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.03 - vertex -0.02 0.04 0.02 - vertex -0.02666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.03 - vertex -0.02666667 0.04 0.04 - vertex -0.02 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.04 - vertex -0.02 0.04 0.03 - vertex -0.02666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02666667 0.04 0.04 - vertex -0.02666667 0.04 0.05 - vertex -0.02 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.05 - vertex -0.02 0.04 0.04 - vertex -0.02666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.05 - vertex -0.02 0.04 -0.04 - vertex -0.01333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.04 - vertex -0.01333333 0.04 -0.05 - vertex -0.02 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.04 - vertex -0.02 0.04 -0.03 - vertex -0.01333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.03 - vertex -0.01333333 0.04 -0.04 - vertex -0.02 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.03 - vertex -0.02 0.04 -0.02 - vertex -0.01333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.02 - vertex -0.01333333 0.04 -0.03 - vertex -0.02 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.02 - vertex -0.02 0.04 -0.01 - vertex -0.01333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.01 - vertex -0.01333333 0.04 -0.02 - vertex -0.02 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 -0.01 - vertex -0.02 0.04 0 - vertex -0.01333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0 - vertex -0.01333333 0.04 -0.01 - vertex -0.02 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0 - vertex -0.02 0.04 0.01 - vertex -0.01333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.01 - vertex -0.01333333 0.04 0 - vertex -0.02 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.01 - vertex -0.02 0.04 0.02 - vertex -0.01333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.02 - vertex -0.01333333 0.04 0.01 - vertex -0.02 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.02 - vertex -0.02 0.04 0.03 - vertex -0.01333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.03 - vertex -0.01333333 0.04 0.02 - vertex -0.02 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.03 - vertex -0.02 0.04 0.04 - vertex -0.01333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.04 - vertex -0.01333333 0.04 0.03 - vertex -0.02 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.02 0.04 0.04 - vertex -0.02 0.04 0.05 - vertex -0.01333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.05 - vertex -0.01333333 0.04 0.04 - vertex -0.02 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.05 - vertex -0.01333333 0.04 -0.04 - vertex -0.006666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.04 - vertex -0.006666667 0.04 -0.05 - vertex -0.01333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.04 - vertex -0.01333333 0.04 -0.03 - vertex -0.006666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.03 - vertex -0.006666667 0.04 -0.04 - vertex -0.01333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.03 - vertex -0.01333333 0.04 -0.02 - vertex -0.006666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.02 - vertex -0.006666667 0.04 -0.03 - vertex -0.01333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.02 - vertex -0.01333333 0.04 -0.01 - vertex -0.006666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.01 - vertex -0.006666667 0.04 -0.02 - vertex -0.01333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 -0.01 - vertex -0.01333333 0.04 0 - vertex -0.006666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0 - vertex -0.006666667 0.04 -0.01 - vertex -0.01333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0 - vertex -0.01333333 0.04 0.01 - vertex -0.006666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.01 - vertex -0.006666667 0.04 0 - vertex -0.01333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.01 - vertex -0.01333333 0.04 0.02 - vertex -0.006666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.02 - vertex -0.006666667 0.04 0.01 - vertex -0.01333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.02 - vertex -0.01333333 0.04 0.03 - vertex -0.006666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.03 - vertex -0.006666667 0.04 0.02 - vertex -0.01333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.03 - vertex -0.01333333 0.04 0.04 - vertex -0.006666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.04 - vertex -0.006666667 0.04 0.03 - vertex -0.01333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.01333333 0.04 0.04 - vertex -0.01333333 0.04 0.05 - vertex -0.006666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.05 - vertex -0.006666667 0.04 0.04 - vertex -0.01333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.05 - vertex -0.006666667 0.04 -0.04 - vertex 0 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.04 - vertex 0 0.04 -0.05 - vertex -0.006666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.04 - vertex -0.006666667 0.04 -0.03 - vertex 0 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.03 - vertex 0 0.04 -0.04 - vertex -0.006666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.03 - vertex -0.006666667 0.04 -0.02 - vertex 0 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.02 - vertex 0 0.04 -0.03 - vertex -0.006666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.02 - vertex -0.006666667 0.04 -0.01 - vertex 0 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.01 - vertex 0 0.04 -0.02 - vertex -0.006666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 -0.01 - vertex -0.006666667 0.04 0 - vertex 0 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0 - vertex 0 0.04 -0.01 - vertex -0.006666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0 - vertex -0.006666667 0.04 0.01 - vertex 0 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.01 - vertex 0 0.04 0 - vertex -0.006666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.01 - vertex -0.006666667 0.04 0.02 - vertex 0 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.02 - vertex 0 0.04 0.01 - vertex -0.006666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.02 - vertex -0.006666667 0.04 0.03 - vertex 0 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.03 - vertex 0 0.04 0.02 - vertex -0.006666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.03 - vertex -0.006666667 0.04 0.04 - vertex 0 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.04 - vertex 0 0.04 0.03 - vertex -0.006666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -0.006666667 0.04 0.04 - vertex -0.006666667 0.04 0.05 - vertex 0 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.05 - vertex 0 0.04 0.04 - vertex -0.006666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.05 - vertex 0 0.04 -0.04 - vertex 0.006666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.04 - vertex 0.006666667 0.04 -0.05 - vertex 0 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.04 - vertex 0 0.04 -0.03 - vertex 0.006666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.03 - vertex 0.006666667 0.04 -0.04 - vertex 0 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.03 - vertex 0 0.04 -0.02 - vertex 0.006666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.02 - vertex 0.006666667 0.04 -0.03 - vertex 0 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.02 - vertex 0 0.04 -0.01 - vertex 0.006666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.01 - vertex 0.006666667 0.04 -0.02 - vertex 0 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 -0.01 - vertex 0 0.04 0 - vertex 0.006666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0 - vertex 0.006666667 0.04 -0.01 - vertex 0 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0 - vertex 0 0.04 0.01 - vertex 0.006666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.01 - vertex 0.006666667 0.04 0 - vertex 0 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.01 - vertex 0 0.04 0.02 - vertex 0.006666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.02 - vertex 0.006666667 0.04 0.01 - vertex 0 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.02 - vertex 0 0.04 0.03 - vertex 0.006666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.03 - vertex 0.006666667 0.04 0.02 - vertex 0 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.03 - vertex 0 0.04 0.04 - vertex 0.006666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.04 - vertex 0.006666667 0.04 0.03 - vertex 0 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0 0.04 0.04 - vertex 0 0.04 0.05 - vertex 0.006666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.05 - vertex 0.006666667 0.04 0.04 - vertex 0 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.05 - vertex 0.006666667 0.04 -0.04 - vertex 0.01333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.04 - vertex 0.01333333 0.04 -0.05 - vertex 0.006666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.04 - vertex 0.006666667 0.04 -0.03 - vertex 0.01333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.03 - vertex 0.01333333 0.04 -0.04 - vertex 0.006666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.03 - vertex 0.006666667 0.04 -0.02 - vertex 0.01333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.02 - vertex 0.01333333 0.04 -0.03 - vertex 0.006666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.02 - vertex 0.006666667 0.04 -0.01 - vertex 0.01333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.01 - vertex 0.01333333 0.04 -0.02 - vertex 0.006666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 -0.01 - vertex 0.006666667 0.04 0 - vertex 0.01333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0 - vertex 0.01333333 0.04 -0.01 - vertex 0.006666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0 - vertex 0.006666667 0.04 0.01 - vertex 0.01333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.01 - vertex 0.01333333 0.04 0 - vertex 0.006666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.01 - vertex 0.006666667 0.04 0.02 - vertex 0.01333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.02 - vertex 0.01333333 0.04 0.01 - vertex 0.006666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.02 - vertex 0.006666667 0.04 0.03 - vertex 0.01333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.03 - vertex 0.01333333 0.04 0.02 - vertex 0.006666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.03 - vertex 0.006666667 0.04 0.04 - vertex 0.01333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.04 - vertex 0.01333333 0.04 0.03 - vertex 0.006666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.006666667 0.04 0.04 - vertex 0.006666667 0.04 0.05 - vertex 0.01333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.05 - vertex 0.01333333 0.04 0.04 - vertex 0.006666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.05 - vertex 0.01333333 0.04 -0.04 - vertex 0.02 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.04 - vertex 0.02 0.04 -0.05 - vertex 0.01333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.04 - vertex 0.01333333 0.04 -0.03 - vertex 0.02 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.03 - vertex 0.02 0.04 -0.04 - vertex 0.01333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.03 - vertex 0.01333333 0.04 -0.02 - vertex 0.02 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.02 - vertex 0.02 0.04 -0.03 - vertex 0.01333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.02 - vertex 0.01333333 0.04 -0.01 - vertex 0.02 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.01 - vertex 0.02 0.04 -0.02 - vertex 0.01333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 -0.01 - vertex 0.01333333 0.04 0 - vertex 0.02 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0 - vertex 0.02 0.04 -0.01 - vertex 0.01333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0 - vertex 0.01333333 0.04 0.01 - vertex 0.02 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.01 - vertex 0.02 0.04 0 - vertex 0.01333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.01 - vertex 0.01333333 0.04 0.02 - vertex 0.02 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.02 - vertex 0.02 0.04 0.01 - vertex 0.01333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.02 - vertex 0.01333333 0.04 0.03 - vertex 0.02 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.03 - vertex 0.02 0.04 0.02 - vertex 0.01333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.03 - vertex 0.01333333 0.04 0.04 - vertex 0.02 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.04 - vertex 0.02 0.04 0.03 - vertex 0.01333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.01333333 0.04 0.04 - vertex 0.01333333 0.04 0.05 - vertex 0.02 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.05 - vertex 0.02 0.04 0.04 - vertex 0.01333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.05 - vertex 0.02 0.04 -0.04 - vertex 0.02666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.04 - vertex 0.02666667 0.04 -0.05 - vertex 0.02 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.04 - vertex 0.02 0.04 -0.03 - vertex 0.02666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.03 - vertex 0.02666667 0.04 -0.04 - vertex 0.02 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.03 - vertex 0.02 0.04 -0.02 - vertex 0.02666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.02 - vertex 0.02666667 0.04 -0.03 - vertex 0.02 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.02 - vertex 0.02 0.04 -0.01 - vertex 0.02666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.01 - vertex 0.02666667 0.04 -0.02 - vertex 0.02 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 -0.01 - vertex 0.02 0.04 0 - vertex 0.02666667 0.04 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 5.782412e-19 - vertex 0.02666667 0.04 -0.01 - vertex 0.02 0.04 -0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.02 0.04 0.01 - vertex 0.02666667 0.04 0.01 - vertex 0.02666667 0.04 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 5.782412e-19 - vertex 0.02 0.04 0 - vertex 0.02 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.01 - vertex 0.02 0.04 0.02 - vertex 0.02666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.02 - vertex 0.02666667 0.04 0.01 - vertex 0.02 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.02 - vertex 0.02 0.04 0.03 - vertex 0.02666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.03 - vertex 0.02666667 0.04 0.02 - vertex 0.02 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.03 - vertex 0.02 0.04 0.04 - vertex 0.02666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.04 - vertex 0.02666667 0.04 0.03 - vertex 0.02 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02 0.04 0.04 - vertex 0.02 0.04 0.05 - vertex 0.02666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.05 - vertex 0.02666667 0.04 0.04 - vertex 0.02 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.05 - vertex 0.02666667 0.04 -0.04 - vertex 0.03333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.04 - vertex 0.03333333 0.04 -0.05 - vertex 0.02666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.04 - vertex 0.02666667 0.04 -0.03 - vertex 0.03333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.03 - vertex 0.03333333 0.04 -0.04 - vertex 0.02666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.03 - vertex 0.02666667 0.04 -0.02 - vertex 0.03333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.02 - vertex 0.03333333 0.04 -0.03 - vertex 0.02666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.02 - vertex 0.02666667 0.04 -0.01 - vertex 0.03333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.01 - vertex 0.03333333 0.04 -0.02 - vertex 0.02666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 -0.01 - vertex 0.02666667 0.04 5.782412e-19 - vertex 0.03333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0 - vertex 0.03333333 0.04 -0.01 - vertex 0.02666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 5.782412e-19 - vertex 0.02666667 0.04 0.01 - vertex 0.03333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.01 - vertex 0.03333333 0.04 0 - vertex 0.02666667 0.04 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.01 - vertex 0.02666667 0.04 0.02 - vertex 0.03333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.02 - vertex 0.03333333 0.04 0.01 - vertex 0.02666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.02 - vertex 0.02666667 0.04 0.03 - vertex 0.03333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.03 - vertex 0.03333333 0.04 0.02 - vertex 0.02666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.03 - vertex 0.02666667 0.04 0.04 - vertex 0.03333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.04 - vertex 0.03333333 0.04 0.03 - vertex 0.02666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.02666667 0.04 0.04 - vertex 0.02666667 0.04 0.05 - vertex 0.03333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.05 - vertex 0.03333333 0.04 0.04 - vertex 0.02666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.05 - vertex 0.03333333 0.04 -0.04 - vertex 0.04 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.04 - vertex 0.04 0.04 -0.05 - vertex 0.03333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.04 - vertex 0.03333333 0.04 -0.03 - vertex 0.04 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.03 - vertex 0.04 0.04 -0.04 - vertex 0.03333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.03 - vertex 0.03333333 0.04 -0.02 - vertex 0.04 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.02 - vertex 0.04 0.04 -0.03 - vertex 0.03333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.02 - vertex 0.03333333 0.04 -0.01 - vertex 0.04 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.01 - vertex 0.04 0.04 -0.02 - vertex 0.03333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 -0.01 - vertex 0.03333333 0.04 0 - vertex 0.04 0.04 -5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -5.782412e-19 - vertex 0.04 0.04 -0.01 - vertex 0.03333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0 - vertex 0.03333333 0.04 0.01 - vertex 0.04 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.01 - vertex 0.04 0.04 -5.782412e-19 - vertex 0.03333333 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.01 - vertex 0.03333333 0.04 0.02 - vertex 0.04 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.02 - vertex 0.04 0.04 0.01 - vertex 0.03333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.02 - vertex 0.03333333 0.04 0.03 - vertex 0.04 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.03 - vertex 0.04 0.04 0.02 - vertex 0.03333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.03 - vertex 0.03333333 0.04 0.04 - vertex 0.04 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.04 - vertex 0.04 0.04 0.03 - vertex 0.03333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.03333333 0.04 0.04 - vertex 0.03333333 0.04 0.05 - vertex 0.04 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.05 - vertex 0.04 0.04 0.04 - vertex 0.03333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.05 - vertex 0.04 0.04 -0.04 - vertex 0.04666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.04 - vertex 0.04666667 0.04 -0.05 - vertex 0.04 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.04 - vertex 0.04 0.04 -0.03 - vertex 0.04666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.03 - vertex 0.04666667 0.04 -0.04 - vertex 0.04 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.03 - vertex 0.04 0.04 -0.02 - vertex 0.04666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.02 - vertex 0.04666667 0.04 -0.03 - vertex 0.04 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.02 - vertex 0.04 0.04 -0.01 - vertex 0.04666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.01 - vertex 0.04666667 0.04 -0.02 - vertex 0.04 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 -0.01 - vertex 0.04 0.04 -5.782412e-19 - vertex 0.04666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0 - vertex 0.04666667 0.04 -0.01 - vertex 0.04 0.04 -0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.04 0.04 0.01 - vertex 0.04666667 0.04 0.01 - vertex 0.04666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0 - vertex 0.04 0.04 -5.782412e-19 - vertex 0.04 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.01 - vertex 0.04 0.04 0.02 - vertex 0.04666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.02 - vertex 0.04666667 0.04 0.01 - vertex 0.04 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.02 - vertex 0.04 0.04 0.03 - vertex 0.04666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.03 - vertex 0.04666667 0.04 0.02 - vertex 0.04 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.03 - vertex 0.04 0.04 0.04 - vertex 0.04666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.04 - vertex 0.04666667 0.04 0.03 - vertex 0.04 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04 0.04 0.04 - vertex 0.04 0.04 0.05 - vertex 0.04666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.05 - vertex 0.04666667 0.04 0.04 - vertex 0.04 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.05 - vertex 0.04666667 0.04 -0.04 - vertex 0.05333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.04 - vertex 0.05333333 0.04 -0.05 - vertex 0.04666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.04 - vertex 0.04666667 0.04 -0.03 - vertex 0.05333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.03 - vertex 0.05333333 0.04 -0.04 - vertex 0.04666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.03 - vertex 0.04666667 0.04 -0.02 - vertex 0.05333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.02 - vertex 0.05333333 0.04 -0.03 - vertex 0.04666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.02 - vertex 0.04666667 0.04 -0.01 - vertex 0.05333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.01 - vertex 0.05333333 0.04 -0.02 - vertex 0.04666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 -0.01 - vertex 0.04666667 0.04 0 - vertex 0.05333333 0.04 -2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -2.891206e-19 - vertex 0.05333333 0.04 -0.01 - vertex 0.04666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0 - vertex 0.04666667 0.04 0.01 - vertex 0.05333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.01 - vertex 0.05333333 0.04 -2.891206e-19 - vertex 0.04666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.01 - vertex 0.04666667 0.04 0.02 - vertex 0.05333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.02 - vertex 0.05333333 0.04 0.01 - vertex 0.04666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.02 - vertex 0.04666667 0.04 0.03 - vertex 0.05333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.03 - vertex 0.05333333 0.04 0.02 - vertex 0.04666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.03 - vertex 0.04666667 0.04 0.04 - vertex 0.05333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.04 - vertex 0.05333333 0.04 0.03 - vertex 0.04666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.04666667 0.04 0.04 - vertex 0.04666667 0.04 0.05 - vertex 0.05333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.05 - vertex 0.05333333 0.04 0.04 - vertex 0.04666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.05 - vertex 0.05333333 0.04 -0.04 - vertex 0.06 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.04 - vertex 0.06 0.04 -0.05 - vertex 0.05333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.04 - vertex 0.05333333 0.04 -0.03 - vertex 0.06 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.03 - vertex 0.06 0.04 -0.04 - vertex 0.05333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.03 - vertex 0.05333333 0.04 -0.02 - vertex 0.06 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.02 - vertex 0.06 0.04 -0.03 - vertex 0.05333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.02 - vertex 0.05333333 0.04 -0.01 - vertex 0.06 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.01 - vertex 0.06 0.04 -0.02 - vertex 0.05333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 -0.01 - vertex 0.05333333 0.04 -2.891206e-19 - vertex 0.06 0.04 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 5.782412e-19 - vertex 0.06 0.04 -0.01 - vertex 0.05333333 0.04 -0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.05333333 0.04 0.01 - vertex 0.06 0.04 0.01 - vertex 0.06 0.04 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 5.782412e-19 - vertex 0.05333333 0.04 -2.891206e-19 - vertex 0.05333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.01 - vertex 0.05333333 0.04 0.02 - vertex 0.06 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.02 - vertex 0.06 0.04 0.01 - vertex 0.05333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.02 - vertex 0.05333333 0.04 0.03 - vertex 0.06 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.03 - vertex 0.06 0.04 0.02 - vertex 0.05333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.03 - vertex 0.05333333 0.04 0.04 - vertex 0.06 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.04 - vertex 0.06 0.04 0.03 - vertex 0.05333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.05333333 0.04 0.04 - vertex 0.05333333 0.04 0.05 - vertex 0.06 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.05 - vertex 0.06 0.04 0.04 - vertex 0.05333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.05 - vertex 0.06 0.04 -0.04 - vertex 0.06666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.04 - vertex 0.06666667 0.04 -0.05 - vertex 0.06 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.04 - vertex 0.06 0.04 -0.03 - vertex 0.06666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.03 - vertex 0.06666667 0.04 -0.04 - vertex 0.06 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.03 - vertex 0.06 0.04 -0.02 - vertex 0.06666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.02 - vertex 0.06666667 0.04 -0.03 - vertex 0.06 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.02 - vertex 0.06 0.04 -0.01 - vertex 0.06666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.01 - vertex 0.06666667 0.04 -0.02 - vertex 0.06 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 -0.01 - vertex 0.06 0.04 5.782412e-19 - vertex 0.06666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0 - vertex 0.06666667 0.04 -0.01 - vertex 0.06 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 5.782412e-19 - vertex 0.06 0.04 0.01 - vertex 0.06666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.01 - vertex 0.06666667 0.04 0 - vertex 0.06 0.04 5.782412e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.01 - vertex 0.06 0.04 0.02 - vertex 0.06666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.02 - vertex 0.06666667 0.04 0.01 - vertex 0.06 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.02 - vertex 0.06 0.04 0.03 - vertex 0.06666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.03 - vertex 0.06666667 0.04 0.02 - vertex 0.06 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.03 - vertex 0.06 0.04 0.04 - vertex 0.06666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.04 - vertex 0.06666667 0.04 0.03 - vertex 0.06 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06 0.04 0.04 - vertex 0.06 0.04 0.05 - vertex 0.06666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.05 - vertex 0.06666667 0.04 0.04 - vertex 0.06 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.05 - vertex 0.06666667 0.04 -0.04 - vertex 0.07333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.04 - vertex 0.07333333 0.04 -0.05 - vertex 0.06666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.04 - vertex 0.06666667 0.04 -0.03 - vertex 0.07333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.03 - vertex 0.07333333 0.04 -0.04 - vertex 0.06666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.03 - vertex 0.06666667 0.04 -0.02 - vertex 0.07333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.02 - vertex 0.07333333 0.04 -0.03 - vertex 0.06666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.02 - vertex 0.06666667 0.04 -0.01 - vertex 0.07333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.01 - vertex 0.07333333 0.04 -0.02 - vertex 0.06666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 -0.01 - vertex 0.06666667 0.04 0 - vertex 0.07333333 0.04 -4.336809e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -4.336809e-19 - vertex 0.07333333 0.04 -0.01 - vertex 0.06666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0 - vertex 0.06666667 0.04 0.01 - vertex 0.07333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.01 - vertex 0.07333333 0.04 -4.336809e-19 - vertex 0.06666667 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.01 - vertex 0.06666667 0.04 0.02 - vertex 0.07333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.02 - vertex 0.07333333 0.04 0.01 - vertex 0.06666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.02 - vertex 0.06666667 0.04 0.03 - vertex 0.07333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.03 - vertex 0.07333333 0.04 0.02 - vertex 0.06666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.03 - vertex 0.06666667 0.04 0.04 - vertex 0.07333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.04 - vertex 0.07333333 0.04 0.03 - vertex 0.06666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.06666667 0.04 0.04 - vertex 0.06666667 0.04 0.05 - vertex 0.07333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.05 - vertex 0.07333333 0.04 0.04 - vertex 0.06666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.05 - vertex 0.07333333 0.04 -0.04 - vertex 0.08 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.04 - vertex 0.08 0.04 -0.05 - vertex 0.07333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.04 - vertex 0.07333333 0.04 -0.03 - vertex 0.08 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.03 - vertex 0.08 0.04 -0.04 - vertex 0.07333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.03 - vertex 0.07333333 0.04 -0.02 - vertex 0.08 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.02 - vertex 0.08 0.04 -0.03 - vertex 0.07333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.02 - vertex 0.07333333 0.04 -0.01 - vertex 0.08 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.01 - vertex 0.08 0.04 -0.02 - vertex 0.07333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 -0.01 - vertex 0.07333333 0.04 -4.336809e-19 - vertex 0.08 0.04 2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 2.891206e-19 - vertex 0.08 0.04 -0.01 - vertex 0.07333333 0.04 -0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.07333333 0.04 0.01 - vertex 0.08 0.04 0.01 - vertex 0.08 0.04 2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 2.891206e-19 - vertex 0.07333333 0.04 -4.336809e-19 - vertex 0.07333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.01 - vertex 0.07333333 0.04 0.02 - vertex 0.08 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.02 - vertex 0.08 0.04 0.01 - vertex 0.07333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.02 - vertex 0.07333333 0.04 0.03 - vertex 0.08 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.03 - vertex 0.08 0.04 0.02 - vertex 0.07333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.03 - vertex 0.07333333 0.04 0.04 - vertex 0.08 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.04 - vertex 0.08 0.04 0.03 - vertex 0.07333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.07333333 0.04 0.04 - vertex 0.07333333 0.04 0.05 - vertex 0.08 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.05 - vertex 0.08 0.04 0.04 - vertex 0.07333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.05 - vertex 0.08 0.04 -0.04 - vertex 0.08666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.04 - vertex 0.08666667 0.04 -0.05 - vertex 0.08 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.04 - vertex 0.08 0.04 -0.03 - vertex 0.08666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.03 - vertex 0.08666667 0.04 -0.04 - vertex 0.08 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.03 - vertex 0.08 0.04 -0.02 - vertex 0.08666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.02 - vertex 0.08666667 0.04 -0.03 - vertex 0.08 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.02 - vertex 0.08 0.04 -0.01 - vertex 0.08666667 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.01 - vertex 0.08666667 0.04 -0.02 - vertex 0.08 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 -0.01 - vertex 0.08 0.04 2.891206e-19 - vertex 0.08666667 0.04 -2.168404e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -2.168404e-19 - vertex 0.08666667 0.04 -0.01 - vertex 0.08 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 2.891206e-19 - vertex 0.08 0.04 0.01 - vertex 0.08666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.01 - vertex 0.08666667 0.04 -2.168404e-19 - vertex 0.08 0.04 2.891206e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.01 - vertex 0.08 0.04 0.02 - vertex 0.08666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.02 - vertex 0.08666667 0.04 0.01 - vertex 0.08 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.02 - vertex 0.08 0.04 0.03 - vertex 0.08666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.03 - vertex 0.08666667 0.04 0.02 - vertex 0.08 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.03 - vertex 0.08 0.04 0.04 - vertex 0.08666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.04 - vertex 0.08666667 0.04 0.03 - vertex 0.08 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08 0.04 0.04 - vertex 0.08 0.04 0.05 - vertex 0.08666667 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.05 - vertex 0.08666667 0.04 0.04 - vertex 0.08 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.05 - vertex 0.08666667 0.04 -0.04 - vertex 0.09333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.04 - vertex 0.09333333 0.04 -0.05 - vertex 0.08666667 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.04 - vertex 0.08666667 0.04 -0.03 - vertex 0.09333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.03 - vertex 0.09333333 0.04 -0.04 - vertex 0.08666667 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.03 - vertex 0.08666667 0.04 -0.02 - vertex 0.09333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.02 - vertex 0.09333333 0.04 -0.03 - vertex 0.08666667 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.02 - vertex 0.08666667 0.04 -0.01 - vertex 0.09333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.01 - vertex 0.09333333 0.04 -0.02 - vertex 0.08666667 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 -0.01 - vertex 0.08666667 0.04 -2.168404e-19 - vertex 0.09333333 0.04 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 4.698209e-19 - vertex 0.09333333 0.04 -0.01 - vertex 0.08666667 0.04 -0.01 - endloop - endfacet - facet normal -0 1 0 - outer loop - vertex 0.08666667 0.04 0.01 - vertex 0.09333333 0.04 0.01 - vertex 0.09333333 0.04 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 4.698209e-19 - vertex 0.08666667 0.04 -2.168404e-19 - vertex 0.08666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.01 - vertex 0.08666667 0.04 0.02 - vertex 0.09333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.02 - vertex 0.09333333 0.04 0.01 - vertex 0.08666667 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.02 - vertex 0.08666667 0.04 0.03 - vertex 0.09333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.03 - vertex 0.09333333 0.04 0.02 - vertex 0.08666667 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.03 - vertex 0.08666667 0.04 0.04 - vertex 0.09333333 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.04 - vertex 0.09333333 0.04 0.03 - vertex 0.08666667 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.08666667 0.04 0.04 - vertex 0.08666667 0.04 0.05 - vertex 0.09333333 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.05 - vertex 0.09333333 0.04 0.04 - vertex 0.08666667 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.05 - vertex 0.09333333 0.04 -0.04 - vertex 0.1 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 -0.04 - vertex 0.1 0.04 -0.05 - vertex 0.09333333 0.04 -0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.04 - vertex 0.09333333 0.04 -0.03 - vertex 0.1 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 -0.03 - vertex 0.1 0.04 -0.04 - vertex 0.09333333 0.04 -0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.03 - vertex 0.09333333 0.04 -0.02 - vertex 0.1 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 -0.02 - vertex 0.1 0.04 -0.03 - vertex 0.09333333 0.04 -0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.02 - vertex 0.09333333 0.04 -0.01 - vertex 0.1 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 -0.01 - vertex 0.1 0.04 -0.02 - vertex 0.09333333 0.04 -0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 -0.01 - vertex 0.09333333 0.04 4.698209e-19 - vertex 0.1 0.04 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 0 - vertex 0.1 0.04 -0.01 - vertex 0.09333333 0.04 -0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 4.698209e-19 - vertex 0.09333333 0.04 0.01 - vertex 0.1 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 0.01 - vertex 0.1 0.04 0 - vertex 0.09333333 0.04 4.698209e-19 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.01 - vertex 0.09333333 0.04 0.02 - vertex 0.1 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 0.02 - vertex 0.1 0.04 0.01 - vertex 0.09333333 0.04 0.01 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.02 - vertex 0.09333333 0.04 0.03 - vertex 0.1 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 0.03 - vertex 0.1 0.04 0.02 - vertex 0.09333333 0.04 0.02 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.03 - vertex 0.09333333 0.04 0.04 - vertex 0.1 0.04 0.04 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 0.04 - vertex 0.1 0.04 0.03 - vertex 0.09333333 0.04 0.03 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.09333333 0.04 0.04 - vertex 0.09333333 0.04 0.05 - vertex 0.1 0.04 0.05 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.1 0.04 0.05 - vertex 0.1 0.04 0.04 - vertex 0.09333333 0.04 0.04 - endloop - endfacet -endsolid maxY -solid minX - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 -0.05 - vertex -0.1 0.008 -0.04 - vertex -0.1 0.016 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 -0.04 - vertex -0.1 0.016 -0.05 - vertex -0.1 0.008 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 -0.05 - vertex -0.1 0.016 -0.04 - vertex -0.1 0.024 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 -0.04 - vertex -0.1 0.024 -0.05 - vertex -0.1 0.016 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 -0.05 - vertex -0.1 0.024 -0.04 - vertex -0.1 0.032 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 -0.04 - vertex -0.1 0.032 -0.05 - vertex -0.1 0.024 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 -0.05 - vertex -0.1 0.032 -0.04 - vertex -0.1 0.04 -0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 -0.04 - vertex -0.1 0.04 -0.05 - vertex -0.1 0.032 -0.05 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 -0.04 - vertex -0.1 0.008 -0.03 - vertex -0.1 0.016 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 -0.03 - vertex -0.1 0.016 -0.04 - vertex -0.1 0.008 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 -0.04 - vertex -0.1 0.016 -0.03 - vertex -0.1 0.024 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 -0.03 - vertex -0.1 0.024 -0.04 - vertex -0.1 0.016 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 -0.04 - vertex -0.1 0.024 -0.03 - vertex -0.1 0.032 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 -0.03 - vertex -0.1 0.032 -0.04 - vertex -0.1 0.024 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 -0.04 - vertex -0.1 0.032 -0.03 - vertex -0.1 0.04 -0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 -0.03 - vertex -0.1 0.04 -0.04 - vertex -0.1 0.032 -0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 -0.03 - vertex -0.1 0.008 -0.02 - vertex -0.1 0.016 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 -0.02 - vertex -0.1 0.016 -0.03 - vertex -0.1 0.008 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 -0.03 - vertex -0.1 0.016 -0.02 - vertex -0.1 0.024 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 -0.02 - vertex -0.1 0.024 -0.03 - vertex -0.1 0.016 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 -0.03 - vertex -0.1 0.024 -0.02 - vertex -0.1 0.032 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 -0.02 - vertex -0.1 0.032 -0.03 - vertex -0.1 0.024 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 -0.03 - vertex -0.1 0.032 -0.02 - vertex -0.1 0.04 -0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 -0.02 - vertex -0.1 0.04 -0.03 - vertex -0.1 0.032 -0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 -0.02 - vertex -0.1 0.008 -0.01 - vertex -0.1 0.016 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 -0.01 - vertex -0.1 0.016 -0.02 - vertex -0.1 0.008 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 -0.02 - vertex -0.1 0.016 -0.01 - vertex -0.1 0.024 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 -0.01 - vertex -0.1 0.024 -0.02 - vertex -0.1 0.016 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 -0.02 - vertex -0.1 0.024 -0.01 - vertex -0.1 0.032 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 -0.01 - vertex -0.1 0.032 -0.02 - vertex -0.1 0.024 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 -0.02 - vertex -0.1 0.032 -0.01 - vertex -0.1 0.04 -0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 -0.01 - vertex -0.1 0.04 -0.02 - vertex -0.1 0.032 -0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 -0.01 - vertex -0.1 0.008 0 - vertex -0.1 0.016 -2.891206e-19 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 -2.891206e-19 - vertex -0.1 0.016 -0.01 - vertex -0.1 0.008 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 -0.01 - vertex -0.1 0.016 -2.891206e-19 - vertex -0.1 0.024 5.782412e-19 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 5.782412e-19 - vertex -0.1 0.024 -0.01 - vertex -0.1 0.016 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 -0.01 - vertex -0.1 0.024 5.782412e-19 - vertex -0.1 0.032 2.891206e-19 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 2.891206e-19 - vertex -0.1 0.032 -0.01 - vertex -0.1 0.024 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 -0.01 - vertex -0.1 0.032 2.891206e-19 - vertex -0.1 0.04 0 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 0 - vertex -0.1 0.04 -0.01 - vertex -0.1 0.032 -0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 0 - vertex -0.1 0.008 0.01 - vertex -0.1 0.016 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 0.01 - vertex -0.1 0.016 -2.891206e-19 - vertex -0.1 0.008 0 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 0.01 - vertex -0.1 0.024 0.01 - vertex -0.1 0.024 5.782412e-19 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -0.1 0.024 5.782412e-19 - vertex -0.1 0.016 -2.891206e-19 - vertex -0.1 0.016 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 5.782412e-19 - vertex -0.1 0.024 0.01 - vertex -0.1 0.032 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 0.01 - vertex -0.1 0.032 2.891206e-19 - vertex -0.1 0.024 5.782412e-19 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 2.891206e-19 - vertex -0.1 0.032 0.01 - vertex -0.1 0.04 0.01 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 0.01 - vertex -0.1 0.04 0 - vertex -0.1 0.032 2.891206e-19 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 0.01 - vertex -0.1 0.008 0.02 - vertex -0.1 0.016 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 0.02 - vertex -0.1 0.016 0.01 - vertex -0.1 0.008 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 0.01 - vertex -0.1 0.016 0.02 - vertex -0.1 0.024 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 0.02 - vertex -0.1 0.024 0.01 - vertex -0.1 0.016 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 0.01 - vertex -0.1 0.024 0.02 - vertex -0.1 0.032 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 0.02 - vertex -0.1 0.032 0.01 - vertex -0.1 0.024 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 0.01 - vertex -0.1 0.032 0.02 - vertex -0.1 0.04 0.02 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 0.02 - vertex -0.1 0.04 0.01 - vertex -0.1 0.032 0.01 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 0.02 - vertex -0.1 0.008 0.03 - vertex -0.1 0.016 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 0.03 - vertex -0.1 0.016 0.02 - vertex -0.1 0.008 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 0.02 - vertex -0.1 0.016 0.03 - vertex -0.1 0.024 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 0.03 - vertex -0.1 0.024 0.02 - vertex -0.1 0.016 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 0.02 - vertex -0.1 0.024 0.03 - vertex -0.1 0.032 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 0.03 - vertex -0.1 0.032 0.02 - vertex -0.1 0.024 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 0.02 - vertex -0.1 0.032 0.03 - vertex -0.1 0.04 0.03 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 0.03 - vertex -0.1 0.04 0.02 - vertex -0.1 0.032 0.02 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 0.03 - vertex -0.1 0.008 0.04 - vertex -0.1 0.016 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 0.04 - vertex -0.1 0.016 0.03 - vertex -0.1 0.008 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 0.03 - vertex -0.1 0.016 0.04 - vertex -0.1 0.024 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 0.04 - vertex -0.1 0.024 0.03 - vertex -0.1 0.016 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 0.03 - vertex -0.1 0.024 0.04 - vertex -0.1 0.032 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 0.04 - vertex -0.1 0.032 0.03 - vertex -0.1 0.024 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 0.03 - vertex -0.1 0.032 0.04 - vertex -0.1 0.04 0.04 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 0.04 - vertex -0.1 0.04 0.03 - vertex -0.1 0.032 0.03 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.008 0.04 - vertex -0.1 0.008 0.05 - vertex -0.1 0.016 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.016 0.05 - vertex -0.1 0.016 0.04 - vertex -0.1 0.008 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.016 0.04 - vertex -0.1 0.016 0.05 - vertex -0.1 0.024 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.024 0.05 - vertex -0.1 0.024 0.04 - vertex -0.1 0.016 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.024 0.04 - vertex -0.1 0.024 0.05 - vertex -0.1 0.032 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.032 0.05 - vertex -0.1 0.032 0.04 - vertex -0.1 0.024 0.04 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -0.1 0.032 0.04 - vertex -0.1 0.032 0.05 - vertex -0.1 0.04 0.05 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -0.1 0.04 0.05 - vertex -0.1 0.04 0.04 - vertex -0.1 0.032 0.04 - endloop - endfacet -endsolid minX -solid maxX - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.05 - vertex 0.1 0.016 -0.05 - vertex 0.1 0.016 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.04 - vertex 0.1 0.008 -0.04 - vertex 0.1 0.008 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.05 - vertex 0.1 0.024 -0.05 - vertex 0.1 0.024 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.04 - vertex 0.1 0.016 -0.04 - vertex 0.1 0.016 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.05 - vertex 0.1 0.032 -0.05 - vertex 0.1 0.032 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.04 - vertex 0.1 0.024 -0.04 - vertex 0.1 0.024 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.05 - vertex 0.1 0.04 -0.05 - vertex 0.1 0.04 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 -0.04 - vertex 0.1 0.032 -0.04 - vertex 0.1 0.032 -0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.04 - vertex 0.1 0.016 -0.04 - vertex 0.1 0.016 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.03 - vertex 0.1 0.008 -0.03 - vertex 0.1 0.008 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.04 - vertex 0.1 0.024 -0.04 - vertex 0.1 0.024 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.03 - vertex 0.1 0.016 -0.03 - vertex 0.1 0.016 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.04 - vertex 0.1 0.032 -0.04 - vertex 0.1 0.032 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.03 - vertex 0.1 0.024 -0.03 - vertex 0.1 0.024 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.04 - vertex 0.1 0.04 -0.04 - vertex 0.1 0.04 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 -0.03 - vertex 0.1 0.032 -0.03 - vertex 0.1 0.032 -0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.03 - vertex 0.1 0.016 -0.03 - vertex 0.1 0.016 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.02 - vertex 0.1 0.008 -0.02 - vertex 0.1 0.008 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.03 - vertex 0.1 0.024 -0.03 - vertex 0.1 0.024 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.02 - vertex 0.1 0.016 -0.02 - vertex 0.1 0.016 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.03 - vertex 0.1 0.032 -0.03 - vertex 0.1 0.032 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.02 - vertex 0.1 0.024 -0.02 - vertex 0.1 0.024 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.03 - vertex 0.1 0.04 -0.03 - vertex 0.1 0.04 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 -0.02 - vertex 0.1 0.032 -0.02 - vertex 0.1 0.032 -0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.02 - vertex 0.1 0.016 -0.02 - vertex 0.1 0.016 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.01 - vertex 0.1 0.008 -0.01 - vertex 0.1 0.008 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.02 - vertex 0.1 0.024 -0.02 - vertex 0.1 0.024 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.01 - vertex 0.1 0.016 -0.01 - vertex 0.1 0.016 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.02 - vertex 0.1 0.032 -0.02 - vertex 0.1 0.032 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.01 - vertex 0.1 0.024 -0.01 - vertex 0.1 0.024 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.02 - vertex 0.1 0.04 -0.02 - vertex 0.1 0.04 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 -0.01 - vertex 0.1 0.032 -0.01 - vertex 0.1 0.032 -0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 -0.01 - vertex 0.1 0.016 -0.01 - vertex 0.1 0.016 -2.891206e-19 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -2.891206e-19 - vertex 0.1 0.008 0 - vertex 0.1 0.008 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 -0.01 - vertex 0.1 0.024 -0.01 - vertex 0.1 0.024 5.782412e-19 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 5.782412e-19 - vertex 0.1 0.016 -2.891206e-19 - vertex 0.1 0.016 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 -0.01 - vertex 0.1 0.032 -0.01 - vertex 0.1 0.032 2.891206e-19 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 2.891206e-19 - vertex 0.1 0.024 5.782412e-19 - vertex 0.1 0.024 -0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 -0.01 - vertex 0.1 0.04 -0.01 - vertex 0.1 0.04 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 0 - vertex 0.1 0.032 2.891206e-19 - vertex 0.1 0.032 -0.01 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.1 0.008 0 - vertex 0.1 0.016 -2.891206e-19 - vertex 0.1 0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.01 - vertex 0.1 0.008 0.01 - vertex 0.1 0.008 0 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 0.1 0.024 5.782412e-19 - vertex 0.1 0.024 0.01 - vertex 0.1 0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.01 - vertex 0.1 0.016 -2.891206e-19 - vertex 0.1 0.024 5.782412e-19 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.1 0.024 5.782412e-19 - vertex 0.1 0.032 2.891206e-19 - vertex 0.1 0.032 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.01 - vertex 0.1 0.024 0.01 - vertex 0.1 0.024 5.782412e-19 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 0.1 0.032 2.891206e-19 - vertex 0.1 0.04 0 - vertex 0.1 0.04 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 0.01 - vertex 0.1 0.032 0.01 - vertex 0.1 0.032 2.891206e-19 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.01 - vertex 0.1 0.016 0.01 - vertex 0.1 0.016 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.02 - vertex 0.1 0.008 0.02 - vertex 0.1 0.008 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.01 - vertex 0.1 0.024 0.01 - vertex 0.1 0.024 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.02 - vertex 0.1 0.016 0.02 - vertex 0.1 0.016 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.01 - vertex 0.1 0.032 0.01 - vertex 0.1 0.032 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.02 - vertex 0.1 0.024 0.02 - vertex 0.1 0.024 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.01 - vertex 0.1 0.04 0.01 - vertex 0.1 0.04 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 0.02 - vertex 0.1 0.032 0.02 - vertex 0.1 0.032 0.01 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.02 - vertex 0.1 0.016 0.02 - vertex 0.1 0.016 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.03 - vertex 0.1 0.008 0.03 - vertex 0.1 0.008 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.02 - vertex 0.1 0.024 0.02 - vertex 0.1 0.024 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.03 - vertex 0.1 0.016 0.03 - vertex 0.1 0.016 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.02 - vertex 0.1 0.032 0.02 - vertex 0.1 0.032 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.03 - vertex 0.1 0.024 0.03 - vertex 0.1 0.024 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.02 - vertex 0.1 0.04 0.02 - vertex 0.1 0.04 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 0.03 - vertex 0.1 0.032 0.03 - vertex 0.1 0.032 0.02 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.03 - vertex 0.1 0.016 0.03 - vertex 0.1 0.016 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.04 - vertex 0.1 0.008 0.04 - vertex 0.1 0.008 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.03 - vertex 0.1 0.024 0.03 - vertex 0.1 0.024 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.04 - vertex 0.1 0.016 0.04 - vertex 0.1 0.016 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.03 - vertex 0.1 0.032 0.03 - vertex 0.1 0.032 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.04 - vertex 0.1 0.024 0.04 - vertex 0.1 0.024 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.03 - vertex 0.1 0.04 0.03 - vertex 0.1 0.04 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 0.04 - vertex 0.1 0.032 0.04 - vertex 0.1 0.032 0.03 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.008 0.04 - vertex 0.1 0.016 0.04 - vertex 0.1 0.016 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.05 - vertex 0.1 0.008 0.05 - vertex 0.1 0.008 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.016 0.04 - vertex 0.1 0.024 0.04 - vertex 0.1 0.024 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.05 - vertex 0.1 0.016 0.05 - vertex 0.1 0.016 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.024 0.04 - vertex 0.1 0.032 0.04 - vertex 0.1 0.032 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.05 - vertex 0.1 0.024 0.05 - vertex 0.1 0.024 0.04 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.032 0.04 - vertex 0.1 0.04 0.04 - vertex 0.1 0.04 0.05 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 0.1 0.04 0.05 - vertex 0.1 0.032 0.05 - vertex 0.1 0.032 0.04 - endloop - endfacet -endsolid maxX -solid minZ - facet normal 0 0 -1 - outer loop - vertex -0.1 0.008 -0.05 - vertex -0.1 0.016 -0.05 - vertex -0.09333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 0.016 -0.05 - vertex -0.09333333 0.008 -0.05 - vertex -0.1 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 0.016 -0.05 - vertex -0.1 0.024 -0.05 - vertex -0.09333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 0.024 -0.05 - vertex -0.09333333 0.016 -0.05 - vertex -0.1 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 0.024 -0.05 - vertex -0.1 0.032 -0.05 - vertex -0.09333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 0.032 -0.05 - vertex -0.09333333 0.024 -0.05 - vertex -0.1 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.1 0.032 -0.05 - vertex -0.1 0.04 -0.05 - vertex -0.09333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.09333333 0.04 -0.05 - vertex -0.09333333 0.032 -0.05 - vertex -0.1 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 0.008 -0.05 - vertex -0.09333333 0.016 -0.05 - vertex -0.08666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 0.016 -0.05 - vertex -0.08666667 0.008 -0.05 - vertex -0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 0.016 -0.05 - vertex -0.09333333 0.024 -0.05 - vertex -0.08666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 0.024 -0.05 - vertex -0.08666667 0.016 -0.05 - vertex -0.09333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 0.024 -0.05 - vertex -0.09333333 0.032 -0.05 - vertex -0.08666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 0.032 -0.05 - vertex -0.08666667 0.024 -0.05 - vertex -0.09333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.09333333 0.032 -0.05 - vertex -0.09333333 0.04 -0.05 - vertex -0.08666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08666667 0.04 -0.05 - vertex -0.08666667 0.032 -0.05 - vertex -0.09333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 0.008 -0.05 - vertex -0.08666667 0.016 -0.05 - vertex -0.08 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 0.016 -0.05 - vertex -0.08 0.008 -0.05 - vertex -0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 0.016 -0.05 - vertex -0.08666667 0.024 -0.05 - vertex -0.08 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 0.024 -0.05 - vertex -0.08 0.016 -0.05 - vertex -0.08666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 0.024 -0.05 - vertex -0.08666667 0.032 -0.05 - vertex -0.08 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 0.032 -0.05 - vertex -0.08 0.024 -0.05 - vertex -0.08666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08666667 0.032 -0.05 - vertex -0.08666667 0.04 -0.05 - vertex -0.08 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.08 0.04 -0.05 - vertex -0.08 0.032 -0.05 - vertex -0.08666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 0.008 -0.05 - vertex -0.08 0.016 -0.05 - vertex -0.07333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 0.016 -0.05 - vertex -0.07333333 0.008 -0.05 - vertex -0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 0.016 -0.05 - vertex -0.08 0.024 -0.05 - vertex -0.07333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 0.024 -0.05 - vertex -0.07333333 0.016 -0.05 - vertex -0.08 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 0.024 -0.05 - vertex -0.08 0.032 -0.05 - vertex -0.07333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 0.032 -0.05 - vertex -0.07333333 0.024 -0.05 - vertex -0.08 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.08 0.032 -0.05 - vertex -0.08 0.04 -0.05 - vertex -0.07333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.07333333 0.04 -0.05 - vertex -0.07333333 0.032 -0.05 - vertex -0.08 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 0.008 -0.05 - vertex -0.07333333 0.016 -0.05 - vertex -0.06666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 0.016 -0.05 - vertex -0.06666667 0.008 -0.05 - vertex -0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 0.016 -0.05 - vertex -0.07333333 0.024 -0.05 - vertex -0.06666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 0.024 -0.05 - vertex -0.06666667 0.016 -0.05 - vertex -0.07333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 0.024 -0.05 - vertex -0.07333333 0.032 -0.05 - vertex -0.06666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 0.032 -0.05 - vertex -0.06666667 0.024 -0.05 - vertex -0.07333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.07333333 0.032 -0.05 - vertex -0.07333333 0.04 -0.05 - vertex -0.06666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06666667 0.04 -0.05 - vertex -0.06666667 0.032 -0.05 - vertex -0.07333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 0.008 -0.05 - vertex -0.06666667 0.016 -0.05 - vertex -0.06 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 0.016 -0.05 - vertex -0.06 0.008 -0.05 - vertex -0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 0.016 -0.05 - vertex -0.06666667 0.024 -0.05 - vertex -0.06 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 0.024 -0.05 - vertex -0.06 0.016 -0.05 - vertex -0.06666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 0.024 -0.05 - vertex -0.06666667 0.032 -0.05 - vertex -0.06 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 0.032 -0.05 - vertex -0.06 0.024 -0.05 - vertex -0.06666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06666667 0.032 -0.05 - vertex -0.06666667 0.04 -0.05 - vertex -0.06 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.06 0.04 -0.05 - vertex -0.06 0.032 -0.05 - vertex -0.06666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 0.008 -0.05 - vertex -0.06 0.016 -0.05 - vertex -0.05333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 0.016 -0.05 - vertex -0.05333333 0.008 -0.05 - vertex -0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 0.016 -0.05 - vertex -0.06 0.024 -0.05 - vertex -0.05333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 0.024 -0.05 - vertex -0.05333333 0.016 -0.05 - vertex -0.06 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 0.024 -0.05 - vertex -0.06 0.032 -0.05 - vertex -0.05333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 0.032 -0.05 - vertex -0.05333333 0.024 -0.05 - vertex -0.06 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.06 0.032 -0.05 - vertex -0.06 0.04 -0.05 - vertex -0.05333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.05333333 0.04 -0.05 - vertex -0.05333333 0.032 -0.05 - vertex -0.06 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 0.008 -0.05 - vertex -0.05333333 0.016 -0.05 - vertex -0.04666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 0.016 -0.05 - vertex -0.04666667 0.008 -0.05 - vertex -0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 0.016 -0.05 - vertex -0.05333333 0.024 -0.05 - vertex -0.04666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 0.024 -0.05 - vertex -0.04666667 0.016 -0.05 - vertex -0.05333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 0.024 -0.05 - vertex -0.05333333 0.032 -0.05 - vertex -0.04666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 0.032 -0.05 - vertex -0.04666667 0.024 -0.05 - vertex -0.05333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.05333333 0.032 -0.05 - vertex -0.05333333 0.04 -0.05 - vertex -0.04666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04666667 0.04 -0.05 - vertex -0.04666667 0.032 -0.05 - vertex -0.05333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 0.008 -0.05 - vertex -0.04666667 0.016 -0.05 - vertex -0.04 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 0.016 -0.05 - vertex -0.04 0.008 -0.05 - vertex -0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 0.016 -0.05 - vertex -0.04666667 0.024 -0.05 - vertex -0.04 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 0.024 -0.05 - vertex -0.04 0.016 -0.05 - vertex -0.04666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 0.024 -0.05 - vertex -0.04666667 0.032 -0.05 - vertex -0.04 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 0.032 -0.05 - vertex -0.04 0.024 -0.05 - vertex -0.04666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04666667 0.032 -0.05 - vertex -0.04666667 0.04 -0.05 - vertex -0.04 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.04 0.04 -0.05 - vertex -0.04 0.032 -0.05 - vertex -0.04666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 0.008 -0.05 - vertex -0.04 0.016 -0.05 - vertex -0.03333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 0.016 -0.05 - vertex -0.03333333 0.008 -0.05 - vertex -0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 0.016 -0.05 - vertex -0.04 0.024 -0.05 - vertex -0.03333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 0.024 -0.05 - vertex -0.03333333 0.016 -0.05 - vertex -0.04 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 0.024 -0.05 - vertex -0.04 0.032 -0.05 - vertex -0.03333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 0.032 -0.05 - vertex -0.03333333 0.024 -0.05 - vertex -0.04 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.04 0.032 -0.05 - vertex -0.04 0.04 -0.05 - vertex -0.03333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.03333333 0.04 -0.05 - vertex -0.03333333 0.032 -0.05 - vertex -0.04 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 0.008 -0.05 - vertex -0.03333333 0.016 -0.05 - vertex -0.02666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 0.016 -0.05 - vertex -0.02666667 0.008 -0.05 - vertex -0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 0.016 -0.05 - vertex -0.03333333 0.024 -0.05 - vertex -0.02666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 0.024 -0.05 - vertex -0.02666667 0.016 -0.05 - vertex -0.03333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 0.024 -0.05 - vertex -0.03333333 0.032 -0.05 - vertex -0.02666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 0.032 -0.05 - vertex -0.02666667 0.024 -0.05 - vertex -0.03333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.03333333 0.032 -0.05 - vertex -0.03333333 0.04 -0.05 - vertex -0.02666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02666667 0.04 -0.05 - vertex -0.02666667 0.032 -0.05 - vertex -0.03333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 0.008 -0.05 - vertex -0.02666667 0.016 -0.05 - vertex -0.02 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 0.016 -0.05 - vertex -0.02 0.008 -0.05 - vertex -0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 0.016 -0.05 - vertex -0.02666667 0.024 -0.05 - vertex -0.02 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 0.024 -0.05 - vertex -0.02 0.016 -0.05 - vertex -0.02666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 0.024 -0.05 - vertex -0.02666667 0.032 -0.05 - vertex -0.02 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 0.032 -0.05 - vertex -0.02 0.024 -0.05 - vertex -0.02666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02666667 0.032 -0.05 - vertex -0.02666667 0.04 -0.05 - vertex -0.02 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.02 0.04 -0.05 - vertex -0.02 0.032 -0.05 - vertex -0.02666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 0.008 -0.05 - vertex -0.02 0.016 -0.05 - vertex -0.01333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 0.016 -0.05 - vertex -0.01333333 0.008 -0.05 - vertex -0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 0.016 -0.05 - vertex -0.02 0.024 -0.05 - vertex -0.01333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 0.024 -0.05 - vertex -0.01333333 0.016 -0.05 - vertex -0.02 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 0.024 -0.05 - vertex -0.02 0.032 -0.05 - vertex -0.01333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 0.032 -0.05 - vertex -0.01333333 0.024 -0.05 - vertex -0.02 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.02 0.032 -0.05 - vertex -0.02 0.04 -0.05 - vertex -0.01333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.01333333 0.04 -0.05 - vertex -0.01333333 0.032 -0.05 - vertex -0.02 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 0.008 -0.05 - vertex -0.01333333 0.016 -0.05 - vertex -0.006666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0.016 -0.05 - vertex -0.006666667 0.008 -0.05 - vertex -0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 0.016 -0.05 - vertex -0.01333333 0.024 -0.05 - vertex -0.006666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0.024 -0.05 - vertex -0.006666667 0.016 -0.05 - vertex -0.01333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 0.024 -0.05 - vertex -0.01333333 0.032 -0.05 - vertex -0.006666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0.032 -0.05 - vertex -0.006666667 0.024 -0.05 - vertex -0.01333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.01333333 0.032 -0.05 - vertex -0.01333333 0.04 -0.05 - vertex -0.006666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -0.006666667 0.04 -0.05 - vertex -0.006666667 0.032 -0.05 - vertex -0.01333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 0.008 -0.05 - vertex -0.006666667 0.016 -0.05 - vertex 0 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0.016 -0.05 - vertex 0 0.008 -0.05 - vertex -0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 0.016 -0.05 - vertex -0.006666667 0.024 -0.05 - vertex 0 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0.024 -0.05 - vertex 0 0.016 -0.05 - vertex -0.006666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 0.024 -0.05 - vertex -0.006666667 0.032 -0.05 - vertex 0 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0.032 -0.05 - vertex 0 0.024 -0.05 - vertex -0.006666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.006666667 0.032 -0.05 - vertex -0.006666667 0.04 -0.05 - vertex 0 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0 0.04 -0.05 - vertex 0 0.032 -0.05 - vertex -0.006666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 0.008 -0.05 - vertex 0 0.016 -0.05 - vertex 0.006666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0.016 -0.05 - vertex 0.006666667 0.008 -0.05 - vertex 0 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 0.016 -0.05 - vertex 0 0.024 -0.05 - vertex 0.006666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0.024 -0.05 - vertex 0.006666667 0.016 -0.05 - vertex 0 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 0.024 -0.05 - vertex 0 0.032 -0.05 - vertex 0.006666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0.032 -0.05 - vertex 0.006666667 0.024 -0.05 - vertex 0 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0 0.032 -0.05 - vertex 0 0.04 -0.05 - vertex 0.006666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.006666667 0.04 -0.05 - vertex 0.006666667 0.032 -0.05 - vertex 0 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 0.008 -0.05 - vertex 0.006666667 0.016 -0.05 - vertex 0.01333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0.016 -0.05 - vertex 0.01333333 0.008 -0.05 - vertex 0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 0.016 -0.05 - vertex 0.006666667 0.024 -0.05 - vertex 0.01333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0.024 -0.05 - vertex 0.01333333 0.016 -0.05 - vertex 0.006666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 0.024 -0.05 - vertex 0.006666667 0.032 -0.05 - vertex 0.01333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0.032 -0.05 - vertex 0.01333333 0.024 -0.05 - vertex 0.006666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.006666667 0.032 -0.05 - vertex 0.006666667 0.04 -0.05 - vertex 0.01333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.01333333 0.04 -0.05 - vertex 0.01333333 0.032 -0.05 - vertex 0.006666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 0.008 -0.05 - vertex 0.01333333 0.016 -0.05 - vertex 0.02 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 0.016 -0.05 - vertex 0.02 0.008 -0.05 - vertex 0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 0.016 -0.05 - vertex 0.01333333 0.024 -0.05 - vertex 0.02 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 0.024 -0.05 - vertex 0.02 0.016 -0.05 - vertex 0.01333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 0.024 -0.05 - vertex 0.01333333 0.032 -0.05 - vertex 0.02 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 0.032 -0.05 - vertex 0.02 0.024 -0.05 - vertex 0.01333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.01333333 0.032 -0.05 - vertex 0.01333333 0.04 -0.05 - vertex 0.02 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02 0.04 -0.05 - vertex 0.02 0.032 -0.05 - vertex 0.01333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 0.008 -0.05 - vertex 0.02 0.016 -0.05 - vertex 0.02666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 0.016 -0.05 - vertex 0.02666667 0.008 -0.05 - vertex 0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 0.016 -0.05 - vertex 0.02 0.024 -0.05 - vertex 0.02666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 0.024 -0.05 - vertex 0.02666667 0.016 -0.05 - vertex 0.02 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 0.024 -0.05 - vertex 0.02 0.032 -0.05 - vertex 0.02666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 0.032 -0.05 - vertex 0.02666667 0.024 -0.05 - vertex 0.02 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02 0.032 -0.05 - vertex 0.02 0.04 -0.05 - vertex 0.02666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.02666667 0.04 -0.05 - vertex 0.02666667 0.032 -0.05 - vertex 0.02 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 0.008 -0.05 - vertex 0.02666667 0.016 -0.05 - vertex 0.03333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 0.016 -0.05 - vertex 0.03333333 0.008 -0.05 - vertex 0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 0.016 -0.05 - vertex 0.02666667 0.024 -0.05 - vertex 0.03333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 0.024 -0.05 - vertex 0.03333333 0.016 -0.05 - vertex 0.02666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 0.024 -0.05 - vertex 0.02666667 0.032 -0.05 - vertex 0.03333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 0.032 -0.05 - vertex 0.03333333 0.024 -0.05 - vertex 0.02666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.02666667 0.032 -0.05 - vertex 0.02666667 0.04 -0.05 - vertex 0.03333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.03333333 0.04 -0.05 - vertex 0.03333333 0.032 -0.05 - vertex 0.02666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 0.008 -0.05 - vertex 0.03333333 0.016 -0.05 - vertex 0.04 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 0.016 -0.05 - vertex 0.04 0.008 -0.05 - vertex 0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 0.016 -0.05 - vertex 0.03333333 0.024 -0.05 - vertex 0.04 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 0.024 -0.05 - vertex 0.04 0.016 -0.05 - vertex 0.03333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 0.024 -0.05 - vertex 0.03333333 0.032 -0.05 - vertex 0.04 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 0.032 -0.05 - vertex 0.04 0.024 -0.05 - vertex 0.03333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.03333333 0.032 -0.05 - vertex 0.03333333 0.04 -0.05 - vertex 0.04 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04 0.04 -0.05 - vertex 0.04 0.032 -0.05 - vertex 0.03333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 0.008 -0.05 - vertex 0.04 0.016 -0.05 - vertex 0.04666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 0.016 -0.05 - vertex 0.04666667 0.008 -0.05 - vertex 0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 0.016 -0.05 - vertex 0.04 0.024 -0.05 - vertex 0.04666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 0.024 -0.05 - vertex 0.04666667 0.016 -0.05 - vertex 0.04 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 0.024 -0.05 - vertex 0.04 0.032 -0.05 - vertex 0.04666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 0.032 -0.05 - vertex 0.04666667 0.024 -0.05 - vertex 0.04 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04 0.032 -0.05 - vertex 0.04 0.04 -0.05 - vertex 0.04666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.04666667 0.04 -0.05 - vertex 0.04666667 0.032 -0.05 - vertex 0.04 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 0.008 -0.05 - vertex 0.04666667 0.016 -0.05 - vertex 0.05333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 0.016 -0.05 - vertex 0.05333333 0.008 -0.05 - vertex 0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 0.016 -0.05 - vertex 0.04666667 0.024 -0.05 - vertex 0.05333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 0.024 -0.05 - vertex 0.05333333 0.016 -0.05 - vertex 0.04666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 0.024 -0.05 - vertex 0.04666667 0.032 -0.05 - vertex 0.05333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 0.032 -0.05 - vertex 0.05333333 0.024 -0.05 - vertex 0.04666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.04666667 0.032 -0.05 - vertex 0.04666667 0.04 -0.05 - vertex 0.05333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.05333333 0.04 -0.05 - vertex 0.05333333 0.032 -0.05 - vertex 0.04666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 0.008 -0.05 - vertex 0.05333333 0.016 -0.05 - vertex 0.06 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 0.016 -0.05 - vertex 0.06 0.008 -0.05 - vertex 0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 0.016 -0.05 - vertex 0.05333333 0.024 -0.05 - vertex 0.06 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 0.024 -0.05 - vertex 0.06 0.016 -0.05 - vertex 0.05333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 0.024 -0.05 - vertex 0.05333333 0.032 -0.05 - vertex 0.06 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 0.032 -0.05 - vertex 0.06 0.024 -0.05 - vertex 0.05333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.05333333 0.032 -0.05 - vertex 0.05333333 0.04 -0.05 - vertex 0.06 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06 0.04 -0.05 - vertex 0.06 0.032 -0.05 - vertex 0.05333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 0.008 -0.05 - vertex 0.06 0.016 -0.05 - vertex 0.06666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 0.016 -0.05 - vertex 0.06666667 0.008 -0.05 - vertex 0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 0.016 -0.05 - vertex 0.06 0.024 -0.05 - vertex 0.06666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 0.024 -0.05 - vertex 0.06666667 0.016 -0.05 - vertex 0.06 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 0.024 -0.05 - vertex 0.06 0.032 -0.05 - vertex 0.06666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 0.032 -0.05 - vertex 0.06666667 0.024 -0.05 - vertex 0.06 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06 0.032 -0.05 - vertex 0.06 0.04 -0.05 - vertex 0.06666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.06666667 0.04 -0.05 - vertex 0.06666667 0.032 -0.05 - vertex 0.06 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 0.008 -0.05 - vertex 0.06666667 0.016 -0.05 - vertex 0.07333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 0.016 -0.05 - vertex 0.07333333 0.008 -0.05 - vertex 0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 0.016 -0.05 - vertex 0.06666667 0.024 -0.05 - vertex 0.07333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 0.024 -0.05 - vertex 0.07333333 0.016 -0.05 - vertex 0.06666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 0.024 -0.05 - vertex 0.06666667 0.032 -0.05 - vertex 0.07333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 0.032 -0.05 - vertex 0.07333333 0.024 -0.05 - vertex 0.06666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.06666667 0.032 -0.05 - vertex 0.06666667 0.04 -0.05 - vertex 0.07333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.07333333 0.04 -0.05 - vertex 0.07333333 0.032 -0.05 - vertex 0.06666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 0.008 -0.05 - vertex 0.07333333 0.016 -0.05 - vertex 0.08 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 0.016 -0.05 - vertex 0.08 0.008 -0.05 - vertex 0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 0.016 -0.05 - vertex 0.07333333 0.024 -0.05 - vertex 0.08 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 0.024 -0.05 - vertex 0.08 0.016 -0.05 - vertex 0.07333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 0.024 -0.05 - vertex 0.07333333 0.032 -0.05 - vertex 0.08 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 0.032 -0.05 - vertex 0.08 0.024 -0.05 - vertex 0.07333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.07333333 0.032 -0.05 - vertex 0.07333333 0.04 -0.05 - vertex 0.08 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08 0.04 -0.05 - vertex 0.08 0.032 -0.05 - vertex 0.07333333 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 0.008 -0.05 - vertex 0.08 0.016 -0.05 - vertex 0.08666667 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 0.016 -0.05 - vertex 0.08666667 0.008 -0.05 - vertex 0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 0.016 -0.05 - vertex 0.08 0.024 -0.05 - vertex 0.08666667 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 0.024 -0.05 - vertex 0.08666667 0.016 -0.05 - vertex 0.08 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 0.024 -0.05 - vertex 0.08 0.032 -0.05 - vertex 0.08666667 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 0.032 -0.05 - vertex 0.08666667 0.024 -0.05 - vertex 0.08 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08 0.032 -0.05 - vertex 0.08 0.04 -0.05 - vertex 0.08666667 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.08666667 0.04 -0.05 - vertex 0.08666667 0.032 -0.05 - vertex 0.08 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 0.008 -0.05 - vertex 0.08666667 0.016 -0.05 - vertex 0.09333333 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 0.016 -0.05 - vertex 0.09333333 0.008 -0.05 - vertex 0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 0.016 -0.05 - vertex 0.08666667 0.024 -0.05 - vertex 0.09333333 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 0.024 -0.05 - vertex 0.09333333 0.016 -0.05 - vertex 0.08666667 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 0.024 -0.05 - vertex 0.08666667 0.032 -0.05 - vertex 0.09333333 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 0.032 -0.05 - vertex 0.09333333 0.024 -0.05 - vertex 0.08666667 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.08666667 0.032 -0.05 - vertex 0.08666667 0.04 -0.05 - vertex 0.09333333 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.09333333 0.04 -0.05 - vertex 0.09333333 0.032 -0.05 - vertex 0.08666667 0.032 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 0.008 -0.05 - vertex 0.09333333 0.016 -0.05 - vertex 0.1 0.016 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 0.016 -0.05 - vertex 0.1 0.008 -0.05 - vertex 0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 0.016 -0.05 - vertex 0.09333333 0.024 -0.05 - vertex 0.1 0.024 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 0.024 -0.05 - vertex 0.1 0.016 -0.05 - vertex 0.09333333 0.016 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 0.024 -0.05 - vertex 0.09333333 0.032 -0.05 - vertex 0.1 0.032 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 0.032 -0.05 - vertex 0.1 0.024 -0.05 - vertex 0.09333333 0.024 -0.05 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.09333333 0.032 -0.05 - vertex 0.09333333 0.04 -0.05 - vertex 0.1 0.04 -0.05 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 0.1 0.04 -0.05 - vertex 0.1 0.032 -0.05 - vertex 0.09333333 0.032 -0.05 - endloop - endfacet -endsolid minZ -solid maxZ - facet normal 0 0 1 - outer loop - vertex -0.1 0.008 0.05 - vertex -0.09333333 0.008 0.05 - vertex -0.09333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.016 0.05 - vertex -0.1 0.016 0.05 - vertex -0.1 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 0.016 0.05 - vertex -0.09333333 0.016 0.05 - vertex -0.09333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.024 0.05 - vertex -0.1 0.024 0.05 - vertex -0.1 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 0.024 0.05 - vertex -0.09333333 0.024 0.05 - vertex -0.09333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.032 0.05 - vertex -0.1 0.032 0.05 - vertex -0.1 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.1 0.032 0.05 - vertex -0.09333333 0.032 0.05 - vertex -0.09333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.04 0.05 - vertex -0.1 0.04 0.05 - vertex -0.1 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.008 0.05 - vertex -0.08666667 0.008 0.05 - vertex -0.08666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.016 0.05 - vertex -0.09333333 0.016 0.05 - vertex -0.09333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.016 0.05 - vertex -0.08666667 0.016 0.05 - vertex -0.08666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.024 0.05 - vertex -0.09333333 0.024 0.05 - vertex -0.09333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.024 0.05 - vertex -0.08666667 0.024 0.05 - vertex -0.08666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.032 0.05 - vertex -0.09333333 0.032 0.05 - vertex -0.09333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.09333333 0.032 0.05 - vertex -0.08666667 0.032 0.05 - vertex -0.08666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.04 0.05 - vertex -0.09333333 0.04 0.05 - vertex -0.09333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.008 0.05 - vertex -0.08 0.008 0.05 - vertex -0.08 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.016 0.05 - vertex -0.08666667 0.016 0.05 - vertex -0.08666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.016 0.05 - vertex -0.08 0.016 0.05 - vertex -0.08 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.024 0.05 - vertex -0.08666667 0.024 0.05 - vertex -0.08666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.024 0.05 - vertex -0.08 0.024 0.05 - vertex -0.08 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.032 0.05 - vertex -0.08666667 0.032 0.05 - vertex -0.08666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08666667 0.032 0.05 - vertex -0.08 0.032 0.05 - vertex -0.08 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.04 0.05 - vertex -0.08666667 0.04 0.05 - vertex -0.08666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.008 0.05 - vertex -0.07333333 0.008 0.05 - vertex -0.07333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.016 0.05 - vertex -0.08 0.016 0.05 - vertex -0.08 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.016 0.05 - vertex -0.07333333 0.016 0.05 - vertex -0.07333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.024 0.05 - vertex -0.08 0.024 0.05 - vertex -0.08 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.024 0.05 - vertex -0.07333333 0.024 0.05 - vertex -0.07333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.032 0.05 - vertex -0.08 0.032 0.05 - vertex -0.08 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.08 0.032 0.05 - vertex -0.07333333 0.032 0.05 - vertex -0.07333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.04 0.05 - vertex -0.08 0.04 0.05 - vertex -0.08 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.008 0.05 - vertex -0.06666667 0.008 0.05 - vertex -0.06666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.016 0.05 - vertex -0.07333333 0.016 0.05 - vertex -0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.016 0.05 - vertex -0.06666667 0.016 0.05 - vertex -0.06666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.024 0.05 - vertex -0.07333333 0.024 0.05 - vertex -0.07333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.024 0.05 - vertex -0.06666667 0.024 0.05 - vertex -0.06666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.032 0.05 - vertex -0.07333333 0.032 0.05 - vertex -0.07333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.07333333 0.032 0.05 - vertex -0.06666667 0.032 0.05 - vertex -0.06666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.04 0.05 - vertex -0.07333333 0.04 0.05 - vertex -0.07333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.008 0.05 - vertex -0.06 0.008 0.05 - vertex -0.06 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.016 0.05 - vertex -0.06666667 0.016 0.05 - vertex -0.06666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.016 0.05 - vertex -0.06 0.016 0.05 - vertex -0.06 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.024 0.05 - vertex -0.06666667 0.024 0.05 - vertex -0.06666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.024 0.05 - vertex -0.06 0.024 0.05 - vertex -0.06 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.032 0.05 - vertex -0.06666667 0.032 0.05 - vertex -0.06666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06666667 0.032 0.05 - vertex -0.06 0.032 0.05 - vertex -0.06 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.04 0.05 - vertex -0.06666667 0.04 0.05 - vertex -0.06666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.008 0.05 - vertex -0.05333333 0.008 0.05 - vertex -0.05333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.016 0.05 - vertex -0.06 0.016 0.05 - vertex -0.06 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.016 0.05 - vertex -0.05333333 0.016 0.05 - vertex -0.05333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.024 0.05 - vertex -0.06 0.024 0.05 - vertex -0.06 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.024 0.05 - vertex -0.05333333 0.024 0.05 - vertex -0.05333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.032 0.05 - vertex -0.06 0.032 0.05 - vertex -0.06 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.06 0.032 0.05 - vertex -0.05333333 0.032 0.05 - vertex -0.05333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.04 0.05 - vertex -0.06 0.04 0.05 - vertex -0.06 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.008 0.05 - vertex -0.04666667 0.008 0.05 - vertex -0.04666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.016 0.05 - vertex -0.05333333 0.016 0.05 - vertex -0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.016 0.05 - vertex -0.04666667 0.016 0.05 - vertex -0.04666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.024 0.05 - vertex -0.05333333 0.024 0.05 - vertex -0.05333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.024 0.05 - vertex -0.04666667 0.024 0.05 - vertex -0.04666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.032 0.05 - vertex -0.05333333 0.032 0.05 - vertex -0.05333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.05333333 0.032 0.05 - vertex -0.04666667 0.032 0.05 - vertex -0.04666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.04 0.05 - vertex -0.05333333 0.04 0.05 - vertex -0.05333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.008 0.05 - vertex -0.04 0.008 0.05 - vertex -0.04 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.016 0.05 - vertex -0.04666667 0.016 0.05 - vertex -0.04666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.016 0.05 - vertex -0.04 0.016 0.05 - vertex -0.04 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.024 0.05 - vertex -0.04666667 0.024 0.05 - vertex -0.04666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.024 0.05 - vertex -0.04 0.024 0.05 - vertex -0.04 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.032 0.05 - vertex -0.04666667 0.032 0.05 - vertex -0.04666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04666667 0.032 0.05 - vertex -0.04 0.032 0.05 - vertex -0.04 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.04 0.05 - vertex -0.04666667 0.04 0.05 - vertex -0.04666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.008 0.05 - vertex -0.03333333 0.008 0.05 - vertex -0.03333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.016 0.05 - vertex -0.04 0.016 0.05 - vertex -0.04 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.016 0.05 - vertex -0.03333333 0.016 0.05 - vertex -0.03333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.024 0.05 - vertex -0.04 0.024 0.05 - vertex -0.04 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.024 0.05 - vertex -0.03333333 0.024 0.05 - vertex -0.03333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.032 0.05 - vertex -0.04 0.032 0.05 - vertex -0.04 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.04 0.032 0.05 - vertex -0.03333333 0.032 0.05 - vertex -0.03333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.04 0.05 - vertex -0.04 0.04 0.05 - vertex -0.04 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.008 0.05 - vertex -0.02666667 0.008 0.05 - vertex -0.02666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.016 0.05 - vertex -0.03333333 0.016 0.05 - vertex -0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.016 0.05 - vertex -0.02666667 0.016 0.05 - vertex -0.02666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.024 0.05 - vertex -0.03333333 0.024 0.05 - vertex -0.03333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.024 0.05 - vertex -0.02666667 0.024 0.05 - vertex -0.02666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.032 0.05 - vertex -0.03333333 0.032 0.05 - vertex -0.03333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.03333333 0.032 0.05 - vertex -0.02666667 0.032 0.05 - vertex -0.02666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.04 0.05 - vertex -0.03333333 0.04 0.05 - vertex -0.03333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.008 0.05 - vertex -0.02 0.008 0.05 - vertex -0.02 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.016 0.05 - vertex -0.02666667 0.016 0.05 - vertex -0.02666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.016 0.05 - vertex -0.02 0.016 0.05 - vertex -0.02 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.024 0.05 - vertex -0.02666667 0.024 0.05 - vertex -0.02666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.024 0.05 - vertex -0.02 0.024 0.05 - vertex -0.02 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.032 0.05 - vertex -0.02666667 0.032 0.05 - vertex -0.02666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02666667 0.032 0.05 - vertex -0.02 0.032 0.05 - vertex -0.02 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.04 0.05 - vertex -0.02666667 0.04 0.05 - vertex -0.02666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.008 0.05 - vertex -0.01333333 0.008 0.05 - vertex -0.01333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.016 0.05 - vertex -0.02 0.016 0.05 - vertex -0.02 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.016 0.05 - vertex -0.01333333 0.016 0.05 - vertex -0.01333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.024 0.05 - vertex -0.02 0.024 0.05 - vertex -0.02 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.024 0.05 - vertex -0.01333333 0.024 0.05 - vertex -0.01333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.032 0.05 - vertex -0.02 0.032 0.05 - vertex -0.02 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.02 0.032 0.05 - vertex -0.01333333 0.032 0.05 - vertex -0.01333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.04 0.05 - vertex -0.02 0.04 0.05 - vertex -0.02 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.008 0.05 - vertex -0.006666667 0.008 0.05 - vertex -0.006666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.016 0.05 - vertex -0.01333333 0.016 0.05 - vertex -0.01333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.016 0.05 - vertex -0.006666667 0.016 0.05 - vertex -0.006666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.024 0.05 - vertex -0.01333333 0.024 0.05 - vertex -0.01333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.024 0.05 - vertex -0.006666667 0.024 0.05 - vertex -0.006666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.032 0.05 - vertex -0.01333333 0.032 0.05 - vertex -0.01333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.01333333 0.032 0.05 - vertex -0.006666667 0.032 0.05 - vertex -0.006666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.04 0.05 - vertex -0.01333333 0.04 0.05 - vertex -0.01333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.008 0.05 - vertex 0 0.008 0.05 - vertex 0 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.016 0.05 - vertex -0.006666667 0.016 0.05 - vertex -0.006666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.016 0.05 - vertex 0 0.016 0.05 - vertex 0 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.024 0.05 - vertex -0.006666667 0.024 0.05 - vertex -0.006666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.024 0.05 - vertex 0 0.024 0.05 - vertex 0 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.032 0.05 - vertex -0.006666667 0.032 0.05 - vertex -0.006666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.006666667 0.032 0.05 - vertex 0 0.032 0.05 - vertex 0 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.04 0.05 - vertex -0.006666667 0.04 0.05 - vertex -0.006666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.008 0.05 - vertex 0.006666667 0.008 0.05 - vertex 0.006666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.016 0.05 - vertex 0 0.016 0.05 - vertex 0 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.016 0.05 - vertex 0.006666667 0.016 0.05 - vertex 0.006666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.024 0.05 - vertex 0 0.024 0.05 - vertex 0 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.024 0.05 - vertex 0.006666667 0.024 0.05 - vertex 0.006666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.032 0.05 - vertex 0 0.032 0.05 - vertex 0 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0 0.032 0.05 - vertex 0.006666667 0.032 0.05 - vertex 0.006666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.04 0.05 - vertex 0 0.04 0.05 - vertex 0 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.008 0.05 - vertex 0.01333333 0.008 0.05 - vertex 0.01333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.016 0.05 - vertex 0.006666667 0.016 0.05 - vertex 0.006666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.016 0.05 - vertex 0.01333333 0.016 0.05 - vertex 0.01333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.024 0.05 - vertex 0.006666667 0.024 0.05 - vertex 0.006666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.024 0.05 - vertex 0.01333333 0.024 0.05 - vertex 0.01333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.032 0.05 - vertex 0.006666667 0.032 0.05 - vertex 0.006666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.006666667 0.032 0.05 - vertex 0.01333333 0.032 0.05 - vertex 0.01333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.04 0.05 - vertex 0.006666667 0.04 0.05 - vertex 0.006666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.008 0.05 - vertex 0.02 0.008 0.05 - vertex 0.02 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.016 0.05 - vertex 0.01333333 0.016 0.05 - vertex 0.01333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.016 0.05 - vertex 0.02 0.016 0.05 - vertex 0.02 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.024 0.05 - vertex 0.01333333 0.024 0.05 - vertex 0.01333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.024 0.05 - vertex 0.02 0.024 0.05 - vertex 0.02 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.032 0.05 - vertex 0.01333333 0.032 0.05 - vertex 0.01333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.01333333 0.032 0.05 - vertex 0.02 0.032 0.05 - vertex 0.02 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.04 0.05 - vertex 0.01333333 0.04 0.05 - vertex 0.01333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.008 0.05 - vertex 0.02666667 0.008 0.05 - vertex 0.02666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.016 0.05 - vertex 0.02 0.016 0.05 - vertex 0.02 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.016 0.05 - vertex 0.02666667 0.016 0.05 - vertex 0.02666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.024 0.05 - vertex 0.02 0.024 0.05 - vertex 0.02 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.024 0.05 - vertex 0.02666667 0.024 0.05 - vertex 0.02666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.032 0.05 - vertex 0.02 0.032 0.05 - vertex 0.02 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02 0.032 0.05 - vertex 0.02666667 0.032 0.05 - vertex 0.02666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.04 0.05 - vertex 0.02 0.04 0.05 - vertex 0.02 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.008 0.05 - vertex 0.03333333 0.008 0.05 - vertex 0.03333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.016 0.05 - vertex 0.02666667 0.016 0.05 - vertex 0.02666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.016 0.05 - vertex 0.03333333 0.016 0.05 - vertex 0.03333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.024 0.05 - vertex 0.02666667 0.024 0.05 - vertex 0.02666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.024 0.05 - vertex 0.03333333 0.024 0.05 - vertex 0.03333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.032 0.05 - vertex 0.02666667 0.032 0.05 - vertex 0.02666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.02666667 0.032 0.05 - vertex 0.03333333 0.032 0.05 - vertex 0.03333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.04 0.05 - vertex 0.02666667 0.04 0.05 - vertex 0.02666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.008 0.05 - vertex 0.04 0.008 0.05 - vertex 0.04 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.016 0.05 - vertex 0.03333333 0.016 0.05 - vertex 0.03333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.016 0.05 - vertex 0.04 0.016 0.05 - vertex 0.04 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.024 0.05 - vertex 0.03333333 0.024 0.05 - vertex 0.03333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.024 0.05 - vertex 0.04 0.024 0.05 - vertex 0.04 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.032 0.05 - vertex 0.03333333 0.032 0.05 - vertex 0.03333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.03333333 0.032 0.05 - vertex 0.04 0.032 0.05 - vertex 0.04 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.04 0.05 - vertex 0.03333333 0.04 0.05 - vertex 0.03333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.008 0.05 - vertex 0.04666667 0.008 0.05 - vertex 0.04666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.016 0.05 - vertex 0.04 0.016 0.05 - vertex 0.04 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.016 0.05 - vertex 0.04666667 0.016 0.05 - vertex 0.04666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.024 0.05 - vertex 0.04 0.024 0.05 - vertex 0.04 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.024 0.05 - vertex 0.04666667 0.024 0.05 - vertex 0.04666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.032 0.05 - vertex 0.04 0.032 0.05 - vertex 0.04 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04 0.032 0.05 - vertex 0.04666667 0.032 0.05 - vertex 0.04666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.04 0.05 - vertex 0.04 0.04 0.05 - vertex 0.04 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.008 0.05 - vertex 0.05333333 0.008 0.05 - vertex 0.05333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.016 0.05 - vertex 0.04666667 0.016 0.05 - vertex 0.04666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.016 0.05 - vertex 0.05333333 0.016 0.05 - vertex 0.05333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.024 0.05 - vertex 0.04666667 0.024 0.05 - vertex 0.04666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.024 0.05 - vertex 0.05333333 0.024 0.05 - vertex 0.05333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.032 0.05 - vertex 0.04666667 0.032 0.05 - vertex 0.04666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.04666667 0.032 0.05 - vertex 0.05333333 0.032 0.05 - vertex 0.05333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.04 0.05 - vertex 0.04666667 0.04 0.05 - vertex 0.04666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.008 0.05 - vertex 0.06 0.008 0.05 - vertex 0.06 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.016 0.05 - vertex 0.05333333 0.016 0.05 - vertex 0.05333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.016 0.05 - vertex 0.06 0.016 0.05 - vertex 0.06 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.024 0.05 - vertex 0.05333333 0.024 0.05 - vertex 0.05333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.024 0.05 - vertex 0.06 0.024 0.05 - vertex 0.06 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.032 0.05 - vertex 0.05333333 0.032 0.05 - vertex 0.05333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.05333333 0.032 0.05 - vertex 0.06 0.032 0.05 - vertex 0.06 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.04 0.05 - vertex 0.05333333 0.04 0.05 - vertex 0.05333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.008 0.05 - vertex 0.06666667 0.008 0.05 - vertex 0.06666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.016 0.05 - vertex 0.06 0.016 0.05 - vertex 0.06 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.016 0.05 - vertex 0.06666667 0.016 0.05 - vertex 0.06666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.024 0.05 - vertex 0.06 0.024 0.05 - vertex 0.06 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.024 0.05 - vertex 0.06666667 0.024 0.05 - vertex 0.06666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.032 0.05 - vertex 0.06 0.032 0.05 - vertex 0.06 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06 0.032 0.05 - vertex 0.06666667 0.032 0.05 - vertex 0.06666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.04 0.05 - vertex 0.06 0.04 0.05 - vertex 0.06 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.008 0.05 - vertex 0.07333333 0.008 0.05 - vertex 0.07333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.016 0.05 - vertex 0.06666667 0.016 0.05 - vertex 0.06666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.016 0.05 - vertex 0.07333333 0.016 0.05 - vertex 0.07333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.024 0.05 - vertex 0.06666667 0.024 0.05 - vertex 0.06666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.024 0.05 - vertex 0.07333333 0.024 0.05 - vertex 0.07333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.032 0.05 - vertex 0.06666667 0.032 0.05 - vertex 0.06666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.06666667 0.032 0.05 - vertex 0.07333333 0.032 0.05 - vertex 0.07333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.04 0.05 - vertex 0.06666667 0.04 0.05 - vertex 0.06666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.008 0.05 - vertex 0.08 0.008 0.05 - vertex 0.08 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.016 0.05 - vertex 0.07333333 0.016 0.05 - vertex 0.07333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.016 0.05 - vertex 0.08 0.016 0.05 - vertex 0.08 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.024 0.05 - vertex 0.07333333 0.024 0.05 - vertex 0.07333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.024 0.05 - vertex 0.08 0.024 0.05 - vertex 0.08 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.032 0.05 - vertex 0.07333333 0.032 0.05 - vertex 0.07333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.07333333 0.032 0.05 - vertex 0.08 0.032 0.05 - vertex 0.08 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.04 0.05 - vertex 0.07333333 0.04 0.05 - vertex 0.07333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.008 0.05 - vertex 0.08666667 0.008 0.05 - vertex 0.08666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.016 0.05 - vertex 0.08 0.016 0.05 - vertex 0.08 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.016 0.05 - vertex 0.08666667 0.016 0.05 - vertex 0.08666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.024 0.05 - vertex 0.08 0.024 0.05 - vertex 0.08 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.024 0.05 - vertex 0.08666667 0.024 0.05 - vertex 0.08666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.032 0.05 - vertex 0.08 0.032 0.05 - vertex 0.08 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08 0.032 0.05 - vertex 0.08666667 0.032 0.05 - vertex 0.08666667 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.04 0.05 - vertex 0.08 0.04 0.05 - vertex 0.08 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.008 0.05 - vertex 0.09333333 0.008 0.05 - vertex 0.09333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.016 0.05 - vertex 0.08666667 0.016 0.05 - vertex 0.08666667 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.016 0.05 - vertex 0.09333333 0.016 0.05 - vertex 0.09333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.024 0.05 - vertex 0.08666667 0.024 0.05 - vertex 0.08666667 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.024 0.05 - vertex 0.09333333 0.024 0.05 - vertex 0.09333333 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.032 0.05 - vertex 0.08666667 0.032 0.05 - vertex 0.08666667 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.08666667 0.032 0.05 - vertex 0.09333333 0.032 0.05 - vertex 0.09333333 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.04 0.05 - vertex 0.08666667 0.04 0.05 - vertex 0.08666667 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.008 0.05 - vertex 0.1 0.008 0.05 - vertex 0.1 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 0.016 0.05 - vertex 0.09333333 0.016 0.05 - vertex 0.09333333 0.008 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.016 0.05 - vertex 0.1 0.016 0.05 - vertex 0.1 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 0.024 0.05 - vertex 0.09333333 0.024 0.05 - vertex 0.09333333 0.016 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.024 0.05 - vertex 0.1 0.024 0.05 - vertex 0.1 0.032 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 0.032 0.05 - vertex 0.09333333 0.032 0.05 - vertex 0.09333333 0.024 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.09333333 0.032 0.05 - vertex 0.1 0.032 0.05 - vertex 0.1 0.04 0.05 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.1 0.04 0.05 - vertex 0.09333333 0.04 0.05 - vertex 0.09333333 0.032 0.05 - endloop - endfacet -endsolid maxZ -solid topAir_to_rightSolid - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.05 - vertex 0.02 0.008 -0.05 - vertex 0.02 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 -0.04 - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 -0.05 - vertex 0.02666667 0.008 -0.05 - vertex 0.02666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.04 - vertex 0.02 0.008 -0.04 - vertex 0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.05 - vertex 0.03333333 0.008 -0.05 - vertex 0.03333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.04 - vertex 0.02666667 0.008 -0.04 - vertex 0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.05 - vertex 0.04 0.008 -0.05 - vertex 0.04 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 -0.04 - vertex 0.03333333 0.008 -0.04 - vertex 0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 -0.05 - vertex 0.04666667 0.008 -0.05 - vertex 0.04666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.04 - vertex 0.04 0.008 -0.04 - vertex 0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.05 - vertex 0.05333333 0.008 -0.05 - vertex 0.05333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.04 - vertex 0.04666667 0.008 -0.04 - vertex 0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.05 - vertex 0.06 0.008 -0.05 - vertex 0.06 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 -0.04 - vertex 0.05333333 0.008 -0.04 - vertex 0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 -0.05 - vertex 0.06666667 0.008 -0.05 - vertex 0.06666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.04 - vertex 0.06 0.008 -0.04 - vertex 0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.05 - vertex 0.07333333 0.008 -0.05 - vertex 0.07333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.04 - vertex 0.06666667 0.008 -0.04 - vertex 0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.05 - vertex 0.08 0.008 -0.05 - vertex 0.08 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 -0.04 - vertex 0.07333333 0.008 -0.04 - vertex 0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 -0.05 - vertex 0.08666667 0.008 -0.05 - vertex 0.08666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.04 - vertex 0.08 0.008 -0.04 - vertex 0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.05 - vertex 0.09333333 0.008 -0.05 - vertex 0.09333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.04 - vertex 0.08666667 0.008 -0.04 - vertex 0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.05 - vertex 0.1 0.008 -0.05 - vertex 0.1 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 -0.04 - vertex 0.09333333 0.008 -0.04 - vertex 0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.04 - vertex 0.02 0.008 -0.04 - vertex 0.02 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 -0.03 - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 -0.04 - vertex 0.02666667 0.008 -0.04 - vertex 0.02666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.03 - vertex 0.02 0.008 -0.03 - vertex 0.02 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.04 - vertex 0.03333333 0.008 -0.04 - vertex 0.03333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.03 - vertex 0.02666667 0.008 -0.03 - vertex 0.02666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.04 - vertex 0.04 0.008 -0.04 - vertex 0.04 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 -0.03 - vertex 0.03333333 0.008 -0.03 - vertex 0.03333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 -0.04 - vertex 0.04666667 0.008 -0.04 - vertex 0.04666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.03 - vertex 0.04 0.008 -0.03 - vertex 0.04 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.04 - vertex 0.05333333 0.008 -0.04 - vertex 0.05333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.03 - vertex 0.04666667 0.008 -0.03 - vertex 0.04666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.04 - vertex 0.06 0.008 -0.04 - vertex 0.06 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 -0.03 - vertex 0.05333333 0.008 -0.03 - vertex 0.05333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 -0.04 - vertex 0.06666667 0.008 -0.04 - vertex 0.06666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.03 - vertex 0.06 0.008 -0.03 - vertex 0.06 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.04 - vertex 0.07333333 0.008 -0.04 - vertex 0.07333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.03 - vertex 0.06666667 0.008 -0.03 - vertex 0.06666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.04 - vertex 0.08 0.008 -0.04 - vertex 0.08 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 -0.03 - vertex 0.07333333 0.008 -0.03 - vertex 0.07333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 -0.04 - vertex 0.08666667 0.008 -0.04 - vertex 0.08666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.03 - vertex 0.08 0.008 -0.03 - vertex 0.08 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.04 - vertex 0.09333333 0.008 -0.04 - vertex 0.09333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.03 - vertex 0.08666667 0.008 -0.03 - vertex 0.08666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.04 - vertex 0.1 0.008 -0.04 - vertex 0.1 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 -0.03 - vertex 0.09333333 0.008 -0.03 - vertex 0.09333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.03 - vertex 0.02 0.008 -0.03 - vertex 0.02 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 -0.02 - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 -0.03 - vertex 0.02666667 0.008 -0.03 - vertex 0.02666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.02 - vertex 0.02 0.008 -0.02 - vertex 0.02 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.03 - vertex 0.03333333 0.008 -0.03 - vertex 0.03333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.02 - vertex 0.02666667 0.008 -0.02 - vertex 0.02666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.03 - vertex 0.04 0.008 -0.03 - vertex 0.04 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 -0.02 - vertex 0.03333333 0.008 -0.02 - vertex 0.03333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 -0.03 - vertex 0.04666667 0.008 -0.03 - vertex 0.04666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.02 - vertex 0.04 0.008 -0.02 - vertex 0.04 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.03 - vertex 0.05333333 0.008 -0.03 - vertex 0.05333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.02 - vertex 0.04666667 0.008 -0.02 - vertex 0.04666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.03 - vertex 0.06 0.008 -0.03 - vertex 0.06 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 -0.02 - vertex 0.05333333 0.008 -0.02 - vertex 0.05333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 -0.03 - vertex 0.06666667 0.008 -0.03 - vertex 0.06666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.02 - vertex 0.06 0.008 -0.02 - vertex 0.06 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.03 - vertex 0.07333333 0.008 -0.03 - vertex 0.07333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.02 - vertex 0.06666667 0.008 -0.02 - vertex 0.06666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.03 - vertex 0.08 0.008 -0.03 - vertex 0.08 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 -0.02 - vertex 0.07333333 0.008 -0.02 - vertex 0.07333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 -0.03 - vertex 0.08666667 0.008 -0.03 - vertex 0.08666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.02 - vertex 0.08 0.008 -0.02 - vertex 0.08 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.03 - vertex 0.09333333 0.008 -0.03 - vertex 0.09333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.02 - vertex 0.08666667 0.008 -0.02 - vertex 0.08666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.03 - vertex 0.1 0.008 -0.03 - vertex 0.1 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 -0.02 - vertex 0.09333333 0.008 -0.02 - vertex 0.09333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.02 - vertex 0.02 0.008 -0.02 - vertex 0.02 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 -0.01 - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 -0.02 - vertex 0.02666667 0.008 -0.02 - vertex 0.02666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.01 - vertex 0.02 0.008 -0.01 - vertex 0.02 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.02 - vertex 0.03333333 0.008 -0.02 - vertex 0.03333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.01 - vertex 0.02666667 0.008 -0.01 - vertex 0.02666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.02 - vertex 0.04 0.008 -0.02 - vertex 0.04 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 -0.01 - vertex 0.03333333 0.008 -0.01 - vertex 0.03333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 -0.02 - vertex 0.04666667 0.008 -0.02 - vertex 0.04666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.01 - vertex 0.04 0.008 -0.01 - vertex 0.04 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.02 - vertex 0.05333333 0.008 -0.02 - vertex 0.05333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.01 - vertex 0.04666667 0.008 -0.01 - vertex 0.04666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.02 - vertex 0.06 0.008 -0.02 - vertex 0.06 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 -0.01 - vertex 0.05333333 0.008 -0.01 - vertex 0.05333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 -0.02 - vertex 0.06666667 0.008 -0.02 - vertex 0.06666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.01 - vertex 0.06 0.008 -0.01 - vertex 0.06 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.02 - vertex 0.07333333 0.008 -0.02 - vertex 0.07333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.01 - vertex 0.06666667 0.008 -0.01 - vertex 0.06666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.02 - vertex 0.08 0.008 -0.02 - vertex 0.08 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 -0.01 - vertex 0.07333333 0.008 -0.01 - vertex 0.07333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 -0.02 - vertex 0.08666667 0.008 -0.02 - vertex 0.08666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.01 - vertex 0.08 0.008 -0.01 - vertex 0.08 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.02 - vertex 0.09333333 0.008 -0.02 - vertex 0.09333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.01 - vertex 0.08666667 0.008 -0.01 - vertex 0.08666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.02 - vertex 0.1 0.008 -0.02 - vertex 0.1 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 -0.01 - vertex 0.09333333 0.008 -0.01 - vertex 0.09333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.01 - vertex 0.02 0.008 -0.01 - vertex 0.02 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 0 - vertex 0.01333333 0.008 0 - vertex 0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 -0.01 - vertex 0.02666667 0.008 -0.01 - vertex 0.02666667 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.02 0.008 0 - vertex 0.02 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 -0.01 - vertex 0.03333333 0.008 -0.01 - vertex 0.03333333 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 0 - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.02666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 -0.01 - vertex 0.04 0.008 -0.01 - vertex 0.04 0.008 -5.782412e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 -5.782412e-19 - vertex 0.03333333 0.008 0 - vertex 0.03333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 -0.01 - vertex 0.04666667 0.008 -0.01 - vertex 0.04666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0 - vertex 0.04 0.008 -5.782412e-19 - vertex 0.04 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 -0.01 - vertex 0.05333333 0.008 -0.01 - vertex 0.05333333 0.008 -2.891206e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.04666667 0.008 0 - vertex 0.04666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 -0.01 - vertex 0.06 0.008 -0.01 - vertex 0.06 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 5.782412e-19 - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.05333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 -0.01 - vertex 0.06666667 0.008 -0.01 - vertex 0.06666667 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 0 - vertex 0.06 0.008 5.782412e-19 - vertex 0.06 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 -0.01 - vertex 0.07333333 0.008 -0.01 - vertex 0.07333333 0.008 -4.336809e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.06666667 0.008 0 - vertex 0.06666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 -0.01 - vertex 0.08 0.008 -0.01 - vertex 0.08 0.008 2.891206e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 2.891206e-19 - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.07333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 -0.01 - vertex 0.08666667 0.008 -0.01 - vertex 0.08666667 0.008 -2.168404e-19 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.08 0.008 2.891206e-19 - vertex 0.08 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 -0.01 - vertex 0.09333333 0.008 -0.01 - vertex 0.09333333 0.008 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.08666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 -0.01 - vertex 0.1 0.008 -0.01 - vertex 0.1 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 0 - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.09333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 0 - vertex 0.02 0.008 0 - vertex 0.02 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 0.01 - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.02666667 0.008 0.01 - vertex 0.02 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 0.01 - vertex 0.02 0.008 0 - vertex 0.02666667 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 5.782412e-19 - vertex 0.03333333 0.008 0 - vertex 0.03333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 0.01 - vertex 0.02666667 0.008 0.01 - vertex 0.02666667 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 0 - vertex 0.04 0.008 -5.782412e-19 - vertex 0.04 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 0.01 - vertex 0.03333333 0.008 0.01 - vertex 0.03333333 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0 - vertex 0.04666667 0.008 0.01 - vertex 0.04 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 0.01 - vertex 0.04 0.008 -5.782412e-19 - vertex 0.04666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0 - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.05333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 0.01 - vertex 0.04666667 0.008 0.01 - vertex 0.04666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 5.782412e-19 - vertex 0.06 0.008 0.01 - vertex 0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 0.01 - vertex 0.05333333 0.008 -2.891206e-19 - vertex 0.06 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 5.782412e-19 - vertex 0.06666667 0.008 0 - vertex 0.06666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 0.01 - vertex 0.06 0.008 0.01 - vertex 0.06 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 0 - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.07333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 0.01 - vertex 0.06666667 0.008 0.01 - vertex 0.06666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 2.891206e-19 - vertex 0.08 0.008 0.01 - vertex 0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 0.01 - vertex 0.07333333 0.008 -4.336809e-19 - vertex 0.08 0.008 2.891206e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 2.891206e-19 - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.08666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 0.01 - vertex 0.08 0.008 0.01 - vertex 0.08 0.008 2.891206e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.09333333 0.008 0.01 - vertex 0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 0.01 - vertex 0.08666667 0.008 -2.168404e-19 - vertex 0.09333333 0.008 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 4.698209e-19 - vertex 0.1 0.008 0 - vertex 0.1 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 0.01 - vertex 0.09333333 0.008 0.01 - vertex 0.09333333 0.008 4.698209e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 0.01 - vertex 0.02 0.008 0.01 - vertex 0.02 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 0.02 - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 0.01 - vertex 0.02666667 0.008 0.01 - vertex 0.02666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 0.02 - vertex 0.02 0.008 0.02 - vertex 0.02 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 0.01 - vertex 0.03333333 0.008 0.01 - vertex 0.03333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 0.02 - vertex 0.02666667 0.008 0.02 - vertex 0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 0.01 - vertex 0.04 0.008 0.01 - vertex 0.04 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 0.02 - vertex 0.03333333 0.008 0.02 - vertex 0.03333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 0.01 - vertex 0.04666667 0.008 0.01 - vertex 0.04666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 0.02 - vertex 0.04 0.008 0.02 - vertex 0.04 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0.01 - vertex 0.05333333 0.008 0.01 - vertex 0.05333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 0.02 - vertex 0.04666667 0.008 0.02 - vertex 0.04666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 0.01 - vertex 0.06 0.008 0.01 - vertex 0.06 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 0.02 - vertex 0.05333333 0.008 0.02 - vertex 0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 0.01 - vertex 0.06666667 0.008 0.01 - vertex 0.06666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 0.02 - vertex 0.06 0.008 0.02 - vertex 0.06 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 0.01 - vertex 0.07333333 0.008 0.01 - vertex 0.07333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 0.02 - vertex 0.06666667 0.008 0.02 - vertex 0.06666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 0.01 - vertex 0.08 0.008 0.01 - vertex 0.08 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 0.02 - vertex 0.07333333 0.008 0.02 - vertex 0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 0.01 - vertex 0.08666667 0.008 0.01 - vertex 0.08666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 0.02 - vertex 0.08 0.008 0.02 - vertex 0.08 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 0.01 - vertex 0.09333333 0.008 0.01 - vertex 0.09333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 0.02 - vertex 0.08666667 0.008 0.02 - vertex 0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 0.01 - vertex 0.1 0.008 0.01 - vertex 0.1 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 0.02 - vertex 0.09333333 0.008 0.02 - vertex 0.09333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 0.02 - vertex 0.02 0.008 0.02 - vertex 0.02 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 0.03 - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 0.02 - vertex 0.02666667 0.008 0.02 - vertex 0.02666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 0.03 - vertex 0.02 0.008 0.03 - vertex 0.02 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 0.02 - vertex 0.03333333 0.008 0.02 - vertex 0.03333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 0.03 - vertex 0.02666667 0.008 0.03 - vertex 0.02666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 0.02 - vertex 0.04 0.008 0.02 - vertex 0.04 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 0.03 - vertex 0.03333333 0.008 0.03 - vertex 0.03333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 0.02 - vertex 0.04666667 0.008 0.02 - vertex 0.04666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 0.03 - vertex 0.04 0.008 0.03 - vertex 0.04 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0.02 - vertex 0.05333333 0.008 0.02 - vertex 0.05333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 0.03 - vertex 0.04666667 0.008 0.03 - vertex 0.04666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 0.02 - vertex 0.06 0.008 0.02 - vertex 0.06 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 0.03 - vertex 0.05333333 0.008 0.03 - vertex 0.05333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 0.02 - vertex 0.06666667 0.008 0.02 - vertex 0.06666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 0.03 - vertex 0.06 0.008 0.03 - vertex 0.06 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 0.02 - vertex 0.07333333 0.008 0.02 - vertex 0.07333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 0.03 - vertex 0.06666667 0.008 0.03 - vertex 0.06666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 0.02 - vertex 0.08 0.008 0.02 - vertex 0.08 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 0.03 - vertex 0.07333333 0.008 0.03 - vertex 0.07333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 0.02 - vertex 0.08666667 0.008 0.02 - vertex 0.08666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 0.03 - vertex 0.08 0.008 0.03 - vertex 0.08 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 0.02 - vertex 0.09333333 0.008 0.02 - vertex 0.09333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 0.03 - vertex 0.08666667 0.008 0.03 - vertex 0.08666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 0.02 - vertex 0.1 0.008 0.02 - vertex 0.1 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 0.03 - vertex 0.09333333 0.008 0.03 - vertex 0.09333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 0.03 - vertex 0.02 0.008 0.03 - vertex 0.02 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 0.04 - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 0.03 - vertex 0.02666667 0.008 0.03 - vertex 0.02666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 0.04 - vertex 0.02 0.008 0.04 - vertex 0.02 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 0.03 - vertex 0.03333333 0.008 0.03 - vertex 0.03333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 0.04 - vertex 0.02666667 0.008 0.04 - vertex 0.02666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 0.03 - vertex 0.04 0.008 0.03 - vertex 0.04 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 0.04 - vertex 0.03333333 0.008 0.04 - vertex 0.03333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 0.03 - vertex 0.04666667 0.008 0.03 - vertex 0.04666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 0.04 - vertex 0.04 0.008 0.04 - vertex 0.04 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0.03 - vertex 0.05333333 0.008 0.03 - vertex 0.05333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 0.04 - vertex 0.04666667 0.008 0.04 - vertex 0.04666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 0.03 - vertex 0.06 0.008 0.03 - vertex 0.06 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 0.04 - vertex 0.05333333 0.008 0.04 - vertex 0.05333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 0.03 - vertex 0.06666667 0.008 0.03 - vertex 0.06666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 0.04 - vertex 0.06 0.008 0.04 - vertex 0.06 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 0.03 - vertex 0.07333333 0.008 0.03 - vertex 0.07333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 0.04 - vertex 0.06666667 0.008 0.04 - vertex 0.06666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 0.03 - vertex 0.08 0.008 0.03 - vertex 0.08 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 0.04 - vertex 0.07333333 0.008 0.04 - vertex 0.07333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 0.03 - vertex 0.08666667 0.008 0.03 - vertex 0.08666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 0.04 - vertex 0.08 0.008 0.04 - vertex 0.08 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 0.03 - vertex 0.09333333 0.008 0.03 - vertex 0.09333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 0.04 - vertex 0.08666667 0.008 0.04 - vertex 0.08666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 0.03 - vertex 0.1 0.008 0.03 - vertex 0.1 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 0.04 - vertex 0.09333333 0.008 0.04 - vertex 0.09333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.01333333 0.008 0.04 - vertex 0.02 0.008 0.04 - vertex 0.02 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02 0.008 0.05 - vertex 0.01333333 0.008 0.05 - vertex 0.01333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02 0.008 0.04 - vertex 0.02666667 0.008 0.04 - vertex 0.02666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.02666667 0.008 0.05 - vertex 0.02 0.008 0.05 - vertex 0.02 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.02666667 0.008 0.04 - vertex 0.03333333 0.008 0.04 - vertex 0.03333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.03333333 0.008 0.05 - vertex 0.02666667 0.008 0.05 - vertex 0.02666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.03333333 0.008 0.04 - vertex 0.04 0.008 0.04 - vertex 0.04 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04 0.008 0.05 - vertex 0.03333333 0.008 0.05 - vertex 0.03333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04 0.008 0.04 - vertex 0.04666667 0.008 0.04 - vertex 0.04666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.04666667 0.008 0.05 - vertex 0.04 0.008 0.05 - vertex 0.04 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.04666667 0.008 0.04 - vertex 0.05333333 0.008 0.04 - vertex 0.05333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.05333333 0.008 0.05 - vertex 0.04666667 0.008 0.05 - vertex 0.04666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.05333333 0.008 0.04 - vertex 0.06 0.008 0.04 - vertex 0.06 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06 0.008 0.05 - vertex 0.05333333 0.008 0.05 - vertex 0.05333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06 0.008 0.04 - vertex 0.06666667 0.008 0.04 - vertex 0.06666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.06666667 0.008 0.05 - vertex 0.06 0.008 0.05 - vertex 0.06 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.06666667 0.008 0.04 - vertex 0.07333333 0.008 0.04 - vertex 0.07333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.07333333 0.008 0.05 - vertex 0.06666667 0.008 0.05 - vertex 0.06666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.07333333 0.008 0.04 - vertex 0.08 0.008 0.04 - vertex 0.08 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08 0.008 0.05 - vertex 0.07333333 0.008 0.05 - vertex 0.07333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08 0.008 0.04 - vertex 0.08666667 0.008 0.04 - vertex 0.08666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.08666667 0.008 0.05 - vertex 0.08 0.008 0.05 - vertex 0.08 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.08666667 0.008 0.04 - vertex 0.09333333 0.008 0.04 - vertex 0.09333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.09333333 0.008 0.05 - vertex 0.08666667 0.008 0.05 - vertex 0.08666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.09333333 0.008 0.04 - vertex 0.1 0.008 0.04 - vertex 0.1 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.1 0.008 0.05 - vertex 0.09333333 0.008 0.05 - vertex 0.09333333 0.008 0.04 - endloop - endfacet -endsolid topAir_to_rightSolid -solid topAir_to_heater - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.05 - vertex -0.006666667 0.008 -0.05 - vertex -0.006666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.04 - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.05 - vertex 0 0.008 -0.05 - vertex 0 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 -0.04 - vertex -0.006666667 0.008 -0.04 - vertex -0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 -0.05 - vertex 0.006666667 0.008 -0.05 - vertex 0.006666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.04 - vertex 0 0.008 -0.04 - vertex 0 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.05 - vertex 0.01333333 0.008 -0.05 - vertex 0.01333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.04 - vertex 0.006666667 0.008 -0.04 - vertex 0.006666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.04 - vertex -0.006666667 0.008 -0.04 - vertex -0.006666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.03 - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.04 - vertex 0 0.008 -0.04 - vertex 0 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 -0.03 - vertex -0.006666667 0.008 -0.03 - vertex -0.006666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 -0.04 - vertex 0.006666667 0.008 -0.04 - vertex 0.006666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.03 - vertex 0 0.008 -0.03 - vertex 0 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.04 - vertex 0.01333333 0.008 -0.04 - vertex 0.01333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.03 - vertex 0.006666667 0.008 -0.03 - vertex 0.006666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.03 - vertex -0.006666667 0.008 -0.03 - vertex -0.006666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.02 - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.03 - vertex 0 0.008 -0.03 - vertex 0 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 -0.02 - vertex -0.006666667 0.008 -0.02 - vertex -0.006666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 -0.03 - vertex 0.006666667 0.008 -0.03 - vertex 0.006666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.02 - vertex 0 0.008 -0.02 - vertex 0 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.03 - vertex 0.01333333 0.008 -0.03 - vertex 0.01333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.02 - vertex 0.006666667 0.008 -0.02 - vertex 0.006666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.02 - vertex -0.006666667 0.008 -0.02 - vertex -0.006666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.01 - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.02 - vertex 0 0.008 -0.02 - vertex 0 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 -0.01 - vertex -0.006666667 0.008 -0.01 - vertex -0.006666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 -0.02 - vertex 0.006666667 0.008 -0.02 - vertex 0.006666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.01 - vertex 0 0.008 -0.01 - vertex 0 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.02 - vertex 0.01333333 0.008 -0.02 - vertex 0.01333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 -0.01 - vertex 0.006666667 0.008 -0.01 - vertex 0.006666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.01 - vertex -0.006666667 0.008 -0.01 - vertex -0.006666667 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 0 - vertex -0.01333333 0.008 0 - vertex -0.01333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 -0.01 - vertex 0 0.008 -0.01 - vertex 0 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 0 - vertex -0.006666667 0.008 0 - vertex -0.006666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 -0.01 - vertex 0.006666667 0.008 -0.01 - vertex 0.006666667 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 0 - vertex 0 0.008 0 - vertex 0 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 -0.01 - vertex 0.01333333 0.008 -0.01 - vertex 0.01333333 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 0 - vertex 0.006666667 0.008 0 - vertex 0.006666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 0 - vertex -0.006666667 0.008 0 - vertex -0.006666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 0.01 - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 0 - vertex 0 0.008 0 - vertex 0 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 0.01 - vertex -0.006666667 0.008 0.01 - vertex -0.006666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 0 - vertex 0.006666667 0.008 0 - vertex 0.006666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 0.01 - vertex 0 0.008 0.01 - vertex 0 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 0 - vertex 0.01333333 0.008 0 - vertex 0.01333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 0.01 - vertex 0.006666667 0.008 0.01 - vertex 0.006666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 0.01 - vertex -0.006666667 0.008 0.01 - vertex -0.006666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 0.02 - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 0.01 - vertex 0 0.008 0.01 - vertex 0 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 0.02 - vertex -0.006666667 0.008 0.02 - vertex -0.006666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 0.01 - vertex 0.006666667 0.008 0.01 - vertex 0.006666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 0.02 - vertex 0 0.008 0.02 - vertex 0 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 0.01 - vertex 0.01333333 0.008 0.01 - vertex 0.01333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 0.02 - vertex 0.006666667 0.008 0.02 - vertex 0.006666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 0.02 - vertex -0.006666667 0.008 0.02 - vertex -0.006666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 0.03 - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 0.02 - vertex 0 0.008 0.02 - vertex 0 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 0.03 - vertex -0.006666667 0.008 0.03 - vertex -0.006666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 0.02 - vertex 0.006666667 0.008 0.02 - vertex 0.006666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 0.03 - vertex 0 0.008 0.03 - vertex 0 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 0.02 - vertex 0.01333333 0.008 0.02 - vertex 0.01333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 0.03 - vertex 0.006666667 0.008 0.03 - vertex 0.006666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 0.03 - vertex -0.006666667 0.008 0.03 - vertex -0.006666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 0.04 - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 0.03 - vertex 0 0.008 0.03 - vertex 0 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 0.04 - vertex -0.006666667 0.008 0.04 - vertex -0.006666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 0.03 - vertex 0.006666667 0.008 0.03 - vertex 0.006666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 0.04 - vertex 0 0.008 0.04 - vertex 0 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 0.03 - vertex 0.01333333 0.008 0.03 - vertex 0.01333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 0.04 - vertex 0.006666667 0.008 0.04 - vertex 0.006666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.01333333 0.008 0.04 - vertex -0.006666667 0.008 0.04 - vertex -0.006666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.006666667 0.008 0.05 - vertex -0.01333333 0.008 0.05 - vertex -0.01333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.006666667 0.008 0.04 - vertex 0 0.008 0.04 - vertex 0 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0 0.008 0.05 - vertex -0.006666667 0.008 0.05 - vertex -0.006666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0 0.008 0.04 - vertex 0.006666667 0.008 0.04 - vertex 0.006666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.006666667 0.008 0.05 - vertex 0 0.008 0.05 - vertex 0 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 0.006666667 0.008 0.04 - vertex 0.01333333 0.008 0.04 - vertex 0.01333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex 0.01333333 0.008 0.05 - vertex 0.006666667 0.008 0.05 - vertex 0.006666667 0.008 0.04 - endloop - endfacet -endsolid topAir_to_heater -solid topAir_to_leftSolid - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 -0.05 - vertex -0.09333333 0.008 -0.05 - vertex -0.09333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.04 - vertex -0.1 0.008 -0.04 - vertex -0.1 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.05 - vertex -0.08666667 0.008 -0.05 - vertex -0.08666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.04 - vertex -0.09333333 0.008 -0.04 - vertex -0.09333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.05 - vertex -0.08 0.008 -0.05 - vertex -0.08 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 -0.04 - vertex -0.08666667 0.008 -0.04 - vertex -0.08666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 -0.05 - vertex -0.07333333 0.008 -0.05 - vertex -0.07333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.04 - vertex -0.08 0.008 -0.04 - vertex -0.08 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.05 - vertex -0.06666667 0.008 -0.05 - vertex -0.06666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.04 - vertex -0.07333333 0.008 -0.04 - vertex -0.07333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.05 - vertex -0.06 0.008 -0.05 - vertex -0.06 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 -0.04 - vertex -0.06666667 0.008 -0.04 - vertex -0.06666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 -0.05 - vertex -0.05333333 0.008 -0.05 - vertex -0.05333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.04 - vertex -0.06 0.008 -0.04 - vertex -0.06 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.05 - vertex -0.04666667 0.008 -0.05 - vertex -0.04666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.04 - vertex -0.05333333 0.008 -0.04 - vertex -0.05333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.05 - vertex -0.04 0.008 -0.05 - vertex -0.04 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 -0.04 - vertex -0.04666667 0.008 -0.04 - vertex -0.04666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 -0.05 - vertex -0.03333333 0.008 -0.05 - vertex -0.03333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.04 - vertex -0.04 0.008 -0.04 - vertex -0.04 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.05 - vertex -0.02666667 0.008 -0.05 - vertex -0.02666667 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.04 - vertex -0.03333333 0.008 -0.04 - vertex -0.03333333 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.05 - vertex -0.02 0.008 -0.05 - vertex -0.02 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 -0.04 - vertex -0.02666667 0.008 -0.04 - vertex -0.02666667 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 -0.05 - vertex -0.01333333 0.008 -0.05 - vertex -0.01333333 0.008 -0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.04 - vertex -0.02 0.008 -0.04 - vertex -0.02 0.008 -0.05 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 -0.04 - vertex -0.09333333 0.008 -0.04 - vertex -0.09333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.03 - vertex -0.1 0.008 -0.03 - vertex -0.1 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.04 - vertex -0.08666667 0.008 -0.04 - vertex -0.08666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.03 - vertex -0.09333333 0.008 -0.03 - vertex -0.09333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.04 - vertex -0.08 0.008 -0.04 - vertex -0.08 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 -0.03 - vertex -0.08666667 0.008 -0.03 - vertex -0.08666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 -0.04 - vertex -0.07333333 0.008 -0.04 - vertex -0.07333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.03 - vertex -0.08 0.008 -0.03 - vertex -0.08 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.04 - vertex -0.06666667 0.008 -0.04 - vertex -0.06666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.03 - vertex -0.07333333 0.008 -0.03 - vertex -0.07333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.04 - vertex -0.06 0.008 -0.04 - vertex -0.06 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 -0.03 - vertex -0.06666667 0.008 -0.03 - vertex -0.06666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 -0.04 - vertex -0.05333333 0.008 -0.04 - vertex -0.05333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.03 - vertex -0.06 0.008 -0.03 - vertex -0.06 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.04 - vertex -0.04666667 0.008 -0.04 - vertex -0.04666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.03 - vertex -0.05333333 0.008 -0.03 - vertex -0.05333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.04 - vertex -0.04 0.008 -0.04 - vertex -0.04 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 -0.03 - vertex -0.04666667 0.008 -0.03 - vertex -0.04666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 -0.04 - vertex -0.03333333 0.008 -0.04 - vertex -0.03333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.03 - vertex -0.04 0.008 -0.03 - vertex -0.04 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.04 - vertex -0.02666667 0.008 -0.04 - vertex -0.02666667 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.03 - vertex -0.03333333 0.008 -0.03 - vertex -0.03333333 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.04 - vertex -0.02 0.008 -0.04 - vertex -0.02 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 -0.03 - vertex -0.02666667 0.008 -0.03 - vertex -0.02666667 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 -0.04 - vertex -0.01333333 0.008 -0.04 - vertex -0.01333333 0.008 -0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.03 - vertex -0.02 0.008 -0.03 - vertex -0.02 0.008 -0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 -0.03 - vertex -0.09333333 0.008 -0.03 - vertex -0.09333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.02 - vertex -0.1 0.008 -0.02 - vertex -0.1 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.03 - vertex -0.08666667 0.008 -0.03 - vertex -0.08666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.02 - vertex -0.09333333 0.008 -0.02 - vertex -0.09333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.03 - vertex -0.08 0.008 -0.03 - vertex -0.08 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 -0.02 - vertex -0.08666667 0.008 -0.02 - vertex -0.08666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 -0.03 - vertex -0.07333333 0.008 -0.03 - vertex -0.07333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.02 - vertex -0.08 0.008 -0.02 - vertex -0.08 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.03 - vertex -0.06666667 0.008 -0.03 - vertex -0.06666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.02 - vertex -0.07333333 0.008 -0.02 - vertex -0.07333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.03 - vertex -0.06 0.008 -0.03 - vertex -0.06 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 -0.02 - vertex -0.06666667 0.008 -0.02 - vertex -0.06666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 -0.03 - vertex -0.05333333 0.008 -0.03 - vertex -0.05333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.02 - vertex -0.06 0.008 -0.02 - vertex -0.06 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.03 - vertex -0.04666667 0.008 -0.03 - vertex -0.04666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.02 - vertex -0.05333333 0.008 -0.02 - vertex -0.05333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.03 - vertex -0.04 0.008 -0.03 - vertex -0.04 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 -0.02 - vertex -0.04666667 0.008 -0.02 - vertex -0.04666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 -0.03 - vertex -0.03333333 0.008 -0.03 - vertex -0.03333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.02 - vertex -0.04 0.008 -0.02 - vertex -0.04 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.03 - vertex -0.02666667 0.008 -0.03 - vertex -0.02666667 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.02 - vertex -0.03333333 0.008 -0.02 - vertex -0.03333333 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.03 - vertex -0.02 0.008 -0.03 - vertex -0.02 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 -0.02 - vertex -0.02666667 0.008 -0.02 - vertex -0.02666667 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 -0.03 - vertex -0.01333333 0.008 -0.03 - vertex -0.01333333 0.008 -0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.02 - vertex -0.02 0.008 -0.02 - vertex -0.02 0.008 -0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 -0.02 - vertex -0.09333333 0.008 -0.02 - vertex -0.09333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.01 - vertex -0.1 0.008 -0.01 - vertex -0.1 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.02 - vertex -0.08666667 0.008 -0.02 - vertex -0.08666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.01 - vertex -0.09333333 0.008 -0.01 - vertex -0.09333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.02 - vertex -0.08 0.008 -0.02 - vertex -0.08 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 -0.01 - vertex -0.08666667 0.008 -0.01 - vertex -0.08666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 -0.02 - vertex -0.07333333 0.008 -0.02 - vertex -0.07333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.01 - vertex -0.08 0.008 -0.01 - vertex -0.08 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.02 - vertex -0.06666667 0.008 -0.02 - vertex -0.06666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.01 - vertex -0.07333333 0.008 -0.01 - vertex -0.07333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.02 - vertex -0.06 0.008 -0.02 - vertex -0.06 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 -0.01 - vertex -0.06666667 0.008 -0.01 - vertex -0.06666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 -0.02 - vertex -0.05333333 0.008 -0.02 - vertex -0.05333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.01 - vertex -0.06 0.008 -0.01 - vertex -0.06 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.02 - vertex -0.04666667 0.008 -0.02 - vertex -0.04666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.01 - vertex -0.05333333 0.008 -0.01 - vertex -0.05333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.02 - vertex -0.04 0.008 -0.02 - vertex -0.04 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 -0.01 - vertex -0.04666667 0.008 -0.01 - vertex -0.04666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 -0.02 - vertex -0.03333333 0.008 -0.02 - vertex -0.03333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.01 - vertex -0.04 0.008 -0.01 - vertex -0.04 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.02 - vertex -0.02666667 0.008 -0.02 - vertex -0.02666667 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.01 - vertex -0.03333333 0.008 -0.01 - vertex -0.03333333 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.02 - vertex -0.02 0.008 -0.02 - vertex -0.02 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 -0.01 - vertex -0.02666667 0.008 -0.01 - vertex -0.02666667 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 -0.02 - vertex -0.01333333 0.008 -0.02 - vertex -0.01333333 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 -0.01 - vertex -0.02 0.008 -0.01 - vertex -0.02 0.008 -0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 -0.01 - vertex -0.09333333 0.008 -0.01 - vertex -0.09333333 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 0 - vertex -0.1 0.008 0 - vertex -0.1 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 -0.01 - vertex -0.08666667 0.008 -0.01 - vertex -0.08666667 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 0 - vertex -0.09333333 0.008 0 - vertex -0.09333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 -0.01 - vertex -0.08 0.008 -0.01 - vertex -0.08 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 0 - vertex -0.08666667 0.008 0 - vertex -0.08666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 -0.01 - vertex -0.07333333 0.008 -0.01 - vertex -0.07333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.08 0.008 0 - vertex -0.08 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 -0.01 - vertex -0.06666667 0.008 -0.01 - vertex -0.06666667 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 0 - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.07333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 -0.01 - vertex -0.06 0.008 -0.01 - vertex -0.06 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 0 - vertex -0.06666667 0.008 0 - vertex -0.06666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 -0.01 - vertex -0.05333333 0.008 -0.01 - vertex -0.05333333 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 0 - vertex -0.06 0.008 0 - vertex -0.06 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 -0.01 - vertex -0.04666667 0.008 -0.01 - vertex -0.04666667 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 0 - vertex -0.05333333 0.008 0 - vertex -0.05333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 -0.01 - vertex -0.04 0.008 -0.01 - vertex -0.04 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 0 - vertex -0.04666667 0.008 0 - vertex -0.04666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 -0.01 - vertex -0.03333333 0.008 -0.01 - vertex -0.03333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.04 0.008 0 - vertex -0.04 0.008 -0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.03333333 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 -0.01 - vertex -0.02666667 0.008 -0.01 - vertex -0.02666667 0.008 -5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 -0.01 - vertex -0.02 0.008 -0.01 - vertex -0.02 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0 - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.02666667 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 -0.01 - vertex -0.01333333 0.008 -0.01 - vertex -0.01333333 0.008 0 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 0 - vertex -0.02 0.008 0 - vertex -0.02 0.008 -0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 0 - vertex -0.09333333 0.008 0 - vertex -0.09333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 0.01 - vertex -0.1 0.008 0.01 - vertex -0.1 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 0 - vertex -0.08666667 0.008 0 - vertex -0.08666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 0.01 - vertex -0.09333333 0.008 0.01 - vertex -0.09333333 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 0 - vertex -0.08 0.008 0 - vertex -0.08 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 0.01 - vertex -0.08666667 0.008 0.01 - vertex -0.08666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.07333333 0.008 0.01 - vertex -0.08 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 0.01 - vertex -0.08 0.008 0 - vertex -0.07333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 5.782412e-19 - vertex -0.06666667 0.008 0 - vertex -0.06666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 0.01 - vertex -0.07333333 0.008 0.01 - vertex -0.07333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 0 - vertex -0.06 0.008 0 - vertex -0.06 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 0.01 - vertex -0.06666667 0.008 0.01 - vertex -0.06666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 0 - vertex -0.05333333 0.008 0 - vertex -0.05333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 0.01 - vertex -0.06 0.008 0.01 - vertex -0.06 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 0 - vertex -0.04666667 0.008 0 - vertex -0.04666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 0.01 - vertex -0.05333333 0.008 0.01 - vertex -0.05333333 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 0 - vertex -0.04 0.008 0 - vertex -0.04 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 0.01 - vertex -0.04666667 0.008 0.01 - vertex -0.04666667 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.03333333 0.008 0.01 - vertex -0.04 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 0.01 - vertex -0.04 0.008 0 - vertex -0.03333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 5.782412e-19 - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.02666667 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 0.01 - vertex -0.03333333 0.008 0.01 - vertex -0.03333333 0.008 5.782412e-19 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0 - vertex -0.02 0.008 0.01 - vertex -0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 0.01 - vertex -0.02666667 0.008 -5.782412e-19 - vertex -0.02 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0 - vertex -0.01333333 0.008 0 - vertex -0.01333333 0.008 0.01 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 0.01 - vertex -0.02 0.008 0.01 - vertex -0.02 0.008 0 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 0.01 - vertex -0.09333333 0.008 0.01 - vertex -0.09333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 0.02 - vertex -0.1 0.008 0.02 - vertex -0.1 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 0.01 - vertex -0.08666667 0.008 0.01 - vertex -0.08666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 0.02 - vertex -0.09333333 0.008 0.02 - vertex -0.09333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 0.01 - vertex -0.08 0.008 0.01 - vertex -0.08 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 0.02 - vertex -0.08666667 0.008 0.02 - vertex -0.08666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 0.01 - vertex -0.07333333 0.008 0.01 - vertex -0.07333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 0.02 - vertex -0.08 0.008 0.02 - vertex -0.08 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 0.01 - vertex -0.06666667 0.008 0.01 - vertex -0.06666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 0.02 - vertex -0.07333333 0.008 0.02 - vertex -0.07333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 0.01 - vertex -0.06 0.008 0.01 - vertex -0.06 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 0.02 - vertex -0.06666667 0.008 0.02 - vertex -0.06666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 0.01 - vertex -0.05333333 0.008 0.01 - vertex -0.05333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 0.02 - vertex -0.06 0.008 0.02 - vertex -0.06 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 0.01 - vertex -0.04666667 0.008 0.01 - vertex -0.04666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 0.02 - vertex -0.05333333 0.008 0.02 - vertex -0.05333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 0.01 - vertex -0.04 0.008 0.01 - vertex -0.04 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 0.02 - vertex -0.04666667 0.008 0.02 - vertex -0.04666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 0.01 - vertex -0.03333333 0.008 0.01 - vertex -0.03333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 0.02 - vertex -0.04 0.008 0.02 - vertex -0.04 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 0.01 - vertex -0.02666667 0.008 0.01 - vertex -0.02666667 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 0.02 - vertex -0.03333333 0.008 0.02 - vertex -0.03333333 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 0.01 - vertex -0.02 0.008 0.01 - vertex -0.02 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 0.02 - vertex -0.02666667 0.008 0.02 - vertex -0.02666667 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0.01 - vertex -0.01333333 0.008 0.01 - vertex -0.01333333 0.008 0.02 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 0.02 - vertex -0.02 0.008 0.02 - vertex -0.02 0.008 0.01 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 0.02 - vertex -0.09333333 0.008 0.02 - vertex -0.09333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 0.03 - vertex -0.1 0.008 0.03 - vertex -0.1 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 0.02 - vertex -0.08666667 0.008 0.02 - vertex -0.08666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 0.03 - vertex -0.09333333 0.008 0.03 - vertex -0.09333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 0.02 - vertex -0.08 0.008 0.02 - vertex -0.08 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 0.03 - vertex -0.08666667 0.008 0.03 - vertex -0.08666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 0.02 - vertex -0.07333333 0.008 0.02 - vertex -0.07333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 0.03 - vertex -0.08 0.008 0.03 - vertex -0.08 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 0.02 - vertex -0.06666667 0.008 0.02 - vertex -0.06666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 0.03 - vertex -0.07333333 0.008 0.03 - vertex -0.07333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 0.02 - vertex -0.06 0.008 0.02 - vertex -0.06 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 0.03 - vertex -0.06666667 0.008 0.03 - vertex -0.06666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 0.02 - vertex -0.05333333 0.008 0.02 - vertex -0.05333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 0.03 - vertex -0.06 0.008 0.03 - vertex -0.06 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 0.02 - vertex -0.04666667 0.008 0.02 - vertex -0.04666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 0.03 - vertex -0.05333333 0.008 0.03 - vertex -0.05333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 0.02 - vertex -0.04 0.008 0.02 - vertex -0.04 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 0.03 - vertex -0.04666667 0.008 0.03 - vertex -0.04666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 0.02 - vertex -0.03333333 0.008 0.02 - vertex -0.03333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 0.03 - vertex -0.04 0.008 0.03 - vertex -0.04 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 0.02 - vertex -0.02666667 0.008 0.02 - vertex -0.02666667 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 0.03 - vertex -0.03333333 0.008 0.03 - vertex -0.03333333 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 0.02 - vertex -0.02 0.008 0.02 - vertex -0.02 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 0.03 - vertex -0.02666667 0.008 0.03 - vertex -0.02666667 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0.02 - vertex -0.01333333 0.008 0.02 - vertex -0.01333333 0.008 0.03 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 0.03 - vertex -0.02 0.008 0.03 - vertex -0.02 0.008 0.02 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 0.03 - vertex -0.09333333 0.008 0.03 - vertex -0.09333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 0.04 - vertex -0.1 0.008 0.04 - vertex -0.1 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 0.03 - vertex -0.08666667 0.008 0.03 - vertex -0.08666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 0.04 - vertex -0.09333333 0.008 0.04 - vertex -0.09333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 0.03 - vertex -0.08 0.008 0.03 - vertex -0.08 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 0.04 - vertex -0.08666667 0.008 0.04 - vertex -0.08666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 0.03 - vertex -0.07333333 0.008 0.03 - vertex -0.07333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 0.04 - vertex -0.08 0.008 0.04 - vertex -0.08 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 0.03 - vertex -0.06666667 0.008 0.03 - vertex -0.06666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 0.04 - vertex -0.07333333 0.008 0.04 - vertex -0.07333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 0.03 - vertex -0.06 0.008 0.03 - vertex -0.06 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 0.04 - vertex -0.06666667 0.008 0.04 - vertex -0.06666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 0.03 - vertex -0.05333333 0.008 0.03 - vertex -0.05333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 0.04 - vertex -0.06 0.008 0.04 - vertex -0.06 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 0.03 - vertex -0.04666667 0.008 0.03 - vertex -0.04666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 0.04 - vertex -0.05333333 0.008 0.04 - vertex -0.05333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 0.03 - vertex -0.04 0.008 0.03 - vertex -0.04 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 0.04 - vertex -0.04666667 0.008 0.04 - vertex -0.04666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 0.03 - vertex -0.03333333 0.008 0.03 - vertex -0.03333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 0.04 - vertex -0.04 0.008 0.04 - vertex -0.04 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 0.03 - vertex -0.02666667 0.008 0.03 - vertex -0.02666667 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 0.04 - vertex -0.03333333 0.008 0.04 - vertex -0.03333333 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 0.03 - vertex -0.02 0.008 0.03 - vertex -0.02 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 0.04 - vertex -0.02666667 0.008 0.04 - vertex -0.02666667 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0.03 - vertex -0.01333333 0.008 0.03 - vertex -0.01333333 0.008 0.04 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 0.04 - vertex -0.02 0.008 0.04 - vertex -0.02 0.008 0.03 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.1 0.008 0.04 - vertex -0.09333333 0.008 0.04 - vertex -0.09333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.09333333 0.008 0.05 - vertex -0.1 0.008 0.05 - vertex -0.1 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.09333333 0.008 0.04 - vertex -0.08666667 0.008 0.04 - vertex -0.08666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08666667 0.008 0.05 - vertex -0.09333333 0.008 0.05 - vertex -0.09333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08666667 0.008 0.04 - vertex -0.08 0.008 0.04 - vertex -0.08 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.08 0.008 0.05 - vertex -0.08666667 0.008 0.05 - vertex -0.08666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.08 0.008 0.04 - vertex -0.07333333 0.008 0.04 - vertex -0.07333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.07333333 0.008 0.05 - vertex -0.08 0.008 0.05 - vertex -0.08 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.07333333 0.008 0.04 - vertex -0.06666667 0.008 0.04 - vertex -0.06666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06666667 0.008 0.05 - vertex -0.07333333 0.008 0.05 - vertex -0.07333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06666667 0.008 0.04 - vertex -0.06 0.008 0.04 - vertex -0.06 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.06 0.008 0.05 - vertex -0.06666667 0.008 0.05 - vertex -0.06666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.06 0.008 0.04 - vertex -0.05333333 0.008 0.04 - vertex -0.05333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.05333333 0.008 0.05 - vertex -0.06 0.008 0.05 - vertex -0.06 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.05333333 0.008 0.04 - vertex -0.04666667 0.008 0.04 - vertex -0.04666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04666667 0.008 0.05 - vertex -0.05333333 0.008 0.05 - vertex -0.05333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04666667 0.008 0.04 - vertex -0.04 0.008 0.04 - vertex -0.04 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.04 0.008 0.05 - vertex -0.04666667 0.008 0.05 - vertex -0.04666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.04 0.008 0.04 - vertex -0.03333333 0.008 0.04 - vertex -0.03333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.03333333 0.008 0.05 - vertex -0.04 0.008 0.05 - vertex -0.04 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.03333333 0.008 0.04 - vertex -0.02666667 0.008 0.04 - vertex -0.02666667 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02666667 0.008 0.05 - vertex -0.03333333 0.008 0.05 - vertex -0.03333333 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02666667 0.008 0.04 - vertex -0.02 0.008 0.04 - vertex -0.02 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.02 0.008 0.05 - vertex -0.02666667 0.008 0.05 - vertex -0.02666667 0.008 0.04 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -0.02 0.008 0.04 - vertex -0.01333333 0.008 0.04 - vertex -0.01333333 0.008 0.05 - endloop - endfacet - facet normal -0 -1 0 - outer loop - vertex -0.01333333 0.008 0.05 - vertex -0.02 0.008 0.05 - vertex -0.02 0.008 0.04 - endloop - endfacet -endsolid topAir_to_leftSolid diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/snappyHexMeshDict b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/snappyHexMeshDict index 83cf5eb54f5860419c6acd65e8849cdc6775f369..cd72c60704889ba1ede2174a9356c34e9ef93bbd 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/snappyHexMeshDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/snappyHexMeshDict @@ -29,34 +29,10 @@ addLayers false; // - to 'snap' the mesh boundary to the surface geometry { - bottomAir.stl + geom.stl { type triSurfaceMesh; - name bottomAir; - } - - topAir.stl - { - type triSurfaceMesh; - name topAir; - } - - leftSolid.stl - { - type triSurfaceMesh; - name leftSolid; - } - - rightSolid.stl - { - type triSurfaceMesh; - name rightSolid; - } - - heater.stl - { - type triSurfaceMesh; - name heater; + name geom; } }; @@ -103,23 +79,7 @@ castellatedMeshControls features ( { - file "bottomAir.eMesh"; - level 1; - } - { - file "heater.eMesh"; - level 1; - } - { - file "leftSolid.eMesh"; - level 1; - } - { - file "rightSolid.eMesh"; - level 1; - } - { - file "topAir.eMesh"; + file "geom.extendedFeatureEdgeMesh"; //"geom.eMesh"; level 1; } ); @@ -137,54 +97,10 @@ castellatedMeshControls refinementSurfaces { - bottomAir - { - // Surface-wise min and max refinement level - level (1 1); - - faceZone bottomAir; - cellZone bottomAir; - cellZoneInside inside; - } - - topAir + geom { // Surface-wise min and max refinement level level (1 1); - - faceZone topAir; - cellZone topAir; - cellZoneInside inside; - } - - heater - { - // Surface-wise min and max refinement level - level (0 0); - - faceZone heater; - cellZone heater; - cellZoneInside inside; - } - - leftSolid - { - // Surface-wise min and max refinement level - level (1 1); - - faceZone leftSolid; - cellZone leftSolid; - cellZoneInside inside; - } - - rightSolid - { - // Surface-wise min and max refinement level - level (1 1); - - faceZone rightSolid; - cellZone rightSolid; - cellZoneInside inside; } } @@ -223,7 +139,14 @@ castellatedMeshControls // section reachable from the locationInMesh is kept. // NOTE: This point should never be on a face, always inside a cell, even // after refinement. - locationInMesh (0.01 0.01 0.01); + locationsInMesh + ( + (( 0.005 0.005 0.005) heater) + (( 0.05 0.005 0.005) rightSolid) + ((-0.05 0.005 0.005) leftSolid) + ((-0.05 0.015 0.005) topAir) + ((-0.05 -0.015 0.005) bottomAir) + ); // Whether any faceZones (as specified in the refinementSurfaces) diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/surfaceFeatureExtractDict b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/surfaceFeatureExtractDict index ffeafc363fb361c27158b0ab36e3d20e07fbbad3..e5001e59464388310b8c520a130592753459a37a 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/surfaceFeatureExtractDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/surfaceFeatureExtractDict @@ -14,71 +14,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -bottomAir.stl -{ - extractionMethod extractFromSurface; - - extractFromSurfaceCoeffs - { - // Mark edges whose adjacent surface normals are at an angle less - // than includedAngle as features - // - 0 : selects no edges - // - 180: selects all edges - includedAngle 150; - } - - // Write options - writeFeatureEdgeMesh yes; -} -heater.stl -{ - extractionMethod extractFromSurface; - - extractFromSurfaceCoeffs - { - // Mark edges whose adjacent surface normals are at an angle less - // than includedAngle as features - // - 0 : selects no edges - // - 180: selects all edges - includedAngle 150; - } - - // Write options - writeFeatureEdgeMesh yes; -} -leftSolid.stl -{ - extractionMethod extractFromSurface; - - extractFromSurfaceCoeffs - { - // Mark edges whose adjacent surface normals are at an angle less - // than includedAngle as features - // - 0 : selects no edges - // - 180: selects all edges - includedAngle 150; - } - - // Write options - writeFeatureEdgeMesh yes; -} -rightSolid.stl -{ - extractionMethod extractFromSurface; - - extractFromSurfaceCoeffs - { - // Mark edges whose adjacent surface normals are at an angle less - // than includedAngle as features - // - 0 : selects no edges - // - 180: selects all edges - includedAngle 150; - } - - // Write options - writeFeatureEdgeMesh yes; -} -topAir.stl +geom.stl { extractionMethod extractFromSurface; @@ -93,6 +29,8 @@ topAir.stl // Write options writeFeatureEdgeMesh yes; + // Write features to obj format for postprocessing + writeObj yes; } diff --git a/tutorials/incompressible/SRFPimpleFoam/rotor2D/makeMesh b/tutorials/incompressible/SRFPimpleFoam/rotor2D/makeMesh index ea511db9f4aae5fe13cf5301cd200028ec03cfef..ed804d4c3ef59e1866b8cad410323621f062ea81 100755 --- a/tutorials/incompressible/SRFPimpleFoam/rotor2D/makeMesh +++ b/tutorials/incompressible/SRFPimpleFoam/rotor2D/makeMesh @@ -1,8 +1,6 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory -set -x - m4 < system/blockMeshDict.m4 > system/blockMeshDict blockMesh > log.blockMesh 2>&1 diff --git a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/dynamicMeshDict b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/dynamicMeshDict index 00ef84689bc4e12c67406c7505ddee94d2996dae..79938b32435f04b0c0962c715b83332391b2709f 100644 --- a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/dynamicMeshDict +++ b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/dynamicMeshDict @@ -15,11 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -motionSolverLibs ( "libfvMotionSolvers.so" ); +solver solidBody; -solidBodyMotionFvMeshCoeffs +solidBodyCoeffs { cellZone rotor; @@ -32,5 +32,4 @@ solidBodyMotionFvMeshCoeffs } } - // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/dynamicMeshDict b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/dynamicMeshDict index 8e7f72b360e6f8ff304094a71408adac8cdbc86c..6043ee040c1701986ff21e1e04e3f0bf8512f96b 100644 --- a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/dynamicMeshDict +++ b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/dynamicMeshDict @@ -15,11 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; motionSolverLibs ( "libfvMotionSolvers.so" ); -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone inletChannel; diff --git a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletPeriodicAMI2D/constant/dynamicMeshDict b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletPeriodicAMI2D/constant/dynamicMeshDict index 8e7f72b360e6f8ff304094a71408adac8cdbc86c..371ee2c7bfd4787beca44aa646ee835e000b24e5 100644 --- a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletPeriodicAMI2D/constant/dynamicMeshDict +++ b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletPeriodicAMI2D/constant/dynamicMeshDict @@ -15,15 +15,15 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -motionSolverLibs ( "libfvMotionSolvers.so" ); +solver solidBody; -solidBodyMotionFvMeshCoeffs +solidBodyCoeffs { cellZone inletChannel; - solidBodyMotionFunction oscillatingLinearMotion; + solidBodyMotionFunction oscillatingLinearMotion; oscillatingLinearMotionCoeffs { diff --git a/tutorials/incompressible/pimpleDyMFoam/propeller/constant/dynamicMeshDict b/tutorials/incompressible/pimpleDyMFoam/propeller/constant/dynamicMeshDict index 11785e06eff46c6b046a1e4a67c9862236062ab0..a863182374461cb41c6aeaa33c38fc7b646f052a 100644 --- a/tutorials/incompressible/pimpleDyMFoam/propeller/constant/dynamicMeshDict +++ b/tutorials/incompressible/pimpleDyMFoam/propeller/constant/dynamicMeshDict @@ -15,11 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; motionSolverLibs ( "libfvMotionSolvers.so" ); -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone innerCylinderSmall; diff --git a/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/Allrun b/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/Allrun index 8f459da132154ca59474bb7d6ed514be1677d80d..43ab19017d4a50268db55da0dc6ebb7b20e9b04f 100755 --- a/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/Allrun +++ b/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/Allrun @@ -15,7 +15,7 @@ runApplication blockMesh runApplication decomposePar -decomposeParDict system/decomposeParDict.hierarchical # \cp system/decomposeParDict.ptscotch system/decomposeParDict -runParallel snappyHexMesh -decomposeParDict system/decomposeParDict.ptscotch -profiling -overwrite -parallel +runParallel snappyHexMesh -decomposeParDict system/decomposeParDict.ptscotch -profiling -overwrite find . -type f -iname "*level*" -exec rm {} \; diff --git a/tutorials/mesh/blockMesh/pipe/Allrun b/tutorials/mesh/blockMesh/pipe/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..3c4ef3e7fffd9530e7208b7e0b463a777a3bac00 --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/Allrun @@ -0,0 +1,9 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh + +#------------------------------------------------------------------------------ diff --git a/tutorials/mesh/blockMesh/pipe/constant/triSurface/curve.obj b/tutorials/mesh/blockMesh/pipe/constant/triSurface/curve.obj new file mode 100644 index 0000000000000000000000000000000000000000..9d5e40f6d7725c20f2a5a00c5e608bbaaf46e24f --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/constant/triSurface/curve.obj @@ -0,0 +1,9 @@ +v -5 0.4 0 +v -4 0.4 0 +v -3 0.4 0.7 +v -2.5 0.4 2 +v -2 0.4 2 +v -1 0.4 0.7 +v -0.6 0.4 0 +v 10 0.4 0 +l 1 2 3 4 5 6 7 8 diff --git a/tutorials/mesh/blockMesh/pipe/constant/triSurface/curve2.vtk b/tutorials/mesh/blockMesh/pipe/constant/triSurface/curve2.vtk new file mode 100644 index 0000000000000000000000000000000000000000..02142a3426c73a8d3b52d201f2221887320bb8dc --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/constant/triSurface/curve2.vtk @@ -0,0 +1,13 @@ +# vtk DataFile Version 4.0 +vtk output +ASCII +DATASET POLYDATA +POINTS 17 double +-5.0437 0.4 -0.0159845 -4.54848 0.4 0.00946291 -4.30524 0.4 0.0219617 +-4.11475 0.4 0.0317502 -3.65463 0.4 0.0664504 -3.42509 0.4 0.242198 +-3.26981 0.4 0.570689 -3.04354 0.4 0.986036 -2.80622 0.4 1.28924 +-2.45212 0.4 1.43367 -2.10187 0.4 1.42911 -1.8115 0.4 1.2018 +-1.52708 0.4 0.866397 -1.30229 0.4 0.49514 -1.04633 0.4 0.189424 +-0.5819 0.4 -5.75752e-05 4 0.4 0 +LINES 1 18 +17 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 diff --git a/tutorials/mesh/blockMesh/pipe/system/blockMeshDict b/tutorials/mesh/blockMesh/pipe/system/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..5c283f373b0664ab6bee53e211e37ad2c633a132 --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/system/blockMeshDict @@ -0,0 +1,177 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +geometry +{ + cylinder + { + type searchableCylinder; + point1 (0 -4 0); + point2 (0 4 0); + radius 0.7; + } + cylinder3 + { + type searchableCylinder; + point1 (-10 0.4 0); + point2 (10 0.4 0); + radius 0.5; + } + cylinder2 + { + type searchableExtrudedCircle; + file "curve2.vtk"; + radius 0.5; + } + inletPlane + { + type searchablePlate; + origin (-4 -50 -50); + span (0 100 100); + } +} + +vertices +( + // Vertical cylinder + name v0 project (-1 -0.1 -1) (cylinder cylinder2) + name v1 project ( 1 -0.1 -1) (cylinder) + name v2 project ( 1 0.9 -1) (cylinder) + name v3 project (-1 0.9 -1) (cylinder cylinder2) + name v4 project (-1 -0.1 1) (cylinder cylinder2) + name v5 project ( 1 -0.1 1) (cylinder) + name v6 project ( 1 0.9 1) (cylinder) + name v7 project (-1 0.9 1) (cylinder cylinder2) + + + // Horizontal cylinder + name v8 project (-4 0 -0.5) (cylinder2 inletPlane) + name v9 project (-4 1 -0.5) (cylinder2 inletPlane) + name v10 project (-4 0 0.5) (cylinder2 inletPlane) + name v11 project (-4 1 0.5) (cylinder2 inletPlane) + + + // On top of vertical cylinder + name v12 project (-1 2 -1) (cylinder) + name v13 project ( 1 2 -1) (cylinder) + name v14 project ( 1 2 1) (cylinder) + name v15 project (-1 2 1) (cylinder) + + // Below vertical cylinder + name v16 project (-1 -1 -1) (cylinder) + name v17 project ( 1 -1 -1) (cylinder) + name v18 project ( 1 -1 1) (cylinder) + name v19 project (-1 -1 1) (cylinder) +); + +blocks +( + hex (v0 v1 v2 v3 v4 v5 v6 v7) (8 8 8) simpleGrading (1 1 1) + name sideBlock hex (v0 v3 v9 v8 v4 v7 v11 v10) (8 20 8) + simpleGrading (1 1 1) + + hex ( v7 v6 v2 v3 v15 v14 v13 v12) (8 8 8) simpleGrading (1 1 1) + hex (v16 v19 v18 v17 v0 v4 v5 v1) (8 8 8) simpleGrading (1 1 1) +); + +edges +( + project v0 v1 (cylinder) + project v1 v2 (cylinder) + project v2 v3 (cylinder) + + project v1 v5 (cylinder) + project v2 v6 (cylinder) + + project v4 v5 (cylinder) + project v5 v6 (cylinder) + project v6 v7 (cylinder) + + // Common face + project v3 v0 (cylinder cylinder2) + project v3 v7 (cylinder cylinder2) + project v7 v4 (cylinder cylinder2) + project v0 v4 (cylinder cylinder2) + + // Inlet + project v8 v10 (cylinder2 inletPlane) + project v10 v11 (cylinder2 inletPlane) + project v11 v9 (cylinder2 inletPlane) + project v9 v8 (cylinder2 inletPlane) + + // Sides of horizontal cylinder. Use projectCurve to do interpolation + // for radial direction to keep points along edges at constant radial + // direction. + projectCurve v8 v0 (cylinder2) + projectCurve v9 v3 (cylinder2) + projectCurve v11 v7 (cylinder2) + projectCurve v10 v4 (cylinder2) + + + + // Top cylinder + project v12 v15 (cylinder) + project v15 v14 (cylinder) + project v14 v13 (cylinder) + project v13 v12 (cylinder) + + // Bottom cylinder + project v16 v17 (cylinder) + project v17 v18 (cylinder) + project v18 v19 (cylinder) + project v19 v16 (cylinder) +); + +faces +( + // Common face + project (v0 v4 v7 v3) cylinder + + project (v8 v0 v4 v10) cylinder2 + project (v10 v4 v7 v11) cylinder2 + project (v11 v7 v3 v9) cylinder2 + project (v8 v9 v3 v0) cylinder2 +); + + +defaultPatch +{ + name walls; + type wall; +} + +boundary +( + side + { + type patch; + faces ((sideBlock 3)); //((v8 v10 v11 v9)); + } + + inlet + { + type patch; + faces ((v17 v18 v19 v16)); + } + + outlet + { + type patch; + faces ((v12 v15 v14 v13)); + } +); + +// ************************************************************************* // diff --git a/tutorials/mesh/blockMesh/pipe/system/controlDict b/tutorials/mesh/blockMesh/pipe/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..451036b13e91663bb120a3198a9149f782a110ea --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/system/controlDict @@ -0,0 +1,58 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +libs ("libblockMesh.so"); + +DebugSwitches +{ +// project 1; +// searchableExtrudedCircle 1; +// projectCurve 1; +} + +application blockMesh; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0; + +deltaT 0; + +writeControl timeStep; + +writeInterval 1; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable true; + + +// ************************************************************************* // diff --git a/tutorials/mesh/blockMesh/pipe/system/fvSchemes b/tutorials/mesh/blockMesh/pipe/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..606b28ce04cbf3cc6330261345fabaa76b4d47b4 --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/system/fvSchemes @@ -0,0 +1,37 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{} + +gradSchemes +{} + +divSchemes +{} + +laplacianSchemes +{} + +interpolationSchemes +{} + +snGradSchemes +{} + + +// ************************************************************************* // diff --git a/tutorials/mesh/blockMesh/pipe/system/fvSolution b/tutorials/mesh/blockMesh/pipe/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..6db4e1a6ba541b790f69ca0a506d8c2f547e51cc --- /dev/null +++ b/tutorials/mesh/blockMesh/pipe/system/fvSolution @@ -0,0 +1,18 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// ************************************************************************* // diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/constant/dynamicMeshDict b/tutorials/mesh/foamyHexMesh/mixerVessel/constant/dynamicMeshDict index 9099cdd5c13bf4fb008f27113dc55138a7671c0e..24b3e86887d072ce7329a5ac60a9a6d7fd4ccec6 100644 --- a/tutorials/mesh/foamyHexMesh/mixerVessel/constant/dynamicMeshDict +++ b/tutorials/mesh/foamyHexMesh/mixerVessel/constant/dynamicMeshDict @@ -15,11 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; motionSolverLibs ( "libfvMotionSolvers.so" ); -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone rotating; diff --git a/tutorials/multiphase/compressibleInterDyMFoam/RAS/sloshingTank2D/constant/dynamicMeshDict b/tutorials/multiphase/compressibleInterDyMFoam/RAS/sloshingTank2D/constant/dynamicMeshDict index d02a77dba8f31c78e01a04fb2e491f47d916fe21..26a2e7018f9a43a2944a6f42988588fe224b9f8b 100644 --- a/tutorials/multiphase/compressibleInterDyMFoam/RAS/sloshingTank2D/constant/dynamicMeshDict +++ b/tutorials/multiphase/compressibleInterDyMFoam/RAS/sloshingTank2D/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction SDA; SDACoeffs diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T new file mode 100644 index 0000000000000000000000000000000000000000..6ad26c1f2e3385a69a690826858a9f5a424a1aa5 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 300; + } + outerAMI + { + type cyclicAMI; + value uniform 300; + } + top + { + type inletOutlet; + inletValue uniform 300; + value uniform 300; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air new file mode 100644 index 0000000000000000000000000000000000000000..ed74914f527261d1375ed7c8a7eaa20907411419 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.air @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T.air; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 300; + } + outerAMI + { + type cyclicAMI; + value uniform 300; + } + top + { + type inletOutlet; + inletValue uniform 300; + value uniform 300; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water new file mode 100644 index 0000000000000000000000000000000000000000..d3333fb16e627bd2743333ce8a260c6994f27dac --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/T.water @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T.water; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 300; + } + outerAMI + { + type cyclicAMI; + value uniform 300; + } + top + { + type inletOutlet; + inletValue uniform 300; + value uniform 300; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U new file mode 100644 index 0000000000000000000000000000000000000000..f7ef8ffeb2859705431177079e8fa20558afee4f --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/U @@ -0,0 +1,64 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform (0 0 0); + } + outerAMI + { + type cyclicAMI; + value uniform (0 0 0); + } + top + { + type zeroGradient; + } + bottom + { + type fixedValue; + value uniform (0 0 0); + } + farFieldWall + { + type fixedValue; + value uniform (0 0 0); + } + sphere + { + type movingWallVelocity; + value uniform (0 0 0); + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water new file mode 100644 index 0000000000000000000000000000000000000000..d1c6a83b9c2b890d0d26ead06b5019287c0895a5 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/alpha.water @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus.master | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alpha.walter; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 0; + } + outerAMI + { + type cyclicAMI; + value uniform 0; + } + top + { + type zeroGradient; + } + bottom + { + type zeroGradient; + } + farFieldWall + { + type zeroGradient; + } + sphere + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p new file mode 100644 index 0000000000000000000000000000000000000000..dea3ed1d9db5fececb7bff8d5d5cc80595a6c082 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus.master | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 101325; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 101325; + } + outerAMI + { + type cyclicAMI; + value uniform 101325; + } + top + { + type calculated; + value uniform 101325; + } + bottom + { + type calculated; + value uniform 101325; + } + farFieldWall + { + type calculated; + value uniform 101325; + } + sphere + { + type calculated; + value uniform 101325; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh new file mode 100644 index 0000000000000000000000000000000000000000..f8f72530ac3eb4697e1684226be33927dde94418 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/p_rgh @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus.master | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p_rgh; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 101325; + +boundaryField +{ + front + { + type wedge; + } + back + { + type wedge; + } + innerAMI + { + type cyclicAMI; + value uniform 101325; + } + outerAMI + { + type cyclicAMI; + value uniform 101325; + } + top + { + type fixedValue; + value uniform 101325; + } + bottom + { + type fixedFluxPressure; + gradient uniform 0; + value uniform 101325; + } + farFieldWall + { + type fixedFluxPressure; + gradient uniform 0; + value uniform 101325; + } + sphere + { + type fixedFluxPressure; + gradient uniform 0; + value uniform 101325; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement new file mode 100755 index 0000000000000000000000000000000000000000..b73c0d096721c877d970aeb23969ec1321afeb8c --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/0.org/pointDisplacement @@ -0,0 +1,99 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class pointVectorField; + location "0"; + object pointDisplacement; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "$FOAM_CASE/constant/dynamicMeshDict" +#include "$FOAM_CASE/system/blockMeshDict" + +dimensions [0 1 0 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + farFieldWall + { + type fixedValue; + value uniform (0 0 0); + } + bottom + { + type fixedValue; + value uniform (0 0 0); + } + top + { + type fixedValue; + value uniform (0 0 0); + } + sphere + { + type sixDoFRigidBodyDisplacement; + centreOfMass (0 $:sphereCentreHeight 0); + momentOfInertia (2e-3 2e-3 2e-3); + velocity (0 -3.77 0); + accelerationRelaxation 1; + accelerationDamping 1; + + mass 2.08e-3; // sphere mass 0.15 kg, 5 degree wedge +// rhoInf -1; // needed only for solvers solving for + // kinematic pressure + report on; + + constraints + { + maxIterations 500; + + fixedLine1 + { + sixDoFRigidBodyMotionConstraint line; + centreOfRotation (0 0.147 0); + direction (0 1 0); + } + + fixedOrientation1 + { + sixDoFRigidBodyMotionConstraint orientation; + } + } + + solver + { + type Newmark; + } + + value uniform ( 0 0 0 ); + } + innerAMI + { + type cyclicAMI; + } + outerAMI + { + type cyclicAMI; + } + back + { + type wedge; + } + front + { + type wedge; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..75a8a2419c35dc958c69e3da5d982f4027d0615a --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +rm -rf 0/ +cleanCase diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..469522ab3ef1e45cc820850c199e7b34403c16b1 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/Allrun @@ -0,0 +1,25 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication topoSet + +# remove empty patches +runApplication createPatch -overwrite + +# split mesh into 2 regions at the AMI coupled patch +runApplication mergeOrSplitBaffles -overwrite + +echo "Copying 0.org to 0" +cp -r 0.org 0 + +runApplication setFields + +(cd constant/polyMesh && ln -s ../../include/meshModifiers .) + +runApplication $(getApplication) + +# ----------------------------------------------------------------- end-of-file diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..ce0539a68cb23e1f19c3633d6d0738aee67d8e70 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/dynamicMeshDict @@ -0,0 +1,108 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object dynamicMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dynamicFvMesh dynamicMotionSolverTopoFvMesh; + +motionSolverLibs ("libfvMotionSolvers.so"); + +solver displacementLayeredMotion; + +displacementLayeredMotionCoeffs +{ + // In addition to boundary conditions on pointDisplacement + // we can also have boundary conditions on faceZones bordering cellZones. + regions + { + LARTopCells + { + interpolationScheme oneSided; + + boundaryField + { + top // patch + { + type uniformFollow; // use pointDisplacement bc + patch sphere; // fixed/static + } + + LARTopFaces + { + type slip; + } + } + } + + topBlock + { + interpolationScheme oneSided; + + boundaryField + { + LARTopFaces + { + type uniformFollow; + patch sphere; + } + + centralTopFaces + { + type slip; + } + + } + } + + centralBlock + { + interpolationScheme oneSided; + + boundaryField + { + centralTopFaces + { + type uniformFollow; + patch sphere; + } + + centralBottomFaces + { + type slip; + } + } + } + + bottomBlock + { + interpolationScheme oneSided; + + boundaryField + { + centralBottomFaces + { + type uniformFollow; + patch sphere; + } + bottom + { + type slip; + } + } + } + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g new file mode 100644 index 0000000000000000000000000000000000000000..fdd77153a0806d97dcfb687e292f96594b69fae8 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/g @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value (0 -9.81 0 ); + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..e06c9e14711ad568e8121b5b2ce9b69f4d606cdd --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties @@ -0,0 +1,24 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +phases (water air); + +pMin pMin [1 -1 -2 0 0 0 0] 1000; + +sigma sigma [1 0 -2 0 0 0 0] 0.07; + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air new file mode 100644 index 0000000000000000000000000000000000000000..0aa182835f961e31c08abfe1da81a68226a54c0e --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.air @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState perfectGas; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + nMoles 1; + molWeight 28.9; + } + thermodynamics + { + Cp 1007; + Hf 0; + } + equationOfState + { + rho 1.27; + R 90000; + rho0 1.27; + } + transport + { + mu 1.84e-05; + Pr 0.7; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water new file mode 100644 index 0000000000000000000000000000000000000000..e315d6ee72f30ed47175322ea96195a855a00b7a --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/thermophysicalProperties.water @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState rhoConst; + specie specie; + energy sensibleInternalEnergy; +} + +mixture +{ + specie + { + nMoles 1; + molWeight 18.0; + } + equationOfState + { + rho 1027; + } + thermodynamics + { + Cp 4195; + Hf 0; + } + transport + { + mu 3.645e-4; + Pr 2.289; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..c0d0baa30dd86546d5f16d86019f105405ce78a9 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/transportProperties @@ -0,0 +1,33 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +phases (water air); + +water +{ + transportModel Newtonian; + nu [0 2 -1 0 0 0 0] 1e-06; + rho [1 -3 0 0 0 0 0] 998.2; +} + +air +{ + transportModel Newtonian; + nu [0 2 -1 0 0 0 0] 1.48e-05; + rho [1 -3 0 0 0 0 0] 1; +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..bc1d11db5c87ea67ad3b8db7909969e7ea862768 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + +RAS +{ + RASModel laminar; + + turbulence on; + + printCoeffs off; +} +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers new file mode 100644 index 0000000000000000000000000000000000000000..9a134c96b1c05d7d991a9eedaa4b39f382a1a4fb --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/include/meshModifiers @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 2.3.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyTopoChanger; + location "constant/polyMesh"; + object meshModifiers; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +2 +( +top +{ + type layerAdditionRemoval; + faceZoneName top; + minLayerThickness 0.001; + maxLayerThickness 0.03; + thicknessFromVolume false; + active true; +} + +bottom +{ + type layerAdditionRemoval; + faceZoneName bottom; +// minLayerThickness 0.005; +// maxLayerThickness 0.03; + minLayerThickness 0.005; + maxLayerThickness 0.03; + thicknessFromVolume false; + active true; +} +) + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..c2962ef4fe3c8fd423311bf1ded2d89b58e2f720 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/blockMeshDict @@ -0,0 +1,349 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM Extend Project: Open Source CFD | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +// Domain +axisLevel 0.0; // x-coord of axis (right boundary of domain) +bottomLevel -1.0; // y-coord of bottom of domain +topLevel 1.0; // y-coord of top of domain +farFieldWall -0.572; // x-coord of far field wall +wedgeAngle 5.0; // Wedge angle in degrees +// Size of block moving with sphere (no cell deformation), in sphere radii +// above and below centre of sphere +upperSphereBlock 5.0; +lowerSphereBlock 5.0; +sphereLayerThickness 2.0; // Total layer thickness in sphere radii + +// Sphere +sphereRadius 0.028; +sphereCentreHeight 0.147; // y-coord of sphere centre + +pi #calc "Foam::constant::mathematical::pi"; + +// Calculated positions +sphereRadiusPosition #calc "-1.0*(1.0 + $sphereLayerThickness)*$sphereRadius"; //"-1.0* $sphereRadius"; +AMIBlockPosition #calc "2.0*$sphereRadiusPosition + $sphereRadius"; +// Centre plane is z=0, so use half of wedge angle to calculate pos and neg +// z-positions +halfAngleRad #calc "0.5*$wedgeAngle*$pi/180.0"; +tanAlpha #calc "tan($halfAngleRad)"; +// Multiply by -1 because tan give negative value +firstBlockPosDepth #calc "-1.0*$tanAlpha*$sphereRadiusPosition"; +firstBlockNegDepth #calc "-1.0*$firstBlockPosDepth"; +AMIBlockPosDepth #calc "-1.0*$tanAlpha*$AMIBlockPosition"; +AMIBlockNegDepth #calc "-1.0*$AMIBlockPosDepth"; +farFieldPosDepth #calc "-1.0*$tanAlpha*$farFieldWall"; +farFieldNegDepth #calc "-1.0*$farFieldPosDepth"; + +bottomBlockTopHeight #calc "$sphereCentreHeight - $lowerSphereBlock*$sphereRadius"; +topBlockBottomHeight #calc "$sphereCentreHeight + $upperSphereBlock*$sphereRadius"; + +topSphere #calc "$sphereCentreHeight + $sphereRadius"; +bottomSphere #calc "$sphereCentreHeight - $sphereRadius"; +topSphereLayer #calc "$sphereCentreHeight + (1.0 + $sphereLayerThickness)*$sphereRadius"; +bottomSphereLayer #calc "$sphereCentreHeight - (1.0 + $sphereLayerThickness)*$sphereRadius"; + +// Layer block below sphere +innerBottomLayerX #calc "-1.0*cos(45.0*$pi/180.0)*$sphereRadius"; +innerBottomLayerY #calc "$sphereCentreHeight - cos(45.0*$pi/180.0)*$sphereRadius"; +innerBottomLayerZPos #calc "-1.0*$tanAlpha*$innerBottomLayerX"; +innerBottomLayerZNeg #calc "-1.0*$innerBottomLayerZPos"; + +innerBottomArcX1 #calc "-1.0*sin(22.5*$pi/180.0)*$sphereRadius"; +innerBottomArcY1 #calc "$sphereCentreHeight - cos(22.5*$pi/180.0)*$sphereRadius"; +innerBottomArcZ1Pos #calc "$innerBottomArcX1*$tanAlpha"; +innerBottomArcZ1Neg #calc "-1.0*$innerBottomArcZ1Pos"; + +outerBottomArcX1 #calc "-1.0*sin(22.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)"; +outerBottomArcY1 #calc #{ $sphereCentreHeight - cos(22.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness) #}; +outerBottomArcZ1Pos #calc "$outerBottomArcX1*$tanAlpha"; +outerBottomArcZ1Neg #calc "-1.0*$outerBottomArcZ1Pos"; + +outerBottomLayerX #calc "-1.0*cos(45.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerBottomLayerY #calc "$sphereCentreHeight - cos(45.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerBottomLayerZPos #calc "-1.0*$tanAlpha*$outerBottomLayerX"; +outerBottomLayerZNeg #calc "-1.0*$outerBottomLayerZPos"; + +// Layer block above sphere +innerTopLayerX #calc "cos(135.0*$pi/180.0)*$sphereRadius"; +innerTopLayerY #calc "$sphereCentreHeight - cos(135.0*$pi/180.0)*$sphereRadius"; +innerTopLayerZPos #calc "-1.0*$tanAlpha*$innerBottomLayerX"; +innerTopLayerZNeg #calc "-1.0*$innerBottomLayerZPos"; + +innerTopArcX1 #calc "-1.0*sin(157.5*$pi/180.0)*$sphereRadius"; +innerTopArcY1 #calc "$sphereCentreHeight - cos(157.5*$pi/180.0)*$sphereRadius"; +innerTopArcZ1Pos #calc "$innerTopArcX1*$tanAlpha"; +innerTopArcZ1Neg #calc "-1.0*$innerTopArcZ1Pos"; + +outerTopArcX1 #calc "-1.0*sin(157.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)"; +outerTopArcY1 #calc "$sphereCentreHeight - cos(157.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)"; +outerTopArcZ1Pos #calc "$outerTopArcX1*$tanAlpha"; +outerTopArcZ1Neg #calc "-1.0*$outerTopArcZ1Pos"; + +outerTopLayerX #calc "cos(135.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerTopLayerY #calc "$sphereCentreHeight - cos(135.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerTopLayerZPos #calc "-1.0*$tanAlpha*$outerTopLayerX"; +outerTopLayerZNeg #calc "-1.0*$outerTopLayerZPos"; + +// Layer block left of sphere +innerLeftArcX #calc "-1.0*$sphereRadius"; +innerLeftArcY #calc "$sphereCentreHeight"; +innerLeftArcZPos #calc "-1.0*$tanAlpha*$innerLeftArcX"; +innerLeftArcZNeg #calc "-1.0*$innerLeftArcZPos"; + +outerLeftArcX #calc "-1.0*(1.0 + $sphereLayerThickness)*$sphereRadius"; +outerLeftArcZPos #calc "-1.0*$tanAlpha*$outerLeftArcX"; +outerLeftArcZNeg #calc "-1.0*$outerLeftArcZPos"; + + + +vertices +( + // Lower moving block + ($axisLevel $bottomLevel 0) // 0 + ($axisLevel $bottomBlockTopHeight 0) // 1 + ($AMIBlockPosition $bottomLevel $AMIBlockPosDepth) // 2 + ($AMIBlockPosition $bottomLevel $AMIBlockNegDepth) // 3 + ($AMIBlockPosition $bottomBlockTopHeight $AMIBlockNegDepth) // 4 + ($AMIBlockPosition $bottomBlockTopHeight $AMIBlockPosDepth) // 5 + + // Upper moving block + ($AMIBlockPosition $topBlockBottomHeight $AMIBlockPosDepth) // 6 + ($AMIBlockPosition $topBlockBottomHeight $AMIBlockNegDepth) // 7 + ($axisLevel $topBlockBottomHeight 0) // 8 + ($AMIBlockPosition $topLevel $AMIBlockPosDepth) // 9 + ($AMIBlockPosition $topLevel $AMIBlockNegDepth) // 10 + ($axisLevel $topLevel 0) // 11 + + // Farfield block + ($farFieldWall $bottomLevel $farFieldPosDepth) // 12 + ($AMIBlockPosition $bottomLevel $AMIBlockPosDepth) // 13 + ($AMIBlockPosition $topLevel $AMIBlockPosDepth) // 14 + ($farFieldWall $topLevel $farFieldPosDepth) // 15 + + ($farFieldWall $bottomLevel $farFieldNegDepth) // 16 + ($AMIBlockPosition $bottomLevel $AMIBlockNegDepth) // 17 + ($AMIBlockPosition $topLevel $AMIBlockNegDepth) // 18 + ($farFieldWall $topLevel $farFieldNegDepth) // 19 + + // Sphere block + ($axisLevel $bottomSphere 0) // 20 + ($innerBottomLayerX $innerBottomLayerY $innerBottomLayerZPos) // 21 + ($innerBottomLayerX $innerBottomLayerY $innerBottomLayerZNeg) // 22 + ($axisLevel $bottomSphereLayer 0) // 23 + ($outerBottomLayerX $outerBottomLayerY $outerBottomLayerZPos) // 24 + ($outerBottomLayerX $outerBottomLayerY $outerBottomLayerZNeg) // 25 + + ($axisLevel $topSphere 0) // 26 + ($axisLevel $topSphereLayer 0) // 27 + ($innerTopLayerX $innerTopLayerY $innerTopLayerZNeg) // 28 + ($outerTopLayerX $outerTopLayerY $outerTopLayerZNeg) // 29 + ($innerTopLayerX $innerTopLayerY $innerTopLayerZPos) // 30 + ($outerTopLayerX $outerTopLayerY $outerTopLayerZPos) // 31 +); + +edgeNumber 1; // 0.707; + +layerGrading 0.5; +invLayerGrading #calc "1.0/$layerGrading"; +blockGrading 0.3; +invBlockGrading #calc "1.0/$blockGrading"; + +blocks +( + hex (16 17 18 19 12 13 14 15) farField (25 100 1) simplegrading (1 1 1) + + hex (3 0 1 4 2 0 1 5) bottomBlock (10 50 1) simplegrading ($edgeNumber 1 1) + + hex (7 8 11 10 6 8 11 9) topBlock (10 35 1) simplegrading ($edgeNumber 1 1) + + hex (25 23 20 22 24 23 20 21) + centralBlock (10 20 1) + edgeGrading + ( + 1 1 1 1 + $layerGrading $layerGrading $layerGrading $layerGrading + 1 1 1 1 + ) // bottom layer + + hex (25 22 28 29 24 21 30 31) + centralBlock (20 20 1) + edgeGrading + ( + $layerGrading $layerGrading $layerGrading $layerGrading + 1 1 1 1 + 1 1 1 1 + ) // middle layer + + hex (28 26 27 29 30 26 27 31) + centralBlock (10 20 1) + edgeGrading + ( + 1 1 1 1 + $invLayerGrading $invLayerGrading $invLayerGrading $invLayerGrading + 1 1 1 1 + ) // top layer + + hex (4 1 23 25 5 1 23 24) + centralBlock (10 10 1) + edgeGrading + ( + $edgeNumber 1 1 $edgeNumber + $blockGrading $edgeNumber $edgeNumber $blockGrading + 1 $edgeNumber $edgeNumber 1 + ) // bottom + + hex (4 25 29 7 5 24 31 6) + centralBlock (10 20 1) + edgeGrading + ( + $blockGrading $blockGrading $blockGrading $blockGrading + 1 1 1 1 + 1 1 1 1 + ) // middle + + hex (29 27 8 7 31 27 8 6) + centralBlock (10 10 1) + edgeGrading + ( + 1 $edgeNumber $edgeNumber 1 + $invBlockGrading $invBlockGrading $invBlockGrading $invBlockGrading + 1 1 1 1 + ) // top +); + +edges +( + // Layer block below sphere + arc 20 22 ($innerBottomArcX1 $innerBottomArcY1 $innerBottomArcZ1Pos) + arc 20 21 ($innerBottomArcX1 $innerBottomArcY1 $innerBottomArcZ1Neg) + arc 23 25 ($outerBottomArcX1 $outerBottomArcY1 $outerBottomArcZ1Pos) + arc 23 24 ($outerBottomArcX1 $outerBottomArcY1 $outerBottomArcZ1Neg) + + // Layer block above sphere + arc 26 28 ($innerTopArcX1 $innerTopArcY1 $innerTopArcZ1Pos) + arc 26 30 ($innerTopArcX1 $innerTopArcY1 $innerTopArcZ1Neg) + arc 27 29 ($outerTopArcX1 $outerTopArcY1 $outerTopArcZ1Pos) + arc 27 31 ($outerTopArcX1 $outerTopArcY1 $outerTopArcZ1Neg) + + // Layer block left of sphere + arc 22 28 ($innerLeftArcX $innerLeftArcY $innerLeftArcZNeg) + arc 21 30 ($innerLeftArcX $innerLeftArcY $innerLeftArcZPos) + arc 24 31 ($outerLeftArcX $innerLeftArcY $outerLeftArcZPos) + arc 25 29 ($outerLeftArcX $innerLeftArcY $outerLeftArcZNeg) +); + +boundary +( + front + { + type wedge; + faces + ( + (0 1 5 2) + (5 1 23 24) + (23 20 21 24) + (24 21 30 31) + (5 24 31 6) + (31 27 8 6) + (6 8 11 9) + (31 30 26 27) + (12 13 14 15) + ); + } + back + { + type wedge; + faces + ( + (0 3 4 1) + (1 4 25 23) + (4 7 29 25) + (23 25 22 20) + (25 29 28 22) + (29 7 8 27) + (28 29 27 26) + (7 10 11 8) + (16 17 18 19) + ); + } + innerAMI + { + type cyclicAMI; + neighbourPatch outerAMI; + faces + ( + (4 5 6 7) + (6 9 10 7) + (2 5 4 3) + ); + transform noOrdering; + } + outerAMI + { + type cyclicAMI; + neighbourPatch innerAMI; + faces + ( + (14 13 17 18) + ); + transform noOrdering; + } + top + { + type wall; + faces + ( + (15 14 18 19) + (9 11 11 10) + ); + } + bottom + { + type wall; + faces + ( + (12 16 17 13) + (0 2 3 0) + ); + } + farFieldWall + { + type wall; + faces + ( + (12 15 19 16) + ); + } + sphere + { + type wall; + faces + ( + (20 22 21 20) + (21 22 28 30) + (30 26 26 28) + ); + } +); + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..12a349e369dca5d144c14fab895dc2196d385f2f --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/controlDict @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application compressibleInterDyMFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0.07; + +deltaT 5e-05; + +writeControl adjustableRunTime; + +writeInterval 0.001; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable true; + +adjustTimeStep yes; + +maxCo 0.1; + +maxAlphaCo 0.1; + +libs +( + "libsixDoFRigidBodyMotion.so" + "libtopoChangerFvMesh.so" +); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict new file mode 100644 index 0000000000000000000000000000000000000000..ef1206a09bf6816b25a5d9064fbd5691a5e07e80 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/createPatchDict @@ -0,0 +1,28 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object createPatchDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Do a synchronisation of coupled points after creation of any patches. +// Note: this does not work with points that are on multiple coupled patches +// with transformations (i.e. cyclics). +pointSync false; + +// Patches to create. An empty patch list just removes patches with zero +// faces from $FOAM_CASE/constant/polyMesh/boundary. +patches +( +); + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..7fdcd8e68efb32c75bf4ac509d71ec7fe097e09c --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSchemes @@ -0,0 +1,71 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(U) cellLimited Gauss linear 1; +} + +divSchemes +{ + default none; + div(rhoPhi,U) Gauss linearUpwind grad(U); + div(phi,alpha) Gauss vanLeer; + div(phirb,alpha) Gauss linear; + div(rhoPhi,K) Gauss linear; + div(rhoPhi,T) Gauss linear; + div(phi,thermo:rho.water) Gauss linear; + div(phi,thermo:rho.air) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; + div((phi+meshPhi),p) Gauss linear; + + div((muEff*dev2(T(grad(U))))) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + pcorr ; + p ; + pd; + alpha1; + p_rgh; +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..d88808501c015361898591009084bb9fdc7a58f2 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/fvSolution @@ -0,0 +1,113 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + "alpha.water.*" + { + nAlphaCorr 1; + nAlphaSubCycles 1; + cAlpha 1; + } + + + cellDisplacement + { + solver GAMG; + tolerance 1e-5; + relTol 0; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + } + + "rho.*|pcorr.*" + { + solver PCG; + preconditioner DIC; + tolerance 1e-8; + relTol 0; + } + + p_rgh + { + solver GAMG; + tolerance 1e-8; + relTol 0.05; + smoother DICGaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + cacheAgglomeration on; + agglomerator faceAreaPair; + nCellsInCoarsestLevel 10; + mergeLevels 1; + } + + p_rghFinal + { + $p_rgh; + tolerance 1e-08; + relTol 0; + } + + "(U|k|epsilon|T)" + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-08; + relTol 0.1; + } + + "(U|k|epsilon|T)Final" + { + $U; + tolerance 1e-08; + relTol 0; + } + +} + +PIMPLE +{ + momentumPredictor no; + nOuterCorrectors 2; + nCorrectors 4; + + nNonOrthogonalCorrectors 1; + + correctPhi yes; + + checkMeshCourantNo no; + moveMeshOuterCorrectors no; + + transonic false; +} + +relaxationFactors +{ + fields + { + } + equations + { + ".*" 1; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict new file mode 100644 index 0000000000000000000000000000000000000000..249d2fb1522900e0169d0a57f737970599c91f93 --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/setFieldsDict @@ -0,0 +1,33 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +defaultFieldValues +( + volScalarFieldValue alpha.water 0 // Air +); + +regions +( + boxToCell + { + box (-20 -20 -1) (20 0 1); + fieldValues + ( + volScalarFieldValue alpha.water 1 // Water + ); + } +); diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict new file mode 100644 index 0000000000000000000000000000000000000000..15c18752ccaa77ab241f7e070d3dea9df7e9c59c --- /dev/null +++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sphereDrop/system/topoSetDict @@ -0,0 +1,326 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object topoSetDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +actions +( + // 1. Create cellZones + + // Create cellSet topBlock from cellZone topBlock created by blockMesh + { + name topBlockCells; + type cellSet; + action new; + source zoneToCell; + sourceInfo + { + name topBlock; + } + } + + // Create cellSet centralBlock from cellZone centralBlock created by blockMesh + { + name centralBlockCells; + type cellSet; + action new; + source zoneToCell; + sourceInfo + { + name centralBlock; + } + } + + // Create cellSet bottomBlock from cellZone bottomBlock created by blockMesh + { + name bottomBlockCells; + type cellSet; + action new; + source zoneToCell; + sourceInfo + { + name bottomBlock; + } + } + + + // 2. Get the faces at the top patch + + // Get all the faces in the top patch + { + name top; + type faceSet; + action new; + source patchToFace; + sourceInfo + { + name top; + } + } + + // Only keep those that border the top block topBlock + { + name top; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set topBlockCells; + option all; + } + } + + // Convert top from faceSet to faceZone + { + name top; + type faceZoneSet; + action new; + source setAndNormalToFaceZone; + sourceInfo + { + faceSet top; + normal (0 -1 0); + } + } + + + // 3. Get the faces on the border of cellZones topBlock and centralBlock + + // Get all faces in topBlock + { + name centralTopFaces; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set topBlockCells; + option all; + } + } + + // Get the faces that border topBlock and centralBlock + { + name centralTopFaces; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set centralBlockCells; + option all; + } + } + + // Convert topBlockFaces from faceSet to faceZone + { + name centralTopFaces; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet centralTopFaces; + cellSet topBlockCells; + } + } + + + // 4. Get all the faces on the border of cellZones centralBlock and + // bottomBlock + + // Get all faces in bottomBlock + { + name centralBottomFaces; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set bottomBlockCells; + option all; + } + } + + // Get the faces that border centralBlock and bottomBlock + { + name centralBottomFaces; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set centralBlockCells; + option all; + } + } + + // Convert centralBottomFaces from faceSet to faceZone + { + name centralBottomFaces; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet centralBottomFaces; + cellSet centralBlockCells; + } + } + + + // 5. Get the faces at bottom patch + + // Get all the faces in the bottom patch + { + name bottom; + type faceSet; + action new; + source patchToFace; + sourceInfo + { + name bottom; + } + } + + // Only keep those that border the bottom block bottomBlockCells + { + name bottom; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set bottomBlockCells; + option all; + } + } + + // Convert bottom from faceSet to faceZone + { + name bottom; + type faceZoneSet; + action new; + source setAndNormalToFaceZone; + sourceInfo + { + faceSet bottom; + normal (0 1 0); + } + } + + + // AJH New - create additional face zones to enable solid body motion + // for the majority of the action area around the sphere, and only apply + // layer addition-removal (LAR) at the extremities + + // create cell zone at top of domain for LAR region + { + name LARTopCells; + type cellSet; + action new; + source cellToCell; + sourceInfo + { + set topBlockCells; + } + } + { + name LARTopCells; + type cellSet; + action subset; + source boxToCell; + sourceInfo + { + box (-100 0.95 -100)(100 100 100); + } + } + { + name LARTopCells; + type cellZoneSet; + action new; + source setToCellZone; + sourceInfo + { + set LARTopCells; + } + } + + // upate old topBlock cellZone + { + name topBlockCells; + type cellSet; + action delete; + source cellToCell; + sourceInfo + { + set LARTopCells; + } + } + { + name topBlock; + type cellZoneSet; + action remove; + } + { + name topBlock; + type cellZoneSet; + action new; + source setToCellZone; + sourceInfo + { + set topBlockCells; + } + } + + // generate face zone between LARTopCells and topBlockCells cellSets + { + name LARTopFaces; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set LARTopCells; + option all; + } + } + { + name LARTopFaces; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set topBlockCells; + option all; + } + } + { + name LARTopFaces; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet LARTopFaces; + cellSet topBlockCells; + } + } +); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/constant/dynamicMeshDict index 9099cdd5c13bf4fb008f27113dc55138a7671c0e..24b3e86887d072ce7329a5ac60a9a6d7fd4ccec6 100644 --- a/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/constant/dynamicMeshDict @@ -15,11 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; motionSolverLibs ( "libfvMotionSolvers.so" ); -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone rotating; diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/constant/dynamicMeshDict index d02a77dba8f31c78e01a04fb2e491f47d916fe21..26a2e7018f9a43a2944a6f42988588fe224b9f8b 100644 --- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction SDA; SDACoeffs diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/constant/dynamicMeshDict index 256d87cc3f9d0fa71c4d09742fa76c77eae20820..cdf917c2f4e9a2b22984ccc5a135d5a96e19f163 100644 --- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction SDA; SDACoeffs diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/constant/dynamicMeshDict index 34f15c02b714294f0bcf78b6f7645011fc77f853..e483843b00fe8f80c39c1484b3eb475400b93f5d 100644 --- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction SDA; SDACoeffs diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/constant/dynamicMeshDict index 256d87cc3f9d0fa71c4d09742fa76c77eae20820..cdf917c2f4e9a2b22984ccc5a135d5a96e19f163 100644 --- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction SDA; SDACoeffs diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/constant/dynamicMeshDict index 64c23c651214cd094922664f48701cc23efd1151..70672aefe05a49a343cfc68c9c6f2075ee7ba80a 100644 --- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction tabulated6DoFMotion; tabulated6DoFMotionCoeffs diff --git a/tutorials/multiphase/interDyMFoam/laminar/testTubeMixer/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/laminar/testTubeMixer/constant/dynamicMeshDict index c6fa67e32640901a6fc815f49cecffe83526765b..1f0d4c253ea14c8eec4c68b84d8c0b372549ab5b 100644 --- a/tutorials/multiphase/interDyMFoam/laminar/testTubeMixer/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/laminar/testTubeMixer/constant/dynamicMeshDict @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { solidBodyMotionFunction multiMotion; diff --git a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/dynamicMeshDict b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/dynamicMeshDict index f235e0ee9c908dc4734c50662c079568cfb98b67..9f4a4cd86d5c9c09ac9de7cd87b80f54a832b5fd 100644 --- a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/dynamicMeshDict +++ b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/dynamicMeshDict @@ -15,11 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; motionSolverLibs ( "libfvMotionSolvers.so" ); -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone innerCylinderSmall; diff --git a/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/dynamicMeshDict b/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/dynamicMeshDict index 00ef84689bc4e12c67406c7505ddee94d2996dae..bfce8712bb2747c065a9660c4cb538be3776f251 100644 --- a/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/dynamicMeshDict +++ b/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/dynamicMeshDict @@ -15,11 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dynamicFvMesh solidBodyMotionFvMesh; +dynamicFvMesh dynamicMotionSolverFvMesh; motionSolverLibs ( "libfvMotionSolvers.so" ); -solidBodyMotionFvMeshCoeffs +solver solidBody; + +solidBodyCoeffs { cellZone rotor; diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/Allrun b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/Allrun index c056332036ab4e1ae0f90a6f704c5f4c28e184cb..59d62c7881fb2c2c8fed84d24def73039b9694a6 100755 --- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/Allrun +++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/Allrun @@ -10,7 +10,7 @@ runApplication $(getApplication) if ! isTest $@ then foamDictionary system/controlDict -entry endTime -set 5 - foamDictionary 2/T.liquid -entry boundaryField.wall2.q -set 1e5 + foamDictionary 2/T.liquid -entry boundaryField.wall2.q -set 'uniform 1e5' runApplication -a $(getApplication) fi diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/Allrun b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/Allrun index c056332036ab4e1ae0f90a6f704c5f4c28e184cb..59d62c7881fb2c2c8fed84d24def73039b9694a6 100755 --- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/Allrun +++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/Allrun @@ -10,7 +10,7 @@ runApplication $(getApplication) if ! isTest $@ then foamDictionary system/controlDict -entry endTime -set 5 - foamDictionary 2/T.liquid -entry boundaryField.wall2.q -set 1e5 + foamDictionary 2/T.liquid -entry boundaryField.wall2.q -set 'uniform 1e5' runApplication -a $(getApplication) fi diff --git a/tutorials/resources/geometry/motorBike-passenger-helmet.obj.gz b/tutorials/resources/geometry/motorBike-passenger-helmet.obj.gz new file mode 100644 index 0000000000000000000000000000000000000000..4f7738d1244782dac214962479da94822a7f4199 Binary files /dev/null and b/tutorials/resources/geometry/motorBike-passenger-helmet.obj.gz differ diff --git a/wmake/makefiles/apps b/wmake/makefiles/apps index b8abcd2e95461f9bd7e06904967c21cfddc0dc6c..d871a2a83b7d87e5b7b050f3377efd9ed749c8a4 100644 --- a/wmake/makefiles/apps +++ b/wmake/makefiles/apps @@ -1,8 +1,8 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation +# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------ # License diff --git a/wmake/makefiles/files b/wmake/makefiles/files index c17179eaaad33232d3c74723a98282261af03dea..21b43c71920ad00ce0c008320cfb0e4146f323eb 100644 --- a/wmake/makefiles/files +++ b/wmake/makefiles/files @@ -1,4 +1,4 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | diff --git a/wmake/makefiles/general b/wmake/makefiles/general index b7f49358a173c24a417ee7b73364b17cead07302..c4085123af809495c0bac280c30e0f1011094495 100644 --- a/wmake/makefiles/general +++ b/wmake/makefiles/general @@ -1,4 +1,4 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | @@ -128,18 +128,28 @@ LIB_HEADER_DIRS = \ # Define link statements for executables #------------------------------------------------------------------------------ +.PHONY: all +all: $(EXE) + @: + +.PHONY: silent +silent: + @: + $(EXE): $(OBJECTS) @$(WM_SCRIPTS)/makeTargetDir $(EXE) - $(LINKEXE) $(OBJECTS) -L$(LIB_PLATFORMS) \ + $(call QUIET_MESSAGE,ld,$(EXE)) + $E $(LINKEXE) $(OBJECTS) -L$(LIB_PLATFORMS) \ $(EXE_LIBS) $(PROJECT_LIBS) $(SYS_LIBS) \ $(LINK_LIBS) $(GLIBS) -o $(EXE) -exe: $(SEXE) - @echo \'$(SEXE)\' is up to date. +.PHONY: exe +exe: $(SEXE) | silent -$(SEXE):$(OBJECTS) +$(SEXE): $(OBJECTS) @$(WM_SCRIPTS)/makeTargetDir $(SEXE) - $(LINKEXE) $(OBJECTS) $(EXE_LIBS) \ + $(call QUIET_MESSAGE,ld,$(SEXE)) + $E $(LINKEXE) $(OBJECTS) $(EXE_LIBS) \ $(SYS_LIBS) $(LINK_LIBS) $(GLIBS) -o $(SEXE) @@ -147,32 +157,37 @@ $(SEXE):$(OBJECTS) # Define link statements for libraries #------------------------------------------------------------------------------ -objects: $(OBJECTS) +.PHONY: objects +objects: $(OBJECTS) | silent -libso: $(LIB).$(SO) - @echo \'$(LIB).$(SO)\' is up to date. +.PHONY: libso +libso: $(LIB).$(SO) | silent $(LIB).$(SO): $(OBJECTS) @$(WM_SCRIPTS)/makeTargetDir $(LIB) - $(LINKLIBSO) $(OBJECTS) -L$(LIB_PLATFORMS) \ + $(call QUIET_MESSAGE,ld,$(LIB).$(SO)) + $E $(LINKLIBSO) $(OBJECTS) -L$(LIB_PLATFORMS) \ $(LIB_LIBS) $(GLIB_LIBS) -o $(LIB).$(SO) -lib: $(LIB).a - @echo \'$(LIB).a\' is up to date. +.PHONY: lib +lib: $(LIB).a | silent $(LIB).a: $(OBJECTS) @$(WM_SCRIPTS)/makeTargetDir $(LIB) @rm -f $(LIB).a - $(AR) $(ARFLAGS) $(LIB).a $(OBJECTS) - $(RANLIB) $(LIB).a + $(call QUIET_MESSAGE,ar,$(LIB)) + $E $(AR) $(ARFLAGS) $(LIB).a $(OBJECTS) + $(call QUIET_MESSAGE,ranlib,$(notdir $(LIB))) + $E $(RANLIB) $(LIB).a -libo: $(LIB).o - @echo \'$(LIB).o\' is up to date. +.PHONY: libo +libo: $(LIB).o | silent $(LIB).o: $(OBJECTS) @$(WM_SCRIPTS)/makeTargetDir $(LIB) @rm -f $(LIB).o - $(LD) -r -o $(LIB).o $(OBJECTS) + $(call QUIET_MESSAGE,ld,$(LIB).o) + $E $(LD) -r -o $(LIB).o $(OBJECTS) #------------------------------------------------------------------------------ @@ -187,7 +202,7 @@ lnInclude: $(MAKE_DIR)/files $(MAKE_DIR)/options # Declare all object files depend on $(OBJECTS_DIR)/options #------------------------------------------------------------------------------ -$(OBJECTS) : $(OBJECTS_DIR)/options +$(OBJECTS): $(OBJECTS_DIR)/options $(foreach S,$(SOURCE),$(eval $(OBJECTS_DIR)/$(basename $S).o : $(OBJECTS_DIR)/$S.dep)) @@ -205,4 +220,4 @@ ifeq ($(findstring lnInclude,$(MAKECMDGOALS))$(findstring updatedep,$(MAKECMDGOA endif -#------------------------------------------------------------------------------ +#----------------------------- vim: set ft=make: ------------------------------ diff --git a/wmake/rules/General/ADIOS b/wmake/rules/General/ADIOS new file mode 100644 index 0000000000000000000000000000000000000000..87bda2c75204b30516a278532120340376ee487e --- /dev/null +++ b/wmake/rules/General/ADIOS @@ -0,0 +1,11 @@ +#-------------------------------*- makefile -*--------------------------------- +# ADIOS includes/libraries + +sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) +sinclude $(RULES)/mplib$(WM_MPLIB) + +# Obtain compile/link flags via adios_config +ADIOS_INC := $(shell $(ADIOS_ARCH_PATH)/bin/adios_config -c) +ADIOS_LIBS := $(shell $(ADIOS_ARCH_PATH)/bin/adios_config -l) + +#------------------------------------------------------------------------------ diff --git a/wmake/rules/General/CGAL b/wmake/rules/General/CGAL index 83e8b1df1e9edcf44233b08cc898d79da5ff6797..ae1df01de8968b8ba24883a191a2a22a08b5cce3 100644 --- a/wmake/rules/General/CGAL +++ b/wmake/rules/General/CGAL @@ -1,13 +1,16 @@ CGAL_INC = \ - -I$(CGAL_ARCH_PATH)/include \ - -I$(MPFR_ARCH_PATH)/include \ -I$(GMP_ARCH_PATH)/include \ + -I$(MPFR_ARCH_PATH)/include \ -I$(BOOST_ARCH_PATH)/include \ + -I$(CGAL_ARCH_PATH)/include \ -I/usr/include CGAL_LIBS = \ - -L$(MPFR_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ -L$(GMP_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ + -L$(MPFR_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ + -L$(BOOST_ARCH_PATH)/lib \ -L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ + -L$(CGAL_ARCH_PATH)/lib \ -L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ - -lCGAL + -lCGAL \ + -lmpfr diff --git a/wmake/rules/General/bison b/wmake/rules/General/bison index 4811b0ec1ca31b4bb8f4180fd0ab322c66805ed4..590996c953c15e038a6a7bd07d9ecfcd5e08e1b6 100644 --- a/wmake/rules/General/bison +++ b/wmake/rules/General/bison @@ -1,11 +1,13 @@ SUFFIXES += .y .Y -ytoo = $(WM_SCHEDULER) bison -v -d -y $< $(AND) \ +ytoo = $E $(call QUIET_MESSAGE,bison,$(<F)) \ + $(WM_SCHEDULER) bison -v -d -y $< $(AND) \ mv y.tab.c $(@D)/$(<F).c $(AND) \ mv y.tab.h $(@D)/$(<F).h $(AND) \ $(cc) $(cFLAGS) -c $(@D)/$(<F).c -o $@ -Ytoo = $(WM_SCHEDULER) bison -v -d -y $< $(AND) \ +Ytoo = $E $(call QUIET_MESSAGE,bison,$(<F)) \ + $(WM_SCHEDULER) bison -v -d -y $< $(AND) \ mv y.tab.c $(@D)/$(<F).C $(AND) \ mv y.tab.h $(@D)/$(<F).H $(AND) \ $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/rules/General/btyacc b/wmake/rules/General/btyacc index 90124ebd458adecdd75257719c4df3b112128fff..b8b26e00267643cbba33d10f406674d0ceffa209 100644 --- a/wmake/rules/General/btyacc +++ b/wmake/rules/General/btyacc @@ -1,6 +1,7 @@ SUFFIXES += .y -ytoo = $(WM_SCHEDULER) btyacc -v -d $(SKELETON) $< $(AND) \ +ytoo = $E $(call QUIET_MESSAGE,btyacc,$(<F)) \ + $(WM_SCHEDULER) btyacc -v -d $(SKELETON) $< $(AND) \ mv y_tab.c $(@D)/$(<F).C $(AND) \ mv y_tab.h $(@D)/$(<F).H $(AND) \ $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/rules/General/btyacc++ b/wmake/rules/General/btyacc++ index 2aa66cc8cb65bb60cd51ac8535e7fd438379cf2c..fdbbf78453265ea6776edeaee5e8d2e5792b7682 100644 --- a/wmake/rules/General/btyacc++ +++ b/wmake/rules/General/btyacc++ @@ -1,6 +1,7 @@ SUFFIXES += .Y -Ytoo = $(WM_SCHEDULER) btyacc++ -v -d $(SKELETON) $< $(AND) \ +Ytoo = $E $(call QUIET_MESSAGE,btyacc++,$(<F)) \ + $(WM_SCHEDULER) btyacc++ -v -d $(SKELETON) $< $(AND) \ mv y_tab.c $(@D)/$(<F).C $(AND) \ mv y_tab.h $(@D)/$(<F).H $(AND) \ $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/rules/General/byacc b/wmake/rules/General/byacc index 177733805c4d33321f5407c87bd35961c1c3f20b..093d28745c335e30befdffa4236ba49656dbe9e6 100644 --- a/wmake/rules/General/byacc +++ b/wmake/rules/General/byacc @@ -1,6 +1,7 @@ SUFFIXES += .y -ytoo = $(WM_SCHEDULER) byacc -v $(YYPREFIX) -d $< $(AND) \ +ytoo = $E $(call QUIET_MESSAGE,byacc,$(<F)) \ + $(WM_SCHEDULER) byacc -v $(YYPREFIX) -d $< $(AND) \ mv y.tab.c $(@D)/$(<F).C $(AND) \ mv y.tab.h $(@D)/$(<F).H $(AND) \ $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/rules/General/flex b/wmake/rules/General/flex index 3f2fe373f750985995e0a480d50cad531b0c1c44..4029b97b10db361710a3eb4599db2881d5b63ab9 100644 --- a/wmake/rules/General/flex +++ b/wmake/rules/General/flex @@ -1,4 +1,5 @@ SUFFIXES += .l -ltoo = $(WM_SCHEDULER) flex -o $(@D)/$(<F).c $< $(AND) \ +ltoo = $E $(call QUIET_MESSAGE,flex,$(<F)) \ + $(WM_SCHEDULER) flex -o $(@D)/$(<F).c $< $(AND) \ $(cc) $(cFLAGS) -c $(@D)/$(<F).c -o $@ diff --git a/wmake/rules/General/flex++ b/wmake/rules/General/flex++ index 4a140628fc36b9b3ef231d41fef9384e9f2771ef..dcea7ec72a9f5060ca76cdcea249c47edd5c6807 100644 --- a/wmake/rules/General/flex++ +++ b/wmake/rules/General/flex++ @@ -1,4 +1,5 @@ SUFFIXES += .L -Ltoo = $(WM_SCHEDULER) flex -+ -o$(@D)/$(<F).C -f $< $(AND) \ +Ltoo = $E $(call QUIET_MESSAGE,flex++,$(<F)) \ + $(WM_SCHEDULER) flex -+ -o$(@D)/$(<F).C -f $< $(AND) \ $(CC) $(c++FLAGS) $(c++LESSWARN) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/rules/General/general b/wmake/rules/General/general index f7e42cbef34a9482b129c9b44e04b196d520fc3a..4dffa627e3e7005362634e3722a87afb1ca61a99 100644 --- a/wmake/rules/General/general +++ b/wmake/rules/General/general @@ -1,5 +1,5 @@ #-------------------------------*- makefile -*--------------------------------- -WM_VERSION = OPENFOAM_PLUS=1609 +WM_VERSION = OPENFOAM_PLUS=1612 AR = ar ARFLAGS = cr diff --git a/wmake/rules/General/moc b/wmake/rules/General/moc index 02a075843e099a8b2bdc5e8311c8df5fe5a05655..1a0d4160cc68ab4dc6c7e489757c94fda35a25fe 100644 --- a/wmake/rules/General/moc +++ b/wmake/rules/General/moc @@ -1,4 +1,5 @@ SUFFIXES += .qt -qttoo = $(WM_SCHEDULER) $(QTDIR)/bin/moc -f $< -o $(@D)/$(<F).C $(AND) \ - $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ +qttoo = $E $(call QUIET_MESSAGE,moc,$(<F)) \ + $(WM_SCHEDULER) $(QTDIR)/bin/moc -f $< -o $(@D)/$(<F).C $(AND) \ + $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/rules/General/standard b/wmake/rules/General/standard index ccd69cede3aa7f8003f25b3cbdc49096a4752a9d..0aa96894077f5938c6539f704d993a28d93b841e 100644 --- a/wmake/rules/General/standard +++ b/wmake/rules/General/standard @@ -1,4 +1,4 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ SUFFIXES= diff --git a/wmake/rules/General/transform b/wmake/rules/General/transform index 3fa0152040e2b57dbe58779c47458356af8b299a..165c4a1f4e8b9211e92c79385e74abe7dfc7ea9d 100644 --- a/wmake/rules/General/transform +++ b/wmake/rules/General/transform @@ -1,13 +1,32 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ + +ifneq ("$(WM_QUIET)","") + E=@ + define QUIET_MESSAGE + @echo " $1: $2"; + endef + define VERBOSE_MESSAGE + endef +else + E= + define QUIET_MESSAGE + endef + define VERBOSE_MESSAGE + @echo "$1 $2"; + endef +endif define DEFINE_TRANSFORM $(OBJECTS_DIR)/%.o : %$1 - $$($(subst .,,$(1))too) + $(call QUIET_MESSAGE,$(subst .,,$(1))too,$(value <F)) + $E $$($(subst .,,$(1))too) endef $(foreach s,$(SUFFIXES),$(eval $(call DEFINE_TRANSFORM,$(s)))) $(OBJECTS_DIR)/%.dep : % + $(call QUIET_MESSAGE,wmkdep,$(<F)) + $(call VERBOSE_MESSAGE,Making dependency list for source file,$(<F)) @$(WM_SCRIPTS)/makeTargetDir $@ @$(WMAKE_BIN)/wmkdep -I$(*D) $(LIB_HEADER_DIRS) $< | \ sed -e 's,^$(WM_PROJECT_DIR)/,$$(WM_PROJECT_DIR)/,' \ diff --git a/wmake/rules/General/version b/wmake/rules/General/version index ffd070d0be814cc26573ba6e6071af419a5d0f55..ef3aa5c37d53ba79d4eb8e0dba34520621036fd5 100644 --- a/wmake/rules/General/version +++ b/wmake/rules/General/version @@ -1,4 +1,4 @@ -#-------------------------------*- makefile -*--------------------------------- +#----------------------------*- makefile-gmake -*------------------------------ SUFFIXES += .Cver diff --git a/wmake/rules/General/yacc b/wmake/rules/General/yacc index 18d8902160787bfe5e837370ed81efd830a1b8aa..0daacdbb89222b3946e043842cbb4e5b909d6325 100644 --- a/wmake/rules/General/yacc +++ b/wmake/rules/General/yacc @@ -1,11 +1,13 @@ SUFFIXES += .y .Y -ytoo = $(WM_SCHEDULER) yacc -v -d $< $(AND) \ +ytoo = $E $(call QUIET_MESSAGE,yacc,$(<F)) \ + $(WM_SCHEDULER) yacc -v -d $< $(AND) \ mv y.tab.c $(@D)/$(<F).c $(AND) \ mv y.tab.h $(@D)/parser.h $(AND) \ $(CC) $(c++FLAGS) -c $(@D)/$(<F).c -o $@ -Ytoo = $(WM_SCHEDULER) yacc -v -d $< $(AND) \ +Ytoo = $E $(call QUIET_MESSAGE,yacc,$(<F)) \ + $(WM_SCHEDULER) yacc -v -d $< $(AND) \ mv y.tab.c $(@D)/$(<F).C $(AND) \ mv y.tab.h $(@D)/parser.H $(AND) \ $(CC) $(c++FLAGS) -c $(@D)/$(<F).C -o $@ diff --git a/wmake/scripts/AllwmakeParseArguments b/wmake/scripts/AllwmakeParseArguments index c8bb3ccb7133f822a6434d0240ad24449fc0d42e..79fa3f383e203660eab8e1d64f9bbb837a888f20 100644 --- a/wmake/scripts/AllwmakeParseArguments +++ b/wmake/scripts/AllwmakeParseArguments @@ -46,6 +46,10 @@ Usage: $Script [OPTIONS] Executing $Script is equivalent to wmake -all [OPTIONS] + +With these additional options: + -l | -log | -log=name + USAGE wmake -help @@ -57,8 +61,7 @@ USAGE # Parse the arguments and options #------------------------------------------------------------------------------ -fromWmake= -qOpt= +unset fromWmake optLog optQueue for arg in "$@" do @@ -70,17 +73,25 @@ do usage exit 0 ;; - # Check if called from wmake to avoid recusion -fromWmake) - fromWmake="fromWmake" + # If called from wmake (to avoid recursion) + fromWmake=true + ;; + -l | -log) + optLog="log.Allwmake" + continue # Permanently remove arg + ;; + -log=*) + optLog="${arg##*=}" + [ -n "$optLog" ] || optLog="log.Allwmake" + continue # Permanently remove arg ;; - -q) - qOpt="-q" - # Permanently remove arg - continue + -q | -queue) + optQueue="-q" + continue # Permanently remove arg ;; - # Target type lib | libo | libso | dep | objects) + # Target type targetType=$arg ;; esac @@ -96,7 +107,13 @@ done if [ -z "$fromWmake" ] then - exec wmake -all $qOpt $* + if [ -z "$optLog" ] + then + exec wmake -all $optQueue $* + else + echo "logging wmake -all output to '$optLog'" 1>&2 + exec wmake -all $optQueue $* 2>&1 | tee $optLog + fi fi @@ -114,7 +131,8 @@ fi # Cleanup local variables and functions #------------------------------------------------------------------------------ -unset Script usage fromWmake +unset Script fromWmake optLog optQueue +unset -f usage #------------------------------------------------------------------------------ diff --git a/wmake/src/Makefile b/wmake/src/Makefile index f14baad937e099495610bff48240f15ba6bc2f04..9ced8251c991ca5e467e8d9761200126966e2f24 100644 --- a/wmake/src/Makefile +++ b/wmake/src/Makefile @@ -60,17 +60,17 @@ include $(GENERAL_RULES)/general all: $(WMAKE_BIN)/dirToString $(WMAKE_BIN)/wmkdep clean: - rm -f $(WMAKE_BIN)/* 2>/dev/null - + @E rm -f $(WMAKE_BIN)/* 2>/dev/null $(WMAKE_BIN)/dirToString: dirToString.c @mkdir -p $(WMAKE_BIN) - $(cc) $(cFLAGS) dirToString.c -o $(WMAKE_BIN)/dirToString - + $(call QUIET_MESSAGE,compile,$<) + $E $(cc) $(cFLAGS) dirToString.c -o $(WMAKE_BIN)/dirToString $(WMAKE_BIN)/wmkdep: wmkdep.l @mkdir -p $(WMAKE_BIN) - flex wmkdep.l + $(call QUIET_MESSAGE,lex,$<) + $E flex wmkdep.l; \ $(cc) $(cFLAGS) lex.yy.c -o $(WMAKE_BIN)/wmkdep @rm -f lex.yy.c 2>/dev/null diff --git a/wmake/src/wmkdep.l b/wmake/src/wmkdep.l index a98a5972787d41b59a8f26a564d981e642e1afd1..b0b48d1055d3280dbfd50f0b767ee5da239919dc 100644 --- a/wmake/src/wmkdep.l +++ b/wmake/src/wmkdep.l @@ -145,7 +145,7 @@ const char* bufferPaths[FILE_STACK_SIZE]; int main(int argc, char* argv[]) { char *basePos, *dotPos; - int i; + int i, silent; if (argc == 1) { @@ -154,8 +154,6 @@ int main(int argc, char* argv[]) } sourceFile = strdup(argv[argc-1]); - fprintf(stderr, "Making dependency list for source file %s\n", sourceFile); - if ((basePos = strrchr(sourceFile, '/')) == NULL) { diff --git a/wmake/wclean b/wmake/wclean index fe8156aeb5142a5e125fe3758276fb06a7d58844..e2f6a3142c3154e1c7d45f2d6c097de1898d6846 100755 --- a/wmake/wclean +++ b/wmake/wclean @@ -122,8 +122,9 @@ then } fi - # Provide some feedback - echo "$Script $targetType ${dir:-.}" + # Print command + [ -z "$targetType" ] || targetSpace=" " + echo "$Script $targetType$targetSpace${dir:-.}" fi @@ -164,7 +165,7 @@ then if [ -d $objectsDir ] then - echo "Removing redundant object directories in $objectsDir" + echo " Removing redundant object directories in $objectsDir" find $objectsDir -name 'variables' -print | \ while read variablesFile @@ -230,7 +231,7 @@ then for dir in `find . \( -type d -a -name Make \)` do dir=${dir%/Make} # Parent directory - trim /Make from the end - echo $dir + # If Allwclean exists execute otherwise wclean if [ -e "$dir/Allwclean" ] then @@ -253,7 +254,7 @@ unset targetType if [ -d $MakeDir ] then objectsDir=$MakeDir/$WM_OPTIONS - if echo $PWD | grep "$WM_PROJECT_DIR" + if [ $(echo $PWD | grep "$WM_PROJECT_DIR") ] then platformPath=$WM_PROJECT_DIR/platforms/${WM_OPTIONS} objectsDir=$platformPath$(echo $PWD | sed s%$WM_PROJECT_DIR%% ) diff --git a/wmake/wmake b/wmake/wmake index ebf50cd4ba40543cbfa19a35c75d7698cd9304df..38f3d3ff6e5e1ccfb4a0168871e04dd4719157a3 100755 --- a/wmake/wmake +++ b/wmake/wmake @@ -67,7 +67,7 @@ Usage: $Script [OPTION] [dir] $Script [OPTION] target [dir [MakeDir]] options: - -s | -silent 'silent' mode (does not echo commands) + -s | -silent Quiet mode (does not echo commands) -a | -all wmake all sub-directories, running Allwmake if present -q | -queue wmakeQueue all sub-directories, running Allwmake if present -k or -non-stop Compile without stopping when errors occur @@ -138,7 +138,7 @@ do usage ;; -s | -silent) - make="$make -s" + export WM_QUIET=1 ;; -a | -all | all) all="all" @@ -268,6 +268,10 @@ then exit 1 } fi + + # Print command + [ -z "$targetType" ] || targetSpace=" " + echo "$Script $targetType$targetSpace${dir:-.}" fi @@ -386,7 +390,7 @@ fi #------------------------------------------------------------------------------ objectsDir=$MakeDir/$WM_OPTIONS -if echo $PWD | grep "$WM_PROJECT_DIR" +if [ $(echo $PWD | grep "$WM_PROJECT_DIR") ] then platformPath=$WM_PROJECT_DIR/platforms/${WM_OPTIONS} objectsDir=$platformPath$(echo $PWD | sed s%$WM_PROJECT_DIR%% ) diff --git a/wmake/wmakeCollect b/wmake/wmakeCollect index 4f1ca4bf4f93d89934c82b91c0c2285b1f1494dd..2aaa2c6eef5fb531961c7de42238481bdddec7fe 100755 --- a/wmake/wmakeCollect +++ b/wmake/wmakeCollect @@ -99,6 +99,12 @@ then fi +if [ -n "$WM_QUIET" ] +then + E="@" +fi + + # Collected makefile for this build makefile="$WM_COLLECT_DIR.Makefile" @@ -117,6 +123,9 @@ then # Make sure directories exist mkdir -p $WM_COLLECT_DIR + # The current source file + source="${@: -3:1}" + # The current target object="${@: -1:1}" @@ -128,7 +137,9 @@ then # Add the build rule for the current target echo "$object: $makefile" >> $file - echo -e "\tcd $PWD && \\" >> $file + [ -z "$E" ] || + echo -e "\t@echo \" compiling: ${source##*/}\"" >> $file + echo -e "\t$E cd $PWD && \\" >> $file echo -e "\t${@:1:($#-1)} $object" >> $file echo >> $file else diff --git a/wmake/wmakeLnInclude b/wmake/wmakeLnInclude index a9195b962866eefc0cc47e48a71b4bdb97f94332..3db3802de4cb15945533348d1d7c8ebf5a1bcb9d 100755 --- a/wmake/wmakeLnInclude +++ b/wmake/wmakeLnInclude @@ -138,9 +138,12 @@ fi cd $incDir || exit 1 -[ "$silentOpt" = true ] || { +if [ "$silentOpt" = true -o -n "$WM_QUIET" ] +then + echo " ln: $incDir" 1>&2 +else echo "$Script: linking include files to $incDir" 1>&2 -} +fi #------------------------------------------------------------------------------