diff --git a/.gitignore b/.gitignore index 8de178a605e1984659613dd8dac68170e98dbe71..f567511db339f4396e8e54bd81d3b82d227b17a7 100644 --- a/.gitignore +++ b/.gitignore @@ -51,7 +51,9 @@ doc/[Dd]oxygen/latex doc/[Dd]oxygen/man # generated files in the main directory (e.g. ReleaseNotes-?.?.html) +# and in the doc directory /*.html +/doc/*.html # source packages - anywhere *.tar.bz2 diff --git a/README b/README index 390dd8edb581455cc4c7b1fa1ebfddbb58bb8bde..df56c9c9a4fc721ca1f3d06af825c95ae269aefc 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ # #+TITLE: OpenFOAM README for version 1.6 #+AUTHOR: OpenCFD Ltd. -#+DATE: July 2009 +#+DATE: November 2009 #+LINK: http://www.opencfd.co.uk #+OPTIONS: author:nil ^:{} @@ -99,7 +99,7 @@ and a csh/tcsh example: + setenv FOAM_INST_DIR /data/app/OpenFOAM - + foamDotFile=$FOAM_INST_DIR/OpenFOAM-1.6/etc/bashrc + + foamDotFile=$FOAM_INST_DIR/OpenFOAM-1.6/etc/cshrc + if ( -f $foamDotFile ) source $foamDotFile The value set in '$FOAM_INST_DIR' will be used to locate the remaining parts @@ -168,9 +168,9 @@ + rm -rf paraview-3.6.1/platforms + ./makeParaView - The PV3FoamReader module is an OpenFOAM utility that can be compiled in the - usual manner as follows: - + cd $FOAM_UTILITIES/postProcessing/graphics/PV3FoamReader + The PV3blockMeshReader and the PV3FoamReader ParaView plugins are compiled + as usual for OpenFOAM utilities: + + cd $FOAM_UTILITIES/postProcessing/graphics/PV3Readers/ + ./Allwclean + ./Allwmake @@ -180,14 +180,15 @@ downloads a supported version of Qt /e.g./ 4.3.5 as described in the section on "Qt". The user should unpack the source pack in the $WM_THIRD_PARTY_DIR. Then the user can build Qt by executing from within $WM_THIRD_PARTY_DIR: - + makeQt + + ./makeQt The user should then compile ParaView using the local version of Qt by executing makeParaView with the -qmake option, giving the full path of the newly built qmake as an argument: - + makeParaView -qmake <path_to_qmake> + + ./makeParaView -qmake <path_to_qmake> - The user must then recompile the PV3FoamReader module as normal (see above). + The user must then recompile the PV3blockMeshReader and the + PV3FoamReader plugins as usual (see above). * Documentation http://www.OpenFOAM.org/doc diff --git a/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C b/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C index ce80690224ef442289ebeb22c50d882185d9a6f1..6507c117a010738ab146419030813033fe591709 100644 --- a/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C +++ b/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) dieselSpray.evolve(); - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/combustion/dieselFoam/dieselFoam.C b/applications/solvers/combustion/dieselFoam/dieselFoam.C index 42d9534654432c3f2285de3005223da66af80cff..4769a00c77efa19c1ab497ac0c7fb39b71f99d29 100644 --- a/applications/solvers/combustion/dieselFoam/dieselFoam.C +++ b/applications/solvers/combustion/dieselFoam/dieselFoam.C @@ -61,7 +61,7 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { @@ -72,11 +72,11 @@ int main(int argc, char *argv[]) runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; - Info << "Evolving Spray" << endl; + Info<< "Evolving Spray" << endl; dieselSpray.evolve(); - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/combustion/engineFoam/engineFoam.C b/applications/solvers/combustion/engineFoam/engineFoam.C index dd584d03e2bb8ddb432f6ec13639b93f0778b0cb..5895c82b92fea70dde73423f4a2e1c23bf8a1ef8 100644 --- a/applications/solvers/combustion/engineFoam/engineFoam.C +++ b/applications/solvers/combustion/engineFoam/engineFoam.C @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { diff --git a/applications/solvers/combustion/reactingFoam/chemistry.H b/applications/solvers/combustion/reactingFoam/chemistry.H index 691b6dcb920832fcd215e8044bd88e32acba594b..a1a978210dd2866432bddbd5a9dc6f0d7cff8362 100644 --- a/applications/solvers/combustion/reactingFoam/chemistry.H +++ b/applications/solvers/combustion/reactingFoam/chemistry.H @@ -1,5 +1,5 @@ { - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/combustion/reactingFoam/reactingFoam.C b/applications/solvers/combustion/reactingFoam/reactingFoam.C index 875191eea417ed2e53ae671673a41c4672a727f1..2d4ae7589ad1074be113b39e3a047ea7e658aef5 100644 --- a/applications/solvers/combustion/reactingFoam/reactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/reactingFoam.C @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { diff --git a/applications/solvers/combustion/rhoReactingFoam/chemistry.H b/applications/solvers/combustion/rhoReactingFoam/chemistry.H index 691b6dcb920832fcd215e8044bd88e32acba594b..a1a978210dd2866432bddbd5a9dc6f0d7cff8362 100644 --- a/applications/solvers/combustion/rhoReactingFoam/chemistry.H +++ b/applications/solvers/combustion/rhoReactingFoam/chemistry.H @@ -1,5 +1,5 @@ { - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C b/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C index 777718b3eacc79cd5dd8d8b8610b5a47602036d8..cc37dd09c1847278b0459ae42669ab72b5607da4 100644 --- a/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C +++ b/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C @@ -55,7 +55,7 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { diff --git a/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C b/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C index ec8f777542bd6cca2125d8e027d699c1d24dd83f..3b69386ed6b026c6d40515dfb8944c876310beaf 100644 --- a/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C +++ b/applications/solvers/compressible/rhoCentralFoam/BCs/U/maxwellSlipUFvPatchVectorField.C @@ -155,7 +155,7 @@ void maxwellSlipUFvPatchVectorField::updateCoeffs() refValue() = Uwall_; - if(thermalCreep_) + if (thermalCreep_) { const volScalarField& vsfT = this->db().objectRegistry::lookupObject<volScalarField>("T"); @@ -167,7 +167,7 @@ void maxwellSlipUFvPatchVectorField::updateCoeffs() refValue() -= 3.0*pnu/(4.0*pT)*transform(I - n*n, gradpT); } - if(curvature_) + if (curvature_) { const fvPatchTensorField& ptauMC = patch().lookupPatchField<volTensorField, tensor>("tauMC"); diff --git a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H index f6a433fd6164d0f803098051d4a9c44f4fafa38c..38922c99c9c5700518251a347c167b6848f3de62 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H @@ -27,7 +27,7 @@ if (transonic) pEqn.setReference(pRefCell, pRefValue); - // retain the residual from the first iteration + // Retain the residual from the first iteration if (nonOrth == 0) { eqnResidual = pEqn.solve().initialResidual(); diff --git a/applications/solvers/compressible/rhoSimplecFoam/Make/files b/applications/solvers/compressible/rhoSimplecFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..6637e49aa3bf7599d6fa1c0de9fc1a3d5aab89a8 --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/Make/files @@ -0,0 +1,3 @@ +rhoSimplecFoam.C + +EXE = $(FOAM_APPBIN)/rhoSimplecFoam diff --git a/applications/solvers/compressible/rhoSimplecFoam/Make/options b/applications/solvers/compressible/rhoSimplecFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..9d578f011a760625377ef026f10d7f84ef72b5c8 --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/Make/options @@ -0,0 +1,14 @@ +EXE_INC = \ + -I../rhoSimpleFoam \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \ + -I$(LIB_SRC)/finiteVolume/cfdTools \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -lbasicThermophysicalModels \ + -lspecie \ + -lcompressibleRASModels \ + -lfiniteVolume \ + -lmeshTools diff --git a/applications/solvers/compressible/rhoSimplecFoam/UEqn.H b/applications/solvers/compressible/rhoSimplecFoam/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..c41bc9b6c7b93cab65751d97b441f519e4b3d05f --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/UEqn.H @@ -0,0 +1,17 @@ + // Solve the Momentum equation + + tmp<fvVectorMatrix> UEqn + ( + fvm::div(phi, U) + - fvm::Sp(fvc::div(phi), U) + + turbulence->divDevRhoReff(U) + ); + + UEqn().relax(); + + eqnResidual = solve + ( + UEqn() == -fvc::grad(p) + ).initialResidual(); + + maxResidual = max(eqnResidual, maxResidual); diff --git a/applications/solvers/compressible/rhoSimplecFoam/createFields.H b/applications/solvers/compressible/rhoSimplecFoam/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..d97ee4705b0b1c85bd1410e85fda4d1c5cc2ffb4 --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/createFields.H @@ -0,0 +1,63 @@ + Info<< "Reading thermophysical properties\n" << endl; + + autoPtr<basicPsiThermo> pThermo + ( + basicPsiThermo::New(mesh) + ); + basicPsiThermo& thermo = pThermo(); + + volScalarField rho + ( + IOobject + ( + "rho", + runTime.timeName(), + mesh, + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + thermo.rho() + ); + + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); + + Info<< "Reading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + #include "compressibleCreatePhi.H" + + label pRefCell = 0; + scalar pRefValue = 0.0; + setRefCell(p, mesh.solutionDict().subDict("SIMPLE"), pRefCell, pRefValue); + + dimensionedScalar pMin + ( + mesh.solutionDict().subDict("SIMPLE").lookup("pMin") + ); + + Info<< "Creating turbulence model\n" << endl; + autoPtr<compressible::RASModel> turbulence + ( + compressible::RASModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + dimensionedScalar initialMass = fvc::domainIntegrate(rho); diff --git a/applications/solvers/compressible/rhoSimplecFoam/hEqn.H b/applications/solvers/compressible/rhoSimplecFoam/hEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..8ac1c9f51095babab47a8db97348b57e7d040be5 --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/hEqn.H @@ -0,0 +1,29 @@ +{ + fvScalarMatrix hEqn + ( + fvm::div(phi, h) + - fvm::Sp(fvc::div(phi), h) + - fvm::laplacian(turbulence->alphaEff(), h) + == + fvc::div(phi/fvc::interpolate(rho)*fvc::interpolate(p, "div(U,p)")) + - p*fvc::div(phi/fvc::interpolate(rho)) + ); + + hEqn.relax(); + + eqnResidual = hEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + + thermo.correct(); + + rho = thermo.rho(); + + if (!transonic) + { + rho.relax(); + } + + Info<< "rho max/min : " + << max(rho).value() << " " + << min(rho).value() << endl; +} diff --git a/applications/solvers/compressible/rhoSimplecFoam/pEqn.H b/applications/solvers/compressible/rhoSimplecFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..cd3ae5ff1f46921f536478dcd4b66064ce71b5c2 --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/pEqn.H @@ -0,0 +1,123 @@ +volScalarField p0 = p; + +volScalarField AU = UEqn().A(); +volScalarField AtU = AU - UEqn().H1(); +U = UEqn().H()/AU; +UEqn.clear(); + +bool closedVolume = false; + +if (transonic) +{ + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + surfaceScalarField phid + ( + "phid", + fvc::interpolate(psi*U) & mesh.Sf() + ); + + surfaceScalarField phic + ( + "phic", + fvc::interpolate(rho/AtU - rho/AU)*fvc::snGrad(p)*mesh.magSf() + + phid*(fvc::interpolate(p) - fvc::interpolate(p, "UD")) + ); + + refCast<mixedFvPatchScalarField>(p.boundaryField()[1]).refValue() + = p.boundaryField()[1]; + + fvScalarMatrix pEqn + ( + fvm::div(phid, p) + + fvc::div(phic) + - fvm::Sp(fvc::div(phid), p) + + fvc::div(phid)*p + - fvm::laplacian(rho/AtU, p) + ); + + pEqn.setReference(pRefCell, pRefValue); + + // Retain the residual from the first iteration + if (nonOrth == 0) + { + eqnResidual = pEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + phi == phic + pEqn.flux(); + } + } +} +else +{ + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + phi = fvc::interpolate(rho*U) & mesh.Sf(); + closedVolume = adjustPhi(phi, U, p); + phi += fvc::interpolate(rho/AtU - rho/AU)*fvc::snGrad(p)*mesh.magSf(); + + fvScalarMatrix pEqn + ( + fvc::div(phi) + //- fvm::laplacian(rho/AU, p) + - fvm::laplacian(rho/AtU, p) + ); + + pEqn.setReference(pRefCell, pRefValue); + + // Retain the residual from the first iteration + if (nonOrth == 0) + { + eqnResidual = pEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + } + else + { + pEqn.solve(); + } + + + if (nonOrth == nNonOrthCorr) + { + phi += pEqn.flux(); + } + } +} + +// The incompressibe for of the continuity error check is appropriate for +// steady-state compressible also. +#include "incompressible/continuityErrs.H" + +// Explicitly relax pressure for momentum corrector +p.relax(); + +U -= (fvc::grad(p0)*(1.0/AU - 1.0/AtU) + fvc::grad(p)/AtU); +//U -= fvc::grad(p)/AU; + +U.correctBoundaryConditions(); + +bound(p, pMin); + +// For closed-volume cases adjust the pressure and density levels +// to obey overall mass continuity +if (closedVolume) +{ + p += (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); +} + +rho = thermo.rho(); + +if (!transonic) +{ + rho.relax(); +} + +Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; diff --git a/applications/solvers/compressible/rhoSimplecFoam/rhoSimplecFoam.C b/applications/solvers/compressible/rhoSimplecFoam/rhoSimplecFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..8f706182b560d7d90720871a979c510fda25eb8c --- /dev/null +++ b/applications/solvers/compressible/rhoSimplecFoam/rhoSimplecFoam.C @@ -0,0 +1,92 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + rhoSimplecFoam + +Description + Steady-state SIMPLEC solver for laminar or turbulent RANS flow of + compressible fluids. + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "basicPsiThermo.H" +#include "RASModel.H" +#include "mixedFvPatchFields.H" +#include "bound.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + for (runTime++; !runTime.end(); runTime++) + { + Info<< "Time = " << runTime.timeName() << nl << endl; + + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" + + p.storePrevIter(); + + if (!transonic) + { + rho.storePrevIter(); + } + + // Velocity-pressure-enthalpy SIMPLEC corrector + { + #include "UEqn.H" + #include "pEqn.H" + #include "hEqn.H" + } + + turbulence->correct(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + + #include "convergenceCheck.H" + } + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C index 66619cfc674120273e13f710bf78753b16f45c0b..8869f52a2783812516e0313f8d6b9abe64935e03 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C @@ -50,14 +50,14 @@ int main(int argc, char *argv[]) label nAveragingSteps = 0; - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.loop()) { nAveragingSteps++; - Info << "Time = " << runTime.timeName() << endl; + Info<< "Time = " << runTime.timeName() << endl; molecules.evolve(); @@ -74,12 +74,12 @@ int main(int argc, char *argv[]) nAveragingSteps = 0; } - Info << "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C index 4f2eea1ccc75177a2da34d52e6be72ddfd099fb7..0bd07d0330db41d031d384df6c75bad57d92687d 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C @@ -48,14 +48,14 @@ int main(int argc, char *argv[]) label nAveragingSteps = 0; - Info << "\nStarting time loop\n" << endl; + Info<< "\nStarting time loop\n" << endl; while (runTime.loop()) { nAveragingSteps++; - Info << "Time = " << runTime.timeName() << endl; + Info<< "Time = " << runTime.timeName() << endl; molecules.evolve(); @@ -70,12 +70,12 @@ int main(int argc, char *argv[]) nAveragingSteps = 0; } - Info << "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index 54e1c8cb1840d4719b1f2f360a7ab3d4ba81b052..5a56c2709ffcbb19348eb109f4a44f95d48a20e1 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) << nl << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..e5f536ca09516d6be41ad0837f36e0f04c2d28e9 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files @@ -0,0 +1,5 @@ +derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C +chtMultiRegionSimpleFoam.C + +EXE = $(FOAM_APPBIN)/chtMultiRegionSimpleFoam + diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..34be1995965d8beac1628c87981949e8d010ab3f --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options @@ -0,0 +1,16 @@ +EXE_INC = \ + /* -DFULLDEBUG -O0 -g */ \ + -Ifluid \ + -Isolid \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lbasicThermophysicalModels \ + -lspecie \ + -lcompressibleRASModels diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..336f32d6714fc0ab44b8d78c268f22fb65b9eb75 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -0,0 +1,99 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + chtMultiRegionSimpleFoam + +Description + Steady-state version of chtMultiRegionFoam + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "basicPsiThermo.H" +#include "turbulenceModel.H" +#include "fixedGradientFvPatchFields.H" +#include "regionProperties.H" +#include "compressibleCourantNo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + #include "createTime.H" + + regionProperties rp(runTime); + + #include "createFluidMeshes.H" + #include "createSolidMeshes.H" + + #include "createFluidFields.H" + #include "createSolidFields.H" + + #include "initContinuityErrs.H" + + + while (runTime.run()) + { + Info<< "Time = " << runTime.timeName() << nl << endl; + + forAll(fluidRegions, i) + { + Info<< "\nSolving for fluid region " + << fluidRegions[i].name() << endl; + #include "setRegionFluidFields.H" + #include "readFluidMultiRegionSIMPLEControls.H" + #include "initConvergenceCheck.H" + #include "solveFluid.H" + #include "convergenceCheck.H" + } + + forAll(solidRegions, i) + { + Info<< "\nSolving for solid region " + << solidRegions[i].name() << endl; + #include "setRegionSolidFields.H" + #include "readSolidMultiRegionSIMPLEControls.H" + #include "initConvergenceCheck.H" + #include "solveSolid.H" + #include "convergenceCheck.H" + } + + runTime++; + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C new file mode 100644 index 0000000000000000000000000000000000000000..b1f8c3bed2f58850226ca1b1701f0afa359d8550 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C @@ -0,0 +1,168 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "solidWallHeatFluxTemperatureFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF +) +: + fixedValueFvPatchScalarField(p, iF), + q_(p.size(), 0.0), + KName_("undefined-K") +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const solidWallHeatFluxTemperatureFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchScalarField(ptf, p, iF, mapper), + q_(ptf.q_, mapper), + KName_(ptf.KName_) +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const dictionary& dict +) +: + fixedValueFvPatchScalarField(p, iF, dict), + q_("q", dict, p.size()), + KName_(dict.lookup("K")) +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const solidWallHeatFluxTemperatureFvPatchScalarField& tppsf +) +: + fixedValueFvPatchScalarField(tppsf), + q_(tppsf.q_), + KName_(tppsf.KName_) +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const solidWallHeatFluxTemperatureFvPatchScalarField& tppsf, + const DimensionedField<scalar, volMesh>& iF +) +: + fixedValueFvPatchScalarField(tppsf, iF), + q_(tppsf.q_), + KName_(tppsf.KName_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::autoMap +( + const fvPatchFieldMapper& m +) +{ + fixedValueFvPatchScalarField::autoMap(m); + q_.autoMap(m); +} + + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::rmap +( + const fvPatchScalarField& ptf, + const labelList& addr +) +{ + fixedValueFvPatchScalarField::rmap(ptf, addr); + + const solidWallHeatFluxTemperatureFvPatchScalarField& hfptf = + refCast<const solidWallHeatFluxTemperatureFvPatchScalarField>(ptf); + + q_.rmap(hfptf.q_, addr); +} + + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::updateCoeffs() +{ + if (updated()) + { + return; + } + + const scalarField& Kw = + patch().lookupPatchField<volScalarField, scalar>(KName_); + + const fvPatchScalarField& Tw = *this; + + operator==(q_/(patch().deltaCoeffs()*Kw) + Tw.patchInternalField()); + + fixedValueFvPatchScalarField::updateCoeffs(); +} + + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::write +( + Ostream& os +) const +{ + fixedValueFvPatchScalarField::write(os); + q_.writeEntry("q", os); + os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField + ( + fvPatchScalarField, + solidWallHeatFluxTemperatureFvPatchScalarField + ); +} + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H new file mode 100644 index 0000000000000000000000000000000000000000..85a1ef1cf13f46466f9451e6e1295cde8a8e0d6a --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H @@ -0,0 +1,181 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + solidWallHeatFluxTemperatureFvPatchScalarField + +Description + Heat flux boundary condition for temperature on solid region + + Example usage: + myWallPatch + { + type solidWallHeatFluxTemperature; + K K; // Name of K field + q uniform 1000; // Heat flux / [W/m2] + value 300.0; // Initial temperature / [K] + } + + +SourceFiles + solidWallHeatFluxTemperatureFvPatchScalarField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef solidWallHeatFluxTemperatureFvPatchScalarField_H +#define solidWallHeatFluxTemperatureFvPatchScalarField_H + +#include "fixedValueFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class solidWallHeatFluxTemperatureFvPatchScalarField Declaration +\*---------------------------------------------------------------------------*/ + +class solidWallHeatFluxTemperatureFvPatchScalarField +: + public fixedValueFvPatchScalarField +{ + // Private data + + //- Heat flux / [W/m2] + scalarField q_; + + //- Name of thermal conductivity field + word KName_; + + +public: + + //- Runtime type information + TypeName("solidWallHeatFluxTemperature"); + + + // Constructors + + //- Construct from patch and internal field + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given + // solidWallHeatFluxTemperatureFvPatchScalarField + // onto a new patch + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const solidWallHeatFluxTemperatureFvPatchScalarField&, + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const solidWallHeatFluxTemperatureFvPatchScalarField& + ); + + //- Construct and return a clone + virtual tmp<fvPatchScalarField> clone() const + { + return tmp<fvPatchScalarField> + ( + new solidWallHeatFluxTemperatureFvPatchScalarField(*this) + ); + } + + //- Construct as copy setting internal field reference + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const solidWallHeatFluxTemperatureFvPatchScalarField&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchScalarField> clone + ( + const DimensionedField<scalar, volMesh>& iF + ) const + { + return tmp<fvPatchScalarField> + ( + new solidWallHeatFluxTemperatureFvPatchScalarField(*this, iF) + ); + } + + + // Member functions + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + + // 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 fvPatchScalarField&, + const labelList& + ); + + + // I-O + + //- Write + void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..1cbafe368aa4b6d2c4f9dddaa63fbe8db0ca1175 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H @@ -0,0 +1,22 @@ + // Solve the Momentum equation + tmp<fvVectorMatrix> UEqn + ( + fvm::div(phi, U) + - fvm::Sp(fvc::div(phi), U) + + turb.divDevRhoReff(U) + ); + + UEqn().relax(); + + eqnResidual = solve + ( + UEqn() + == + fvc::reconstruct + ( + fvc::interpolate(rho)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() + ) + ).initialResidual(); + + maxResidual = max(eqnResidual, maxResidual); diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H new file mode 100644 index 0000000000000000000000000000000000000000..046ca5ec378429b496b6e4bbe47c844a1a6999de --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H @@ -0,0 +1,21 @@ +{ + dimensionedScalar totalMass = fvc::domainIntegrate(rho); + + scalar sumLocalContErr = + ( + fvc::domainIntegrate(mag(rho - thermo.rho()))/totalMass + ).value(); + + scalar globalContErr = + ( + fvc::domainIntegrate(rho - thermo.rho())/totalMass + ).value(); + + cumulativeContErr[i] += globalContErr; + + Info<< "time step continuity errors (" << mesh.name() << ")" + << ": sum local = " << sumLocalContErr + << ", global = " << globalContErr + << ", cumulative = " << cumulativeContErr[i] + << endl; +} diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C new file mode 100644 index 0000000000000000000000000000000000000000..a3d68f55ca4d2f5ffdca0b4e995d69aeadddda94 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "compressibleCourantNo.H" +#include "fvc.H" + +Foam::scalar Foam::compressibleCourantNo +( + const fvMesh& mesh, + const Time& runTime, + const volScalarField& rho, + const surfaceScalarField& phi +) +{ + scalar CoNum = 0.0; + scalar meanCoNum = 0.0; + + //- Can have fluid domains with 0 cells so do not test. + //if (mesh.nInternalFaces()) + { + surfaceScalarField SfUfbyDelta = + mesh.surfaceInterpolation::deltaCoeffs() + * mag(phi) + / fvc::interpolate(rho); + + CoNum = max(SfUfbyDelta/mesh.magSf()) + .value()*runTime.deltaT().value(); + + meanCoNum = (sum(SfUfbyDelta)/sum(mesh.magSf())) + .value()*runTime.deltaT().value(); + } + + Info<< "Region: " << mesh.name() << " Courant Number mean: " << meanCoNum + << " max: " << CoNum << endl; + + return CoNum; +} + + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H new file mode 100644 index 0000000000000000000000000000000000000000..329b8cce65ec4d8e74cd310abc463c490051aa7e --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + Calculates and outputs the mean and maximum Courant Numbers for the fluid + regions + +\*---------------------------------------------------------------------------*/ + +#ifndef compressibleCourantNo_H +#define compressibleCourantNo_H + +#include "fvMesh.H" + +namespace Foam +{ + scalar compressibleCourantNo + ( + const fvMesh& mesh, + const Time& runTime, + const volScalarField& rho, + const surfaceScalarField& phi + ); +} + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H new file mode 100644 index 0000000000000000000000000000000000000000..3ca2f685819312306802794b946f5048e91e6e51 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H @@ -0,0 +1,15 @@ + scalar CoNum = -GREAT; + forAll(fluidRegions, regionI) + { + CoNum = max + ( + compressibleCourantNo + ( + fluidRegions[regionI], + runTime, + rhoFluid[regionI], + phiFluid[regionI] + ), + CoNum + ); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H new file mode 100644 index 0000000000000000000000000000000000000000..53c00386ff6e1ad13f9d867f268dd63d29fa9ede --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H @@ -0,0 +1,12 @@ +// check convergence +Info<< "maxResidual: " << maxResidual + << " convergence criterion: " << convergenceCriterion + << endl; + +if (maxResidual < convergenceCriterion) +{ + Info<< "reached convergence criterion: " << convergenceCriterion << endl; + runTime.writeAndEnd(); + Info<< "latestTime = " << runTime.timeName() << endl; +} + diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H new file mode 100644 index 0000000000000000000000000000000000000000..2d2ccf9a5eb4d443059ba97985a77b229407073e --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H @@ -0,0 +1,144 @@ + // Initialise fluid field pointer lists + PtrList<basicPsiThermo> thermoFluid(fluidRegions.size()); + PtrList<volScalarField> rhoFluid(fluidRegions.size()); + PtrList<volScalarField> KFluid(fluidRegions.size()); + PtrList<volVectorField> UFluid(fluidRegions.size()); + PtrList<surfaceScalarField> phiFluid(fluidRegions.size()); + PtrList<uniformDimensionedVectorField> gFluid(fluidRegions.size()); + PtrList<compressible::turbulenceModel> turbulence(fluidRegions.size()); + PtrList<volScalarField> DpDtf(fluidRegions.size()); + + List<scalar> initialMassFluid(fluidRegions.size()); + List<label> pRefCellFluid(fluidRegions.size(),0); + List<scalar> pRefValueFluid(fluidRegions.size(),0.0); + + + // Populate fluid field pointer lists + forAll(fluidRegions, i) + { + Info<< "*** Reading fluid mesh thermophysical properties for region " + << fluidRegions[i].name() << nl << endl; + + Info<< " Adding to thermoFluid\n" << endl; + + thermoFluid.set + ( + i, + basicPsiThermo::New(fluidRegions[i]).ptr() + ); + + Info<< " Adding to rhoFluid\n" << endl; + rhoFluid.set + ( + i, + new volScalarField + ( + IOobject + ( + "rho", + runTime.timeName(), + fluidRegions[i], + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + thermoFluid[i].rho() + ) + ); + + Info<< " Adding to KFluid\n" << endl; + KFluid.set + ( + i, + new volScalarField + ( + IOobject + ( + "K", + runTime.timeName(), + fluidRegions[i], + IOobject::NO_READ, + IOobject::NO_WRITE + ), + thermoFluid[i].Cp()*thermoFluid[i].alpha() + ) + ); + + Info<< " Adding to UFluid\n" << endl; + UFluid.set + ( + i, + new volVectorField + ( + IOobject + ( + "U", + runTime.timeName(), + fluidRegions[i], + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + fluidRegions[i] + ) + ); + + Info<< " Adding to phiFluid\n" << endl; + phiFluid.set + ( + i, + new surfaceScalarField + ( + IOobject + ( + "phi", + runTime.timeName(), + fluidRegions[i], + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + linearInterpolate(rhoFluid[i]*UFluid[i]) + & fluidRegions[i].Sf() + ) + ); + + Info<< " Adding to gFluid\n" << endl; + gFluid.set + ( + i, + new uniformDimensionedVectorField + ( + IOobject + ( + "g", + runTime.constant(), + fluidRegions[i], + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ) + ); + + Info<< " Adding to turbulence\n" << endl; + turbulence.set + ( + i, + compressible::turbulenceModel::New + ( + rhoFluid[i], + UFluid[i], + phiFluid[i], + thermoFluid[i] + ).ptr() + ); + + initialMassFluid[i] = fvc::domainIntegrate(rhoFluid[i]).value(); + + setRefCell + ( + thermoFluid[i].p(), + fluidRegions[i].solutionDict().subDict("SIMPLE"), + pRefCellFluid[i], + pRefValueFluid[i] + ); + } + + diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H new file mode 100644 index 0000000000000000000000000000000000000000..30a2e1089f8875cf507ac0d4d76492830cf9647c --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H @@ -0,0 +1,22 @@ + PtrList<fvMesh> fluidRegions(rp.fluidRegionNames().size()); + + forAll(rp.fluidRegionNames(), i) + { + Info<< "Create fluid mesh for region " << rp.fluidRegionNames()[i] + << " for time = " << runTime.timeName() << nl << endl; + + fluidRegions.set + ( + i, + new fvMesh + ( + IOobject + ( + rp.fluidRegionNames()[i], + runTime.timeName(), + runTime, + IOobject::MUST_READ + ) + ) + ); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/hEqn.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/hEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..ccd661599027a1906e90affab97d322cdd40c286 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/hEqn.H @@ -0,0 +1,21 @@ +{ + fvScalarMatrix hEqn + ( + fvm::div(phi, h) + - fvm::Sp(fvc::div(phi), h) + - fvm::laplacian(turb.alphaEff(), h) + == + fvc::div(phi/fvc::interpolate(rho)*fvc::interpolate(p)) + - p*fvc::div(phi/fvc::interpolate(rho)) + ); + + hEqn.relax(); + + eqnResidual = hEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + + thermo.correct(); + + Info<< "Min/max T:" << min(thermo.T()).value() << ' ' + << max(thermo.T()).value() << endl; +} diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/initConvergenceCheck.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/initConvergenceCheck.H new file mode 100644 index 0000000000000000000000000000000000000000..c920b6708d044d177227d79973ed61bc7f2658fc --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/initConvergenceCheck.H @@ -0,0 +1,7 @@ + // initialize values for convergence checks + + scalar eqnResidual = 1, maxResidual = 0; + scalar convergenceCriterion = 0; + + simple.readIfPresent("convergence", convergenceCriterion); + diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/pEqn.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..6b6fe6ef5dd76b922aa1e003f97e1a86273af2d4 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/pEqn.H @@ -0,0 +1,74 @@ +{ + // From buoyantSimpleFoam + + rho = thermo.rho(); + + volScalarField rUA = 1.0/UEqn().A(); + surfaceScalarField rhorUAf("(rho*(1|A(U)))", fvc::interpolate(rho*rUA)); + + U = rUA*UEqn().H(); + UEqn.clear(); + + phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf()); + bool closedVolume = adjustPhi(phi, U, p); + + surfaceScalarField buoyancyPhi = + rhorUAf*fvc::interpolate(rho)*(g & mesh.Sf()); + phi += buoyancyPhi; + + // Solve pressure + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::laplacian(rhorUAf, p) == fvc::div(phi) + ); + + pEqn.setReference(pRefCell, pRefValue); + + // retain the residual from the first iteration + if (nonOrth == 0) + { + eqnResidual = pEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + // For closed-volume cases adjust the pressure and density levels + // to obey overall mass continuity + if (closedVolume) + { + p += (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); + } + + // Calculate the conservative fluxes + phi -= pEqn.flux(); + + // Explicitly relax pressure for momentum corrector + p.relax(); + + // Correct the momentum source with the pressure gradient flux + // calculated from the relaxed pressure + U += rUA*fvc::reconstruct((buoyancyPhi - pEqn.flux())/rhorUAf); + U.correctBoundaryConditions(); + } + } + + + #include "continuityErrs.H" + + rho = thermo.rho(); + rho.relax(); + + Info<< "Min/max rho:" << min(rho).value() << ' ' + << max(rho).value() << endl; + + // Update thermal conductivity + K = thermo.Cp()*turb.alphaEff(); +} diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H new file mode 100644 index 0000000000000000000000000000000000000000..3054562d5d68076c7d36389b5479b4a41c113e9f --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H @@ -0,0 +1,25 @@ + dictionary simple = fluidRegions[i].solutionDict().subDict("SIMPLE"); + + int nNonOrthCorr = 0; + if (simple.found("nNonOrthogonalCorrectors")) + { + nNonOrthCorr = readInt(simple.lookup("nNonOrthogonalCorrectors")); + } + + bool momentumPredictor = true; + if (simple.found("momentumPredictor")) + { + momentumPredictor = Switch(simple.lookup("momentumPredictor")); + } + + bool fluxGradp = false; + if (simple.found("fluxGradp")) + { + fluxGradp = Switch(simple.lookup("fluxGradp")); + } + + bool transonic = false; + if (simple.found("transonic")) + { + transonic = Switch(simple.lookup("transonic")); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H new file mode 100644 index 0000000000000000000000000000000000000000..8491056ea325e7f20258da63a16e60c9ab2130e2 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H @@ -0,0 +1,24 @@ + const fvMesh& mesh = fluidRegions[i]; + + basicPsiThermo& thermo = thermoFluid[i]; + volScalarField& rho = rhoFluid[i]; + volScalarField& K = KFluid[i]; + volVectorField& U = UFluid[i]; + surfaceScalarField& phi = phiFluid[i]; + const dimensionedVector& g = gFluid[i]; + + compressible::turbulenceModel& turb = turbulence[i]; + + volScalarField& p = thermo.p(); + const volScalarField& psi = thermo.psi(); + volScalarField& h = thermo.h(); + + const dimensionedScalar initialMass + ( + "initialMass", + dimMass, + initialMassFluid[i] + ); + + const label pRefCell = pRefCellFluid[i]; + const scalar pRefValue = pRefValueFluid[i]; diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/solveFluid.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/solveFluid.H new file mode 100644 index 0000000000000000000000000000000000000000..5198941366285201708ca870b3763390a07c5db8 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/solveFluid.H @@ -0,0 +1,11 @@ +// Pressure-velocity SIMPLE corrector + + p.storePrevIter(); + rho.storePrevIter(); + { + #include "UEqn.H" + #include "hEqn.H" + #include "pEqn.H" + } + + turb.correct(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidFields.H new file mode 100644 index 0000000000000000000000000000000000000000..3361a89add381ed2f43d39b602b2b945040453cf --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidFields.H @@ -0,0 +1,91 @@ + // Initialise solid field pointer lists + PtrList<volScalarField> rhos(solidRegions.size()); + PtrList<volScalarField> cps(solidRegions.size()); + PtrList<volScalarField> rhosCps(solidRegions.size()); + PtrList<volScalarField> Ks(solidRegions.size()); + PtrList<volScalarField> Ts(solidRegions.size()); + + // Populate solid field pointer lists + forAll(solidRegions, i) + { + Info<< "*** Reading solid mesh thermophysical properties for region " + << solidRegions[i].name() << nl << endl; + + Info<< " Adding to rhos\n" << endl; + rhos.set + ( + i, + new volScalarField + ( + IOobject + ( + "rho", + runTime.timeName(), + solidRegions[i], + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + solidRegions[i] + ) + ); + + Info<< " Adding to cps\n" << endl; + cps.set + ( + i, + new volScalarField + ( + IOobject + ( + "cp", + runTime.timeName(), + solidRegions[i], + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + solidRegions[i] + ) + ); + + rhosCps.set + ( + i, + new volScalarField("rhosCps", rhos[i]*cps[i]) + ); + + Info<< " Adding to Ks\n" << endl; + Ks.set + ( + i, + new volScalarField + ( + IOobject + ( + "K", + runTime.timeName(), + solidRegions[i], + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + solidRegions[i] + ) + ); + + Info<< " Adding to Ts\n" << endl; + Ts.set + ( + i, + new volScalarField + ( + IOobject + ( + "T", + runTime.timeName(), + solidRegions[i], + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + solidRegions[i] + ) + ); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidMeshes.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidMeshes.H new file mode 100644 index 0000000000000000000000000000000000000000..eb50be23808e6ffdf31c17fca398bb5366f24c7e --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidMeshes.H @@ -0,0 +1,27 @@ + PtrList<fvMesh> solidRegions(rp.solidRegionNames().size()); + + forAll(rp.solidRegionNames(), i) + { + Info<< "Create solid mesh for region " << rp.solidRegionNames()[i] + << " for time = " << runTime.timeName() << nl << endl; + + solidRegions.set + ( + i, + new fvMesh + ( + IOobject + ( + rp.solidRegionNames()[i], + runTime.timeName(), + runTime, + IOobject::MUST_READ + ) + ) + ); + + // Force calculation of geometric properties to prevent it being done + // later in e.g. some boundary evaluation + //(void)solidRegions[i].weights(); + //(void)solidRegions[i].deltaCoeffs(); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/readSolidMultiRegionSIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/readSolidMultiRegionSIMPLEControls.H new file mode 100644 index 0000000000000000000000000000000000000000..22e9b177f1874742fe3d8b8d24ceb2caab3f1d68 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/readSolidMultiRegionSIMPLEControls.H @@ -0,0 +1,7 @@ + dictionary simple = solidRegions[i].solutionDict().subDict("SIMPLE"); + + int nNonOrthCorr = 0; + if (simple.found("nNonOrthogonalCorrectors")) + { + nNonOrthCorr = readInt(simple.lookup("nNonOrthogonalCorrectors")); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/setRegionSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/setRegionSolidFields.H new file mode 100644 index 0000000000000000000000000000000000000000..f9e80e3d72385e7f6ae80107cc3b65921904c35f --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/setRegionSolidFields.H @@ -0,0 +1,6 @@ + fvMesh& mesh = solidRegions[i]; + + volScalarField& rho = rhos[i]; + volScalarField& cp = cps[i]; + volScalarField& K = Ks[i]; + volScalarField& T = Ts[i]; diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/solveSolid.H new file mode 100644 index 0000000000000000000000000000000000000000..7cf2cc14091336970c307730b01ffcaf2349168e --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/solveSolid.H @@ -0,0 +1,16 @@ +{ + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix tEqn + ( + -fvm::laplacian(K, T) + ); + tEqn.relax(); + eqnResidual = tEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + + } + + Info<< "Min/max T:" << min(T).value() << ' ' + << max(T).value() << endl; +} diff --git a/applications/solvers/incompressible/channelFoam/createGradP.H b/applications/solvers/incompressible/channelFoam/createGradP.H index 9bb9bb0ba28f974c967e9f82a2b649fc2a032ebb..643509c46f980f765062daba334d7343792081ac 100644 --- a/applications/solvers/incompressible/channelFoam/createGradP.H +++ b/applications/solvers/incompressible/channelFoam/createGradP.H @@ -11,7 +11,7 @@ runTime.path()/runTime.timeName()/"uniform"/"gradP.raw" ); - if(gradPFile.good()) + if (gradPFile.good()) { gradPFile >> gradP; Info<< "Reading average pressure gradient" <<endl diff --git a/applications/solvers/incompressible/channelFoam/writeGradP.H b/applications/solvers/incompressible/channelFoam/writeGradP.H index c82dd534740b6c8db6258f572768b5c081a7e735..afbca9e61d05b9b63d9acda53152b5dc8e3f3711 100644 --- a/applications/solvers/incompressible/channelFoam/writeGradP.H +++ b/applications/solvers/incompressible/channelFoam/writeGradP.H @@ -5,7 +5,7 @@ runTime.path()/runTime.timeName()/"uniform"/"gradP.raw" ); - if(gradPFile.good()) + if (gradPFile.good()) { gradPFile << gradP << endl; } diff --git a/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H b/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H index 023ecc6d5a7e8afa95465df9db34b9a816d860e8..f1651d8df391de08305885cf6fdc884ec7ea24bc 100644 --- a/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H +++ b/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H @@ -1,4 +1,26 @@ { + if (mesh.changing()) + { + forAll(U.boundaryField(), patchi) + { + if (U.boundaryField()[patchi].fixesValue()) + { + U.boundaryField()[patchi].initEvaluate(); + } + } + + forAll(U.boundaryField(), patchi) + { + if (U.boundaryField()[patchi].fixesValue()) + { + U.boundaryField()[patchi].evaluate(); + + phi.boundaryField()[patchi] = + U.boundaryField()[patchi] & mesh.Sf().boundaryField()[patchi]; + } + } + } + wordList pcorrTypes ( p.boundaryField().size(), @@ -7,7 +29,7 @@ for (label i=0; i<p.boundaryField().size(); i++) { - if(p.boundaryField()[i].fixesValue()) + if (p.boundaryField()[i].fixesValue()) { pcorrTypes[i] = fixedValueFvPatchScalarField::typeName; } @@ -28,7 +50,7 @@ pcorrTypes ); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pcorrEqn ( diff --git a/applications/solvers/incompressible/porousSimpleFoam/createFields.H b/applications/solvers/incompressible/porousSimpleFoam/createFields.H index 04d57d0571472ea1ee00c9a8ec1e24171eefe640..6861ae0005e70f41dc5d04623c47726a4487fca5 100644 --- a/applications/solvers/incompressible/porousSimpleFoam/createFields.H +++ b/applications/solvers/incompressible/porousSimpleFoam/createFields.H @@ -1,4 +1,4 @@ - Info << "Reading field p\n" << endl; + Info<< "Reading field p\n" << endl; volScalarField p ( IOobject @@ -12,7 +12,7 @@ mesh ); - Info << "Reading field U\n" << endl; + Info<< "Reading field U\n" << endl; volVectorField U ( IOobject diff --git a/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C b/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C index bd1989f433e82fc531448c4a672bf3e27f7b7b6c..757ad95e257cfbd1ed7e5bb34e62215f816be249 100644 --- a/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C +++ b/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C @@ -90,7 +90,6 @@ int main(int argc, char *argv[]) // --- PISO loop for (int corr=0; corr<nCorr; corr++) { - surfaceScalarField hf = fvc::interpolate(h); volScalarField rUA = 1.0/hUEqn.A(); surfaceScalarField ghrUAf = magg*fvc::interpolate(h*rUA); diff --git a/applications/solvers/incompressible/simpleFoam/createFields.H b/applications/solvers/incompressible/simpleFoam/createFields.H index ab424962554bd77646d7f5e4abe151c927f091c1..b957c7265051de06f3a5333071f57e0e0b9fffa1 100644 --- a/applications/solvers/incompressible/simpleFoam/createFields.H +++ b/applications/solvers/incompressible/simpleFoam/createFields.H @@ -1,4 +1,4 @@ - Info << "Reading field p\n" << endl; + Info<< "Reading field p\n" << endl; volScalarField p ( IOobject @@ -12,7 +12,7 @@ mesh ); - Info << "Reading field U\n" << endl; + Info<< "Reading field U\n" << endl; volVectorField U ( IOobject diff --git a/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H b/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H index 3a8a5c20f1ef59b8454167c5061ae5579f56e54f..5489dfefbaaa07425e5c0e84576c5ed001a64435 100644 --- a/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H +++ b/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H @@ -1,5 +1,5 @@ { - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H index 3a8a5c20f1ef59b8454167c5061ae5579f56e54f..5489dfefbaaa07425e5c0e84576c5ed001a64435 100644 --- a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H @@ -1,5 +1,5 @@ { - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H index 8159205caee0a202b8fc1be04130bf4a0b4d5c46..340623fbfd5afcae5077bb94c54baee5179dca1d 100644 --- a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H @@ -1,20 +1,5 @@ dictionary additional = mesh.solutionDict().subDict("additional"); -bool dpdt = true; -if (additional.found("dpdt")) -{ - additional.lookup("dpdt") >> dpdt; -} - -bool eWork = true; -if (additional.found("eWork")) -{ - additional.lookup("eWork") >> eWork; -} - -bool hWork = true; -if (additional.found("hWork")) -{ - additional.lookup("hWork") >> hWork; -} - +bool dpdt = additional.lookupOrDefault("dpdt", true); +bool eWork = additional.lookupOrDefault("eWork", true); +bool hWork = additional.lookupOrDefault("hWork", true); diff --git a/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H b/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H index 3a8a5c20f1ef59b8454167c5061ae5579f56e54f..5489dfefbaaa07425e5c0e84576c5ed001a64435 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H +++ b/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H @@ -1,5 +1,5 @@ { - Info << "Solving chemistry" << endl; + Info<< "Solving chemistry" << endl; chemistry.solve ( diff --git a/applications/solvers/multiphase/bubbleFoam/kEpsilon.H b/applications/solvers/multiphase/bubbleFoam/kEpsilon.H index 576e3253abf0b9f1dc592825aab3b6e5852bb853..84dadd7acb5b80452b7992f855d7965d893ff8df 100644 --- a/applications/solvers/multiphase/bubbleFoam/kEpsilon.H +++ b/applications/solvers/multiphase/bubbleFoam/kEpsilon.H @@ -1,4 +1,4 @@ -if(turbulence) +if (turbulence) { if (mesh.changing()) { diff --git a/applications/solvers/multiphase/bubbleFoam/pEqn.H b/applications/solvers/multiphase/bubbleFoam/pEqn.H index 35813dd935ef015a1ea0ee9bb28479448adc7725..3e550efc65e49d1c5ea8ec54a6c360e1f7318f27 100644 --- a/applications/solvers/multiphase/bubbleFoam/pEqn.H +++ b/applications/solvers/multiphase/bubbleFoam/pEqn.H @@ -34,7 +34,7 @@ surfaceScalarField Dp("(rho*(1|A(U)))", alphaf*rUaAf/rhoa + betaf*rUbAf/rhob); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H b/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H index d82a03edb59a2d419420700638404e6f90b197c8..e4bef5a60fe65de90f85b1f0713fac45be23658b 100644 --- a/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H +++ b/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H @@ -1,4 +1,26 @@ { + if (mesh.changing()) + { + forAll(U.boundaryField(), patchi) + { + if (U.boundaryField()[patchi].fixesValue()) + { + U.boundaryField()[patchi].initEvaluate(); + } + } + + forAll(U.boundaryField(), patchi) + { + if (U.boundaryField()[patchi].fixesValue()) + { + U.boundaryField()[patchi].evaluate(); + + phi.boundaryField()[patchi] = + U.boundaryField()[patchi] & mesh.Sf().boundaryField()[patchi]; + } + } + } + #include "continuityErrs.H" volScalarField pcorr @@ -20,7 +42,7 @@ adjustPhi(phi, U, pcorr); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pcorrEqn ( diff --git a/applications/solvers/multiphase/compressibleInterFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterFoam/pEqn.H index 9d2dc23916babb9c6c94acd2b53125c8cfee1dad..e6ff71342912687a62260e06b3e493a612d15350 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/pEqn.H @@ -30,7 +30,7 @@ + fvc::interpolate(rho)*(g & mesh.Sf()) )*rUAf; - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqnIncomp ( diff --git a/applications/solvers/multiphase/interDyMFoam/correctPhi.H b/applications/solvers/multiphase/interDyMFoam/correctPhi.H index 0854a68b8e3ae1b941dbdad26c244017efc04d8e..72550e621c0b6dc381f92f591fceed084b32494f 100644 --- a/applications/solvers/multiphase/interDyMFoam/correctPhi.H +++ b/applications/solvers/multiphase/interDyMFoam/correctPhi.H @@ -1,4 +1,26 @@ { + if (mesh.changing()) + { + forAll(U.boundaryField(), patchi) + { + if (U.boundaryField()[patchi].fixesValue()) + { + U.boundaryField()[patchi].initEvaluate(); + } + } + + forAll(U.boundaryField(), patchi) + { + if (U.boundaryField()[patchi].fixesValue()) + { + U.boundaryField()[patchi].evaluate(); + + phi.boundaryField()[patchi] = + U.boundaryField()[patchi] & mesh.Sf().boundaryField()[patchi]; + } + } + } + #include "continuityErrs.H" volScalarField pcorr @@ -20,7 +42,7 @@ adjustPhi(phi, U, pcorr); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pcorrEqn ( diff --git a/applications/solvers/multiphase/interDyMFoam/pEqn.H b/applications/solvers/multiphase/interDyMFoam/pEqn.H index 2af289a76f31beb1654acfde23592bb299346f1c..afefb0a5f091b8131962713a5561cadcbaed2dec 100644 --- a/applications/solvers/multiphase/interDyMFoam/pEqn.H +++ b/applications/solvers/multiphase/interDyMFoam/pEqn.H @@ -18,7 +18,7 @@ + fvc::interpolate(rho)*(g & mesh.Sf()) )*rAUf; - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/interFoam/correctPhi.H b/applications/solvers/multiphase/interFoam/correctPhi.H index 0274b7e9ed8dc75b372db31efa743722a7dafc56..a41332ce9bdd6811eaaa1342eedc02defb1c1d1f 100644 --- a/applications/solvers/multiphase/interFoam/correctPhi.H +++ b/applications/solvers/multiphase/interFoam/correctPhi.H @@ -34,7 +34,7 @@ adjustPhi(phi, U, pcorr); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pcorrEqn ( diff --git a/applications/solvers/multiphase/interFoam/pEqn.H b/applications/solvers/multiphase/interFoam/pEqn.H index 7aa172b858473b0f5e5c0934e5690233ef60755a..7473848c62df1a1be80e281ff8090c1f4370d2df 100644 --- a/applications/solvers/multiphase/interFoam/pEqn.H +++ b/applications/solvers/multiphase/interFoam/pEqn.H @@ -19,7 +19,7 @@ + fvc::interpolate(rho)*(g & mesh.Sf()) )*rUAf; - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H b/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H index 17377302f0ecd97c2ee04e98cea8bcfc88ab4921..2547dac96630aa59a6b11dc00230f5f13599e715 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H @@ -34,7 +34,7 @@ adjustPhi(phi, U, pcorr); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pcorrEqn ( diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H b/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H index 3c164cc574311612e838abda97310fd3959e9e72..519a0b9f65322945855382770f716f991b019803 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H @@ -23,7 +23,7 @@ const volScalarField& vDotcP = vDotP[0](); const volScalarField& vDotvP = vDotP[1](); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseMixture/multiphaseMixture.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseMixture/multiphaseMixture.C index 6d32abd9c72689e30301a3e5105014d5beacd9de..0e1252bea795d8119429a9019dc248984ddb2c62 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseMixture/multiphaseMixture.C +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseMixture/multiphaseMixture.C @@ -125,7 +125,7 @@ Foam::tmp<Foam::volScalarField> Foam::multiphaseMixture::rho() const tmp<volScalarField> trho = iter()*iter().rho(); - for(++iter; iter != phases_.end(); ++iter) + for (++iter; iter != phases_.end(); ++iter) { trho() += iter()*iter().rho(); } @@ -140,7 +140,7 @@ Foam::tmp<Foam::volScalarField> Foam::multiphaseMixture::mu() const tmp<volScalarField> tmu = iter()*iter().rho()*iter().nu(); - for(++iter; iter != phases_.end(); ++iter) + for (++iter; iter != phases_.end(); ++iter) { tmu() += iter()*iter().rho()*iter().nu(); } @@ -156,7 +156,7 @@ Foam::tmp<Foam::surfaceScalarField> Foam::multiphaseMixture::muf() const tmp<surfaceScalarField> tmuf = fvc::interpolate(iter())*iter().rho()*fvc::interpolate(iter().nu()); - for(++iter; iter != phases_.end(); ++iter) + for (++iter; iter != phases_.end(); ++iter) { tmuf() += fvc::interpolate(iter())*iter().rho()*fvc::interpolate(iter().nu()); @@ -210,7 +210,7 @@ Foam::multiphaseMixture::surfaceTensionForce() const PtrDictionary<phase>::const_iterator iter2 = iter1; ++iter2; - for(; iter2 != phases_.end(); ++iter2) + for (; iter2 != phases_.end(); ++iter2) { const phase& alpha2 = iter2(); @@ -489,7 +489,7 @@ void Foam::multiphaseMixture::solveAlphas if (cycleAlpha) { PtrDictionary<phase>::iterator refPhaseIter = phases_.begin(); - for(label i=0; i<nSolves%phases_.size(); i++) + for (label i=0; i<nSolves%phases_.size(); i++) { ++refPhaseIter; } diff --git a/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H b/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H index 4bec77f950d54fadbefe8507abe3ed8699476c54..7e9f30c01c01b1091c5e2a02e0af88718e5f1a48 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H +++ b/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H @@ -18,7 +18,7 @@ + fvc::interpolate(rho)*(g & mesh.Sf()) )*rUAf; - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/settlingFoam/pEqn.H b/applications/solvers/multiphase/settlingFoam/pEqn.H index b4fc05b32ab56f04646427310478e9cc92429b11..77bb0f45924a76e91afb6a146011adfe10abaafb 100644 --- a/applications/solvers/multiphase/settlingFoam/pEqn.H +++ b/applications/solvers/multiphase/settlingFoam/pEqn.H @@ -17,7 +17,7 @@ phi = surfaceScalarField phiU("phiU", phi); phi += fvc::interpolate(rho)*(g & mesh.Sf())*rUAf; -for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) +for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H b/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H index 7ba3cdba8a6a2badce20af6292008e62487f23b7..f1e07558cb36728e6310b4808ff3b2476455548a 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H @@ -13,7 +13,7 @@ phi = phiU + fvc::interpolate(rho)*(g & mesh.Sf())*rUAf; - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H b/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H index e422fe845b67041fb3277271559232271ecf2716..8a1269058106f9edd37a2a4124c68f6410c95021 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/createFields.H @@ -190,7 +190,7 @@ } } - Info << "dragPhase is " << dragPhase << endl; + Info<< "dragPhase is " << dragPhase << endl; kineticTheoryModel kineticTheory ( phasea, diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowErgunWenYu/GidaspowErgunWenYu.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowErgunWenYu/GidaspowErgunWenYu.C index 0576f4694e583f8ba7890b051a821d1ec5a55192..7d6e41bf4cbf2ccfab0a1b14d06381d17e33aa7a 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowErgunWenYu/GidaspowErgunWenYu.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowErgunWenYu/GidaspowErgunWenYu.C @@ -78,12 +78,12 @@ Foam::tmp<Foam::volScalarField> Foam::GidaspowErgunWenYu::K forAll(Re, celli) { - if(Re[celli] > 1000.0) + if (Re[celli] > 1000.0) { Cds[celli] = 0.44; } } - + // Wen and Yu (1966) tmp<volScalarField> tKWenYu = 0.75*Cds*phaseb_.rho()*Ur*bp/phasea_.d(); volScalarField& KWenYu = tKWenYu(); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowSchillerNaumann/GidaspowSchillerNaumann.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowSchillerNaumann/GidaspowSchillerNaumann.C index 256d0861c036b13099ac2e9c922e0382e8381955..1be08abd3a69fb662da0d164d7dd446f347295cb 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowSchillerNaumann/GidaspowSchillerNaumann.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/GidaspowSchillerNaumann/GidaspowSchillerNaumann.C @@ -77,7 +77,7 @@ Foam::tmp<Foam::volScalarField> Foam::GidaspowSchillerNaumann::K forAll(Re, celli) { - if(Re[celli] > 1000.0) + if (Re[celli] > 1000.0) { Cds[celli] = 0.44; } diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/SchillerNaumann/SchillerNaumann.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/SchillerNaumann/SchillerNaumann.C index 707c269c24d051cb66047a16b473b5394814c2e2..59e7bed10e0ec4012de36c3f07d8f09b1b38334f 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/SchillerNaumann/SchillerNaumann.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/SchillerNaumann/SchillerNaumann.C @@ -74,7 +74,7 @@ Foam::tmp<Foam::volScalarField> Foam::SchillerNaumann::K forAll(Re, celli) { - if(Re[celli] > 1000.0) + if (Re[celli] > 1000.0) { Cds[celli] = 0.44; } diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/WenYu/WenYu.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/WenYu/WenYu.C index 76465069333b86295590a3e9d1af7fe5a091bc5b..febe1d11f09b1b843b741647651d35dde1366662 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/WenYu/WenYu.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/WenYu/WenYu.C @@ -77,7 +77,7 @@ Foam::tmp<Foam::volScalarField> Foam::WenYu::K forAll(Re, celli) { - if(Re[celli] > 1000.0) + if (Re[celli] > 1000.0) { Cds[celli] = 0.44; } diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/dragModel/newDragModel.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/dragModel/newDragModel.C index 582fa4cdd352671c1c1b4cfabc87c8b3ec633509..8fb79ad403d8c107202b8b8f0f68df4719e2539e 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/dragModel/newDragModel.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/dragModel/newDragModel.C @@ -41,7 +41,7 @@ Foam::autoPtr<Foam::dragModel> Foam::dragModel::New interfaceDict.lookup("dragModel" + phasea.name()) ); - Info << "Selecting dragModel for phase " + Info<< "Selecting dragModel for phase " << phasea.name() << ": " << dragModelType << endl; @@ -57,7 +57,7 @@ Foam::autoPtr<Foam::dragModel> Foam::dragModel::New << dragModelType << ", constructor not in hash table" << endl << endl << " Valid dragModel types are : " << endl; - Info << dictionaryConstructorTablePtr_->sortedToc() << abort(FatalError); + Info<< dictionaryConstructorTablePtr_->sortedToc() << abort(FatalError); } return cstrIter()(interfaceDict, alpha, phasea, phaseb); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H b/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H index ad48745519b6c530920f5e73da1ebe681c4ff843..57a25a299d3eb84cf4ac078a8aa69cefbfa9fcf5 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/pEqn.H @@ -47,7 +47,7 @@ surfaceScalarField Dp("(rho*(1|A(U)))", alphaf*rUaAf/rhoa + betaf*rUbAf/rhob); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/applications/test/Dictionary/DictionaryTest.C b/applications/test/Dictionary/DictionaryTest.C index 0af4dab6612e97fc340d434a29246d24f3e08a57..0f09f4f4a655d1c6720c5369204d671d77ba5c32 100644 --- a/applications/test/Dictionary/DictionaryTest.C +++ b/applications/test/Dictionary/DictionaryTest.C @@ -84,7 +84,7 @@ public: ~Scalar() { - Info <<"delete Scalar: " << data_ << endl; + Info<<"delete Scalar: " << data_ << endl; } friend Ostream& operator<<(Ostream& os, const Scalar& val) @@ -169,7 +169,7 @@ int main(int argc, char *argv[]) { Info<< " = " << iter() << endl; } - + PtrDictionary<Scalar> scalarDict2; for (int i = 8; i<15; i++) { @@ -186,22 +186,22 @@ int main(int argc, char *argv[]) { Info<< "elem = " << *iter << endl; } - + scalarDict.transfer(scalarDict2); - + Scalar* p = scalarDict.lookupPtr("ent8"); - + // This does not (yet) work // Scalar* q = scalarDict.remove("ent10"); if (p) { - Info << "found: " << *p << endl; + Info<< "found: " << *p << endl; } else { - Info << "no p: " << endl; + Info<< "no p: " << endl; } scalarDict.clear(); diff --git a/applications/test/DimensionedField/DimensionedFieldTest.C b/applications/test/DimensionedField/DimensionedFieldTest.C deleted file mode 100644 index bc1f875dbd164756f8355fe879b1042178e2bc35..0000000000000000000000000000000000000000 --- a/applications/test/DimensionedField/DimensionedFieldTest.C +++ /dev/null @@ -1,133 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "argList.H" -#include "Time.H" -#include "DimensionedFields.H" -#include "DimensionedSphericalTensorField.H" -#include "vector.H" -#include "tensor.H" -#include "GeoMesh.H" - -using namespace Foam; - -namespace Foam -{ - -class vMesh -{ - -public: - - vMesh() - {} - - label size() const - { - return 10; - } -}; - -}; - -template<> -const word Foam::DimensionedField<scalar, GeoMesh<vMesh> >::typeName -( - "dimenionedScalarField" -); - -template<> -const word Foam::DimensionedField<vector, GeoMesh<vMesh> >::typeName -( - "dimenionedVectorField" -); - -template<> -const word Foam::DimensionedField<tensor, GeoMesh<vMesh> >::typeName -( - "dimenionedTensorField" -); - -template<> -const word Foam::DimensionedField<sphericalTensor, GeoMesh<vMesh> >::typeName -( - "dimenionedSphericalTensorField" -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Main program: - -int main(int argc, char *argv[]) -{ - -# include "setRootCase.H" -# include "createTime.H" - - vMesh vm; - - DimensionedField<scalar, GeoMesh<vMesh> > dsf - ( - IOobject - ( - "dsf", - runTime.timeName(), - runTime, - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - vm - ); - - Info<< dsf << endl; - dsf += dsf; - dsf -= dimensionedScalar("5", dsf.dimensions(), 5.0); - Info<< dsf << endl; - - Info<< sqr(dsf + dsf) - sqr(dsf + dsf) << endl; - - DimensionedField<vector, GeoMesh<vMesh> > dvf - ( - IOobject - ( - "dvf", - runTime.timeName(), - runTime, - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - vm - ); - - Info<< (dvf ^ (dvf ^ dvf)) << endl; - - Info << "End\n" << endl; - - return 0; -} - - -// ************************************************************************* // diff --git a/applications/test/DimensionedField/Make/files b/applications/test/DimensionedField/Make/files deleted file mode 100644 index 02c479015e6823f48993ab50ddc77e0b433d2a7c..0000000000000000000000000000000000000000 --- a/applications/test/DimensionedField/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -DimensionedFieldTest.C - -EXE = $(FOAM_USER_APPBIN)/DimensionedFieldTest diff --git a/applications/test/DimensionedField/Make/options b/applications/test/DimensionedField/Make/options deleted file mode 100644 index 6a9e9810b3d5ce6684bdaf03143933480ff45e42..0000000000000000000000000000000000000000 --- a/applications/test/DimensionedField/Make/options +++ /dev/null @@ -1,2 +0,0 @@ -/* EXE_INC = -I$(LIB_SRC)/cfdTools/include */ -/* EXE_LIBS = -lfiniteVolume */ diff --git a/applications/test/HashSet/hashSetTest.C b/applications/test/HashSet/hashSetTest.C index 21e1276604518f9b9adf4905305ed091702ac48e..fd40e349990559c6f6d8b98a2b7cc94474d234aa 100644 --- a/applications/test/HashSet/hashSetTest.C +++ b/applications/test/HashSet/hashSetTest.C @@ -92,6 +92,8 @@ int main(int argc, char *argv[]) labelHashSet setD(1); setD.insert(11); setD.insert(100); + setD.insert(49); + setD.insert(36); setD.insert(2008); Info<< "setD : " << setD << endl; @@ -138,6 +140,17 @@ int main(int argc, char *argv[]) // this doesn't work (yet?) // setD[12] = true; + List<label> someLst(10); + forAll(someLst, elemI) + { + someLst[elemI] = elemI*elemI; + } + + label added = setD.set(someLst); + Info<< "added " << added << " from " << someLst.size() << endl; + Info<< "setD : " << setD << endl; + + return 0; } diff --git a/applications/test/HashTable3/hashTableTest3.C b/applications/test/HashTable3/hashTableTest3.C index 910e4f229052bc8c9305ea7b30d30a3907cbbfd0..6229e6a30438189b855022634f2fb9b38041e76c 100644 --- a/applications/test/HashTable3/hashTableTest3.C +++ b/applications/test/HashTable3/hashTableTest3.C @@ -33,7 +33,6 @@ Description #include "HashPtrTable.H" #include "Map.H" #include "StaticHashTable.H" -#include "HashTbl.H" #include "cpuTime.H" using namespace Foam; @@ -53,7 +52,7 @@ int main(int argc, char *argv[]) // Map<label> map(2 * nSize); // HashTable<label, label, Hash<label> > map(2 * nSize); // StaticHashTable<label, label, Hash<label> > map(2 * nSize); - HashTbl<label, label, Hash<label> > map(2 * nSize); + HashTable<label, label, Hash<label> > map(2 * nSize); Info<< "Constructed map of size: " << nSize << " (size " << map.size() << " capacity " << map.capacity() << ") " diff --git a/applications/test/IndirectList/IndirectListTest.C b/applications/test/IndirectList/IndirectListTest.C index 365c58a383014b277a43c9dd827e4b625944e853..b8abff977391a3b60d64fa4a10fb03e10325fd24 100644 --- a/applications/test/IndirectList/IndirectListTest.C +++ b/applications/test/IndirectList/IndirectListTest.C @@ -72,7 +72,7 @@ int main(int argc, char *argv[]) << "list: " << idl() << nl << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/LduMatrix/LduMatrixTest.C b/applications/test/LduMatrix/LduMatrixTest.C index 91a6dfb68d2dbf41dff4b12ef34cc2d7e9f8fc6e..bc244ff525a0752058a47166c03b4a1daf294f0f 100644 --- a/applications/test/LduMatrix/LduMatrixTest.C +++ b/applications/test/LduMatrix/LduMatrixTest.C @@ -155,7 +155,7 @@ int main(int argc, char *argv[]) Info<< psi << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/LduMatrix/LduMatrixTest2.C b/applications/test/LduMatrix/LduMatrixTest2.C index 02db866ae51df9da8ed8266c25dc70d1c5b77e37..5e47df1daf47167f6e2be6d0ea34c4fe7fa131a8 100644 --- a/applications/test/LduMatrix/LduMatrixTest2.C +++ b/applications/test/LduMatrix/LduMatrixTest2.C @@ -155,7 +155,7 @@ int main(int argc, char *argv[]) Info<< psi << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/Map/MapTest.C b/applications/test/Map/MapTest.C index 7fb05e76a517146a116e45c6cd207e3a19863507..117f4337b6f08db8df8be6a079ff4154173812b9 100644 --- a/applications/test/Map/MapTest.C +++ b/applications/test/Map/MapTest.C @@ -53,15 +53,15 @@ int main(int argc, char *argv[]) if (bananaIter == banana.end()) { - Info << "not found" << endl; + Info<< "not found" << endl; } else { - Info << "5 is " << bananaIter() << endl; + Info<< "5 is " << bananaIter() << endl; } // Same with STL - Info << "Same with STL" << endl; + Info<< "Same with STL" << endl; std::map<label, bool> STLbanana; STLbanana[5] = true; @@ -69,11 +69,11 @@ int main(int argc, char *argv[]) if (STLbananaIter == STLbanana.end()) { - Info << "not found" << endl; + Info<< "not found" << endl; } else { - Info << "5 is " << STLbananaIter->second << endl; + Info<< "5 is " << STLbananaIter->second << endl; } diff --git a/applications/test/Matrix/MatrixTest.C b/applications/test/Matrix/MatrixTest.C index 24bcc682575ca073ac911baa6a2af458fd3a7329..fabbb5c5f9394eaa9e5c6e89dde31b98e21cfd2c 100644 --- a/applications/test/Matrix/MatrixTest.C +++ b/applications/test/Matrix/MatrixTest.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ -#include "Matrix.H" +#include "SquareMatrix.H" #include "vector.H" using namespace Foam; @@ -34,7 +34,7 @@ using namespace Foam; int main(int argc, char *argv[]) { - Matrix<scalar> hmm(3, 3); + SquareMatrix<scalar> hmm(3); hmm[0][0] = -3.0; hmm[0][1] = 10.0; @@ -46,32 +46,32 @@ int main(int argc, char *argv[]) hmm[2][1] = 6.0; hmm[2][2] = 1.0; - Info<< hmm << endl << hmm - 2.0*(-hmm) << endl; + //Info<< hmm << endl << hmm - 2.0*(-hmm) << endl; Info<< max(hmm) << endl; Info<< min(hmm) << endl; - Matrix<scalar> hmm2(3, 3, 1.0); + SquareMatrix<scalar> hmm2(3, 1.0); hmm = hmm2; Info<< hmm << endl; - Matrix<scalar> hmm3(Sin); + SquareMatrix<scalar> hmm3(Sin); Info<< hmm3 << endl; - Matrix<scalar> hmm4; + SquareMatrix<scalar> hmm4; hmm4 = hmm2; Info<< hmm4 << endl; - Matrix<scalar> hmm5; + SquareMatrix<scalar> hmm5; hmm4 = hmm5; Info<< hmm5 << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/NamedEnum/namedEnumTest.C b/applications/test/NamedEnum/namedEnumTest.C index 918e3b63b2a5eda4e5d91d85c32f65836f67cddd..728d54ecb819199733ed740296fe65234682395e 100644 --- a/applications/test/NamedEnum/namedEnumTest.C +++ b/applications/test/NamedEnum/namedEnumTest.C @@ -68,7 +68,7 @@ int main(int argc, char *argv[]) namedEnumTest::options hmm(namedEnumTest::namedEnum.read(Sin)); Info<< namedEnumTest::namedEnum[hmm] << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/ODETest/ODETest.C b/applications/test/ODETest/ODETest.C index dfc7a663bbddcf2893c2cedd0dd91c1c17d0c35a..acb444a0a52828e54d233ac88f83d398889cc9b3 100644 --- a/applications/test/ODETest/ODETest.C +++ b/applications/test/ODETest/ODETest.C @@ -69,7 +69,7 @@ public: const scalar x, const scalarField& y, scalarField& dfdx, - Matrix<scalar>& dfdy + scalarSquareMatrix& dfdy ) const { dfdx[0] = 0.0; @@ -167,7 +167,7 @@ int main(int argc, char *argv[]) Info<< nl << "Analytical: y(2.0) = " << yEnd << endl; Info << "Numerical: y(2.0) = " << y << ", hEst = " << hEst << endl; - Info << "\nEnd\n" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/test/POSIX/POSIXTest.C b/applications/test/POSIX/POSIXTest.C index 86679c2c9076368603a3e19abb03bd795769c2db..08052ecba9b1ea19afca3a2880616576cd579a06 100644 --- a/applications/test/POSIX/POSIXTest.C +++ b/applications/test/POSIX/POSIXTest.C @@ -37,7 +37,7 @@ int main(int argc, char *argv[]) { rmDir("hmm"); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/PackedList2/PackedListTest2.C b/applications/test/PackedList2/PackedListTest2.C index ef027fee2e467666613530968ffd35bd338bc69f..bb61f6e308aa82dc5fe8489fd12c713346acff6f 100644 --- a/applications/test/PackedList2/PackedListTest2.C +++ b/applications/test/PackedList2/PackedListTest2.C @@ -135,7 +135,7 @@ int main(int argc, char *argv[]) sum = 0; for (label iter = 0; iter < nIters; ++iter) { - for(unsigned int i = 0; i < stlVector.size(); i++) + for (unsigned int i = 0; i < stlVector.size(); i++) { sum += stlVector[i]; } @@ -386,7 +386,7 @@ int main(int argc, char *argv[]) << " s" << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/PtrList/PtrListTest.C b/applications/test/PtrList/PtrListTest.C index 5413a662b889fed52c2c8b6bc218a3315eee3446..61f0985ea3926ac86631e0554373873b304b9c63 100644 --- a/applications/test/PtrList/PtrListTest.C +++ b/applications/test/PtrList/PtrListTest.C @@ -54,9 +54,11 @@ public: ~Scalar() { - Info <<"delete Scalar: " << data_ << endl; + Info<<"delete Scalar: " << data_ << endl; } + autoPtr<Scalar> clone() const; + friend Ostream& operator<<(Ostream& os, const Scalar& val) { os << val.data_; diff --git a/applications/test/Tuple2/Tuple2Test.C b/applications/test/Tuple2/Tuple2Test.C index d770b4f83910d69003ca509e5e166b4e9449a8f0..b535f6a45c749fa86b6ed96945578a26df08d03c 100644 --- a/applications/test/Tuple2/Tuple2Test.C +++ b/applications/test/Tuple2/Tuple2Test.C @@ -44,7 +44,7 @@ int main() Info<< t2 << " " << t2.first() << " " << t2.second() << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/UIndirectListTest/UIndirectListTest.C b/applications/test/UIndirectListTest/UIndirectListTest.C index 6902f47eeab4e2ddf1c744606f5cc1a1387a78a7..120217b673b95506e67f0ae13856d4b9c0cf8adf 100644 --- a/applications/test/UIndirectListTest/UIndirectListTest.C +++ b/applications/test/UIndirectListTest/UIndirectListTest.C @@ -84,11 +84,11 @@ int main(int argc, char *argv[]) // test List operations - List<double> flatList = UIndirectList<double>(completeList, addresses); - Info<< "List assigned from UIndirectList: " << flatList << endl; + List<double> flatList(UIndirectList<double>(completeList, addresses)); + Info<< "List constructed from UIndirectList: " << flatList << endl; - List<double> flatList2(UIndirectList<double>(completeList, addresses)); - Info<< "List constructed from UIndirectList: " << flatList2 << endl; + flatList = UIndirectList<double>(completeList, addresses); + Info<< "List assigned from UIndirectList: " << flatList << endl; flatList.append(UIndirectList<double>(completeList, addresses)); Info<< "List::append(UIndirectList): " << flatList << endl; @@ -100,7 +100,7 @@ int main(int argc, char *argv[]) dynList.append(UIndirectList<double>(completeList, addresses)); Info<< "DynamicList::append(UIndirectList): " << dynList << endl; - Info << "\nEnd\n" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/test/callback/callbackTest.C b/applications/test/callback/callbackTest.C index dc344246783ae01f7800d40f9ce5bf735e58c3a7..f9d35dd02390552bf5ad466bdc83f906a3ca06f4 100644 --- a/applications/test/callback/callbackTest.C +++ b/applications/test/callback/callbackTest.C @@ -118,7 +118,7 @@ int main(int argc, char *argv[]) cbr.testCallbackFunction(); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/dimensionedType/dimensionedTypeTest.C b/applications/test/dimensionedType/dimensionedTypeTest.C index d87391ab6d83e7e779e5af90b064ea7073dfab5a..400d9a5d2124a0df262e904013a7ce224a5f9499 100644 --- a/applications/test/dimensionedType/dimensionedTypeTest.C +++ b/applications/test/dimensionedType/dimensionedTypeTest.C @@ -42,7 +42,7 @@ int main(int argc, char *argv[]) Info<< ds*dt << " " << dt*ds << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/extendedStencil/testExtendedStencil.C b/applications/test/extendedStencil/testExtendedStencil.C index 876576b29eab8666ae74c85e9801fb00c7f22324..e8cde9051bc369cf5830dd34da1da14db25ccc9e 100644 --- a/applications/test/extendedStencil/testExtendedStencil.C +++ b/applications/test/extendedStencil/testExtendedStencil.C @@ -188,11 +188,11 @@ int main(int argc, char *argv[]) // ( // mesh // ); -// +// // Info<< "cellFaceCell:" << endl; // writeStencilStats(addressing.stencil()); -// -// +// +// // //// Do some interpolation. // //{ // // const labelListList& stencil = addressing.stencil(); @@ -226,7 +226,7 @@ int main(int argc, char *argv[]) // mesh.C(), // stencilPoints // ); -// +// // forAll(stencilPoints, faceI) // { // if (stencilPoints[faceI].size() >= 15) @@ -443,10 +443,10 @@ int main(int argc, char *argv[]) ( mesh ); - + Info<< "cellFaceCell:" << endl; writeStencilStats(addressing.stencil()); - + // Collect stencil face centres List<List<point> > stencilPoints(mesh.nCells()); addressing.collectData @@ -454,7 +454,7 @@ int main(int argc, char *argv[]) mesh.Cf(), stencilPoints ); - + forAll(stencilPoints, cellI) { writeStencilOBJ @@ -477,7 +477,7 @@ int main(int argc, char *argv[]) // vf, // stencilData // ); -// for(label faci = 0; faci < mesh.nInternalFaces(); faci++) +// for (label faci = 0; faci < mesh.nInternalFaces(); faci++) // { // const scalarList& stData = stencilData[faceI]; // const scalarList& stWeight = fit[faceI]; diff --git a/applications/test/fileName/fileNameTest.C b/applications/test/fileName/fileNameTest.C index c4791f6f385b208c6484ae05e89e72a455873ec7..81ebd5c255bd4dc1839b2d8200886b4b14d14e4f 100644 --- a/applications/test/fileName/fileNameTest.C +++ b/applications/test/fileName/fileNameTest.C @@ -108,8 +108,7 @@ int main() Info<< " badName(die) => " << findEtcFile("badName", true) << nl << endl; - Info<< "\nEnd" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/test/fileNameClean/fileNameCleanTest.C b/applications/test/fileNameClean/fileNameCleanTest.C index b41cc434ca0c51a070de7fceedb11065ffc25008..2d791439e99ae8bdd833217e7d52098191cbf53b 100644 --- a/applications/test/fileNameClean/fileNameCleanTest.C +++ b/applications/test/fileNameClean/fileNameCleanTest.C @@ -95,8 +95,7 @@ int main(int argc, char *argv[]) printCleaning(pathName); } - Info<< "\nEnd" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/test/liquid/liquidTest.C b/applications/test/liquid/liquidTest.C index 34837df39a36e0f2697fee15ce3401941a1ff3f0..fe32c13e2804f2f5863724203b6b67fe34884208 100644 --- a/applications/test/liquid/liquidTest.C +++ b/applications/test/liquid/liquidTest.C @@ -39,7 +39,7 @@ int main() Info<< fuel.rho(1e5, 300) << endl; Info<< fuel << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/mesh/meshTest.C b/applications/test/mesh/meshTest.C index 50419836759fd452f9a5dea4f9a5a64a1476b21b..91a003bc17d365d1e454e3b8c1bc09274232f3e5 100644 --- a/applications/test/mesh/meshTest.C +++ b/applications/test/mesh/meshTest.C @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) Info<< Cf << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/momentOfInertia/Make/files b/applications/test/momentOfInertia/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..89848e34fb5a5634c3e240da3200e132db8d5551 --- /dev/null +++ b/applications/test/momentOfInertia/Make/files @@ -0,0 +1,3 @@ +momentOfInertiaTest.C + +EXE = $(FOAM_USER_APPBIN)/momentOfInertiaTest diff --git a/applications/test/momentOfInertia/Make/options b/applications/test/momentOfInertia/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..54c035b8f55d183c1ad02bc372398feceaf31718 --- /dev/null +++ b/applications/test/momentOfInertia/Make/options @@ -0,0 +1,5 @@ +EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude + +EXE_LIBS = \ + -lmeshTools diff --git a/applications/test/momentOfInertia/momentOfInertiaTest.C b/applications/test/momentOfInertia/momentOfInertiaTest.C new file mode 100644 index 0000000000000000000000000000000000000000..b4ea06bba219daba6b9b2b5cc6f32e08e61f7007 --- /dev/null +++ b/applications/test/momentOfInertia/momentOfInertiaTest.C @@ -0,0 +1,112 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + momentOfInertiaTest + +Description + Calculates the inertia tensor and principal axes and moments of a + test face. + +\*---------------------------------------------------------------------------*/ + +#include "ListOps.H" +#include "face.H" +#include "OFstream.H" +#include "meshTools.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +using namespace Foam; + +int main(int argc, char *argv[]) +{ + label nPts = 6; + + pointField pts(nPts); + + pts[0] = point(4.495, 3.717, -4.112); + pts[1] = point(4.421, 3.932, -4.112); + pts[2] = point(4.379, 4.053, -4.112); + pts[3] = point(4.301, 4.026, -4.300); + pts[4] = point(4.294, 4.024, -4.317); + pts[5] = point(4.409, 3.687, -4.317); + + scalar density = 1.0; + + face f(identity(nPts)); + + point Cf = f.centre(pts); + + tensor J = tensor::zero; + + J = f.inertia(pts, Cf, density); + + vector eVal = eigenValues(J); + + tensor eVec = eigenVectors(J); + + Info<< nl << "Inertia tensor of test face " << J << nl + << "eigenValues (principal moments) " << eVal << nl + << "eigenVectors (principal axes) " << eVec + << endl; + + OFstream str("momentOfInertiaTest.obj"); + + Info<< nl << "Writing test face and scaled principal axes to " + << str.name() << endl; + + forAll(pts, ptI) + { + meshTools::writeOBJ(str, pts[ptI]); + } + + str << "l"; + + forAll(f, fI) + { + str << ' ' << fI + 1; + } + + str << " 1" << endl; + + scalar scale = mag(Cf - pts[f[0]])/eVal.component(findMin(eVal)); + + meshTools::writeOBJ(str, Cf); + meshTools::writeOBJ(str, Cf + scale*eVal.x()*eVec.x()); + meshTools::writeOBJ(str, Cf + scale*eVal.y()*eVec.y()); + meshTools::writeOBJ(str, Cf + scale*eVal.z()*eVec.z()); + + for (label i = nPts + 1; i < nPts + 4; i++) + { + str << "l " << nPts + 1 << ' ' << i + 1 << endl; + } + + Info<< nl << "End" << nl << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/test/pTraits/pTraitsTest.C b/applications/test/pTraits/pTraitsTest.C index 4fcdfce7198e991c6d2e56e482c972fbee5432d4..2697e6b73263e0145c280d258fb2adbd1a7e9659 100644 --- a/applications/test/pTraits/pTraitsTest.C +++ b/applications/test/pTraits/pTraitsTest.C @@ -38,7 +38,7 @@ int main() { Info<< pTraits<scalar>::typeName << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/parallel/parallelTest.C b/applications/test/parallel/parallelTest.C index 6120de31a51670a1d2f2e71ea77004fa45613e61..caf9e6fc8d9ec2fd8147e882528cc538e40b8dff 100644 --- a/applications/test/parallel/parallelTest.C +++ b/applications/test/parallel/parallelTest.C @@ -84,7 +84,7 @@ int main(int argc, char *argv[]) // Sync how many to send labelListList allNTrans(Pstream::nProcs()); allNTrans[Pstream::myProcNo()] = nSend; - combineReduce(allNTrans, mapDistribute::listEq()); + combineReduce(allNTrans, UPstream::listEq()); // Collect items to be sent labelListList sendMap(Pstream::nProcs()); @@ -161,7 +161,7 @@ int main(int argc, char *argv[]) toMaster << data; } - Perr<< "slave receiving from master " + Perr<< "slave receiving from master " << Pstream::masterNo() << endl; IPstream fromMaster(Pstream::blocking, Pstream::masterNo()); fromMaster >> data; diff --git a/applications/test/primitivePatch/testPrimitivePatch.C b/applications/test/primitivePatch/testPrimitivePatch.C index e19b7d0512ba0517975e2395a3d5c5da8bc1694b..cf24ab3435f7fe5be5d5dca5e3ec2ab45b36ae5e 100644 --- a/applications/test/primitivePatch/testPrimitivePatch.C +++ b/applications/test/primitivePatch/testPrimitivePatch.C @@ -137,7 +137,7 @@ void writeFaceEdges const labelList& myEdges = faceEdges[faceI]; forAll(myEdges, i) - { + { const edge& e = edges[myEdges[i]]; feStream<< "l " << e.start()+1 << ' ' << e.end()+1 << endl; @@ -172,7 +172,7 @@ void writeEdgeFaces const labelList& myFaces = edgeFaces[edgeI]; forAll(myFaces, i) - { + { efStream<< "l " << myFaces[0]+1 << ' ' << myFaces[i]+1 << endl; } } @@ -249,7 +249,7 @@ int main(int argc, char *argv[]) writeFaceFaces(localPoints, localFaces, faceFaces); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/readCHEMKINIII/readCHEMKINIII.C b/applications/test/readCHEMKINIII/readCHEMKINIII.C index a028e9fd2bd1409adcc9954519712c746d0c5510..10514de3fe13402a27efa5e8d67b0233542b8469 100644 --- a/applications/test/readCHEMKINIII/readCHEMKINIII.C +++ b/applications/test/readCHEMKINIII/readCHEMKINIII.C @@ -57,7 +57,7 @@ int main(int argc, char *argv[]) //Info<< ck.specieThermo() << endl; //Info<< ck.reactions() << endl; - PtrList<chemkinReader::reaction> reactions = ck.reactions(); + const SLPtrList<gasReaction>& reactions = ck.reactions(); { OFstream reactionStream("reactions"); @@ -70,17 +70,17 @@ int main(int argc, char *argv[]) label nReactions(readLabel(reactionStream)); reactionStream.readBeginList(args.executable().c_str()); - PtrList<chemkinReader::reaction> testReactions(nReactions); + PtrList<gasReaction> testReactions(nReactions); forAll (testReactions, i) { testReactions.set ( i, - chemkinReader::reaction::New + gasReaction::New ( ck.species(), - ck.specieThermo(), + ck.speciesThermo(), reactionStream ) ); @@ -91,7 +91,7 @@ int main(int argc, char *argv[]) Info<< testReactions << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/router/processorRouter.C b/applications/test/router/processorRouter.C index e94025ff2b6ad0616022767d5343aafd3d62e0fd..5f68822cf30a55a476a3d8a5af6834ce30a1e1ce 100644 --- a/applications/test/router/processorRouter.C +++ b/applications/test/router/processorRouter.C @@ -71,7 +71,7 @@ labelList procNeighbours(const polyMesh& mesh) { const polyPatch& patch = mesh.boundaryMesh()[patchI]; - const processorPolyPatch& procPatch = + const processorPolyPatch& procPatch = refCast<const processorPolyPatch>(patch); label procId = procPatch.neighbProcNo() - Pstream::firstSlave() + 1; @@ -96,7 +96,7 @@ point meshCentre(const polyMesh& mesh) int main(int argc, char *argv[]) { -# include "setRootCase.H" +# include "setRootCase.H" # include "createTime.H" # include "createMesh.H" @@ -230,7 +230,7 @@ int main(int argc, char *argv[]) // Dump route as lines. labelList route(cellRouter.getRoute(-(pathI + 1))); - for(label elemI = 1; elemI < route.size(); elemI++) + for (label elemI = 1; elemI < route.size(); elemI++) { objFile << "l " << route[elemI-1]+1 << ' ' diff --git a/applications/test/router/router.C b/applications/test/router/router.C index 1af001a81f97174474d242e37206e5255038f4e8..a4747396964d397a50b4458d639f9f8385bcaeb1 100644 --- a/applications/test/router/router.C +++ b/applications/test/router/router.C @@ -38,7 +38,7 @@ Foam::label Foam::router::count(const label weight) const { cnt += weights_[nodeI]; } - + return cnt; } @@ -315,7 +315,7 @@ bool Foam::router::route(const labelList& path, const label pathValue) setWeights(0, path[0]); // Check if all endPoints can be reached - for(label leafI = 1; leafI < path.size(); leafI++) + for (label leafI = 1; leafI < path.size(); leafI++) { if (weights_[path[leafI]] == labelMax) { @@ -329,7 +329,7 @@ bool Foam::router::route(const labelList& path, const label pathValue) } // Search back from all endpoints to start and fix weights - for(label leafI = 1; leafI < path.size(); leafI++) + for (label leafI = 1; leafI < path.size(); leafI++) { fixWeights ( @@ -370,7 +370,7 @@ bool Foam::router::route(const labelList& path, const label pathValue) { weights_[nodeI] = 0; } - } + } return true; } diff --git a/applications/test/simpleMatrix/simpleMatrixTest.C b/applications/test/simpleMatrix/simpleMatrixTest.C index e26c4ea4a7502af3c2e613b8fbbb5f227348533d..709eb819f31f0ec4ff7dc39e06f9c763438897db 100644 --- a/applications/test/simpleMatrix/simpleMatrixTest.C +++ b/applications/test/simpleMatrix/simpleMatrixTest.C @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) Info<< hmm.LUsolve() << endl; Info<< hmm << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/test/slicedField/slicedFieldTest.C b/applications/test/slicedField/slicedFieldTest.C index a82b4ac71298032c02073b84fc4f86c6eee13b23..dd8da2522389c2507158c15e9652ad444827b590 100644 --- a/applications/test/slicedField/slicedFieldTest.C +++ b/applications/test/slicedField/slicedFieldTest.C @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Application - volField + slicedFieldTest Description @@ -32,16 +32,16 @@ Description #include "fvCFD.H" #include "SlicedGeometricField.H" #include "slicedFvPatchFields.H" +#include "slicedSurfaceFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" - -# include "createTime.H" -# include "createMesh.H" + #include "createTime.H" + #include "createMesh.H" Info<< "Reading field p\n" << endl; volScalarField p @@ -91,7 +91,7 @@ int main(int argc, char *argv[]) Info<< C << endl; Info<< (C & U) << endl; - SlicedGeometricField<vector, fvPatchField, slicedFvPatchField, surfaceMesh> + SlicedGeometricField<vector, fvsPatchField, slicedFvsPatchField, surfaceMesh> Sf ( IOobject @@ -105,7 +105,7 @@ int main(int argc, char *argv[]) mesh.faceAreas() ); - Info<< Sf << endl; + //Info<< Sf << endl; return 0; } diff --git a/applications/test/string/stringTest.C b/applications/test/string/stringTest.C index 2ed59bf88f7b4ab293a37bfe71b8251d51e38aea..7c74de93ed2a2d9fbbc7b700440d8ffd445e8321 100644 --- a/applications/test/string/stringTest.C +++ b/applications/test/string/stringTest.C @@ -102,8 +102,7 @@ int main(int argc, char *argv[]) Info<< "Ostream<< >" << s2 << "<\n"; Info<< "hash:" << hex << string::hash()(s2) << endl; - Info << "End\n" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/test/testPointEdgeWave/testPointEdgeWave.C b/applications/test/testPointEdgeWave/testPointEdgeWave.C index 3a1ff900eb8c561517579165f7c426446d831f12..10856cbead9564fcf9ba5601a66eab5aab87913d 100644 --- a/applications/test/testPointEdgeWave/testPointEdgeWave.C +++ b/applications/test/testPointEdgeWave/testPointEdgeWave.C @@ -48,13 +48,11 @@ int main(int argc, char *argv[]) # include "createTime.H" # include "createPolyMesh.H" - pointMesh pMesh(mesh); - const polyBoundaryMesh& patches = mesh.boundaryMesh(); // Get name of patch word patchName(args.additionalArgs()[0]); - + // Find the label in patches by name. label patchI = patches.findPatchID(patchName); @@ -99,7 +97,7 @@ int main(int argc, char *argv[]) PointEdgeWave<pointEdgePoint> wallCalc ( - pMesh, + mesh, wallPoints, wallInfo, @@ -119,7 +117,7 @@ int main(int argc, char *argv[]) IOobject::NO_READ, IOobject::AUTO_WRITE ), - pMesh, + pointMesh::New(mesh), dimensionedScalar("wallDist", dimLength, 0.0) ); @@ -133,8 +131,7 @@ int main(int argc, char *argv[]) psf.write(); - Info << nl << "End" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/test/volField/volFieldTest.C b/applications/test/volField/volFieldTest.C index 3b7dafef8e4fd17d291874d5bce44d90cc297295..f910c22544415e9974e1d74d497d3f597a6ae4e9 100644 --- a/applications/test/volField/volFieldTest.C +++ b/applications/test/volField/volFieldTest.C @@ -34,11 +34,10 @@ Application int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" - -# include "createTime.H" -# include "createMesh.H" + #include "createTime.H" + #include "createMesh.H" Info<< "Reading field p\n" << endl; volScalarField p @@ -70,12 +69,9 @@ int main(int argc, char *argv[]) mesh ); -# include "createPhi.H" - - //Info<< transform(dimensionedTensor("I", dimless, 0.1*I), U) << endl; - + #include "createPhi.H" - GeometricField<sphericalTensor, fvPatchField, volMesh> st + GeometricField<symmTensor, fvPatchField, volMesh> st ( IOobject ( @@ -86,8 +82,8 @@ int main(int argc, char *argv[]) IOobject::NO_WRITE ), mesh, - dimensioned<sphericalTensor>("st", dimless, sphericalTensor::I), - zeroGradientFvPatchSphericalTensorField::typeName + dimensioned<symmTensor>("st", dimless, symmTensor::one), + zeroGradientFvPatchSymmTensorField::typeName ); //Info<< fvc::div(st) << endl; diff --git a/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C b/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C index 9fb3a646d651fd9e49bda17cc88cb4217d295915..76f67f6cdbad9c030a45c5f8738f7aa961e0acdb 100644 --- a/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C +++ b/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C @@ -98,10 +98,10 @@ int main(int argc, char *argv[]) if (THeader.headerOk() && Uheader.headerOk()) { - Info << "Reading T" << endl; + Info<< "Reading T" << endl; volScalarField T(THeader, mesh); - Info << "Reading U" << endl; + Info<< "Reading U" << endl; volVectorField U(Uheader, mesh); # include "createPhi.H" diff --git a/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C b/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C index c236b76eb4077d3ac58404f393fb49bc12c0f931..df1069f0bfc908bc4b964e3bc0b26c2418f7ebf7 100644 --- a/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C +++ b/applications/utilities/errorEstimation/icoErrorEstimate/icoErrorEstimate.C @@ -93,10 +93,10 @@ int main(int argc, char *argv[]) if (pHeader.headerOk() && Uheader.headerOk()) { - Info << "Reading p" << endl; + Info<< "Reading p" << endl; volScalarField p(pHeader, mesh); - Info << "Reading U" << endl; + Info<< "Reading U" << endl; volVectorField U(Uheader, mesh); # include "createPhi.H" diff --git a/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C b/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C index 67551e1eeccc631b48d02a815307f9f52e309748..edfe1a3b598a20d42fe61455927bd0b23e47addb 100644 --- a/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C +++ b/applications/utilities/errorEstimation/icoMomentError/icoMomentError.C @@ -94,10 +94,10 @@ int main(int argc, char *argv[]) if (pHeader.headerOk() && Uheader.headerOk()) { - Info << "Reading p" << endl; + Info<< "Reading p" << endl; volScalarField p(pHeader, mesh); - Info << "Reading U" << endl; + Info<< "Reading U" << endl; volVectorField U(Uheader, mesh); # include "createPhi.H" diff --git a/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C b/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C index f1767e75b01e6f2aa025bf39be577c686f2effa4..145f03f737cbcd9393634de9c19f21e2070986cb 100644 --- a/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C +++ b/applications/utilities/errorEstimation/momentScalarError/momentScalarError.C @@ -99,10 +99,10 @@ int main(int argc, char *argv[]) if (THeader.headerOk() && Uheader.headerOk()) { - Info << "Reading T" << endl; + Info<< "Reading T" << endl; volScalarField T(THeader, mesh); - Info << "Reading U" << endl; + Info<< "Reading U" << endl; volVectorField U(Uheader, mesh); # include "createPhi.H" diff --git a/applications/utilities/mesh/advanced/autoRefineMesh/autoRefineMesh.C b/applications/utilities/mesh/advanced/autoRefineMesh/autoRefineMesh.C index 82e6f2c4c912863c9c8948bfbe8dcb47813a0b63..858ceb2fdb9d3659271118976892cb2d35b2db7a 100644 --- a/applications/utilities/mesh/advanced/autoRefineMesh/autoRefineMesh.C +++ b/applications/utilities/mesh/advanced/autoRefineMesh/autoRefineMesh.C @@ -1015,7 +1015,7 @@ int main(int argc, char *argv[]) } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C index 51ae42fb25c6f7f6e22ef6886536396f4d37934e..bc0a575207d8a8f9f28e721f6bc42f80f800d497 100644 --- a/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C +++ b/applications/utilities/mesh/advanced/collapseEdges/collapseEdges.C @@ -596,7 +596,7 @@ int main(int argc, char *argv[]) mesh.write(); } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C index 5e240daff160087d0548267752782b6143839953..5fc2803c8d8ca22e66797eef75c466d4ad8d7b29 100644 --- a/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C +++ b/applications/utilities/mesh/advanced/combinePatchFaces/combinePatchFaces.C @@ -510,7 +510,7 @@ int main(int argc, char *argv[]) Info<< "Mesh unchanged." << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/modifyMesh/Tuple.H b/applications/utilities/mesh/advanced/modifyMesh/Tuple.H deleted file mode 100644 index 5660e085dc3850539943acf997569c45a222ad07..0000000000000000000000000000000000000000 --- a/applications/utilities/mesh/advanced/modifyMesh/Tuple.H +++ /dev/null @@ -1,215 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - Foam::Tuple - -Description - A 2 Tuple. Differs from Tuple in that the two elements can be different - type. - - -\*---------------------------------------------------------------------------*/ - -#ifndef Tuple_H -#define Tuple_H - -#include "Istream.H" -#include "Ostream.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Forward declaration of friend functions and operators - -template<class Type1, class Type2> -class Tuple; - -template<class Type1, class Type2> -Istream& operator>>(Istream&, Tuple<Type1, Type2>&); - -template<class Type1, class Type2> -Ostream& operator<<(Ostream&, const Tuple<Type1, Type2>&); - -/*---------------------------------------------------------------------------*\ - Class Tuple Declaration -\*---------------------------------------------------------------------------*/ - -template<class Type1, class Type2> -class Tuple -{ - // Private data - - Type1 first_; - Type2 second_; - - -public: - - // Constructors - - //- Null constructor for lists - inline Tuple() - {} - - //- Construct from components - inline Tuple(const Type1& first, const Type2& second) - : - first_(first), - second_(second) - {} - - //- Construct from Istream - inline Tuple(Istream& is) - { - // Read beginning of pair - is.readBegin("pair"); - - is >> first_ >> second_; - - // Read end of pair - is.readEnd("pair"); - - // Check state of Istream - is.check("Tuple::Tuple(Istream&)"); - } - - - // Member Functions - - //- Return first - inline Type1 first() const - { - return first_; - } - - //- Return first - inline Type1& first() - { - return first_; - } - - //- Return second - inline Type2 second() const - { - return second_; - } - - //- Return second - inline Type2& second() - { - return second_; - } - - //- Return reverse pair - inline Tuple<Type1, Type2> reverseTuple() const - { - return Tuple<Type1, Type2>(second_, first_); - } - - - // Friend Operators - - inline friend bool operator== - ( - const Tuple<Type1, Type2>& a, - const Tuple<Type1, Type2>& b - ) - { - return - ( - (a.first_ == b.first_) && (a.second_ == b.second_) - ); - } - - inline friend bool operator!= - ( - const Tuple<Type1, Type2>& a, - const Tuple<Type1, Type2>& b - ) - { - return (!(a == b)); - } - - - // IOstream Operators - - friend Istream& operator>> <Type1, Type2> - ( - Istream& is, - Tuple<Type1, Type2>& p - ); - friend Ostream& operator<< <Type1, Type2> - ( - Ostream& os, - const Tuple<Type1, Type2>& p - ); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type1, class Type2> -Istream& operator>>(Istream& is, Tuple<Type1, Type2>& p) -{ - // Read beginning of Tuple<Type, Type> - is.readBegin("Tuple<Type, Type>"); - - is >> p.first_ >> p.second_; - - // Read end of Tuple<Type, Type> - is.readEnd("Tuple<Type, Type>"); - - // Check state of Ostream - is.check("Istream& operator>>(Istream&, Tuple<Type, Type>&)"); - - return is; -} - -template<class Type1, class Type2> -Ostream& operator<<(Ostream& os, const Tuple<Type1, Type2>& p) -{ - os << token::BEGIN_LIST - << p.first_ << token::SPACE - << p.second_ - << token::END_LIST; - - // Check state of Ostream - os.check("Ostream& operator<<(Ostream&, const Tuple<Type, Type>&)"); - - return os; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C index a78ade8d6d42231a9514b922b821bec35cd75c19..efe2b761ed4b39a337ed9a36c9b1aedd1b5b9d25 100644 --- a/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C +++ b/applications/utilities/mesh/advanced/modifyMesh/modifyMesh.C @@ -375,8 +375,8 @@ int main(int argc, char *argv[]) bool cellsToSplit = cellsToPyramidise.size(); - //List<Tuple<pointField,point> > - // cellsToCreate(dict.lookup("cellsToCreate")); + // List<Tuple2<pointField,point> > + // cellsToCreate(dict.lookup("cellsToCreate")); Info<< "Read from " << dict.name() << nl << " Boundary cutting module:" << nl @@ -560,7 +560,7 @@ int main(int argc, char *argv[]) } // Write resulting mesh - Info << "Writing modified mesh to time " << runTime.timeName() << endl; + Info<< "Writing modified mesh to time " << runTime.timeName() << endl; mesh.write(); } else if (edgeToPos.size()) @@ -613,7 +613,7 @@ int main(int argc, char *argv[]) } // Write resulting mesh - Info << "Writing modified mesh to time " << runTime.timeName() << endl; + Info<< "Writing modified mesh to time " << runTime.timeName() << endl; mesh.write(); } else @@ -656,13 +656,12 @@ int main(int argc, char *argv[]) } // Write resulting mesh - Info << "Writing modified mesh to time " << runTime.timeName() << endl; + Info<< "Writing modified mesh to time " << runTime.timeName() << endl; mesh.write(); } - Info << nl << "End" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C index 4e48feeea549bf7d5b0dda2dff8f4c0c8241f4ea..7e42676f3a413ece91b20cfe01ec0848bac435e7 100644 --- a/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C +++ b/applications/utilities/mesh/advanced/refineWallLayer/refineWallLayer.C @@ -234,11 +234,11 @@ int main(int argc, char *argv[]) } // Write resulting mesh - Info << "Writing refined morphMesh to time " << runTime.timeName() << endl; + Info<< "Writing refined morphMesh to time " << runTime.timeName() << endl; mesh.write(); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C b/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C index 7732c985b8484a2c822c846c3a5b554da162aa80..d3b1e14c63e5dffa651cdbd7504d98ce914a4057 100644 --- a/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C +++ b/applications/utilities/mesh/advanced/refinementLevel/refinementLevel.C @@ -126,41 +126,41 @@ int main(int argc, char *argv[]) // Create bin0. Have upperlimit as factor times lowerlimit. bins.append(DynamicList<label>()); lowerLimits.append(sortedVols[0]); - upperLimits.append(1.1*lowerLimits[lowerLimits.size()-1]); + upperLimits.append(1.1 * lowerLimits.last()); forAll(sortedVols, i) { - if (sortedVols[i] > upperLimits[upperLimits.size()-1]) + if (sortedVols[i] > upperLimits.last()) { // New value outside of current bin // Shrink old bin. - DynamicList<label>& bin = bins[bins.size()-1]; + DynamicList<label>& bin = bins.last(); bin.shrink(); Info<< "Collected " << bin.size() << " elements in bin " - << lowerLimits[lowerLimits.size()-1] << " .. " - << upperLimits[upperLimits.size()-1] << endl; + << lowerLimits.last() << " .. " + << upperLimits.last() << endl; // Create new bin. bins.append(DynamicList<label>()); lowerLimits.append(sortedVols[i]); - upperLimits.append(1.1*lowerLimits[lowerLimits.size()-1]); + upperLimits.append(1.1 * lowerLimits.last()); - Info<< "Creating new bin " << lowerLimits[lowerLimits.size()-1] - << " .. " << upperLimits[upperLimits.size()-1] + Info<< "Creating new bin " << lowerLimits.last() + << " .. " << upperLimits.last() << endl; } // Append to current bin. - DynamicList<label>& bin = bins[bins.size()-1]; + DynamicList<label>& bin = bins.last(); bin.append(sortedVols.indices()[i]); } Info<< endl; - bins[bins.size()-1].shrink(); + bins.last().shrink(); bins.shrink(); lowerLimits.shrink(); upperLimits.shrink(); @@ -355,8 +355,7 @@ int main(int argc, char *argv[]) << nl << endl; } - Info << nl << "End" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/selectCells/selectCells.C b/applications/utilities/mesh/advanced/selectCells/selectCells.C index c7dbdd8e42da3f7d080acc54fd36af7768c54209..4d690016be3703c44ceb4a9a86174c57e781e585 100644 --- a/applications/utilities/mesh/advanced/selectCells/selectCells.C +++ b/applications/utilities/mesh/advanced/selectCells/selectCells.C @@ -469,7 +469,7 @@ int main(int argc, char *argv[]) MESH, // meshType NONMESH, // fill type mesh.nCells() - ); + ); Info<< "Removing points connecting cells unconnected by faces ..." @@ -510,7 +510,7 @@ int main(int argc, char *argv[]) writeSet(selectedCells, "cells selected for meshing"); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/advanced/splitCells/splitCells.C b/applications/utilities/mesh/advanced/splitCells/splitCells.C index c916be8daa13324e333b20146943fda309bbe4cd..6cad468c2c37ea7ed6158e54ade21599bce595aa 100644 --- a/applications/utilities/mesh/advanced/splitCells/splitCells.C +++ b/applications/utilities/mesh/advanced/splitCells/splitCells.C @@ -701,7 +701,7 @@ int main(int argc, char *argv[]) mesh.write(); } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L index 2fffcaa813f65749989388733813571eaa9bdcdf..bcdf44f265f9c4f6568dca11c61e6e50d08410fd 100644 --- a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L +++ b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L @@ -39,6 +39,8 @@ Description \* ------------------------------------------------------------------------- */ #include <sstream> +// For EOF only +#include <cstdio> #include "scalar.H" #include "IStringStream.H" @@ -262,10 +264,10 @@ int main(int argc, char *argv[]) } yyFlexLexer lexer(&ansysStream); - while(lexer.yylex() != 0) + while (lexer.yylex() != 0) {} - Info << "Creating points" << endl; + Info<< "Creating points" << endl; pointField points(slPoints.size()); @@ -295,7 +297,7 @@ int main(int argc, char *argv[]) pointMap[pointMapIter()] = i++; } - Info << "Creating cells" << endl; + Info<< "Creating cells" << endl; labelList cellMap(maxCelli+1); @@ -407,7 +409,7 @@ int main(int argc, char *argv[]) { 4, 2, 1, 3, 0, 5}, // hex }; - Info << "Creating boundary patches" << endl; + Info<< "Creating boundary patches" << endl; faceListList boundary(slPatchCells.size()); wordList patchNames(slPatchCells.size()); @@ -440,11 +442,11 @@ int main(int argc, char *argv[]) boundary[patchI] = patchFaces; patchNames[patchI] = word("patch") + name(patchI + 1); - Info << "Patch " << patchI << " named " << patchNames[patchI] + Info<< "Patch " << patchI << " named " << patchNames[patchI] << ": " << boundary[patchI].size() << " faces" << endl; } - Info << "ansysToFoam: " << endl + Info<< "ansysToFoam: " << endl << "Ansys file format does not provide information about the type of " << "the patch (eg. wall, symmetry plane, cyclic etc)." << endl << "All the patches have been created " @@ -489,7 +491,7 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pShapeMesh.write(); Info<< nl << "end" << endl; diff --git a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C index d193a481330205b146f4c3afe20ec4fab7ea1a25..7684db4c32f78c115bedb53f625f9e3a8d3c964d 100644 --- a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C +++ b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C @@ -73,7 +73,7 @@ int main(int argc, char *argv[]) cfxFile >> nblock >> npatch >> nglue >> nelem >> npoint; - Info << "Reading blocks" << endl; + Info<< "Reading blocks" << endl; PtrList<hexBlock> blocks(nblock); @@ -90,7 +90,7 @@ int main(int argc, char *argv[]) } } - Info << "Reading patch definitions" << endl; + Info<< "Reading patch definitions" << endl; wordList cfxPatchTypes(npatch); wordList cfxPatchNames(npatch); @@ -126,7 +126,7 @@ int main(int argc, char *argv[]) } } - Info << "Reading block glueing information" << endl; + Info<< "Reading block glueing information" << endl; labelList glueMasterPatches(nglue, -1); labelList glueSlavePatches(nglue, -1); @@ -145,15 +145,15 @@ int main(int argc, char *argv[]) } } - Info << "Reading block points" << endl; + Info<< "Reading block points" << endl; forAll (blocks, blockI) { - Info << "block " << blockI << " is a "; + Info<< "block " << blockI << " is a "; blocks[blockI].readPoints(cfxFile); } - Info << "Calculating block offsets" << endl; + Info<< "Calculating block offsets" << endl; labelList blockOffsets(nblock, -1); @@ -172,7 +172,7 @@ int main(int argc, char *argv[]) + blocks[blockI - 1].nBlockPoints(); } - Info << "Assembling patches" << endl; + Info<< "Assembling patches" << endl; faceListList rawPatches(npatch); @@ -203,13 +203,13 @@ int main(int argc, char *argv[]) } } - Info << "Merging points "; + Info<< "Merging points "; labelList pointMergeList(nMeshPoints, -1); // In order to ensure robust merging, it is necessary to traverse // the patch glueing list until the pointMergeList stops changing. - // + // // For efficiency, create merge pairs in the first pass labelListListList glueMergePairs(glueMasterPatches.size()); @@ -396,7 +396,7 @@ int main(int argc, char *argv[]) ) { changedPointMerge = true; - + pointMergeList[PpointLabel] = pointMergeList[NpointLabel] = min @@ -408,10 +408,10 @@ int main(int argc, char *argv[]) } } } - Info << "." << flush; + Info<< "." << flush; } while (changedPointMerge && nPasses < 8); - Info << endl; + Info<< endl; if (changedPointMerge == true) { @@ -509,7 +509,7 @@ int main(int argc, char *argv[]) nMeshPoints = nNewPoints; - Info << "Creating points" << endl; + Info<< "Creating points" << endl; pointField points(nMeshPoints); @@ -536,7 +536,7 @@ int main(int argc, char *argv[]) points *= scaleFactor; } - Info << "Creating cells" << endl; + Info<< "Creating cells" << endl; cellShapeList cellShapes(nMeshCells); @@ -568,7 +568,7 @@ int main(int argc, char *argv[]) } } - Info << "Creating boundary patches" << endl; + Info<< "Creating boundary patches" << endl; faceListList boundary(npatch); wordList patchNames(npatch); @@ -600,7 +600,7 @@ int main(int argc, char *argv[]) if (existingPatch >= 0) { - Info << "CFX patch " << patchI + Info<< "CFX patch " << patchI << ", of type " << cfxPatchTypes[patchI] << ", name " << cfxPatchNames[patchI] << " already exists as FOAM patch " << existingPatch @@ -652,7 +652,7 @@ int main(int argc, char *argv[]) } } - Info << "CFX patch " << patchI + Info<< "CFX patch " << patchI << ", of type " << cfxPatchTypes[patchI] << ", name " << cfxPatchNames[patchI] << " converted into FOAM patch " << nCreatedPatches @@ -660,7 +660,7 @@ int main(int argc, char *argv[]) if (cfxPatchTypes[patchI] == "WALL") { - Info << "wall." << endl; + Info<< "wall." << endl; patchTypes[nCreatedPatches] = wallPolyPatch::typeName; patchNames[nCreatedPatches] = cfxPatchNames[patchI]; @@ -668,7 +668,7 @@ int main(int argc, char *argv[]) } else if (cfxPatchTypes[patchI] == "SYMMET") { - Info << "symmetryPlane." << endl; + Info<< "symmetryPlane." << endl; patchTypes[nCreatedPatches] = symmetryPolyPatch::typeName; patchNames[nCreatedPatches] = cfxPatchNames[patchI]; @@ -683,7 +683,7 @@ int main(int argc, char *argv[]) || cfxPatchTypes[patchI] == "USER2D" ) { - Info << "generic." << endl; + Info<< "generic." << endl; patchTypes[nCreatedPatches] = polyPatch::typeName; patchNames[nCreatedPatches] = cfxPatchNames[patchI]; @@ -737,10 +737,10 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pShapeMesh.write(); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/cfx4ToFoam/hexBlock.C b/applications/utilities/mesh/conversion/cfx4ToFoam/hexBlock.C index b9bfee00ffbfa8f6e5c45d4586192e67dc9cb362..bf16792211a08e9521e4f453e3c829e6bd174f61 100644 --- a/applications/utilities/mesh/conversion/cfx4ToFoam/hexBlock.C +++ b/applications/utilities/mesh/conversion/cfx4ToFoam/hexBlock.C @@ -70,12 +70,12 @@ void hexBlock::readPoints(Istream& is) if (((i ^ j) & k) > 0) { - Info << "right-handed block" << endl; + Info<< "right-handed block" << endl; blockHandedness_ = right; } else { - Info << "left-handed block" << endl; + Info<< "left-handed block" << endl; blockHandedness_ = left; } } diff --git a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L index b66b9512a8568717d59067426539aaea4f469210..cf46939eaeb73fa17130c965cdbe545695e420aa 100644 --- a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L +++ b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L @@ -324,7 +324,7 @@ endOfSection {space}")"{space} // point group type skipped strtol(endPtr, &endPtr, 16); - pointi = pointGroupStartIndex[pointGroupStartIndex.size()-1]; + pointi = pointGroupStartIndex.last(); // reset number of components to default pointGroupNumberOfComponents = 3; @@ -336,11 +336,11 @@ endOfSection {space}")"{space} } Info<< "PointGroup: " - << pointGroupZoneID[pointGroupZoneID.size()-1] + << pointGroupZoneID.last() << " start: " - << pointGroupStartIndex[pointGroupStartIndex.size()-1] + << pointGroupStartIndex.last() << " end: " - << pointGroupEndIndex[pointGroupEndIndex.size()-1] << flush; + << pointGroupEndIndex.last() << flush; } <readNumberOfPoints,readPointGroupData>{endOfSection} { @@ -387,14 +387,14 @@ endOfSection {space}")"{space} Info<< "done." << endl; // check read of points - if (pointi != pointGroupEndIndex[pointGroupEndIndex.size()-1]+1) + if (pointi != pointGroupEndIndex.last()+1) { Warning << "Problem with reading points: " << nl << " start index: " - << pointGroupStartIndex[pointGroupStartIndex.size()-1] + << pointGroupStartIndex.last() << " end index: " - << pointGroupEndIndex[pointGroupEndIndex.size()-1] + << pointGroupEndIndex.last() << " last points read: " << pointi << nl << " on line " << lineNo << endl; } @@ -440,14 +440,14 @@ endOfSection {space}")"{space} faceGroupElementType = strtol(endPtr, &endPtr, 16); - facei = faceGroupStartIndex[faceGroupStartIndex.size()-1]; + facei = faceGroupStartIndex.last(); Info<< "FaceGroup: " - << faceGroupZoneID[faceGroupZoneID.size()-1] + << faceGroupZoneID.last() << " start: " - << faceGroupStartIndex[faceGroupStartIndex.size()-1] + << faceGroupStartIndex.last() << " end: " - << faceGroupEndIndex[faceGroupEndIndex.size()-1] << flush; + << faceGroupEndIndex.last() << flush; } <readNumberOfFaces,readFaceGroupData>{space}{endOfSection} { @@ -507,14 +507,14 @@ endOfSection {space}")"{space} Info<< "done." << endl; // check read of fluentFaces - if (facei != faceGroupEndIndex[faceGroupEndIndex.size()-1]+1) + if (facei != faceGroupEndIndex.last()+1) { Warning << "Problem with reading fluentFaces: " << nl << " start index: " - << faceGroupStartIndex[faceGroupStartIndex.size()-1] + << faceGroupStartIndex.last() << " end index: " - << faceGroupEndIndex[faceGroupEndIndex.size()-1] + << faceGroupEndIndex.last() << " last fluentFaces read: " << facei << nl << " on line " << lineNo << endl; } @@ -560,13 +560,13 @@ endOfSection {space}")"{space} cellGroupType.append(strtol(endPtr, &endPtr, 16)); Info<< "CellGroup: " - << cellGroupZoneID[cellGroupZoneID.size()-1] + << cellGroupZoneID.last() << " start: " - << cellGroupStartIndex[cellGroupStartIndex.size()-1] + << cellGroupStartIndex.last() << " end: " - << cellGroupEndIndex[cellGroupEndIndex.size()-1] + << cellGroupEndIndex.last() << " type: " - << cellGroupType[cellGroupType.size()-1] + << cellGroupType.last() << endl; } @@ -587,13 +587,13 @@ endOfSection {space}")"{space} strtol(endPtr, &endPtr, 16); Info<< "CellGroup: " - << cellGroupZoneID[cellGroupZoneID.size()-1] + << cellGroupZoneID.last() << " start: " - << cellGroupStartIndex[cellGroupStartIndex.size()-1] + << cellGroupStartIndex.last() << " end: " - << cellGroupEndIndex[cellGroupEndIndex.size()-1] + << cellGroupEndIndex.last() << " type: " - << cellGroupType[cellGroupType.size()-1] + << cellGroupType.last() << endl; } @@ -813,7 +813,7 @@ int main(int argc, char *argv[]) yyFlexLexer lexer(&fluentStream.stdStream()); - while(lexer.yylex() != 0) + while (lexer.yylex() != 0) {} Info<< "\nFINISHED LEXING\n\n"; @@ -973,7 +973,7 @@ int main(int argc, char *argv[]) // Set the owner of these faces to -1 so that they do not get // added to the mesh - for(label facei = start; facei <= end; facei++) + for (label facei = start; facei <= end; facei++) { owner[facei] = -1; } @@ -1356,7 +1356,7 @@ int main(int argc, char *argv[]) mesh.write(); - Info<< nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L index d1afc4523a5e0ba97cacaa6abd9a4eeecdeebfa7..3460a213e87598728a01fba28dc801bbea4bd383 100644 --- a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L +++ b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L @@ -898,7 +898,7 @@ int main(int argc, char *argv[]) } yyFlexLexer lexer(&fluentStream); - while(lexer.yylex() != 0) + while (lexer.yylex() != 0) {} Info<< "\n\nFINISHED LEXING\n\n\n"; @@ -1388,7 +1388,7 @@ int main(int argc, char *argv[]) meshFaces[j] = cMeshFace; pFaceSet.insert(cMeshFace); } - if(writeSets) + if (writeSets) { Info<< "Writing patch " << patchNames[patchI] << " of size " << sz << " to faceSet." << endl; @@ -1404,7 +1404,11 @@ int main(int argc, char *argv[]) //it will be put in a default wall boundary //internal boundaries are simply ignored - if(patchTypes[patchI] != "internal" && !pShapeMesh.isInternalFace(meshFaces[0])) + if + ( + patchTypes[patchI] != "internal" + && !pShapeMesh.isInternalFace(meshFaces[0]) + ) { //first face is external and has valid non-internal type @@ -1423,7 +1427,7 @@ int main(int argc, char *argv[]) << exit(FatalError); } - if(facePatchID[faceI - pShapeMesh.nInternalFaces()]!= -1) + if (facePatchID[faceI - pShapeMesh.nInternalFaces()]!= -1) { FatalErrorIn(args.executable()) << "Face " << faceI << " on new patch " @@ -1475,7 +1479,7 @@ int main(int argc, char *argv[]) DynamicList<label> defaultBoundaryFaces(facePatchID.size()); forAll(facePatchID, idI) { - if(facePatchID[idI] == -1) + if (facePatchID[idI] == -1) { defaultBoundaryFaces.append(idI); facePatchID[idI] = nBoundaries; @@ -1575,50 +1579,50 @@ int main(int argc, char *argv[]) boundaryZones[pI].append(bPatches[pI].name()); } - label cnt=0; - SLList<label>::iterator cg = cellGroupZoneID.begin(); - SLList<label>::iterator start = cellGroupStartIndex.begin(); - SLList<label>::iterator end = cellGroupEndIndex.begin(); + label cnt=0; + SLList<label>::iterator cg = cellGroupZoneID.begin(); + SLList<label>::iterator start = cellGroupStartIndex.begin(); + SLList<label>::iterator end = cellGroupEndIndex.begin(); - for (; cg != cellGroupZoneID.end(); ++cg, ++start, ++end) - { - const word& name = patchNameIDs[cg()]; - const word& type = patchTypeIDs[cg()]; + for (; cg != cellGroupZoneID.end(); ++cg, ++start, ++end) + { + const word& name = patchNameIDs[cg()]; + const word& type = patchTypeIDs[cg()]; - Info<< "Writing cell zone: " << name + Info<< "Writing cell zone: " << name << " of type " << type << " starting at " << start() - 1 << " ending at " << end() - 1 << " to cellSet." << endl; - labelList cls(end() - start() + 1); + labelList cls(end() - start() + 1); // Mark zone cells, used for finding faces boolList zoneCell(pShapeMesh.nCells(), false); - // shift cell indizes by 1 - label nr=0; - for (label celli = (start() - 1); celli < end(); celli++) + // shift cell indizes by 1 + label nr=0; + for (label celli = (start() - 1); celli < end(); celli++) { cls[nr]=celli; zoneCell[celli] = true; nr++; - } + } - cz[cnt] = new cellZone - ( + cz[cnt] = new cellZone + ( name, cls, cnt, pShapeMesh.cellZones() - ); + ); DynamicList<label> zoneFaces(pShapeMesh.nFaces()); forAll(pShapeMesh.faceNeighbour(), faceI) { label nei = pShapeMesh.faceNeighbour()[faceI]; label own = pShapeMesh.faceOwner()[faceI]; - if(nei != -1) + if (nei != -1) { - if(zoneCell[nei] && zoneCell[own]) + if (zoneCell[nei] && zoneCell[own]) { zoneFaces.append(faceI); } @@ -1641,7 +1645,7 @@ int main(int argc, char *argv[]) const labelList& faceCells = bPatches[pI].faceCells(); forAll(faceCells, fcI) { - if(zoneCell[faceCells[fcI] ]) + if (zoneCell[faceCells[fcI] ]) { boundaryZones[pI].append(name); break; @@ -1649,8 +1653,8 @@ int main(int argc, char *argv[]) } } - cnt++; - } + cnt++; + } pShapeMesh.addZones(pz, fz, cz); @@ -1715,7 +1719,7 @@ int main(int argc, char *argv[]) cellSet internal(pShapeMesh, name, end() - start()); // shift cell indizes by 1 - for(label celli=start() - 1; celli<=end() - 1; celli++) + for (label celli = start() - 1; celli <= end() - 1; celli++) { internal.insert(celli); } @@ -1729,7 +1733,7 @@ int main(int argc, char *argv[]) } } - Info<< nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/foamMeshToFluent/fluentFvMesh.C b/applications/utilities/mesh/conversion/foamMeshToFluent/fluentFvMesh.C index 65ee7d1b497396b953e203a8b9d0a64e41c66c1d..228194e4c3069fc25ab4029b256d3a13c32dc5fa 100644 --- a/applications/utilities/mesh/conversion/foamMeshToFluent/fluentFvMesh.C +++ b/applications/utilities/mesh/conversion/foamMeshToFluent/fluentFvMesh.C @@ -63,7 +63,7 @@ void Foam::fluentFvMesh::writeFluentMesh() const ).c_str() ); - Info << "Writing Header" << endl; + Info<< "Writing Header" << endl; fluentMeshFile << "(0 \"FOAM to Fluent Mesh File\")" << std::endl << std::endl diff --git a/applications/utilities/mesh/conversion/foamMeshToFluent/foamMeshToFluent.C b/applications/utilities/mesh/conversion/foamMeshToFluent/foamMeshToFluent.C index a276e534a17f44b64e0a629a3e721934ccc52d3f..a4d8b25f3be24cf67d4379cc85c9e177ab95e06d 100644 --- a/applications/utilities/mesh/conversion/foamMeshToFluent/foamMeshToFluent.C +++ b/applications/utilities/mesh/conversion/foamMeshToFluent/foamMeshToFluent.C @@ -57,7 +57,7 @@ int main(int argc, char *argv[]) mesh.writeFluentMesh(); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L index f815e81b5327c2a86fc4407831a48603c995130b..bc88b46c1e0333331f431c3498f5f2414208ea07 100644 --- a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L +++ b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L @@ -41,6 +41,9 @@ Description #include "scalarList.H" #include "IStringStream.H" +// For EOF only +#include <cstdio> + using namespace Foam; #include "argList.H" @@ -230,7 +233,7 @@ mtype {space}"MTYPE:"{space} <readProgramID>{space}{word} { - Info << "Written by " << YYText() << " "; + Info<< "Written by " << YYText() << " "; BEGIN(controlInfo); } @@ -242,20 +245,20 @@ mtype {space}"MTYPE:"{space} <readVersionID>{space}{versionNumber} { - Info << " version " << YYText() << endl; + Info<< " version " << YYText() << endl; BEGIN(controlInfo); } <controlInfo>{space}{dateDDMonYYYY}{space}{time} { - Info << "File written on " << YYText() << endl; + Info<< "File written on " << YYText() << endl; } <controlInfo>{space}{dateDDMMYYYY}{space}{time} { - Info << "File written on " << YYText() << endl; + Info<< "File written on " << YYText() << endl; } @@ -301,7 +304,7 @@ mtype {space}"MTYPE:"{space} {nodalCoords}{spaceNl} { curNumberOfNodes = 0; - Info << "Reading nodal coordinates" << endl; + Info<< "Reading nodal coordinates" << endl; BEGIN(nodalCoords); } @@ -329,7 +332,7 @@ mtype {space}"MTYPE:"{space} {cellsAndElements}{spaceNl} { curNumberOfCells = 0; - Info << "Reading cells" << endl; + Info<< "Reading cells" << endl; BEGIN(cellsAndElements); } @@ -419,7 +422,7 @@ mtype {space}"MTYPE:"{space} /* ------ Reading element group information ------ */ {cellStreams}{spaceNl} { - Info << "Reading cell streams" << endl; + Info<< "Reading cell streams" << endl; BEGIN(cellStreams); } @@ -501,7 +504,7 @@ mtype {space}"MTYPE:"{space} <cellStreamFlags>{labelList} { - Info << "Reading cell stream labels" << endl; + Info<< "Reading cell stream labels" << endl; BEGIN(cellStreamLabels); } @@ -526,7 +529,7 @@ mtype {space}"MTYPE:"{space} <cellStreamLabels>{endOfSection}\n { - Info << "Finished reading cell stream labels" << endl; + Info<< "Finished reading cell stream labels" << endl; // reset current group ID and a number of flags curGroupID = 0; @@ -538,7 +541,7 @@ mtype {space}"MTYPE:"{space} {boundaryPatch}{spaceNl} { curPatchFace = 0; - Info << "Reading patches" << endl; + Info<< "Reading patches" << endl; BEGIN(boundaryPatchParams); } @@ -662,10 +665,10 @@ int main(int argc, char *argv[]) } yyFlexLexer lexer(&gambitStream); - while(lexer.yylex() != 0) + while (lexer.yylex() != 0) {} - Info << "Finished lexing" << endl; + Info<< "Finished lexing" << endl; // make a point mapping array label maxPointIndex = 0; @@ -812,7 +815,7 @@ int main(int argc, char *argv[]) } } - Info << "gambitToFoam: " << endl + Info<< "gambitToFoam: " << endl << "Gambit file format does not provide information about the type of " << "the patch (eg. wall, symmetry plane, cyclic etc)." << endl << "All the patches have been created " @@ -861,10 +864,10 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pShapeMesh.write(); - Info<< nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C index a7f9d01a7f0a3285844e29ccf60cf260c3b01643..16977b92c6788d7761cd4da49b40de7c6f036609 100644 --- a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C +++ b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C @@ -314,14 +314,14 @@ void readPhysNames(IFstream& inFile, Map<word>& physicalNames) IStringStream lineStr(line); label nSpaces = lineStr.str().count(' '); - if(nSpaces == 1) + if (nSpaces == 1) { lineStr >> regionI >> regionName; Info<< " " << regionI << '\t' << string::validate<word>(regionName) << endl; } - else if(nSpaces == 2) + else if (nSpaces == 2) { // >= Gmsh2.4 physical types has tag in front. label physType; @@ -885,7 +885,7 @@ int main(int argc, char *argv[]) // Now use the patchFaces to patch up the outside faces of the mesh. // Get the patch for all the outside faces (= default patch added as last) - const polyPatch& pp = mesh.boundaryMesh()[mesh.boundaryMesh().size()-1]; + const polyPatch& pp = mesh.boundaryMesh().last(); // Storage for faceZones. List<DynamicList<label> > zoneFaces(patchFaces.size()); diff --git a/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C b/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C index 1776285e462db03cd31365ece6e603c9304e18eb..f289e8bb389a3e91b243cfb0022e94b90c9f8479 100644 --- a/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C +++ b/applications/utilities/mesh/conversion/ideasUnvToFoam/ideasUnvToFoam.C @@ -324,13 +324,13 @@ void readCells cellVerts.append(cellShape(tet, cVerts, true)); cellMaterial.append(physProp); - if (cellVerts[cellVerts.size()-1].size() != cVerts.size()) + if (cellVerts.last().size() != cVerts.size()) { Pout<< "Line:" << is.lineNumber() << " element:" << cellI << " type:" << feID << " collapsed from " << cVerts << nl - << " to:" << cellVerts[cellVerts.size()-1] + << " to:" << cellVerts.last() << endl; } } @@ -347,13 +347,13 @@ void readCells cellVerts.append(cellShape(prism, cVerts, true)); cellMaterial.append(physProp); - if (cellVerts[cellVerts.size()-1].size() != cVerts.size()) + if (cellVerts.last().size() != cVerts.size()) { Pout<< "Line:" << is.lineNumber() << " element:" << cellI << " type:" << feID << " collapsed from " << cVerts << nl - << " to:" << cellVerts[cellVerts.size()-1] + << " to:" << cellVerts.last() << endl; } } @@ -371,13 +371,13 @@ void readCells cellVerts.append(cellShape(hex, cVerts, true)); cellMaterial.append(physProp); - if (cellVerts[cellVerts.size()-1].size() != cVerts.size()) + if (cellVerts.last().size() != cVerts.size()) { Pout<< "Line:" << is.lineNumber() << " element:" << cellI << " type:" << feID << " collapsed from " << cVerts << nl - << " to:" << cellVerts[cellVerts.size()-1] + << " to:" << cellVerts.last() << endl; } } @@ -412,7 +412,7 @@ void readPatches Sout<< "Starting reading patches at line " << is.lineNumber() << '.' << endl; - while(true) + while (true) { string line; is.getLine(line); @@ -511,7 +511,7 @@ void readDOFS } Info<< "For DOF set " << group - << " named " << patchNames[patchNames.size()-1] + << " named " << patchNames.last() << " trying to read vertex indices." << endl; @@ -534,7 +534,7 @@ void readDOFS } Info<< "For DOF set " << group - << " named " << patchNames[patchNames.size()-1] + << " named " << patchNames.last() << " read " << vertices.size() << " vertex indices." << endl; dofVertices.append(vertices.shrink()); diff --git a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C index f76e4dae462db79a9446aaed6fe9d99dc3a370c6..551741974bf2be71dabfe5dd454f43bfada765b4 100644 --- a/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C +++ b/applications/utilities/mesh/conversion/kivaToFoam/kivaToFoam.C @@ -103,7 +103,7 @@ int main(int argc, char *argv[]) # include "readKivaGrid.H" - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H b/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H index ba2b615df18aa7cc6b32de4133ae0d65be446987..92c7b7c355f558bf0c3a0251bd41caba7ec0b618 100644 --- a/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H +++ b/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H @@ -20,7 +20,7 @@ pointField points(nPoints); label i4; labelList idface(nPoints), fv(nPoints); -for(label i=0; i<nPoints; i++) +for (label i=0; i<nPoints; i++) { scalar ffv; kivaFile @@ -44,7 +44,7 @@ labelList i1tab(nPoints), i3tab(nPoints), i8tab(nPoints), idreg(nPoints), label nBfaces = 0; -for(label i=0; i<nPoints; i++) +for (label i=0; i<nPoints; i++) { label i1, i3, i8; scalar ff, fbcl, fbcf, fbcb; @@ -85,7 +85,7 @@ if (mTable == 0) labelList imtab(nPoints), jmtab(nPoints), kmtab(nPoints); -for(label i=0; i<nPoints; i++) +for (label i=0; i<nPoints; i++) { label im, jm, km; kivaFile >> i4 >> im >> jm >> km; @@ -115,7 +115,7 @@ forAll (pointMap, i) } // Initialise all cells to hex and search and set map for collocated points -for(label i=0; i<nPoints; i++) +for (label i=0; i<nPoints; i++) { if (f[i] > 0.0) { @@ -237,7 +237,7 @@ List<SLList<face> > pFaces[nBCs]; face quadFace(4); face triFace(3); -for(label i=0; i<nPoints; i++) +for (label i=0; i<nPoints; i++) { if (f[i] > 0) { diff --git a/applications/utilities/mesh/conversion/plot3dToFoam/hexBlock.C b/applications/utilities/mesh/conversion/plot3dToFoam/hexBlock.C index c1f781f899862e51ad9afc9bce0e41a81636ecd3..3ed248a86ebb1a4d3d4f051c750a88d986445d63 100644 --- a/applications/utilities/mesh/conversion/plot3dToFoam/hexBlock.C +++ b/applications/utilities/mesh/conversion/plot3dToFoam/hexBlock.C @@ -70,7 +70,7 @@ void hexBlock::setHandedness() } else { - Info << "Left-handed block." << endl; + Info<< "Left-handed block." << endl; blockHandedness_ = left; } return; diff --git a/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C b/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C index dfc1fbb20e651bb85c0ea2edee738d3e111234ae..52898444ae4bacd21d0885035d2778e5e3f7d02c 100644 --- a/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C +++ b/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C @@ -1410,7 +1410,7 @@ void Foam::meshDualiser::setRefinement meshMod ); } - while(fp != 0); + while (fp != 0); } } diff --git a/applications/utilities/mesh/conversion/sammToFoam/createPolyBoundary.C b/applications/utilities/mesh/conversion/sammToFoam/createPolyBoundary.C index efca6a37b5854ff93dc7fc29b5aa95e276a87e9e..f3fc9a6e1dcda75a28ef798bdd08332bdf896a0b 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/createPolyBoundary.C +++ b/applications/utilities/mesh/conversion/sammToFoam/createPolyBoundary.C @@ -111,8 +111,8 @@ void sammMesh::createPolyBoundary() // reset the size of the face list meshFaces_.setSize(nCreatedFaces); - Info << "Number of boundary faces: " << nBoundaryFacesFound << endl; - Info << "Total number of faces: " << nCreatedFaces << endl; + Info<< "Number of boundary faces: " << nBoundaryFacesFound << endl; + Info<< "Total number of faces: " << nCreatedFaces << endl; } diff --git a/applications/utilities/mesh/conversion/sammToFoam/createPolyCells.C b/applications/utilities/mesh/conversion/sammToFoam/createPolyCells.C index b2f1a54c4f579d481818fac61795d934b13fccb5..80dd2e7541c10a77e54d7a39869f53a349a5b30c 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/createPolyCells.C +++ b/applications/utilities/mesh/conversion/sammToFoam/createPolyCells.C @@ -55,7 +55,7 @@ void sammMesh::createPolyCells() maxFaces += cellFaces_[cellI].size(); } - Info << "Maximum possible number of faces in mesh: " << maxFaces << endl; + Info<< "Maximum possible number of faces in mesh: " << maxFaces << endl; meshFaces_.setSize(maxFaces); @@ -72,7 +72,7 @@ void sammMesh::createPolyCells() // Insertion cannot be done in one go as the faces need to be // added into the list in the increasing order of neighbour // cells. Therefore, all neighbours will be detected first - // and then added in the correct order. + // and then added in the correct order. const faceList& curFaces = cellFaces_[cellI]; @@ -109,7 +109,7 @@ void sammMesh::createPolyCells() label curNei = curNeighbours[neiI]; // reject neighbours with the lower label. This should - // also reject current cell. + // also reject current cell. if (curNei > cellI) { // get the list of search faces diff --git a/applications/utilities/mesh/conversion/sammToFoam/purgeCellShapes.C b/applications/utilities/mesh/conversion/sammToFoam/purgeCellShapes.C index 50fd89ce8f7ec14157dd0208a053c9995942406c..3abcdd645fa6c308c3c7e708642c5d751db3acab 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/purgeCellShapes.C +++ b/applications/utilities/mesh/conversion/sammToFoam/purgeCellShapes.C @@ -55,12 +55,12 @@ void sammMesh::purgeCellShapes() if (!found) { - Info << "Purging cell shape " << cellI << endl; + Info<< "Purging cell shape " << cellI << endl; cellShapes_[cellI] = cellShape(*unknownPtr_, labelList(0)); break; } } - } + } } diff --git a/applications/utilities/mesh/conversion/sammToFoam/readCouples.C b/applications/utilities/mesh/conversion/sammToFoam/readCouples.C index 161123803ec0d0489d9513c917a4c346fc1733e8..3d9609e84de77e682c8c612dcbab6cfec4249183 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/readCouples.C +++ b/applications/utilities/mesh/conversion/sammToFoam/readCouples.C @@ -40,7 +40,7 @@ void sammMesh::readCouples() if (couplesFile.good()) { - Info << "\nReading couples" << endl; + Info<< "\nReading couples" << endl; // A mesh with couples cannot be a shape mesh isShapeMesh_ = false; @@ -71,7 +71,7 @@ void sammMesh::readCouples() // get reference to master cell faces faceList& masterFaces = cellFaces_[masterCell - 1]; -// Info << "Master cell: " << masterCell - 1 << " index: " +// Info<< "Master cell: " << masterCell - 1 << " index: " // << cellShapes_[masterCell - 1].model().index() // << " face: " << // masterFaces @@ -116,14 +116,14 @@ void sammMesh::readCouples() [slaveFace] ].reverseFace(); -// Info << " slave cell: " << slaveCell - 1 << " index: " +// Info<< " slave cell: " << slaveCell - 1 << " index: " // << cellShapes_[slaveCell - 1].model().index() // << " face: " << masterFaces[slaveToAdd] << endl; slaveToAdd++; } -// Info << endl; +// Info<< endl; } diff --git a/applications/utilities/mesh/conversion/sammToFoam/sammMesh.C b/applications/utilities/mesh/conversion/sammToFoam/sammMesh.C index a5bfd9791c28a5529525ca32efab93bb2c00f54e..8ed4ddea84bc4f56eb5d7922e7bfacd58d301c58 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/sammMesh.C +++ b/applications/utilities/mesh/conversion/sammToFoam/sammMesh.C @@ -104,7 +104,7 @@ List<const label*> sammMesh::sammAddressingTable // Make polyhedral mesh data (packing) void sammMesh::createPolyMeshData() { - Info << "Creating a polyMesh" << endl; + Info<< "Creating a polyMesh" << endl; createPolyCells(); @@ -124,7 +124,7 @@ void sammMesh::createPolyMeshData() { if (curFaceLabels[faceI] == -1) { - Info << "cell " << cellI + Info<< "cell " << cellI << " has got an unmatched face. " << "Index: " << cellShapes_[cellI].model().index() << endl // << "cell shape: " << cellShapes_[cellI] << endl @@ -142,7 +142,7 @@ void sammMesh::createPolyMeshData() if (nProblemCells > 0) { - Info << "Number of problem cells: " << nProblemCells << endl; + Info<< "Number of problem cells: " << nProblemCells << endl; } } diff --git a/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C b/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C index 8095529d3270eeb39c7bbe16771b388aa50b0ced..0f5f2a2eb83e0675c14a50a9460a70549cadb003 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C +++ b/applications/utilities/mesh/conversion/sammToFoam/sammToFoam.C @@ -61,10 +61,10 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing mesh" << endl; + Info<< "Writing mesh" << endl; makeMesh.writeMesh(); - Info<< nl << "End" << nl << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/sammToFoam/writeMesh.C b/applications/utilities/mesh/conversion/sammToFoam/writeMesh.C index 546b6e24de485dcb329579c913fc5bc72926d44d..141765be351633a50eb7d36989720d1328dfa81b 100644 --- a/applications/utilities/mesh/conversion/sammToFoam/writeMesh.C +++ b/applications/utilities/mesh/conversion/sammToFoam/writeMesh.C @@ -37,7 +37,7 @@ void sammMesh::writeMesh() { if (isShapeMesh_) { - Info << "This is a shapeMesh." << endl; + Info<< "This is a shapeMesh." << endl; polyMesh pShapeMesh ( @@ -57,7 +57,7 @@ void sammMesh::writeMesh() patchPhysicalTypes_ ); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pShapeMesh.write(); } else @@ -66,7 +66,7 @@ void sammMesh::writeMesh() createPolyMeshData(); - Info << "This is a polyMesh" << endl; + Info<< "This is a polyMesh" << endl; polyMesh pMesh ( @@ -83,7 +83,7 @@ void sammMesh::writeMesh() pMesh.addPatches(polyBoundaryPatches(pMesh)); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pMesh.write(); } } diff --git a/applications/utilities/mesh/conversion/starToFoam/createBoundaryFaces.C b/applications/utilities/mesh/conversion/starToFoam/createBoundaryFaces.C index 09a09de8d31fcf7fe84345f593c98447f8974df2..3875b68345a3a7874205676e3fc254d0a4fb7bdf 100644 --- a/applications/utilities/mesh/conversion/starToFoam/createBoundaryFaces.C +++ b/applications/utilities/mesh/conversion/starToFoam/createBoundaryFaces.C @@ -127,7 +127,7 @@ void starMesh::markBoundaryFaces() { const label curCellIndex = facePointCells[cellI]; - const faceList& curCellFaces = + const faceList& curCellFaces = cellFaces_[curCellIndex]; forAll(curCellFaces, cellFaceI) @@ -159,11 +159,11 @@ void starMesh::markBoundaryFaces() { if (curFace[spI] > -1 && curFace[spI] < starPointID_.size()) { - Info << "," << starPointID_[curFace[spI]]; + Info<< "," << starPointID_[curFace[spI]]; } else { - Info << ",???"; + Info<< ",???"; } } @@ -176,7 +176,7 @@ void starMesh::markBoundaryFaces() void starMesh::collectBoundaryFaces() { - Info << "Collecting boundary faces" << endl; + Info<< "Collecting boundary faces" << endl; forAll(boundary_, patchI) { faceList& patchFaces = boundary_[patchI]; @@ -193,7 +193,7 @@ void starMesh::collectBoundaryFaces() } } - Info << "Finished collecting boundary faces" << endl; + Info<< "Finished collecting boundary faces" << endl; } diff --git a/applications/utilities/mesh/conversion/starToFoam/createCoupleMatches.C b/applications/utilities/mesh/conversion/starToFoam/createCoupleMatches.C index 5857f03e243a3259949b1f214ba5e9efddbef9ce..d1a074c391b10456fd73e29f25f1a9627131be5c 100644 --- a/applications/utilities/mesh/conversion/starToFoam/createCoupleMatches.C +++ b/applications/utilities/mesh/conversion/starToFoam/createCoupleMatches.C @@ -67,7 +67,7 @@ void starMesh::createCoupleMatches() { if (coupleI % infoJump == 0) { - Info << "Doing couple " << coupleI << ". STAR couple ID: " + Info<< "Doing couple " << coupleI << ". STAR couple ID: " << couples_[coupleI].coupleID() << endl; } @@ -179,7 +179,7 @@ void starMesh::createCoupleMatches() d -= n*(n & d); # ifdef DEBUG_COUPLE_INTERSECTION - Info << "curMasterEdge: " << curMasterEdge << endl + Info<< "curMasterEdge: " << curMasterEdge << endl << "P: " << P << endl << "d: " << d << endl; # endif @@ -198,7 +198,7 @@ void starMesh::createCoupleMatches() scalar det = -(e & (n ^ d)); # ifdef DEBUG_COUPLE_INTERSECTION - Info << "curSlaveEdge: " << curSlaveEdge << endl + Info<< "curSlaveEdge: " << curSlaveEdge << endl << "S: " << S << endl << "e: " << e << endl; # endif @@ -209,7 +209,7 @@ void starMesh::createCoupleMatches() scalar beta = ((S - P) & (n ^ d))/det; # ifdef DEBUG_COUPLE_INTERSECTION - Info << " beta: " << beta << endl; + Info<< " beta: " << beta << endl; # endif if (beta > -smallMergeTol_ && beta < 1 + smallMergeTol_) @@ -219,7 +219,7 @@ void starMesh::createCoupleMatches() (((S - P) & d) + beta*(d & e))/magSqr(d); # ifdef DEBUG_COUPLE_INTERSECTION - Info << " alpha: " << alpha << endl; + Info<< " alpha: " << alpha << endl; # endif if @@ -413,7 +413,7 @@ void starMesh::createCoupleMatches() scalar beta1 = (sp & e)/magSqr(e); # ifdef DEBUG_COUPLE_INTERSECTION - Info << "P: " << P << " S: " << S << " d: " << d + Info<< "P: " << P << " S: " << S << " d: " << d << " e: " << e << " sp: " << sp << " beta1: " << beta1 << endl; # endif @@ -446,7 +446,7 @@ void starMesh::createCoupleMatches() ) { # ifdef DEBUG_COUPLE_INTERSECTION - Info << "adding irregular slave " + Info<< "adding irregular slave " << "intersection2: " << points_[masterEdges[masterEdgeI].end()] << endl; @@ -463,10 +463,10 @@ void starMesh::createCoupleMatches() } // end of master edges # ifdef DEBUG_COUPLE_INTERSECTION - Info << "additional slave edge points: " << endl; + Info<< "additional slave edge points: " << endl; forAll (slaveEdgePoints, edgeI) { - Info << "edge: " << edgeI << ": " << slaveEdgePoints[edgeI] + Info<< "edge: " << edgeI << ": " << slaveEdgePoints[edgeI] << endl; } # endif @@ -475,7 +475,7 @@ void starMesh::createCoupleMatches() if (nLivePoints + coupleFacePoints.size() >= points_.size()) { // increase the size of the points list - Info << "Resizing points list" << endl; + Info<< "Resizing points list" << endl; points_.setSize(points_.size() + couples_.size()); } @@ -511,7 +511,7 @@ void starMesh::createCoupleMatches() label nTmpMasterLabels = 0; # ifdef DEBUG_COUPLE_INTERSECTION - Info << "masterFace: " << masterFace << endl + Info<< "masterFace: " << masterFace << endl << "nAdditionalMasterPoints: " << nAdditionalMasterPoints << endl; # endif @@ -545,7 +545,7 @@ void starMesh::createCoupleMatches() points_[masterEdges[masterEdgeI].start()]; // loop until the next label to add is -1 - for(;;) + for (;;) { label nextPointLabel = -1; label usedI = -1; @@ -588,7 +588,7 @@ void starMesh::createCoupleMatches() } # ifdef DEBUG_FACE_ORDERING - Info << "nextPointLabel: " << nextPointLabel << endl; + Info<< "nextPointLabel: " << nextPointLabel << endl; # endif i++; @@ -619,7 +619,7 @@ void starMesh::createCoupleMatches() tmpMasterFace.setSize(nTmpMasterLabels); # ifdef DEBUG_FACE_ORDERING - Info << "tmpMasterFace: " << tmpMasterFace << endl; + Info<< "tmpMasterFace: " << tmpMasterFace << endl; # endif // Eliminate all zero-length edges @@ -657,7 +657,7 @@ void starMesh::createCoupleMatches() ); # ifdef DEBUG_FACE_ORDERING - Info << "Collapsed: nMaster: " << nMaster + Info<< "Collapsed: nMaster: " << nMaster << " label: " << newMasterFace[nMaster] << endl; # endif @@ -727,7 +727,7 @@ void starMesh::createCoupleMatches() vector edgeVector = slaveEdges[slaveEdgeI].vec(points_); # ifdef DEBUG_FACE_ORDERING - Info << "curSEdgePoints.size(): " + Info<< "curSEdgePoints.size(): " << curSEdgePoints.size() << endl << "edgeVector: " << edgeVector << endl; # endif @@ -739,7 +739,7 @@ void starMesh::createCoupleMatches() points_[slaveEdges[slaveEdgeI].start()]; // loop until the next label to add is -1 - for(;;) + for (;;) { label nextPointLabel = -1; label usedI = -1; @@ -782,7 +782,7 @@ void starMesh::createCoupleMatches() } # ifdef DEBUG_FACE_ORDERING - Info << "nextPointLabel: " << nextPointLabel << endl; + Info<< "nextPointLabel: " << nextPointLabel << endl; # endif i++; @@ -813,7 +813,7 @@ void starMesh::createCoupleMatches() tmpSlaveFace.setSize(nTmpSlaveLabels); # ifdef DEBUG_FACE_ORDERING - Info << "tmpSlaveFace: " << tmpSlaveFace << endl; + Info<< "tmpSlaveFace: " << tmpSlaveFace << endl; # endif // Eliminate all zero-length edges @@ -834,7 +834,7 @@ void starMesh::createCoupleMatches() forAll(slvEdgesToCollapse, edgeI) { # ifdef DEBUG_FACE_ORDERING - Info << "slave edge length: " << edgeI << ", " + Info<< "slave edge length: " << edgeI << ", " << slvEdgesToCollapse[edgeI].mag(points_)<< endl; # endif @@ -880,7 +880,7 @@ void starMesh::createCoupleMatches() edgeList newSlaveEdges = newSlaveFace.edges(); # ifdef DEBUG_RIGHT_HAND_WALK - Info << "newMasterEdges: " << newMasterEdges << endl + Info<< "newMasterEdges: " << newMasterEdges << endl << "newSlaveEdges: " << newSlaveEdges << endl; # endif @@ -926,7 +926,7 @@ void starMesh::createCoupleMatches() startEdgeFound = 2; # ifdef DEBUG_RIGHT_HAND_WALK - Info << "slave edge found" << endl; + Info<< "slave edge found" << endl; # endif break; @@ -969,7 +969,7 @@ void starMesh::createCoupleMatches() startEdgeFound = 1; # ifdef DEBUG_RIGHT_HAND_WALK - Info << "master edge found" << endl; + Info<< "master edge found" << endl; # endif break; @@ -986,7 +986,7 @@ void starMesh::createCoupleMatches() if (startEdgeFound > 0) { # ifdef DEBUG_RIGHT_HAND_WALK - Info << "start edge: " << startEdge << endl; + Info<< "start edge: " << startEdge << endl; # endif // Loop through both faces and add all edges @@ -1004,7 +1004,7 @@ void starMesh::createCoupleMatches() planeNormal /= mag(planeNormal) + VSMALL; # ifdef DEBUG_RIGHT_HAND_WALK - Info << "planeNormal: " << planeNormal << endl; + Info<< "planeNormal: " << planeNormal << endl; # endif // Do a check to control the right-hand turn. This is @@ -1034,7 +1034,7 @@ void starMesh::createCoupleMatches() if (tripleProduct < 0) { # ifdef DEBUG_RIGHT_HAND_WALK - Info << "Turning edge for right-hand turn rule" << endl; + Info<< "Turning edge for right-hand turn rule" << endl; # endif startEdge = startEdge.reverseEdge(); } @@ -1155,7 +1155,7 @@ void starMesh::createCoupleMatches() scalar curGoStraight = newDir & ahead; # ifdef DEBUG_RIGHT_HAND_WALK - Info << "curRightTurn: " << curRightTurn + Info<< "curRightTurn: " << curRightTurn << " curGoStraight: " << curGoStraight << endl; # endif @@ -1167,7 +1167,7 @@ void starMesh::createCoupleMatches() if (curGoStraight > goStraight) { # ifdef DEBUG_RIGHT_HAND_WALK - Info << "a" << endl; + Info<< "a" << endl; # endif // Good edge, turning left less than before @@ -1179,7 +1179,7 @@ void starMesh::createCoupleMatches() else // new edge turning right { # ifdef DEBUG_RIGHT_HAND_WALK - Info << "b" << endl; + Info<< "b" << endl; # endif // good edge, turning right @@ -1197,7 +1197,7 @@ void starMesh::createCoupleMatches() if (curGoStraight < goStraight) { # ifdef DEBUG_RIGHT_HAND_WALK - Info << "c" << endl; + Info<< "c" << endl; # endif // good edge, turning right more than before @@ -1256,7 +1256,7 @@ void starMesh::createCoupleMatches() intersectedFace.setSize(nIntFacePoints); # ifdef DEBUG_COUPLE - Info << "intersectedFace: " << intersectedFace << endl; + Info<< "intersectedFace: " << intersectedFace << endl; # endif // check the intersection face for duplicate points @@ -1315,7 +1315,7 @@ void starMesh::createCoupleMatches() forAll (intersectedFace, intPointI) { # ifdef DEBUG_COUPLE_PROJECTION - Info << "Proj: old point: " + Info<< "Proj: old point: " << points_[intersectedFace[intPointI]] << endl; # endif @@ -1501,7 +1501,7 @@ void starMesh::createCoupleMatches() points_.setSize(nLivePoints); // Finished - Info << "Finished doing couples" << endl; + Info<< "Finished doing couples" << endl; } } diff --git a/applications/utilities/mesh/conversion/starToFoam/createPolyBoundary.C b/applications/utilities/mesh/conversion/starToFoam/createPolyBoundary.C index 5f1e4b726045d4c96433d30af01a186a87edd631..e8eb4ec479c85108f35e0d1e1f745b02a7f1914b 100644 --- a/applications/utilities/mesh/conversion/starToFoam/createPolyBoundary.C +++ b/applications/utilities/mesh/conversion/starToFoam/createPolyBoundary.C @@ -99,7 +99,7 @@ void starMesh::createPolyBoundary() << curCellFaces[cellFaceI] << endl; - Info << "PROSTAR Command: vset,news,vlis"; + Info<< "PROSTAR Command: vset,news,vlis"; forAll (curCellFaces[cellFaceI], spI) { // check if the point is given by STAR @@ -118,10 +118,10 @@ void starMesh::createPolyBoundary() } else { - Info << ",???"; + Info<< ",???"; } } - Info << " $ bset,add,vset,all" << endl; + Info<< " $ bset,add,vset,all" << endl; } else { @@ -135,7 +135,7 @@ void starMesh::createPolyBoundary() << curCellFaces[cellFaceI] << endl; - Info << "PROSTAR Command: vset,news,vlis"; + Info<< "PROSTAR Command: vset,news,vlis"; forAll (curCellFaces[cellFaceI], spI) { // check if the point is given by STAR @@ -154,10 +154,10 @@ void starMesh::createPolyBoundary() } else { - Info << ",???"; + Info<< ",???"; } } - Info << " $ bset,add,vset,all" << endl; + Info<< " $ bset,add,vset,all" << endl; } } @@ -191,7 +191,7 @@ void starMesh::createPolyBoundary() { const face& missingFace = cellFaces_[cellI][faceI]; - Info << "starMesh::createPolyBoundary() : " + Info<< "starMesh::createPolyBoundary() : " << "missing face found in cell " << cellI << ".\nType: " << cellShapes_[cellI].model().name() << ". STAR cell number: " << starCellID_[cellI] @@ -199,7 +199,7 @@ void starMesh::createPolyBoundary() nMissingFaceFound++; - Info << "PROSTAR Command: vset,news,vlis"; + Info<< "PROSTAR Command: vset,news,vlis"; forAll (missingFace, spI) { // check if the point is given by STAR or created locally @@ -209,21 +209,21 @@ void starMesh::createPolyBoundary() && missingFace[spI] < starPointID_.size() ) { - Info << "," << starPointID_[missingFace[spI]]; + Info<< "," << starPointID_[missingFace[spI]]; } else { - Info << ",???"; + Info<< ",???"; } } - Info << " $ bset,add,vset,all" << endl; + Info<< " $ bset,add,vset,all" << endl; } } } if (nMissingFaceFound > 0) { - Info << "Number of unmatched faces: " << nMissingFaceFound << endl; + Info<< "Number of unmatched faces: " << nMissingFaceFound << endl; } // reset the size of the face list @@ -256,14 +256,14 @@ void starMesh::createPolyBoundary() { const face& problemFace = meshFaces_[faceI]; - Info << "starMesh::createPolyBoundary() : " + Info<< "starMesh::createPolyBoundary() : " << "problem with face " << faceI << ": addressed " << markupFaces[faceI] << " times (should be 2!). Face: " << problemFace << endl; nProblemFacesFound++; - Info << "PROSTAR Command: vset,news,vlis"; + Info<< "PROSTAR Command: vset,news,vlis"; forAll (problemFace, spI) { // check if the point is given by STAR or created locally @@ -273,25 +273,25 @@ void starMesh::createPolyBoundary() && problemFace[spI] < starPointID_.size() ) { - Info << "," << starPointID_[problemFace[spI]]; + Info<< "," << starPointID_[problemFace[spI]]; } else { - Info << ",???"; + Info<< ",???"; } } - Info << " $ bset,add,vset,all" << endl; + Info<< " $ bset,add,vset,all" << endl; } } if (nProblemFacesFound > 0) { - Info << "Number of incorrectly matched faces: " + Info<< "Number of incorrectly matched faces: " << nProblemFacesFound << endl; } - Info << "Number of boundary faces: " << nBoundaryFacesFound << endl; - Info << "Total number of faces: " << nCreatedFaces << endl; + Info<< "Number of boundary faces: " << nBoundaryFacesFound << endl; + Info<< "Total number of faces: " << nCreatedFaces << endl; } diff --git a/applications/utilities/mesh/conversion/starToFoam/createPolyCells.C b/applications/utilities/mesh/conversion/starToFoam/createPolyCells.C index fc2e65a0b984503a3ce8a30ec13e48d70c1a61f5..c4847fc3903faf20cfd2a11a7fd9af405d02eac5 100644 --- a/applications/utilities/mesh/conversion/starToFoam/createPolyCells.C +++ b/applications/utilities/mesh/conversion/starToFoam/createPolyCells.C @@ -55,7 +55,7 @@ void starMesh::createPolyCells() maxFaces += cellFaces_[cellI].size(); } - Info << "Maximum possible number of faces in mesh: " << maxFaces << endl; + Info<< "Maximum possible number of faces in mesh: " << maxFaces << endl; meshFaces_.setSize(maxFaces); @@ -72,7 +72,7 @@ void starMesh::createPolyCells() // Insertion cannot be done in one go as the faces need to be // added into the list in the increasing order of neighbour // cells. Therefore, all neighbours will be detected first - // and then added in the correct order. + // and then added in the correct order. const faceList& curFaces = cellFaces_[cellI]; @@ -109,7 +109,7 @@ void starMesh::createPolyCells() label curNei = curNeighbours[neiI]; // reject neighbours with the lower label. This should - // also reject current cell. + // also reject current cell. if (curNei > cellI) { // get the list of search faces diff --git a/applications/utilities/mesh/conversion/starToFoam/mergeCoupleFacePoints.C b/applications/utilities/mesh/conversion/starToFoam/mergeCoupleFacePoints.C index 5850c723e0f707643bbc04768043e7e1dfbe757a..73ca9628d8db42652315f3121d133b3c76062499 100644 --- a/applications/utilities/mesh/conversion/starToFoam/mergeCoupleFacePoints.C +++ b/applications/utilities/mesh/conversion/starToFoam/mergeCoupleFacePoints.C @@ -48,9 +48,9 @@ void starMesh::mergeCoupleFacePoints() // merge set. Once all cells (and thus points) are visited, go // through the renumbering list and for each merging point use the // label of the merge set as the new point label. - // This is VERY fancy. Use care if/when changing. + // This is VERY fancy. Use care if/when changing. - Info << endl << "Creating merge sets" << endl; + Info<< endl << "Creating merge sets" << endl; // Create a renumbering list for points // In the first instance the renumbering list is used as a @@ -162,7 +162,7 @@ void starMesh::mergeCoupleFacePoints() if (nMergeSets >= mergeSetID.size()) { - Info << "Resizing mergeSetID" << endl; + Info<< "Resizing mergeSetID" << endl; mergeSetID.setSize (mergeSetID.size() + mergeIncrement); @@ -327,7 +327,7 @@ void starMesh::mergeCoupleFacePoints() // This should be OK as the compressed points list will always // have less points that the original lists. Even if there is // no points removed, this will copy the list back onto itself - // + // renumberPoints[pointI] = nUsedPoints; points_[nUsedPoints] = points_[pointI]; @@ -345,7 +345,7 @@ void starMesh::mergeCoupleFacePoints() // reset number of points which need to be sorted points_.setSize(nUsedPoints); - Info << "Renumbering all faces" << endl; + Info<< "Renumbering all faces" << endl; forAll (cellFaces_, cellI) { @@ -374,7 +374,7 @@ void starMesh::mergeCoupleFacePoints() } } - Info << "Renumbering all cell shapes" << endl; + Info<< "Renumbering all cell shapes" << endl; forAll (cellShapes_, cellI) { @@ -402,7 +402,7 @@ void starMesh::mergeCoupleFacePoints() } } - Info << "Renumbering STAR point lookup" << endl; + Info<< "Renumbering STAR point lookup" << endl; labelList oldStarPointID = starPointID_; diff --git a/applications/utilities/mesh/conversion/starToFoam/purgeCellShapes.C b/applications/utilities/mesh/conversion/starToFoam/purgeCellShapes.C index 88f62252361f4699a64efce88c3b90d936cc756b..92dedc00e62a013f4b2a65f212d52915186a1e9e 100644 --- a/applications/utilities/mesh/conversion/starToFoam/purgeCellShapes.C +++ b/applications/utilities/mesh/conversion/starToFoam/purgeCellShapes.C @@ -55,12 +55,12 @@ void starMesh::purgeCellShapes() if (!found) { - Info << "Purging cell shape " << cellI << endl; + Info<< "Purging cell shape " << cellI << endl; cellShapes_[cellI] = cellShape(*unknownPtr_, labelList(0)); break; } } - } + } } diff --git a/applications/utilities/mesh/conversion/starToFoam/readCouples.C b/applications/utilities/mesh/conversion/starToFoam/readCouples.C index 975dab47d8199ea17b4f94c387de8372dcefb0e1..4d586c3da7f2090045e30f8aa9cb4000e40fa7ca 100644 --- a/applications/utilities/mesh/conversion/starToFoam/readCouples.C +++ b/applications/utilities/mesh/conversion/starToFoam/readCouples.C @@ -44,7 +44,7 @@ void starMesh::readCouples() if (couplesFile.good()) { - Info << "\nReading couples" << endl; + Info<< "\nReading couples" << endl; label matchLabel, nEntries, typeFlag; label starMasterCell, rotXMasterFace; @@ -178,7 +178,7 @@ void starMesh::readCouples() } } - Info << "finished reading couples" << endl; + Info<< "finished reading couples" << endl; } } diff --git a/applications/utilities/mesh/conversion/starToFoam/starMesh.C b/applications/utilities/mesh/conversion/starToFoam/starMesh.C index a495ae03624437cc6d0a5e769ebf4ae0d9c49b8e..9f9ddfe94b5fff50caef4dfead37a9b963e1c3d9 100644 --- a/applications/utilities/mesh/conversion/starToFoam/starMesh.C +++ b/applications/utilities/mesh/conversion/starToFoam/starMesh.C @@ -87,7 +87,7 @@ const label starMesh::sammAddressingTable[9][12] = // (first index) and STAR face number // - first column is always -1 // - last column is -1 for all but hexagonal prism -// WARNING: Possible bug for sammTrim2 +// WARNING: Possible bug for sammTrim2 // The lookup table for SAMM shapes is based on the rotation of the // shape. This would imply that the table below needs to be split between // the regular shapes (3-9), which are OK, and the SAMM shapes, for which @@ -95,7 +95,7 @@ const label starMesh::sammAddressingTable[9][12] = // cell, firts find out the face index in the normal rotation using the cell // face permutation table and then use the index from the shape face lookup. // Additionally, have in mind that this silliness does not allow matches -// on face 7 and 8 of the samm cell. +// on face 7 and 8 of the samm cell. const label starMesh::sammFacePermutationTable[24][8] = { @@ -180,7 +180,7 @@ const label starMesh::shapeFaceLookup[19][9] = // samm trim 8: // star number: 1 2 3 4 5 6 7 8 In ROTATION 0 // foam number: 2 5 4 7 1 0 3 6 -// confirmed: 1 0 6 +// confirmed: 1 0 6 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -188,7 +188,7 @@ const label starMesh::shapeFaceLookup[19][9] = // Make polyhedral mesh data (packing) void starMesh::createPolyMeshData() { - Info << "Creating a polyMesh" << endl; + Info<< "Creating a polyMesh" << endl; createPolyCells(); @@ -203,7 +203,7 @@ void starMesh::createPolyMeshData() // a memory peak void starMesh::clearExtraStorage() { - Info << "Clearing extra storage" << endl; + Info<< "Clearing extra storage" << endl; starPointLabelLookup_.setSize(0); starPointID_.setSize(0); diff --git a/applications/utilities/mesh/conversion/starToFoam/starToFoam.C b/applications/utilities/mesh/conversion/starToFoam/starToFoam.C index 2c2aeaa76b5ba2cc2a3350c6ebe7075e21ff3f23..7ed1cddd368a185c2810f5238b8e79669c19e489 100644 --- a/applications/utilities/mesh/conversion/starToFoam/starToFoam.C +++ b/applications/utilities/mesh/conversion/starToFoam/starToFoam.C @@ -61,10 +61,10 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing mesh" << endl; + Info<< "Writing mesh" << endl; makeMesh.writeMesh(); - Info<< nl << "End" << nl << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/conversion/starToFoam/writeMesh.C b/applications/utilities/mesh/conversion/starToFoam/writeMesh.C index 3e0cdee1fbce0caa0cb38d79b25eeeca1d3f08e7..746087fb7e37130b93949a6b52964e11eb0267c2 100644 --- a/applications/utilities/mesh/conversion/starToFoam/writeMesh.C +++ b/applications/utilities/mesh/conversion/starToFoam/writeMesh.C @@ -37,9 +37,9 @@ void starMesh::writeMesh() { if (isShapeMesh_) { - Info << "This is a shapeMesh." << endl; + Info<< "This is a shapeMesh." << endl; - Info << "Default patch type set to empty" << endl; + Info<< "Default patch type set to empty" << endl; clearExtraStorage(); @@ -61,7 +61,7 @@ void starMesh::writeMesh() patchPhysicalTypes_ ); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pShapeMesh.write(); } else @@ -70,7 +70,7 @@ void starMesh::writeMesh() createPolyMeshData(); - Info << "This is a polyMesh" << endl; + Info<< "This is a polyMesh" << endl; clearExtraStorage(); @@ -90,7 +90,7 @@ void starMesh::writeMesh() // adding patches also checks the mesh pMesh.addPatches(polyBoundaryPatches(pMesh)); - Info << "Writing polyMesh" << endl; + Info<< "Writing polyMesh" << endl; pMesh.write(); } } diff --git a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C index d2b23fef161b22f9f746251fc4b5c87a02bb4a29..c00be771118e664310f55dd9e2d2f5e5ec0a9951 100644 --- a/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C +++ b/applications/utilities/mesh/conversion/writeMeshObj/writeMeshObj.C @@ -62,7 +62,7 @@ void writePoints(const polyMesh& mesh, const fileName& timeName) fileName pointFile(mesh.time().path()/"meshPoints_" + timeName + ".obj"); - Info << "Writing mesh points and edges to " << pointFile << endl; + Info<< "Writing mesh points and edges to " << pointFile << endl; OFstream pointStream(pointFile); @@ -91,7 +91,7 @@ void writePoints { fileName fName(mesh.time().path()/"meshPoints_" + timeName + ".obj"); - Info << "Writing mesh points and edges to " << fName << endl; + Info<< "Writing mesh points and edges to " << fName << endl; OFstream str(fName); @@ -162,7 +162,7 @@ void writePoints / "meshPoints_" + timeName + '_' + name(cellI) + ".obj" ); - Info << "Writing mesh points and edges to " << fName << endl; + Info<< "Writing mesh points and edges to " << fName << endl; OFstream pointStream(fName); @@ -182,7 +182,7 @@ void writeFaceCentres(const polyMesh& mesh,const fileName& timeName) / "meshFaceCentres_" + timeName + ".obj" ); - Info << "Writing mesh face centres to " << faceFile << endl; + Info<< "Writing mesh face centres to " << faceFile << endl; OFstream faceStream(faceFile); @@ -200,7 +200,7 @@ void writeCellCentres(const polyMesh& mesh, const fileName& timeName) mesh.time().path()/"meshCellCentres_" + timeName + ".obj" ); - Info << "Writing mesh cell centres to " << cellFile << endl; + Info<< "Writing mesh cell centres to " << cellFile << endl; OFstream cellStream(cellFile); @@ -228,7 +228,7 @@ void writePatchCentres mesh.time().path()/"patch_" + pp.name() + '_' + timeName + ".obj" ); - Info << "Writing patch face centres to " << faceFile << endl; + Info<< "Writing patch face centres to " << faceFile << endl; OFstream patchFaceStream(faceFile); @@ -258,7 +258,7 @@ void writePatchFaces / "patchFaces_" + pp.name() + '_' + timeName + ".obj" ); - Info << "Writing patch faces to " << faceFile << endl; + Info<< "Writing patch faces to " << faceFile << endl; OFstream patchFaceStream(faceFile); @@ -301,7 +301,7 @@ void writePatchBoundaryEdges / "patchEdges_" + pp.name() + '_' + timeName + ".obj" ); - Info << "Writing patch edges to " << edgeFile << endl; + Info<< "Writing patch edges to " << edgeFile << endl; OFstream patchEdgeStream(edgeFile); @@ -351,7 +351,7 @@ void writePointCells / "pointEdges_" + timeName + '_' + name(pointI) + ".obj" ); - Info << "Writing pointEdges to " << pFile << endl; + Info<< "Writing pointEdges to " << pFile << endl; OFstream pointStream(pFile); @@ -492,7 +492,7 @@ int main(int argc, char *argv[]) + ".obj" ); - Info << "Writing mesh points and edges to " << fName << endl; + Info<< "Writing mesh points and edges to " << fName << endl; OFstream str(fName); @@ -506,7 +506,7 @@ int main(int argc, char *argv[]) } else if ( - !patchFaces + !patchFaces && !patchEdges && !doCell && !doPoint @@ -530,14 +530,14 @@ int main(int argc, char *argv[]) } else { - Info << "No mesh." << endl; + Info<< "No mesh." << endl; } - Info << nl << endl; + Info<< nl << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C index 6cdec703dcd52eae4e0568b5f3babef066a26803..bb30cfd4a561d3f90bd2971502b250909f284a69 100644 --- a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C +++ b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C @@ -382,7 +382,7 @@ int main(int argc, char *argv[]) } } - Info<< nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H b/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H index aeb3137adfe091daaabbda9490016527a066afe9..2fd2fe2dc1d5d1f6f8bef68d48b66638d80316d9 100644 --- a/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H +++ b/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H @@ -83,11 +83,11 @@ ); } // end of all merge pairs - Info << "Adding point and face zones" << endl; + Info<< "Adding point and face zones" << endl; mesh.addZones(pz, fz, cz); - Info << "Creating attachPolyTopoChanger" << endl; + Info<< "Creating attachPolyTopoChanger" << endl; attachPolyTopoChanger polyMeshAttacher(mesh); polyMeshAttacher.setSize(mergePatchPairs.size()); diff --git a/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C b/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C index c71f91079c8cda68c77b86054a9d8cf01c2c4a27..ff8f118d1ca7e8bb302bdcc15e60ceab09ad457a 100644 --- a/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C +++ b/applications/utilities/mesh/generation/extrude2DMesh/doExtrude2DMesh.C @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) // ~~~~~~~~~~~~~~~~~~~~~~ scalar minRange = GREAT; - direction extrudeDir = -1; + direction extrudeDir = 4; //illegal value. for (direction dir = 0; dir < 3; dir++) { diff --git a/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C b/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C index 5aadec52c9cba46ff39ed64e92031a848eb8e0fe..f970c80e71c4cf5cbce74cf9f5ed82e784f118bd 100644 --- a/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C +++ b/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C @@ -418,8 +418,8 @@ int main(int argc, char *argv[]) frontPatchFaces.setSize(layerFaces.size()); forAll(backPatchFaces, i) { - backPatchFaces[i] = layerFaces[i][0]; - frontPatchFaces[i] = layerFaces[i][layerFaces[i].size()-1]; + backPatchFaces[i] = layerFaces[i].first(); + frontPatchFaces[i] = layerFaces[i].last(); } // Create dummy fvSchemes, fvSolution @@ -693,7 +693,7 @@ int main(int argc, char *argv[]) << exit(FatalError); } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/generation/snappyHexMesh/Make/options b/applications/utilities/mesh/generation/snappyHexMesh/Make/options index e6db59c8250a374574abe60d32f0445bc89f226a..d2ae5219d3c7ff37174e855b7607db591e83a070 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/Make/options +++ b/applications/utilities/mesh/generation/snappyHexMesh/Make/options @@ -1,6 +1,6 @@ EXE_INC = \ /* -g -DFULLDEBUG -O0 */ \ - -I$(LIB_SRC)/decompositionMethods/decompositionMethods/lnInclude \ + -I$(LIB_SRC)/parallel/decompositionMethods/lnInclude \ -I$(LIB_SRC)/mesh/autoMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/triSurface/lnInclude \ diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index 92c92d72e5ae9bacad9c7944aa6d79ff119b5dfa..ab8adca478e8fc7235c1949081d1d213f150f569 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -274,7 +274,7 @@ addLayersControls maxThicknessToMedialRatio 0.3; // Angle used to pick up medial axis points - minMedianAxisAngle 130; + minMedianAxisAngle 90; // Create buffer region for new layer terminations nBufferCellsNoExtrude 0; diff --git a/applications/utilities/mesh/manipulation/cellSet/cellSet.C b/applications/utilities/mesh/manipulation/cellSet/cellSet.C index e8036274261ada966abc16b8210fdf36fcf84623..9edfa8d44a28ce931e4d76cbb6bcca62dbc7373d 100644 --- a/applications/utilities/mesh/manipulation/cellSet/cellSet.C +++ b/applications/utilities/mesh/manipulation/cellSet/cellSet.C @@ -189,7 +189,7 @@ int main(int argc, char *argv[]) currentSet.write(); } - Info << nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C index 6caeffbd4ec7d53a8392460a635f4820c9740940..0ce3a9d8e6483e355cfc12e5b2a22231e5aff936 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C @@ -120,7 +120,7 @@ int main(int argc, char *argv[]) } else { - Info << "\nMesh OK.\n" << endl; + Info<< "\nMesh OK.\n" << endl; } } } diff --git a/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C b/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C index 269656594c5c6524c6508c7c602967ac419173df..462d1531f8d3139c111934a82580be07eb40c6c3 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C +++ b/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C @@ -96,7 +96,7 @@ void Foam::printMeshStats(const polyMesh& mesh, const bool allTopology) label nTetWedge = 0; label nUnknown = 0; - for(label cellI = 0; cellI < mesh.nCells(); cellI++) + for (label cellI = 0; cellI < mesh.nCells(); cellI++) { if (hex.isA(mesh, cellI)) { diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C index c6fa2012188efe580b77cd5527572b7a09cfd58f..64403919f39d4899c7d7093b619bd93bb16e7334 100644 --- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C +++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C @@ -186,7 +186,7 @@ int main(int argc, char *argv[]) { newPatches.append(findPatchID(mesh, patchNames[i])); Info<< "Using additional patch " << patchNames[i] - << " at index " << newPatches[newPatches.size()-1] << endl; + << " at index " << newPatches.last() << endl; } } diff --git a/applications/utilities/mesh/manipulation/faceSet/faceSet.C b/applications/utilities/mesh/manipulation/faceSet/faceSet.C index 8441a1cdbe2ce773f4021ad2e572e7de02959b79..9bd9736cab31320557d705f9af4b8e0ef775d628 100644 --- a/applications/utilities/mesh/manipulation/faceSet/faceSet.C +++ b/applications/utilities/mesh/manipulation/faceSet/faceSet.C @@ -189,7 +189,7 @@ int main(int argc, char *argv[]) currentSet.write(); } - Info << nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C index 69ba27f117535a54228ae3900e02ea6bcb3dbd6a..81fd297a888ed39a7c530a180c853d147cc06b79 100644 --- a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C +++ b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing points into directory " << points.path() << nl << endl; + Info<< "Writing points into directory " << points.path() << nl << endl; points.write(); return 0; diff --git a/applications/utilities/mesh/manipulation/insideCells/insideCells.C b/applications/utilities/mesh/manipulation/insideCells/insideCells.C index 7087e0506258a52dda7c281b90f2cfbd0c52909f..22f99465632927c606b7909e4b9e197d74d12a47 100644 --- a/applications/utilities/mesh/manipulation/insideCells/insideCells.C +++ b/applications/utilities/mesh/manipulation/insideCells/insideCells.C @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) insideCells.write(); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C index b13dfb86ef04bc243b54d7517902d8e7a103ce7d..620201ba91795b2bfbb362b3c603811fded8cfba 100644 --- a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C +++ b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) masterMesh.merge(); masterMesh.polyMesh::write(); - Info << nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/mergePolyMesh.C b/applications/utilities/mesh/manipulation/mergeMeshes/mergePolyMesh.C index 616cfb4ce74b274996d3a770e7cdd4b1248d10d1..d1b633a4b9ee61adaaa06b8b5c0478111756a001 100644 --- a/applications/utilities/mesh/manipulation/mergeMeshes/mergePolyMesh.C +++ b/applications/utilities/mesh/manipulation/mergeMeshes/mergePolyMesh.C @@ -385,7 +385,7 @@ void Foam::mergePolyMesh::merge() // Add the patches if necessary if (patchNames_.size() != boundaryMesh().size()) { - Info << "Copying old patches" << endl; + Info<< "Copying old patches" << endl; List<polyPatch*> newPatches(patchNames_.size()); @@ -399,7 +399,7 @@ void Foam::mergePolyMesh::merge() newPatches[patchI] = oldPatches[patchI].clone(oldPatches).ptr(); } - Info << "Adding new patches. " << endl; + Info<< "Adding new patches. " << endl; label endOfLastPatch = oldPatches[patchI - 1].start() + oldPatches[patchI - 1].size(); diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C index 9876f4a06f7e8025054049522e9c6e9e4a6cafc1..0c976715904f7a8374658ce2331a71d2ad242a66 100644 --- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C +++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C @@ -33,8 +33,8 @@ License const Foam::label Foam::mirrorFvMesh::cellRenumber[8][8] = { {-1, -1, -1, -1, -1, -1, -1, -1}, // unknown - {-1, -1, -1, -1, -1, -1, -1, -1}, // - {-1, -1, -1, -1, -1, -1, -1, -1}, // + {-1, -1, -1, -1, -1, -1, -1, -1}, // + {-1, -1, -1, -1, -1, -1, -1, -1}, // { 0, 3, 2, 1, 4, 7, 6, 5}, // hex { 2, 1, 0, 5, 4, 3, 6, -1}, // wedge { 0, 2, 1, 3, 5, 4, -1, -1}, // prism @@ -74,7 +74,7 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io) const polyPatchList& oldPatches = boundaryMesh(); // Mirror the points - Info << "Mirroring points. Old points: " << oldPoints.size(); + Info<< "Mirroring points. Old points: " << oldPoints.size(); pointField newPoints(2*oldPoints.size()); label nNewPoints = 0; @@ -120,10 +120,10 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io) } // Reset the size of the point list - Info << " New points: " << nNewPoints << endl; + Info<< " New points: " << nNewPoints << endl; newPoints.setSize(nNewPoints); - Info << "Mirroring faces. Old faces: " << oldFaces.size(); + Info<< "Mirroring faces. Old faces: " << oldFaces.size(); // Algorithm: // During mirroring, the faces that were previously boundary faces @@ -329,14 +329,14 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io) // Tidy up the lists newFaces.setSize(nNewFaces); - Info << " New faces: " << nNewFaces << endl; + Info<< " New faces: " << nNewFaces << endl; newPatchTypes.setSize(nNewPatches); newPatchNames.setSize(nNewPatches); newPatchSizes.setSize(nNewPatches); newPatchStarts.setSize(nNewPatches); - Info << "Mirroring patches. Old patches: " << boundary().size() + Info<< "Mirroring patches. Old patches: " << boundary().size() << " New patches: " << nNewPatches << endl; Info<< "Mirroring cells. Old cells: " << oldCells.size() @@ -378,9 +378,9 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io) } // Mirror the cell shapes - Info << "Mirroring cell shapes." << endl; + Info<< "Mirroring cell shapes." << endl; - Info << nl << "Creating new mesh" << endl; + Info<< nl << "Creating new mesh" << endl; mirrorMeshPtr_ = new fvMesh ( io, diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C index a8b93b8d6823e63708484c3f39f2ec5d8e756d8a..a762dda0da4784d327365f159a4fb101c1838960 100644 --- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C +++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C @@ -54,10 +54,10 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing mirrored mesh" << endl; + Info<< "Writing mirrored mesh" << endl; mesh.mirrorMesh().write(); - Info << "End" << endl; + Info<< "End" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C b/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C index 07190e49f9842dbfbae3f00ec5d7544934ff9df6..cf0b6ccd2790117f2e5437c4574186b9c8c528ae 100644 --- a/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C +++ b/applications/utilities/mesh/manipulation/objToVTK/objToVTK.C @@ -266,7 +266,7 @@ int main(int argc, char *argv[]) } } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/pointSet/pointSet.C b/applications/utilities/mesh/manipulation/pointSet/pointSet.C index 1aa70191f84cc2e1b16875a2f206ab9fcfeea870..fb0c7b12fd7899f391bccca44c87bb0f41043287 100644 --- a/applications/utilities/mesh/manipulation/pointSet/pointSet.C +++ b/applications/utilities/mesh/manipulation/pointSet/pointSet.C @@ -189,7 +189,7 @@ int main(int argc, char *argv[]) currentSet.write(); } - Info << nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/renumberMesh/Make/options b/applications/utilities/mesh/manipulation/renumberMesh/Make/options index a8d7971b3b4a3ff72007b43a9db20a85694ca376..3b3b8ad48f32676c2865d1da6cef3fc0d0f803f7 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/Make/options +++ b/applications/utilities/mesh/manipulation/renumberMesh/Make/options @@ -2,7 +2,7 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/decompositionMethods/decompositionMethods/lnInclude + -I$(LIB_SRC)/parallel/decompositionMethods/lnInclude EXE_LIBS = \ -lmeshTools \ diff --git a/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C b/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C index d7a84ee45a88d7cf9bbe91dd50a8ac728ecd65f6..84b2ed78a79419c78012888731c4b5e3d522450a 100644 --- a/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C +++ b/applications/utilities/mesh/manipulation/rotateMesh/rotateMesh.C @@ -103,7 +103,7 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing points into directory " << points.path() << nl << endl; + Info<< "Writing points into directory " << points.path() << nl << endl; points.write(); } diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C index 7b348015d40cf5147d80f8eb5868b398bf086c5c..b704c71a5de2dd2f83f9526e94234b4e53ff0c71 100644 --- a/applications/utilities/mesh/manipulation/setSet/setSet.C +++ b/applications/utilities/mesh/manipulation/setSet/setSet.C @@ -284,10 +284,10 @@ void printHelp(Ostream& os) << endl << "Zones can be set using zoneSets from corresponding sets:" << endl << " cellZoneSet c0Zone new setToCellZone c0" << endl - << " faceZoneSet f0Zone new setToFaceZone f0" << endl + << " faceZoneSet f0Zone new setToFaceZone f0" << endl << endl << "or if orientation is important:" << endl - << " faceZoneSet f0Zone new setsToFaceZone f0 c0" << endl + << " faceZoneSet f0Zone new setsToFaceZone f0 c0" << endl << endl << "ZoneSets can be manipulated using the general actions:" << endl << " list - prints the contents of the set" << endl @@ -992,7 +992,7 @@ int main(int argc, char *argv[]) delete fileStreamPtr; } - Pout<< "\nEnd" << endl; + Pout<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C index df419e118b70418f11d54e277dc60f701576855a..30aba0f5ab8f7a9552cdb98d249e89e9f66f5900 100644 --- a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C +++ b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C @@ -341,7 +341,7 @@ int main(int argc, char *argv[]) << exit(FatalError); } - Info<< nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C index de6d5c10e4ec187c3f0b6c1999772120e62be77a..d1455a55c5636b429ff77bb800b0674932ee0f89 100644 --- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C +++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C @@ -236,7 +236,7 @@ int main(int argc, char *argv[]) mesh.faceZones() ); - Info << "Adding point and face zones" << endl; + Info<< "Adding point and face zones" << endl; mesh.addZones(pz, fz, cz); attachPolyTopoChanger splitter(mesh); diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C index be267f872476d9597ee360dc9ea33013451645ca..6abde97e612ea29dae6ca7295e4a1eae426806ad 100644 --- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C +++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C @@ -36,16 +36,17 @@ Description - mesh with cells put into cellZones (-makeCellZones) Note: - - Should work in parallel but cellZone interfaces cannot align with - processor boundaries so use the correct option in decomposition to - preserve those interfaces. + - Should work in parallel. + cellZones can differ on either side of processor boundaries in which case + the faces get moved from processor patch to directMapped patch. Not + ery well tested. - If a cell zone gets split into more than one region it can detect the largest matching region (-sloppyCellZones). This will accept any region that covers more than 50% of the zone. It has to be a subset so cannot have any cells in any other zone. - useCellZonesOnly does not do a walk and uses the cellZones only. Use this if you don't mind having disconnected domains in a single region. - This option requires all cells to be in one (and one only) region. + This option requires all cells to be in one (and one only) cellZone. \*---------------------------------------------------------------------------*/ @@ -514,6 +515,10 @@ void getInterfaceSizes EdgeMap<label>& interfaceSizes ) { + + // Internal faces + // ~~~~~~~~~~~~~~ + forAll(mesh.faceNeighbour(), faceI) { label ownRegion = cellRegion[mesh.faceOwner()[faceI]]; @@ -540,6 +545,47 @@ void getInterfaceSizes } } + // Boundary faces + // ~~~~~~~~~~~~~~ + + // Neighbour cellRegion. + labelList coupledRegion(mesh.nFaces()-mesh.nInternalFaces()); + + forAll(coupledRegion, i) + { + label cellI = mesh.faceOwner()[i+mesh.nInternalFaces()]; + coupledRegion[i] = cellRegion[cellI]; + } + syncTools::swapBoundaryFaceList(mesh, coupledRegion, false); + + forAll(coupledRegion, i) + { + label faceI = i+mesh.nInternalFaces(); + label ownRegion = cellRegion[mesh.faceOwner()[faceI]]; + label neiRegion = coupledRegion[i]; + + if (ownRegion != neiRegion) + { + edge interface + ( + min(ownRegion, neiRegion), + max(ownRegion, neiRegion) + ); + + EdgeMap<label>::iterator iter = interfaceSizes.find(interface); + + if (iter != interfaceSizes.end()) + { + iter()++; + } + else + { + interfaceSizes.insert(interface, 1); + } + } + } + + if (sumParallel && Pstream::parRun()) { if (Pstream::master()) @@ -672,6 +718,17 @@ autoPtr<mapPolyMesh> createRegionMesh } + // Neighbour cellRegion. + labelList coupledRegion(mesh.nFaces()-mesh.nInternalFaces()); + + forAll(coupledRegion, i) + { + label cellI = mesh.faceOwner()[i+mesh.nInternalFaces()]; + coupledRegion[i] = cellRegion[cellI]; + } + syncTools::swapBoundaryFaceList(mesh, coupledRegion, false); + + // Topology change container. Start off from existing mesh. polyTopoChange meshMod(mesh); @@ -691,16 +748,17 @@ autoPtr<mapPolyMesh> createRegionMesh { label faceI = exposedFaces[i]; - if (!mesh.isInternalFace(faceI)) + label ownRegion = cellRegion[mesh.faceOwner()[faceI]]; + label neiRegion = -1; + + if (mesh.isInternalFace(faceI)) { - FatalErrorIn("createRegionMesh(..)") - << "Exposed face:" << faceI << " is not an internal face." - << " fc:" << mesh.faceCentres()[faceI] - << exit(FatalError); + neiRegion = cellRegion[mesh.faceNeighbour()[faceI]]; + } + else + { + neiRegion = coupledRegion[faceI-mesh.nInternalFaces()]; } - - label ownRegion = cellRegion[mesh.faceOwner()[faceI]]; - label neiRegion = cellRegion[mesh.faceNeighbour()[faceI]]; label otherRegion = -1; @@ -1357,22 +1415,14 @@ int main(int argc, char *argv[]) } } - // Different cellZones on either side of processor patch are not - // allowed for now. Convert to processorPatches or what? + // Different cellZones on either side of processor patch. forAll(neiZoneID, i) { label faceI = i+mesh.nInternalFaces(); if (zoneID[mesh.faceOwner()[faceI]] != neiZoneID[i]) { - //blockedFace[faceI] = true; - FatalErrorIn(args.executable()) - << "Coupled face " << faceI - << " fc:" << mesh.faceCentres()[faceI] - << " has cellZone " << zoneID[mesh.faceOwner()[faceI]] - << " on owner side but cellZone " << neiZoneID[i] - << " on other side. This is not allowed." - << exit(FatalError); + blockedFace[faceI] = true; } } } diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C index a5adac74e87d19a1a973835265d719375a47dfb8..9d164f3553872b8514a65ec3cd1b768f495e08e2 100644 --- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C +++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C @@ -172,7 +172,7 @@ int main(int argc, char *argv[]) // set up the tolerances for the sliding mesh dictionary slidingTolerances; - if (args.options().found("toleranceDict")) + if (args.options().found("toleranceDict")) { IOdictionary toleranceFile( IOobject( @@ -180,7 +180,7 @@ int main(int argc, char *argv[]) runTime.constant(), mesh, IOobject::MUST_READ, - IOobject::NO_WRITE + IOobject::NO_WRITE ) ); slidingTolerances += toleranceFile; @@ -231,7 +231,7 @@ int main(int argc, char *argv[]) // Note: make sure to add the zones BEFORE constructing polyMeshModifier // (since looks up various zones at construction time) - Info << "Adding point and face zones" << endl; + Info<< "Adding point and face zones" << endl; mesh.addZones(pz.shrink(), fz.shrink(), cz.shrink()); // Add the perfect interface mesh modifier @@ -316,7 +316,7 @@ int main(int argc, char *argv[]) // Note: make sure to add the zones BEFORE constructing polyMeshModifier // (since looks up various zones at construction time) - Info << "Adding point and face zones" << endl; + Info<< "Adding point and face zones" << endl; mesh.addZones(pz.shrink(), fz.shrink(), cz.shrink()); // Add the sliding interface mesh modifier @@ -393,7 +393,7 @@ int main(int argc, char *argv[]) mesh.setInstance(oldInstance); stitcher.instance() = oldInstance; } - Info << nl << "Writing polyMesh to time " << runTime.timeName() << endl; + Info<< nl << "Writing polyMesh to time " << runTime.timeName() << endl; IOstream::defaultPrecision(10); diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C index f00cc8716fe0a1db3043dd93cc672e3b287a1515..303df1cbae05214a22aa5a4507691cda94580374 100644 --- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C +++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C @@ -439,7 +439,7 @@ int main(int argc, char *argv[]) } - Info << nl << "End" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C index a76c4ad327b9939e7d26ce5ad7c604aa0602b9c4..f9b6354dd4e31d2c04d8e79b6da69661ea257baf 100644 --- a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C +++ b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C @@ -267,7 +267,7 @@ int main(int argc, char *argv[]) // Set the precision of the points data to 10 IOstream::defaultPrecision(10); - Info << "Writing points into directory " << points.path() << nl << endl; + Info<< "Writing points into directory " << points.path() << nl << endl; points.write(); return 0; diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options index 421e59a7f140817e59bae04ae1837f5528023836..e473b84bb97d6b6674fe75f865e16df486bf5bb3 100644 --- a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options +++ b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options @@ -1,43 +1,59 @@ EXE_LIBS = \ + -lautoMesh \ + -lbarotropicCompressibilityModel \ -lbasicThermophysicalModels \ + -lblockMesh \ -lchemistryModel \ - -lreactionThermophysicalModels \ + -lcoalCombustion \ -lcompressibleLESModels \ + -lcompressibleRASModels \ + -lcompressibleTurbulenceModel \ + -lconversion \ -ldecompositionMethods \ -ldieselSpray \ + -ldsmc \ -ldynamicFvMesh \ -ldynamicMesh \ -ledgeMesh \ -lengine \ -lerrorEstimation \ + -lfieldFunctionObjects \ -lfiniteVolume \ -lforces \ -lfvMotionSolvers \ + -lgenericPatchFields \ -lincompressibleLESModels \ - -lincompressibleTransportModels \ - -lcompressibleRASModels \ -lincompressibleRASModels \ + -lincompressibleTransportModels \ + -lincompressibleTurbulenceModel \ -linterfaceProperties \ - -llagrangianIntermediate \ + -lIOFunctionObjects \ -llagrangian \ + -llagrangianIntermediate \ -llaminarFlameSpeedModels \ -lLESdeltas \ -lLESfilters \ -lliquidMixture \ -lliquids \ -lmeshTools \ + -lmolecularMeasurements \ + -lmolecule \ -lODE \ -lOpenFOAM \ -lpdf \ - -lphaseModel \ + -lpotential \ -lradiation \ -lrandomProcesses \ + -lreactionThermophysicalModels \ -lsampling \ -lsolidMixture \ + -lsolidParticle \ -lsolids \ -lspecie \ + -lsurfMesh \ + -lsystemCall \ + -lthermalPorousZone \ -lthermophysicalFunctions \ -ltopoChangerFvMesh \ -ltriSurface \ - -lautoMesh \ - -lblockMesh + -lutilityFunctionObjects diff --git a/applications/utilities/miscellaneous/patchSummary/patchSummary.C b/applications/utilities/miscellaneous/patchSummary/patchSummary.C index 67ae5270274bc6a6dd84d0fc510ae9979ae954a4..33028ea017f46da7dd2e9cdfbc80c9b8204e16fc 100644 --- a/applications/utilities/miscellaneous/patchSummary/patchSummary.C +++ b/applications/utilities/miscellaneous/patchSummary/patchSummary.C @@ -98,11 +98,11 @@ int main(int argc, char *argv[]) outputFieldList<sphericalTensor>(vsptf, patchI); outputFieldList<symmTensor>(vsytf, patchI); outputFieldList<tensor>(vtf, patchI); - Info << endl; + Info<< endl; } } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/parallelProcessing/decomposePar/Make/files b/applications/utilities/parallelProcessing/decomposePar/Make/files index d5b8de23cb73bcd5cd29d90725ffc1f2e8e96956..076ecd41bf0d9d5dc6c407fe6090941a978a6197 100644 --- a/applications/utilities/parallelProcessing/decomposePar/Make/files +++ b/applications/utilities/parallelProcessing/decomposePar/Make/files @@ -1,7 +1,7 @@ -decomposeMesh.C decomposePar.C domainDecomposition.C -distributeCells.C +domainDecompositionMesh.C +domainDecompositionDistribute.C fvFieldDecomposer.C pointFieldDecomposer.C lagrangianFieldDecomposer.C diff --git a/applications/utilities/parallelProcessing/decomposePar/Make/options b/applications/utilities/parallelProcessing/decomposePar/Make/options index a1b8151fdd0fef6e0a5087b2708fea8ffd0ce2aa..58cb426daf10bcd05385a3a1805d2abdf48c10e6 100644 --- a/applications/utilities/parallelProcessing/decomposePar/Make/options +++ b/applications/utilities/parallelProcessing/decomposePar/Make/options @@ -1,5 +1,5 @@ EXE_INC = \ - -I$(LIB_SRC)/decompositionMethods/decompositionMethods/lnInclude \ + -I$(LIB_SRC)/parallel/decompositionMethods/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index b2e08a6907a7fa0b4d5943dee6e577cbebf7748c..f8a8ca01d57b492b5f2604462fb091d7fcf055e4 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -106,7 +106,6 @@ int main(int argc, char *argv[]) Info<< "Decomposing mesh " << regionName << nl << endl; } - bool writeCellDist = args.optionFound("cellDist"); bool copyUniform = args.optionFound("copyUniform"); bool decomposeFieldsOnly = args.optionFound("fields"); diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C index d3b9bd049249ba3211935864d8438eb32a204517..392594cc6240d2482102bac10d5ce0212c00023e 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C @@ -38,7 +38,7 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void domainDecomposition::mark +void Foam::domainDecomposition::mark ( const labelList& zoneElems, const label zoneI, @@ -66,7 +66,7 @@ void domainDecomposition::mark // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // from components -domainDecomposition::domainDecomposition(const IOobject& io) +Foam::domainDecomposition::domainDecomposition(const IOobject& io) : fvMesh(io), decompositionDict_ @@ -105,13 +105,13 @@ domainDecomposition::domainDecomposition(const IOobject& io) // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -domainDecomposition::~domainDecomposition() +Foam::domainDecomposition::~domainDecomposition() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool domainDecomposition::writeDecomposition() +bool Foam::domainDecomposition::writeDecomposition() { Info<< "\nConstructing processor meshes" << endl; diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H index 6ec357a02ef08eb837324816a275e88255aab648..c8b8d9ac3dca6d8232866c1c073c444c00b84b7e 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H @@ -26,7 +26,7 @@ Class Foam::domainDecomposition Description - Automatic domain decomposition class for FOAM meshes + Automatic domain decomposition class for finite-volume meshes SourceFiles domainDecomposition.C @@ -42,13 +42,11 @@ SourceFiles #include "PtrList.H" #include "point.H" -#ifndef namespaceFoam -#define namespaceFoam - using namespace Foam; -#endif +namespace Foam +{ /*---------------------------------------------------------------------------*\ - Class domainDecomposition Declaration + Class domainDecomposition Declaration \*---------------------------------------------------------------------------*/ class domainDecomposition @@ -79,7 +77,7 @@ class domainDecomposition // original face. In order to do this properly, all face // indices will be incremented by 1 and the decremented as // necessary t avoid the problem of face number zero having no - // sign. + // sign. labelListList procFaceAddressing_; //- Labels of cells for each processor @@ -165,6 +163,11 @@ public: }; +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/applications/utilities/parallelProcessing/decomposePar/distributeCells.C b/applications/utilities/parallelProcessing/decomposePar/domainDecompositionDistribute.C similarity index 99% rename from applications/utilities/parallelProcessing/decomposePar/distributeCells.C rename to applications/utilities/parallelProcessing/decomposePar/domainDecompositionDistribute.C index ffd54ac6851818258383cbae31e424dbfdbd7519..d6e68ea880e13749712f983aab80ddc9fe044a47 100644 --- a/applications/utilities/parallelProcessing/decomposePar/distributeCells.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecompositionDistribute.C @@ -33,7 +33,7 @@ License // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -void domainDecomposition::distributeCells() +void Foam::domainDecomposition::distributeCells() { Info<< "\nCalculating distribution of cells" << endl; diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposeMesh.C b/applications/utilities/parallelProcessing/decomposePar/domainDecompositionMesh.C similarity index 97% rename from applications/utilities/parallelProcessing/decomposePar/decomposeMesh.C rename to applications/utilities/parallelProcessing/decomposePar/domainDecompositionMesh.C index 2e29b243aaef87077953eb5c18755e2347358ab4..1b31d9edd59b4c7c7cc0d46c87b4af619e5985a3 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposeMesh.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecompositionMesh.C @@ -40,7 +40,7 @@ Description // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) +void Foam::domainDecomposition::decomposeMesh(const bool filterEmptyPatches) { // Decide which cell goes to which processor distributeCells(); @@ -87,7 +87,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) } } - Info << "\nDistributing faces to processors" << endl; + Info<< "\nDistributing faces to processors" << endl; // Loop through all internal faces and decide which processor they belong to // First visit all internal faces. If cells at both sides belong to the @@ -158,7 +158,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) SLList<label>::iterator curInterProcBdrsNeiIter = interProcBoundaries[neighbourProc].begin(); - SLList<SLList<label> >::iterator + SLList<SLList<label> >::iterator curInterProcBFacesNeiIter = interProcBFaces[neighbourProc].begin(); @@ -307,7 +307,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) SLList<label>::iterator curInterProcBdrsOwnIter = interProcBoundaries[ownerProc].begin(); - SLList<SLList<label> >::iterator + SLList<SLList<label> >::iterator curInterProcBFacesOwnIter = interProcBFaces[ownerProc].begin(); @@ -432,7 +432,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) // Note: I cannot add the other side of the cyclic // boundary here because this would violate the order. // They will be added in a separate loop below - // + // } } @@ -483,7 +483,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) // calculate the size label nFacesOnProcessor = curProcFaces.size(); - for + for ( SLList<SLList<label> >::iterator curInterProcBFacesIter = interProcBFaces[procI].begin(); @@ -506,7 +506,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) // Add internal and boundary faces // Remember to increment the index by one such that the - // turning index works properly. + // turning index works properly. for ( SLList<label>::iterator curProcFacesIter = curProcFaces.begin(); @@ -576,7 +576,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) // add the face // Remember to increment the index by one such that the - // turning index works properly. + // turning index works properly. if (cellToProc_[owner[curFacesIter()]] == procI) { curProcFaceAddressing[nFaces] = curFacesIter() + 1; @@ -598,7 +598,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) } } - Info << "\nCalculating processor boundary addressing" << endl; + Info<< "\nCalculating processor boundary addressing" << endl; // For every patch of processor boundary, find the index of the original // patch. Mis-alignment is caused by the fact that patches with zero size // are omitted. For processor patches, set index to -1. @@ -656,7 +656,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) curBoundaryAddressing.setSize(nPatches); } - Info << "\nDistributing points to processors" << endl; + Info<< "\nDistributing points to processors" << endl; // For every processor, loop through the list of faces for the processor. // For every face, loop through the list of points and mark the point as // used for the processor. Collect the list of used points for the @@ -748,7 +748,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) { // Mark the original face as used // Remember to decrement the index by one (turning index) - // + // const label curF = mag(curFaceLabels[facei]) - 1; const face& f = fcs[curF]; @@ -775,3 +775,5 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches) sort(globallySharedPoints_); } } + +// ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C index f5a6451c1266b6a0e02c165c3501c037c7f85b64..ca440ec85c210bd2574e898d4cfed06a8c4f75e7 100644 --- a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C +++ b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C @@ -26,14 +26,10 @@ License #include "fvFieldDecomposer.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -fvFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer +Foam::fvFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer ( const unallocLabelList& addressingSlice, const label addressingOffset @@ -41,15 +37,15 @@ fvFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer : directAddressing_(addressingSlice) { - forAll (directAddressing_, i) + forAll(directAddressing_, i) { - // Subtract one to align addressing. + // Subtract one to align addressing. directAddressing_[i] -= addressingOffset + 1; } } -fvFieldDecomposer::processorVolPatchFieldDecomposer:: +Foam::fvFieldDecomposer::processorVolPatchFieldDecomposer:: processorVolPatchFieldDecomposer ( const fvMesh& mesh, @@ -61,9 +57,9 @@ processorVolPatchFieldDecomposer const labelList& own = mesh.faceOwner(); const labelList& neighb = mesh.faceNeighbour(); - forAll (directAddressing_, i) + forAll(directAddressing_, i) { - // Subtract one to align addressing. + // Subtract one to align addressing. label ai = mag(addressingSlice[i]) - 1; if (ai < neighb.size()) @@ -97,7 +93,7 @@ processorVolPatchFieldDecomposer } -fvFieldDecomposer::processorSurfacePatchFieldDecomposer:: +Foam::fvFieldDecomposer::processorSurfacePatchFieldDecomposer:: processorSurfacePatchFieldDecomposer ( const unallocLabelList& addressingSlice @@ -106,7 +102,7 @@ processorSurfacePatchFieldDecomposer addressing_(addressingSlice.size()), weights_(addressingSlice.size()) { - forAll (addressing_, i) + forAll(addressing_, i) { addressing_[i].setSize(1); weights_[i].setSize(1); @@ -117,7 +113,7 @@ processorSurfacePatchFieldDecomposer } -fvFieldDecomposer::fvFieldDecomposer +Foam::fvFieldDecomposer::fvFieldDecomposer ( const fvMesh& completeMesh, const fvMesh& procMesh, @@ -147,7 +143,7 @@ fvFieldDecomposer::fvFieldDecomposer static_cast<processorSurfacePatchFieldDecomposer*>(NULL) ) { - forAll (boundaryAddressing_, patchi) + forAll(boundaryAddressing_, patchi) { if (boundaryAddressing_[patchi] >= 0) { @@ -162,14 +158,14 @@ fvFieldDecomposer::fvFieldDecomposer } else { - processorVolPatchFieldDecomposerPtrs_[patchi] = + processorVolPatchFieldDecomposerPtrs_[patchi] = new processorVolPatchFieldDecomposer ( completeMesh_, procMesh_.boundary()[patchi].patchSlice(faceAddressing_) ); - processorSurfacePatchFieldDecomposerPtrs_[patchi] = + processorSurfacePatchFieldDecomposerPtrs_[patchi] = new processorSurfacePatchFieldDecomposer ( static_cast<const unallocLabelList&> @@ -187,9 +183,9 @@ fvFieldDecomposer::fvFieldDecomposer // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -fvFieldDecomposer::~fvFieldDecomposer() +Foam::fvFieldDecomposer::~fvFieldDecomposer() { - forAll (patchFieldDecomposerPtrs_, patchi) + forAll(patchFieldDecomposerPtrs_, patchi) { if (patchFieldDecomposerPtrs_[patchi]) { @@ -197,7 +193,7 @@ fvFieldDecomposer::~fvFieldDecomposer() } } - forAll (processorVolPatchFieldDecomposerPtrs_, patchi) + forAll(processorVolPatchFieldDecomposerPtrs_, patchi) { if (processorVolPatchFieldDecomposerPtrs_[patchi]) { @@ -205,7 +201,7 @@ fvFieldDecomposer::~fvFieldDecomposer() } } - forAll (processorSurfacePatchFieldDecomposerPtrs_, patchi) + forAll(processorSurfacePatchFieldDecomposerPtrs_, patchi) { if (processorSurfacePatchFieldDecomposerPtrs_[patchi]) { @@ -214,9 +210,4 @@ fvFieldDecomposer::~fvFieldDecomposer() } } - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposerDecomposeFields.C b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposerDecomposeFields.C index 512ea77d1d7473017a06395001b8413f1ef79de4..afea303fbcb6b194f350dc05dedda87556239f6d 100644 --- a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposerDecomposeFields.C +++ b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposerDecomposeFields.C @@ -28,16 +28,11 @@ License #include "processorFvPatchField.H" #include "processorFvsPatchField.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -tmp<GeometricField<Type, fvPatchField, volMesh> > -fvFieldDecomposer::decomposeField +Foam::tmp<Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh> > +Foam::fvFieldDecomposer::decomposeField ( const GeometricField<Type, fvPatchField, volMesh>& field ) const @@ -106,8 +101,8 @@ fvFieldDecomposer::decomposeField template<class Type> -tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > -fvFieldDecomposer::decomposeField +Foam::tmp<Foam::GeometricField<Type, Foam::fvsPatchField, Foam::surfaceMesh> > +Foam::fvFieldDecomposer::decomposeField ( const GeometricField<Type, fvsPatchField, surfaceMesh>& field ) const @@ -217,7 +212,7 @@ fvFieldDecomposer::decomposeField template<class GeoField> -void fvFieldDecomposer::decomposeFields +void Foam::fvFieldDecomposer::decomposeFields ( const PtrList<GeoField>& fields ) const @@ -229,8 +224,4 @@ void fvFieldDecomposer::decomposeFields } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.C b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.C index 5d8a7f4301c9463cb1d56eccf1a7a2ddcc41b083..200a4fbccec1e1a6725e485fc2c2a0ed30c5e30f 100644 --- a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.C +++ b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.C @@ -29,16 +29,10 @@ Description #include "lagrangianFieldDecomposer.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // Construct from components -lagrangianFieldDecomposer::lagrangianFieldDecomposer +Foam::lagrangianFieldDecomposer::lagrangianFieldDecomposer ( const polyMesh& mesh, const polyMesh& procMesh, @@ -88,6 +82,4 @@ lagrangianFieldDecomposer::lagrangianFieldDecomposer // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace Foam - // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C index ae852298086ba05a9b5ce45199171031b8a84662..36a5888d458d46939f4931501993282bde40ba29 100644 --- a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C +++ b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C @@ -27,15 +27,10 @@ License #include "lagrangianFieldDecomposer.H" #include "IOobjectList.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -void lagrangianFieldDecomposer::readFields +void Foam::lagrangianFieldDecomposer::readFields ( const label cloudI, const IOobjectList& lagrangianObjects, @@ -70,7 +65,8 @@ void lagrangianFieldDecomposer::readFields template<class Type> -tmp<IOField<Type> > lagrangianFieldDecomposer::decomposeField +Foam::tmp<Foam::IOField<Type> > +Foam::lagrangianFieldDecomposer::decomposeField ( const word& cloudName, const IOField<Type>& field @@ -100,7 +96,7 @@ tmp<IOField<Type> > lagrangianFieldDecomposer::decomposeField template<class GeoField> -void lagrangianFieldDecomposer::decomposeFields +void Foam::lagrangianFieldDecomposer::decomposeFields ( const word& cloudName, const PtrList<GeoField>& fields @@ -116,8 +112,4 @@ void lagrangianFieldDecomposer::decomposeFields } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposer.C b/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposer.C index 9be8a89e551cb6d00f569b08ffb7e0ac7cfe9e60..53c8d59aee799f22a1ec45ea9d31029490029ca7 100644 --- a/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposer.C +++ b/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposer.C @@ -26,14 +26,9 @@ License #include "pointFieldDecomposer.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -pointFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer + +Foam::pointFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer ( const pointPatch& completeMeshPatch, const pointPatch& procMeshPatch, @@ -52,7 +47,7 @@ pointFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer const labelList& completeMeshPatchPoints = completeMeshPatch.meshPoints(); - forAll (completeMeshPatchPoints, pointi) + forAll(completeMeshPatchPoints, pointi) { pointMap[completeMeshPatchPoints[pointi]] = pointi; } @@ -61,7 +56,7 @@ pointFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer // patch const labelList& procMeshPatchPoints = procMeshPatch.meshPoints(); - forAll (procMeshPatchPoints, pointi) + forAll(procMeshPatchPoints, pointi) { directAddressing_[pointi] = pointMap[directAddr[procMeshPatchPoints[pointi]]]; @@ -79,7 +74,7 @@ pointFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer } -pointFieldDecomposer::pointFieldDecomposer +Foam::pointFieldDecomposer::pointFieldDecomposer ( const pointMesh& completeMesh, const pointMesh& procMesh, @@ -97,7 +92,7 @@ pointFieldDecomposer::pointFieldDecomposer static_cast<patchFieldDecomposer*>(NULL) ) { - forAll (boundaryAddressing_, patchi) + forAll(boundaryAddressing_, patchi) { if (boundaryAddressing_[patchi] >= 0) { @@ -114,9 +109,9 @@ pointFieldDecomposer::pointFieldDecomposer // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -pointFieldDecomposer::~pointFieldDecomposer() +Foam::pointFieldDecomposer::~pointFieldDecomposer() { - forAll (patchFieldDecomposerPtrs_, patchi) + forAll(patchFieldDecomposerPtrs_, patchi) { if (patchFieldDecomposerPtrs_[patchi]) { @@ -128,6 +123,4 @@ pointFieldDecomposer::~pointFieldDecomposer() // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace Foam - // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposerDecomposeFields.C b/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposerDecomposeFields.C index 5bd8144c06b1fa6010bbc97ec96d4e86c178a050..4f22046b39d85e836ede65c57c08cf64086ae63f 100644 --- a/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposerDecomposeFields.C +++ b/applications/utilities/parallelProcessing/decomposePar/pointFieldDecomposerDecomposeFields.C @@ -28,16 +28,11 @@ License #include "processorPointPatchFields.H" #include "globalPointPatchFields.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -tmp<GeometricField<Type, pointPatchField, pointMesh> > -pointFieldDecomposer::decomposeField +Foam::tmp<Foam::GeometricField<Type, Foam::pointPatchField, Foam::pointMesh> > +Foam::pointFieldDecomposer::decomposeField ( const GeometricField<Type, pointPatchField, pointMesh>& field ) const @@ -117,7 +112,7 @@ pointFieldDecomposer::decomposeField template<class GeoField> -void pointFieldDecomposer::decomposeFields +void Foam::pointFieldDecomposer::decomposeFields ( const PtrList<GeoField>& fields ) const @@ -131,6 +126,4 @@ void pointFieldDecomposer::decomposeFields // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace Foam - // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/reconstructPar/Make/files b/applications/utilities/parallelProcessing/reconstructPar/Make/files index fa4f2375fd1ccd187ebd3307c86826ff49c2e7ec..37acabe62dbc9c7eb1c485f2ee7df91c734e1bc2 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/Make/files +++ b/applications/utilities/parallelProcessing/reconstructPar/Make/files @@ -1,7 +1,3 @@ -processorMeshes.C -fvFieldReconstructor.C -pointFieldReconstructor.C -reconstructLagrangianPositions.C reconstructPar.C EXE = $(FOAM_APPBIN)/reconstructPar diff --git a/applications/utilities/parallelProcessing/reconstructPar/Make/options b/applications/utilities/parallelProcessing/reconstructPar/Make/options index b041c31836a1f66e3fa559170637574539005686..cfa9eb8dfcd8624d2271517573a6efb6e3cc228d 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/Make/options +++ b/applications/utilities/parallelProcessing/reconstructPar/Make/options @@ -1,9 +1,11 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/lagrangian/basic/lnInclude + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/parallel/reconstruct/lnInclude EXE_LIBS = \ -lfiniteVolume \ -lgenericPatchFields \ -llagrangian \ - -lmeshTools + -lmeshTools \ + -lreconstruct diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C index dd014c299fa1b27cc0e2ab784b12eb8442a2cd3d..fd354a47807b4d1f9f551272a302261bb268d57c 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C +++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C @@ -137,7 +137,7 @@ int main(int argc, char *argv[]) // Set time for global database runTime.setTime(timeDirs[timeI], timeI); - Info << "Time = " << runTime.timeName() << endl << endl; + Info<< "Time = " << runTime.timeName() << endl << endl; // Set time for all databases forAll (databases, procI) @@ -183,7 +183,7 @@ int main(int argc, char *argv[]) || objects.lookupClass(surfaceScalarField::typeName).size() ) { - Info << "Reconstructing FV fields" << nl << endl; + Info<< "Reconstructing FV fields" << nl << endl; fvFieldReconstructor fvReconstructor ( @@ -228,7 +228,7 @@ int main(int argc, char *argv[]) } else { - Info << "No FV fields" << nl << endl; + Info<< "No FV fields" << nl << endl; } @@ -242,7 +242,7 @@ int main(int argc, char *argv[]) || objects.lookupClass(pointTensorField::typeName).size() ) { - Info << "Reconstructing point fields" << nl << endl; + Info<< "Reconstructing point fields" << nl << endl; pointMesh pMesh(mesh); PtrList<pointMesh> pMeshes(procMeshes.meshes().size()); @@ -268,7 +268,7 @@ int main(int argc, char *argv[]) } else { - Info << "No point fields" << nl << endl; + Info<< "No point fields" << nl << endl; } @@ -388,7 +388,7 @@ int main(int argc, char *argv[]) } else { - Info << "No lagrangian fields" << nl << endl; + Info<< "No lagrangian fields" << nl << endl; } } diff --git a/applications/utilities/parallelProcessing/redistributeMeshPar/Make/options b/applications/utilities/parallelProcessing/redistributeMeshPar/Make/options index c0f7a0877670d32235f3e117f3e4141ab34c6ee7..45ab666e2496296d016b1c0fd4e64df9ecf0f4a0 100644 --- a/applications/utilities/parallelProcessing/redistributeMeshPar/Make/options +++ b/applications/utilities/parallelProcessing/redistributeMeshPar/Make/options @@ -1,5 +1,5 @@ EXE_INC = \ - -I$(LIB_SRC)/decompositionMethods/decompositionMethods/lnInclude \ + -I$(LIB_SRC)/parallel/decompositionMethods/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude diff --git a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C index cb0aa6469fc9991a4f64d5dc578b3e3bd0629773..20398a16d3ed4d7ea11bd8d0c5f775ee17c30445 100644 --- a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C +++ b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C @@ -33,11 +33,11 @@ Description Balances mesh and writes new mesh to new time directory. Can also work like decomposePar: - + @verbatim mkdir processor0 cp -r constant processor0 mpirun -np ddd redistributeMeshPar -parallel - + @endverbatim \*---------------------------------------------------------------------------*/ #include "Field.H" diff --git a/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C b/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C index 4a63948f422eb9f7d7d028158b8be41f93012795..41df27a4c8f5feed505986a42b1f56f805f51963 100644 --- a/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C +++ b/applications/utilities/postProcessing/dataConversion/foamDataToFluent/foamDataToFluent.C @@ -183,7 +183,7 @@ int main(int argc, char *argv[]) Info<< endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightCaseTail.H b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightCaseTail.H index 43c1a3f801bcf9f3373de9bace53b32a790d66d6..0ddde7448a85d3e2086e880cf00c7b5321e9d947 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightCaseTail.H +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightCaseTail.H @@ -16,7 +16,7 @@ if (Pstream::master()) if (Times[0].value() < 0) { Tcorr = - Times[0].value(); - Info << "Correcting time values. Adding " << Tcorr << endl; + Info<< "Correcting time values. Adding " << Tcorr << endl; } for (int n=startTime; n<endTime; n++) diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C index c3262e6b9c4d3d98e1eacb8d5f50af6cb45fedb9..4796f4b4f10bffda04a886988f7dde7ec9de196b 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C @@ -428,112 +428,379 @@ void Foam::ensightMesh::writePrimsBinary } -void Foam::ensightMesh::writePolys +void Foam::ensightMesh::writePolysNFaces +( + const labelList& polys, + const cellList& cellFaces, + OFstream& ensightGeometryFile +) const +{ + forAll(polys, i) + { + ensightGeometryFile + << setw(10) << cellFaces[polys[i]].size() << nl; + } +} + + +void Foam::ensightMesh::writePolysNPointsPerFace ( const labelList& polys, const cellList& cellFaces, const faceList& faces, - const label pointOffset, OFstream& ensightGeometryFile ) const { - if (polys.size()) + forAll(polys, i) { - ensightGeometryFile - << "nfaced" << nl << setw(10) << polys.size() << nl; + const labelList& cf = cellFaces[polys[i]]; - label po = pointOffset + 1; - - forAll(polys, i) + forAll(cf, faceI) { ensightGeometryFile - << setw(10) << cellFaces[polys[i]].size() << nl; + << setw(10) << faces[cf[faceI]].size() << nl; } + } +} - forAll(polys, i) + +void Foam::ensightMesh::writePolysPoints +( + const labelList& polys, + const cellList& cellFaces, + const faceList& faces, + const label pointOffset, + OFstream& ensightGeometryFile +) const +{ + label po = pointOffset + 1; + + forAll(polys, i) + { + const labelList& cf = cellFaces[polys[i]]; + + forAll(cf, faceI) { - const labelList& cf = cellFaces[polys[i]]; + const face& f = faces[cf[faceI]]; - forAll(cf, faceI) + forAll(f, pointI) { + ensightGeometryFile << setw(10) << f[pointI] + po; + } + ensightGeometryFile << nl; + } + } +} + + +void Foam::ensightMesh::writeAllPolys +( + const labelList& pointOffsets, + OFstream& ensightGeometryFile +) const +{ + if (meshCellSets_.nPolys) + { + const cellList& cellFaces = mesh_.cells(); + const faceList& faces = mesh_.faces(); + + if (Pstream::master()) + { + ensightGeometryFile + << "nfaced" << nl << setw(10) << meshCellSets_.nPolys << nl; + } + + // Number of faces for each poly cell + if (Pstream::master()) + { + // Master + writePolysNFaces + ( + meshCellSets_.polys, + cellFaces, ensightGeometryFile - << setw(10) << faces[cf[faceI]].size() << nl; + ); + // Slaves + for (int slave=1; slave<Pstream::nProcs(); slave++) + { + IPstream fromSlave(Pstream::scheduled, slave); + labelList polys(fromSlave); + cellList cellFaces(fromSlave); + + writePolysNFaces + ( + polys, + cellFaces, + ensightGeometryFile + ); } } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< meshCellSets_.polys << cellFaces; + } - forAll(polys, i) + // Number of points for each face of the above list + if (Pstream::master()) { - const labelList& cf = cellFaces[polys[i]]; + // Master + writePolysNPointsPerFace + ( + meshCellSets_.polys, + cellFaces, + faces, + ensightGeometryFile + ); + // Slaves + for (int slave=1; slave<Pstream::nProcs(); slave++) + { + IPstream fromSlave(Pstream::scheduled, slave); + labelList polys(fromSlave); + cellList cellFaces(fromSlave); + faceList faces(fromSlave); - forAll(cf, faceI) + writePolysNPointsPerFace + ( + polys, + cellFaces, + faces, + ensightGeometryFile + ); + } + } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< meshCellSets_.polys << cellFaces << faces; + } + + // List of points id for each face of the above list + if (Pstream::master()) + { + // Master + writePolysPoints + ( + meshCellSets_.polys, + cellFaces, + faces, + 0, + ensightGeometryFile + ); + // Slaves + for (int slave=1; slave<Pstream::nProcs(); slave++) { - const face& f = faces[cf[faceI]]; + IPstream fromSlave(Pstream::scheduled, slave); + labelList polys(fromSlave); + cellList cellFaces(fromSlave); + faceList faces(fromSlave); - forAll(f, pointI) - { - ensightGeometryFile << setw(10) << f[pointI] + po; - } - ensightGeometryFile << nl; + writePolysPoints + ( + polys, + cellFaces, + faces, + pointOffsets[slave-1], + ensightGeometryFile + ); } } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< meshCellSets_.polys << cellFaces << faces; + } } } -void Foam::ensightMesh::writePolysBinary +void Foam::ensightMesh::writePolysNFacesBinary ( const labelList& polys, const cellList& cellFaces, - const faceList& faces, - const label pointOffset, std::ofstream& ensightGeometryFile ) const { - if (polys.size()) + forAll(polys, i) { - writeEnsDataBinary("nfaced",ensightGeometryFile); - writeEnsDataBinary(polys.size(),ensightGeometryFile); + writeEnsDataBinary + ( + cellFaces[polys[i]].size(), + ensightGeometryFile + ); + } +} - label po = pointOffset + 1; - //TODO No buffer at the moment. To be done for speed purposes! - forAll(polys, i) +void Foam::ensightMesh::writePolysNPointsPerFaceBinary +( + const labelList& polys, + const cellList& cellFaces, + const faceList& faces, + std::ofstream& ensightGeometryFile +) const +{ + forAll(polys, i) + { + const labelList& cf = cellFaces[polys[i]]; + + forAll(cf, faceI) { writeEnsDataBinary ( - cellFaces[polys[i]].size(), + faces[cf[faceI]].size(), ensightGeometryFile ); } + } +} - forAll(polys, i) + +void Foam::ensightMesh::writePolysPointsBinary +( + const labelList& polys, + const cellList& cellFaces, + const faceList& faces, + const label pointOffset, + std::ofstream& ensightGeometryFile +) const +{ + label po = pointOffset + 1; + + forAll(polys, i) + { + const labelList& cf = cellFaces[polys[i]]; + + forAll(cf, faceI) { - const labelList& cf = cellFaces[polys[i]]; + const face& f = faces[cf[faceI]]; - forAll(cf, faceI) + forAll(f, pointI) { - writeEnsDataBinary + writeEnsDataBinary(f[pointI] + po,ensightGeometryFile); + } + } + } +} + + +void Foam::ensightMesh::writeAllPolysBinary +( + const labelList& pointOffsets, + std::ofstream& ensightGeometryFile +) const +{ + if (meshCellSets_.nPolys) + { + const cellList& cellFaces = mesh_.cells(); + const faceList& faces = mesh_.faces(); + + if (Pstream::master()) + { + writeEnsDataBinary("nfaced",ensightGeometryFile); + writeEnsDataBinary(meshCellSets_.nPolys,ensightGeometryFile); + } + + // Number of faces for each poly cell + if (Pstream::master()) + { + // Master + writePolysNFacesBinary + ( + meshCellSets_.polys, + cellFaces, + ensightGeometryFile + ); + // Slaves + for (int slave=1; slave<Pstream::nProcs(); slave++) + { + IPstream fromSlave(Pstream::scheduled, slave); + labelList polys(fromSlave); + cellList cellFaces(fromSlave); + + writePolysNFacesBinary ( - faces[cf[faceI]].size(), + polys, + cellFaces, ensightGeometryFile ); } } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< meshCellSets_.polys << cellFaces; + } - forAll(polys, i) + // Number of points for each face of the above list + if (Pstream::master()) { - const labelList& cf = cellFaces[polys[i]]; + // Master + writePolysNPointsPerFaceBinary + ( + meshCellSets_.polys, + cellFaces, + faces, + ensightGeometryFile + ); + // Slaves + for (int slave=1; slave<Pstream::nProcs(); slave++) + { + IPstream fromSlave(Pstream::scheduled, slave); + labelList polys(fromSlave); + cellList cellFaces(fromSlave); + faceList faces(fromSlave); + + writePolysNPointsPerFaceBinary + ( + polys, + cellFaces, + faces, + ensightGeometryFile + ); + } + } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< meshCellSets_.polys << cellFaces << faces; + } - forAll(cf, faceI) + // List of points id for each face of the above list + if (Pstream::master()) + { + // Master + writePolysPointsBinary + ( + meshCellSets_.polys, + cellFaces, + faces, + 0, + ensightGeometryFile + ); + // Slaves + for (int slave=1; slave<Pstream::nProcs(); slave++) { - const face& f = faces[cf[faceI]]; + IPstream fromSlave(Pstream::scheduled, slave); + labelList polys(fromSlave); + cellList cellFaces(fromSlave); + faceList faces(fromSlave); - forAll(f, pointI) - { - writeEnsDataBinary(f[pointI] + po,ensightGeometryFile); - } + writePolysPointsBinary + ( + polys, + cellFaces, + faces, + pointOffsets[slave-1], + ensightGeometryFile + ); } } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< meshCellSets_.polys << cellFaces << faces; + } } } @@ -600,148 +867,359 @@ void Foam::ensightMesh::writeAllPrimsBinary IPstream fromSlave(Pstream::scheduled, slave); cellShapeList cellShapes(fromSlave); - writePrimsBinary + writePrimsBinary + ( + cellShapes, + pointOffsets[slave-1], + ensightGeometryFile + ); + } + } + else + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< cellShapes; + } + } +} + + +void Foam::ensightMesh::writeFacePrims +( + const faceList& patchFaces, + const label pointOffset, + OFstream& ensightGeometryFile +) const +{ + if (patchFaces.size()) + { + label po = pointOffset + 1; + + forAll(patchFaces, i) + { + const face& patchFace = patchFaces[i]; + + forAll(patchFace, pointI) + { + ensightGeometryFile << setw(10) << patchFace[pointI] + po; + } + ensightGeometryFile << nl; + } + } +} + + +void Foam::ensightMesh::writeFacePrimsBinary +( + const faceList& patchFaces, + const label pointOffset, + std::ofstream& ensightGeometryFile +) const +{ + if (patchFaces.size()) + { + label po = pointOffset + 1; + + forAll(patchFaces, i) + { + const face& patchFace = patchFaces[i]; + + forAll(patchFace, pointI) + { + writeEnsDataBinary + ( + patchFace[pointI] + po, + ensightGeometryFile + ); + } + } + } +} + + +Foam::faceList Foam::ensightMesh::map +( + const faceList& patchFaces, + const labelList& prims +) const +{ + faceList ppf(prims.size()); + + forAll (prims, i) + { + ppf[i] = patchFaces[prims[i]]; + } + + return ppf; +} + + +void Foam::ensightMesh::writeAllFacePrims +( + const char* key, + const labelList& prims, + const label nPrims, + const faceList& patchFaces, + const labelList& pointOffsets, + const labelList& patchProcessors, + OFstream& ensightGeometryFile +) const +{ + if (nPrims) + { + if (Pstream::master()) + { + ensightGeometryFile << key << nl << setw(10) << nPrims << nl; + + if (&prims != NULL) + { + writeFacePrims ( - cellShapes, - pointOffsets[slave-1], + map(patchFaces, prims), + 0, ensightGeometryFile ); } + + forAll (patchProcessors, i) + { + if (patchProcessors[i] != 0) + { + label slave = patchProcessors[i]; + IPstream fromSlave(Pstream::scheduled, slave); + faceList patchFaces(fromSlave); + + writeFacePrims + ( + patchFaces, + pointOffsets[i], + ensightGeometryFile + ); + } + } } - else + else if (&prims != NULL) { OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); - toMaster<< cellShapes; + toMaster<< map(patchFaces, prims); } } } -void Foam::ensightMesh::writeFacePrims +void Foam::ensightMesh::writeNSidedNPointsPerFace ( - const char* key, const faceList& patchFaces, - const label pointOffset, OFstream& ensightGeometryFile ) const { - if (patchFaces.size()) + forAll(patchFaces, i) { - if (word(key) == "nsided") - { - ensightGeometryFile - << key << nl << setw(10) << patchFaces.size() << nl; - - forAll(patchFaces, i) - { - ensightGeometryFile - << setw(10) << patchFaces[i].size() << nl; - } - } - - label po = pointOffset + 1; - - forAll(patchFaces, i) - { - const face& patchFace = patchFaces[i]; - - forAll(patchFace, pointI) - { - ensightGeometryFile << setw(10) << patchFace[pointI] + po; - } - ensightGeometryFile << nl; - } + ensightGeometryFile + << setw(10) << patchFaces[i].size() << nl; } } -void Foam::ensightMesh::writeFacePrimsBinary +void Foam::ensightMesh::writeNSidedPoints ( - const char* key, const faceList& patchFaces, const label pointOffset, - std::ofstream& ensightGeometryFile + OFstream& ensightGeometryFile ) const { - if (patchFaces.size()) + writeFacePrims + ( + patchFaces, + pointOffset, + ensightGeometryFile + ); +} + + +void Foam::ensightMesh::writeAllNSided +( + const labelList& prims, + const label nPrims, + const faceList& patchFaces, + const labelList& pointOffsets, + const labelList& patchProcessors, + OFstream& ensightGeometryFile +) const +{ + if (nPrims) { - //TODO No buffer at the moment. To be done for speed purposes! - if (word(key) == "nsided") + if (Pstream::master()) { - writeEnsDataBinary(key,ensightGeometryFile); - writeEnsDataBinary(patchFaces.size(),ensightGeometryFile); + ensightGeometryFile + << "nsided" << nl << setw(10) << nPrims << nl; + } - forAll(patchFaces, i) + // Number of points for each face + if (Pstream::master()) + { + if (&prims != NULL) { - writeEnsDataBinary + writeNSidedNPointsPerFace ( - patchFaces[i].size(), + map(patchFaces, prims), ensightGeometryFile ); } - } - label po = pointOffset + 1; + forAll (patchProcessors, i) + { + if (patchProcessors[i] != 0) + { + label slave = patchProcessors[i]; + IPstream fromSlave(Pstream::scheduled, slave); + faceList patchFaces(fromSlave); - forAll(patchFaces, i) + writeNSidedNPointsPerFace + ( + patchFaces, + ensightGeometryFile + ); + } + } + } + else if (&prims != NULL) { - const face& patchFace = patchFaces[i]; + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(patchFaces, prims); + } - forAll(patchFace, pointI) + // List of points id for each face + if (Pstream::master()) + { + if (&prims != NULL) { - writeEnsDataBinary + writeNSidedPoints ( - patchFace[pointI] + po, + map(patchFaces, prims), + 0, ensightGeometryFile ); } + + forAll (patchProcessors, i) + { + if (patchProcessors[i] != 0) + { + label slave = patchProcessors[i]; + IPstream fromSlave(Pstream::scheduled, slave); + faceList patchFaces(fromSlave); + + writeNSidedPoints + ( + patchFaces, + pointOffsets[i], + ensightGeometryFile + ); + } + } + } + else if (&prims != NULL) + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(patchFaces, prims); } } } -Foam::faceList Foam::ensightMesh::map +void Foam::ensightMesh::writeNSidedPointsBinary ( const faceList& patchFaces, - const labelList& prims + const label pointOffset, + std::ofstream& ensightGeometryFile ) const { - faceList ppf(prims.size()); + writeFacePrimsBinary + ( + patchFaces, + pointOffset, + ensightGeometryFile + ); +} - forAll (prims, i) + +void Foam::ensightMesh::writeNSidedNPointsPerFaceBinary +( + const faceList& patchFaces, + std::ofstream& ensightGeometryFile +) const +{ + forAll(patchFaces, i) { - ppf[i] = patchFaces[prims[i]]; + writeEnsDataBinary + ( + patchFaces[i].size(), + ensightGeometryFile + ); } - - return ppf; } -void Foam::ensightMesh::writeAllFacePrims +void Foam::ensightMesh::writeAllNSidedBinary ( - const char* key, const labelList& prims, const label nPrims, const faceList& patchFaces, const labelList& pointOffsets, const labelList& patchProcessors, - OFstream& ensightGeometryFile + std::ofstream& ensightGeometryFile ) const { if (nPrims) { if (Pstream::master()) { - if (word(key) != "nsided") + writeEnsDataBinary("nsided",ensightGeometryFile); + writeEnsDataBinary(nPrims,ensightGeometryFile); + } + + // Number of points for each face + if (Pstream::master()) + { + if (&prims != NULL) + { + writeNSidedNPointsPerFaceBinary + ( + map(patchFaces, prims), + ensightGeometryFile + ); + } + + forAll (patchProcessors, i) { - ensightGeometryFile << key << nl << setw(10) << nPrims << nl; + if (patchProcessors[i] != 0) + { + label slave = patchProcessors[i]; + IPstream fromSlave(Pstream::scheduled, slave); + faceList patchFaces(fromSlave); + + writeNSidedNPointsPerFaceBinary + ( + patchFaces, + ensightGeometryFile + ); + } } + } + else if (&prims != NULL) + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(patchFaces, prims); + } + // List of points id for each face + if (Pstream::master()) + { if (&prims != NULL) { - writeFacePrims + writeNSidedPointsBinary ( - key, map(patchFaces, prims), 0, ensightGeometryFile @@ -756,9 +1234,8 @@ void Foam::ensightMesh::writeAllFacePrims IPstream fromSlave(Pstream::scheduled, slave); faceList patchFaces(fromSlave); - writeFacePrims + writeNSidedPointsBinary ( - key, patchFaces, pointOffsets[i], ensightGeometryFile @@ -790,17 +1267,13 @@ void Foam::ensightMesh::writeAllFacePrimsBinary { if (Pstream::master()) { - if (word(key) != "nsided") - { - writeEnsDataBinary(key,ensightGeometryFile); - writeEnsDataBinary(nPrims,ensightGeometryFile); - } + writeEnsDataBinary(key,ensightGeometryFile); + writeEnsDataBinary(nPrims,ensightGeometryFile); if (&prims != NULL) { writeFacePrimsBinary ( - key, map(patchFaces, prims), 0, ensightGeometryFile @@ -817,7 +1290,6 @@ void Foam::ensightMesh::writeAllFacePrimsBinary writeFacePrimsBinary ( - key, patchFaces, pointOffsets[i], ensightGeometryFile @@ -863,8 +1335,6 @@ void Foam::ensightMesh::writeAscii { const Time& runTime = mesh_.time(); const pointField& points = mesh_.points(); - const cellList& cellFaces = mesh_.cells(); - const faceList& faces = mesh_.faces(); const cellShapeList& cellShapes = mesh_.cellShapes(); word timeFile = prepend; @@ -990,48 +1460,11 @@ void Foam::ensightMesh::writeAscii ensightGeometryFile ); - - if (meshCellSets_.nPolys) - { - if (Pstream::master()) - { - /* - ensightGeometryFile - << "nfaced" << nl - << setw(10) << meshCellSets_.nPolys << nl; - */ - writePolys - ( - meshCellSets_.polys, - cellFaces, - faces, - 0, - ensightGeometryFile - ); - - for (int slave=1; slave<Pstream::nProcs(); slave++) - { - IPstream fromSlave(Pstream::scheduled, slave); - labelList polys(fromSlave); - cellList cellFaces(fromSlave); - faceList faces(fromSlave); - - writePolys - ( - polys, - cellFaces, - faces, - pointOffsets[slave-1], - ensightGeometryFile - ); - } - } - else - { - OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); - toMaster<< meshCellSets_.polys << cellFaces << faces; - } - } + writeAllPolys + ( + pointOffsets, + ensightGeometryFile + ); } @@ -1166,9 +1599,8 @@ void Foam::ensightMesh::writeAscii ensightGeometryFile ); - writeAllFacePrims + writeAllNSided ( - "nsided", polys, nfp.nPolys, patchFaces, @@ -1197,8 +1629,6 @@ void Foam::ensightMesh::writeBinary { //const Time& runTime = mesh.time(); const pointField& points = mesh_.points(); - const cellList& cellFaces = mesh_.cells(); - const faceList& faces = mesh_.faces(); const cellShapeList& cellShapes = mesh_.cellShapes(); word timeFile = prepend; @@ -1316,47 +1746,11 @@ void Foam::ensightMesh::writeBinary ensightGeometryFile ); - if (meshCellSets_.nPolys) - { - if (Pstream::master()) - { - /* - ensightGeometryFile - << "nfaced" << nl - << setw(10) << meshCellSets_.nPolys << nl; - */ - writePolysBinary - ( - meshCellSets_.polys, - cellFaces, - faces, - 0, - ensightGeometryFile - ); - - for (int slave=1; slave<Pstream::nProcs(); slave++) - { - IPstream fromSlave(Pstream::scheduled, slave); - labelList polys(fromSlave); - cellList cellFaces(fromSlave); - faceList faces(fromSlave); - - writePolysBinary - ( - polys, - cellFaces, - faces, - pointOffsets[slave-1], - ensightGeometryFile - ); - } - } - else - { - OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); - toMaster<< meshCellSets_.polys << cellFaces << faces; - } - } + writeAllPolysBinary + ( + pointOffsets, + ensightGeometryFile + ); } @@ -1495,9 +1889,8 @@ void Foam::ensightMesh::writeBinary ensightGeometryFile ); - writeAllFacePrimsBinary + writeAllNSidedBinary ( - "nsided", polys, nfp.nPolys, patchFaces, @@ -1516,4 +1909,5 @@ void Foam::ensightMesh::writeBinary } } + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H index 4ddb084d3d054c34961fb8e1d4c3a5a3bcb3db52..3eb9a1e612beec67a213324dc0cf2d395abef9a3 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H @@ -57,6 +57,7 @@ class argList; class ensightMesh { +public: class nFacePrimitives { public: @@ -75,6 +76,7 @@ class ensightMesh {} }; +private: // Private data @@ -134,7 +136,22 @@ class ensightMesh OFstream& ensightGeometryFile ) const; - void writePolys + void writePolysNFaces + ( + const labelList& polys, + const cellList& cellFaces, + OFstream& ensightGeometryFile + ) const; + + void writePolysNPointsPerFace + ( + const labelList& polys, + const cellList& cellFaces, + const faceList& faces, + OFstream& ensightGeometryFile + ) const; + + void writePolysPoints ( const labelList& polys, const cellList& cellFaces, @@ -143,6 +160,12 @@ class ensightMesh OFstream& ensightGeometryFile ) const; + void writeAllPolys + ( + const labelList& pointOffsets, + OFstream& ensightGeometryFile + ) const; + void writeAllPrims ( const char* key, @@ -154,7 +177,6 @@ class ensightMesh void writeFacePrims ( - const char* key, const faceList& patchFaces, const label pointOffset, OFstream& ensightGeometryFile @@ -177,6 +199,29 @@ class ensightMesh OFstream& ensightGeometryFile ) const; + void writeNSidedNPointsPerFace + ( + const faceList& patchFaces, + OFstream& ensightGeometryFile + ) const; + + void writeNSidedPoints + ( + const faceList& patchFaces, + const label pointOffset, + OFstream& ensightGeometryFile + ) const; + + void writeAllNSided + ( + const labelList& prims, + const label nPrims, + const faceList& patchFaces, + const labelList& pointOffsets, + const labelList& patchProcessors, + OFstream& ensightGeometryFile + ) const; + void writeAscii ( const fileName& postProcPath, @@ -209,7 +254,22 @@ class ensightMesh std::ofstream& ensightGeometryFile ) const; - void writePolysBinary + void writePolysNFacesBinary + ( + const labelList& polys, + const cellList& cellFaces, + std::ofstream& ensightGeometryFile + ) const; + + void writePolysNPointsPerFaceBinary + ( + const labelList& polys, + const cellList& cellFaces, + const faceList& faces, + std::ofstream& ensightGeometryFile + ) const; + + void writePolysPointsBinary ( const labelList& polys, const cellList& cellFaces, @@ -218,6 +278,12 @@ class ensightMesh std::ofstream& ensightGeometryFile ) const; + void writeAllPolysBinary + ( + const labelList& pointOffsets, + std::ofstream& ensightGeometryFile + ) const; + void writeAllFacePrimsBinary ( const char* key, @@ -231,12 +297,33 @@ class ensightMesh void writeFacePrimsBinary ( - const char* key, const faceList& patchFaces, const label pointOffset, std::ofstream& ensightGeometryFile ) const; + void writeNSidedPointsBinary + ( + const faceList& patchFaces, + const label pointOffset, + std::ofstream& ensightGeometryFile + ) const; + + void writeNSidedNPointsPerFaceBinary + ( + const faceList& patchFaces, + std::ofstream& ensightGeometryFile + ) const; + + void writeAllNSidedBinary + ( + const labelList& prims, + const label nPrims, + const faceList& patchFaces, + const labelList& pointOffsets, + const labelList& patchProcessors, + std::ofstream& ensightGeometryFile + ) const; public: diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C index fc0c3db61cbc4e968edb040fe328a0c1fc66f41c..d0a59b5116f4cd0a5dd8d73a16807b16856a5fc6 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C @@ -175,7 +175,7 @@ int main(int argc, char *argv[]) ensightMesh eMesh(mesh, args, binary); // Set Time to the last time before looking for the lagrangian objects - runTime.setTime(Times[Times.size()-1], Times.size()-1); + runTime.setTime(Times.last(), Times.size()-1); IOobjectList objects(mesh, runTime.timeName()); diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/findFields.H b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/findFields.H index 63ef5eef21d7baee8c01bc8683fc29c16516cd4c..7a6bd938dc466be02a3dfa887bf732dbcd7db6dd 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/findFields.H +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsightParts/findFields.H @@ -8,7 +8,7 @@ HashTable< HashTable<word> > cloudFields; if (timeDirs.size()) { - IOobjectList objs(mesh, timeDirs[timeDirs.size()-1].name()); + IOobjectList objs(mesh, timeDirs.last().name()); forAllConstIter(IOobjectList, objs, fieldIter) { @@ -34,7 +34,7 @@ if (timeDirs.size()) fileNameList cloudDirs = readDir ( runTime.path() - / timeDirs[timeDirs.size()-1].name() + / timeDirs.last().name() / regionPrefix / cloud::prefix, fileName::DIRECTORY @@ -54,7 +54,7 @@ if (timeDirs.size()) IOobjectList objs ( mesh, - timeDirs[timeDirs.size()-1].name(), + timeDirs.last().name(), cloud::prefix/cloudName ); diff --git a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C index 87270649df41445b6b77676ab141dfc0e155b68f..8f69fe0b2f6b4d74369d0805b07b4741a70dd7c1 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C +++ b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/foamToFieldview9.C @@ -982,7 +982,7 @@ int main(int argc, char *argv[]) rm(fvParticleFileName); } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/writeFunctions.C b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/writeFunctions.C index f44d4499013033c25c686134b6fef7e5878befbe..d4dcdbbcf15622c5435dbbb40ceb507ac0bce997 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/writeFunctions.C +++ b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/writeFunctions.C @@ -75,7 +75,7 @@ void writeBytes(char* start, int nBytes) cout<< start << " : "; - for(int i = 0; i < nBytes; i++) + for (int i = 0; i < nBytes; i++) { cout<< " " << start[i]; } diff --git a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/write_binary_uns.c b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/write_binary_uns.c index 105d042792fe4c7ed0c08c92e7e8b48c31ecd1e0..6cd3eb6620b4ebfed7b19341a08af33118e25f6a 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToFieldview9/write_binary_uns.c +++ b/applications/utilities/postProcessing/dataConversion/foamToFieldview9/write_binary_uns.c @@ -423,7 +423,7 @@ int main() fwrite(ibuf, sizeof(int), 3, outfp); - for(i = 0; i < num_faces_trim_cell; ++i) /* loop over the faces */ + for (i = 0; i < num_faces_trim_cell; ++i) /* loop over the faces */ fwrite(trim_cell_face[i], sizeof(int), trim_cell_face[i][0] + 1, outfp); @@ -433,7 +433,7 @@ int main() fwrite(ibuf, sizeof(int), 3, outfp); - for(i = 0; i < num_faces_hang_cell; ++i) /* loop over the faces */ + for (i = 0; i < num_faces_hang_cell; ++i) /* loop over the faces */ fwrite(hang_cell_face[i], sizeof(int), hang_cell_face[i][0] + 1, outfp); @@ -519,7 +519,7 @@ int main() ibuf[0] = A_WALL; /* wall value */ ibuf[1] = 0; /* number of hanging nodes */ - for(i = 0; i < num_faces_trim_cell; ++i) /* write out face info */ + for (i = 0; i < num_faces_trim_cell; ++i) /* write out face info */ { fwrite(ibuf, sizeof(int), 1, outfp); /* write wall value */ fwrite(trim_cell_face[i], sizeof(int), trim_cell_face[i][0] + 1, @@ -541,7 +541,7 @@ int main() ibuf[2] = 1; /* number of hanging nodes for face 3 */ ibuf[3] = 31; /* the node number for the hanging node on face 3*/ - for(i = 0; i < 2; ++i) /* write out face info for first 2 faces */ + for (i = 0; i < 2; ++i) /* write out face info for first 2 faces */ { fwrite(ibuf, sizeof(int), 1, outfp); /* write wall value */ fwrite(hang_cell_face[i], sizeof(int), hang_cell_face[i][0] + 1, @@ -555,7 +555,7 @@ int main() fwrite(&ibuf[2], sizeof(int), 2, outfp); /* write out face info for last 3 faces */ - for(i = 3; i < num_faces_hang_cell; ++i) + for (i = 3; i < num_faces_hang_cell; ++i) { fwrite(ibuf, sizeof(int), 1, outfp); /* write wall value */ fwrite(hang_cell_face[i], sizeof(int), hang_cell_face[i][0] + 1, diff --git a/applications/utilities/postProcessing/dataConversion/foamToGMV/foamToGMV.C b/applications/utilities/postProcessing/dataConversion/foamToGMV/foamToGMV.C index 05300da489a48638d8a13a65c5cbdc24a8fe1945..d9b807e316dac412d18d71bbd88e4612b92f9f41 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToGMV/foamToGMV.C +++ b/applications/utilities/postProcessing/dataConversion/foamToGMV/foamToGMV.C @@ -62,14 +62,14 @@ int main(int argc, char *argv[]) // get the available time-steps instantList TimeList = runTime.times(); - Info << TimeList << endl; + Info<< TimeList << endl; label nTimes = TimeList.size(); - for(label n=1; n < nTimes; n++) + for (label n=1; n < nTimes; n++) { if (TimeList[n].value() > startTime) { - Info << "Time = " << TimeList[n].value() << nl; + Info<< "Time = " << TimeList[n].value() << nl; // Set Time runTime.setTime(TimeList[n], n); diff --git a/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutput.H b/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutput.H index 03523ed2de769888547857e6e52898efc7a75d30..124bab141197f36f8e01883dd9fc0ca991a14ffe 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutput.H +++ b/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutput.H @@ -24,7 +24,7 @@ for (label i=0; i < nTypes; i++) { volScalarField gmvScalarField(fieldObject, mesh); gmvFile << fieldName << " 0" << nl; - for(label indx=0;indx<mesh.nCells();indx++) + for (label indx=0;indx<mesh.nCells();indx++) { gmvFile << gmvScalarField[indx] << " "; } diff --git a/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutputHeader.H b/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutputHeader.H index ff904f9a709d804131986edffdbbccdc9c400c2c..46fa702ea1cf0f08c205170608bc5561ff55374c 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutputHeader.H +++ b/applications/utilities/postProcessing/dataConversion/foamToGMV/gmvOutputHeader.H @@ -4,29 +4,29 @@ const cellShapeList& cells = mesh.cellShapes(); gmvFile << "gmvinput " << format << nl; gmvFile << "nodes " << nPoints << nl; -for(label indx=0;indx<nPoints;indx++) +for (label indx=0;indx<nPoints;indx++) { gmvFile << points[indx].x() << " "; } gmvFile << nl; -for(label indx=0;indx<nPoints;indx++) +for (label indx=0;indx<nPoints;indx++) { gmvFile << points[indx].y() << " "; } gmvFile << nl; -for(label indx=0;indx<nPoints;indx++) +for (label indx=0;indx<nPoints;indx++) { gmvFile << points[indx].z() << " "; } gmvFile << nl; gmvFile << "cells " << cells.size() << nl; -for(label indx=0;indx<cells.size();indx++) +for (label indx=0;indx<cells.size();indx++) { label nNodes = cells[indx].size(); if (nNodes == 8) { gmvFile << "hex " << 8 << " "; - for(label ip=0; ip<nNodes; ip++) + for (label ip=0; ip<nNodes; ip++) { gmvFile << cells[indx][ip] + 1 << " "; } @@ -35,7 +35,7 @@ for(label indx=0;indx<cells.size();indx++) else if (nNodes == 4) { gmvFile << "tet " << 4 << " "; - for(label ip=0; ip<nNodes; ip++) + for (label ip=0; ip<nNodes; ip++) { gmvFile << cells[indx][ip] + 1 << " "; } @@ -44,7 +44,7 @@ for(label indx=0;indx<cells.size();indx++) else if (nNodes == 6) { gmvFile << "prism " << 6 << " "; - for(label ip=0; ip<nNodes; ip++) + for (label ip=0; ip<nNodes; ip++) { gmvFile << cells[indx][ip] + 1 << " "; } diff --git a/applications/utilities/postProcessing/dataConversion/foamToGMV/itoa.C b/applications/utilities/postProcessing/dataConversion/foamToGMV/itoa.C index 391d2c041c3d51f5c2faf9ffaa3d028b5e28e3f0..73df488b11bf62bdcb1bcc73b4b09b3da4cf1333 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToGMV/itoa.C +++ b/applications/utilities/postProcessing/dataConversion/foamToGMV/itoa.C @@ -44,7 +44,7 @@ word itoa(const label n) label leftOfN = n; - for(label i=0; i<length; i++) + for (label i=0; i<length; i++) { label j = label(leftOfN/pow(10, length-i-1)); leftOfN -= j*pow(10,length-i-1); diff --git a/applications/utilities/postProcessing/dataConversion/foamToGMV/moveMesh.H b/applications/utilities/postProcessing/dataConversion/foamToGMV/moveMesh.H index ba4e27425a0f50014726b8fe49d4bce86453a401..e84837fd1c287473360b44207c5862b41824971c 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToGMV/moveMesh.H +++ b/applications/utilities/postProcessing/dataConversion/foamToGMV/moveMesh.H @@ -1,6 +1,6 @@ IOobject ioPoints ( - "points", + "points", runTime.timeName(), mesh.name(), mesh @@ -8,7 +8,7 @@ IOobject ioPoints if (ioPoints.headerOk()) { - Info << "new points available" << endl; + Info<< "new points available" << endl; // Reading new points pointIOField newPoints ( @@ -22,6 +22,6 @@ if (ioPoints.headerOk()) IOobject::NO_WRITE ) ); - + mesh.movePoints(newPoints); } diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Allwmake b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Allwmake deleted file mode 100755 index 5866aa8f371296d65d50ffd0b6454e745502bcb4..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Allwmake +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -if [ "$TEC_360_2009" ] -then - wmake -fi diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Make/options b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Make/options index d03f44ae8cd509c3bcec9b62b2c7fc1ec3c31185..0c2c8b721607451a821a332a47319da09606246a 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Make/options +++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/Make/options @@ -1,14 +1,12 @@ EXE_INC = \ - -I$(TEC_360_2009)/include \ - /* -I../tecio/tecsrc/lnInclude/ */ \ + -I$(WM_THIRD_PARTY_DIR)/tecio/tecsrc/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ - $(TEC_360_2009)/lib/tecio64.a \ - /* -L$(FOAM_USER_LIBBIN) -ltecio */ \ + -ltecio \ -llagrangian \ -lfiniteVolume \ -lmeshTools diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C index d514609ff2ac93904ef354e35880f8d21b458831..82d02f25232c98fb9ef12ebbdb16cae22cf23ac5 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C +++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C @@ -65,6 +65,9 @@ Usage information as a single argument. The double quotes denote a regular expression. + @param -useTimeName \n + use the time index in the VTK file name instead of the time index + \*---------------------------------------------------------------------------*/ #include "pointMesh.H" @@ -240,7 +243,7 @@ int main(int argc, char *argv[]) # include "createNamedMesh.H" // TecplotData/ directory in the case - fileName fvPath(runTime.path()/"TecplotData-bin"); + fileName fvPath(runTime.path()/"Tecplot360"); // Directory of mesh (region0 gets filtered out) fileName regionPrefix = ""; @@ -536,7 +539,8 @@ int main(int argc, char *argv[]) varLocation ); - // strandID (= some zone id) + // strandID (= piece id. Gets incremented for every piece of geometry + // that is output) INTEGER4 strandID = 1; @@ -647,7 +651,7 @@ int main(int argc, char *argv[]) writer.writePolyhedralZone ( mesh.name(), // regionName - 1, //strandID, // strandID + strandID, // strandID mesh, List<INTEGER4>(3, ValueLocation_Nodal), nFaceNodes @@ -684,7 +688,7 @@ int main(int argc, char *argv[]) writer.writePolyhedralZone ( mesh.name(), // regionName - 1, //strandID, // strandID + strandID++, // strandID mesh, varLocation, 0 @@ -776,7 +780,7 @@ int main(int argc, char *argv[]) writer.writePolygonalZone ( setName, - 1, //strandID, + strandID++, ipp, allVarLocation ); @@ -793,7 +797,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vsf[i])(), + linearInterpolate(vsf[i])(), faceLabels )() ); @@ -804,7 +808,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vvf[i])(), + linearInterpolate(vvf[i])(), faceLabels )() ); @@ -815,7 +819,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vSpheretf[i])(), + linearInterpolate(vSpheretf[i])(), faceLabels )() ); @@ -826,7 +830,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vSymmtf[i])(), + linearInterpolate(vSymmtf[i])(), faceLabels )() ); @@ -837,7 +841,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vtf[i])(), + linearInterpolate(vtf[i])(), faceLabels )() ); @@ -903,7 +907,7 @@ int main(int argc, char *argv[]) { label patchID = patchIDs[i]; const polyPatch& pp = patches[patchID]; - INTEGER4 strandID = 1 + i; + //INTEGER4 strandID = 1 + i; Info<< " Writing patch " << patchID << "\t" << pp.name() << "\tstrand:" << strandID << nl << endl; @@ -917,7 +921,7 @@ int main(int argc, char *argv[]) writer.writePolygonalZone ( pp.name(), - strandID, + strandID++, //strandID, ipp, allVarLocation ); @@ -1073,7 +1077,7 @@ int main(int argc, char *argv[]) writer.writePolygonalZone ( pp.name(), - 1+patchIDs.size()+zoneI, //strandID, + strandID++, //1+patchIDs.size()+zoneI, //strandID, ipp, allVarLocation ); @@ -1090,7 +1094,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vsf[i])(), + linearInterpolate(vsf[i])(), pp )() ); @@ -1101,7 +1105,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vvf[i])(), + linearInterpolate(vvf[i])(), pp )() ); @@ -1112,7 +1116,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vSpheretf[i])(), + linearInterpolate(vSpheretf[i])(), pp )() ); @@ -1123,7 +1127,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vSymmtf[i])(), + linearInterpolate(vSymmtf[i])(), pp )() ); @@ -1134,7 +1138,7 @@ int main(int argc, char *argv[]) ( writer.getFaceField ( - fvc::interpolate(vtf[i])(), + linearInterpolate(vtf[i])(), pp )() ); @@ -1196,29 +1200,29 @@ int main(int argc, char *argv[]) Info<< " vectors :"; print(Info, vectorNames); - wordList sphereNames - ( - sprayObjs.names - ( - sphericalTensorIOField::typeName - ) - ); - Info<< " spherical tensors :"; - print(Info, sphereNames); - - wordList symmNames - ( - sprayObjs.names - ( - symmTensorIOField::typeName - ) - ); - Info<< " symm tensors :"; - print(Info, symmNames); - - wordList tensorNames(sprayObjs.names(tensorIOField::typeName)); - Info<< " tensors :"; - print(Info, tensorNames); + //wordList sphereNames + //( + // sprayObjs.names + // ( + // sphericalTensorIOField::typeName + // ) + //); + //Info<< " spherical tensors :"; + //print(Info, sphereNames); + // + //wordList symmNames + //( + // sprayObjs.names + // ( + // symmTensorIOField::typeName + // ) + //); + //Info<< " symm tensors :"; + //print(Info, symmNames); + // + //wordList tensorNames(sprayObjs.names(tensorIOField::typeName)); + //Info<< " tensors :"; + //print(Info, tensorNames); // Load cloud positions @@ -1277,7 +1281,7 @@ int main(int argc, char *argv[]) writer.writeOrderedZone ( cloudDirs[cloudI], - strandID, + strandID++, //strandID, parcels.size(), allVarLocation ); diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriter.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriter.C index 47165d80a448adbec08991a0e7de239e1314a8cf..97e94d49824adfa674665e7e90aa498d2493b0b7 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriter.C +++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriter.C @@ -79,7 +79,7 @@ Pout<< endl void Foam::tecplotWriter::writePolyhedralZone ( const word& zoneName, - const INTEGER4 strandID, + INTEGER4 strandID, const fvMesh& mesh, const List<INTEGER4>& varLocArray, INTEGER4 nFaceNodes @@ -95,7 +95,6 @@ void Foam::tecplotWriter::writePolyhedralZone INTEGER4 KCellMax = 0; /* Not Used, set to zero */ double SolTime = runTime_.value(); /* solution time */ - INTEGER4 StrandID = 1; /* static zone */ INTEGER4 ParentZone = 0; /* no parent zone */ INTEGER4 IsBlock = 1; /* block format */ @@ -135,7 +134,7 @@ Pout<< "zoneName:" << zoneName &JCellMax, &KCellMax, &SolTime, - &StrandID, + &strandID, &ParentZone, &IsBlock, &NFConns, diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriterTemplates.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriterTemplates.C index f337b20d380836f9f06d2634f19470c0c108a407..f9a01d57a4ba31bd3aef10148a75ac0efb8554f9 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriterTemplates.C +++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecplotWriterTemplates.C @@ -26,11 +26,11 @@ License #include "tecplotWriter.H" -extern "C" -{ +//extern "C" +//{ #include "MASTER.h" #include "GLOBAL.h" -} +//} #include "fvc.H" diff --git a/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C b/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C index 748ce3f5991764aaea464b2dcf72d074efd6b810..1a29e87652603cb016eb8558ad279cc711bc365d 100644 --- a/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C +++ b/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C @@ -233,7 +233,7 @@ int main(int argc, char *argv[]) } } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/Allwmake b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/Allwmake deleted file mode 100755 index b1106aa608e77914b8c251d30e8978b6a00dcc3b..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/Allwmake +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # run from this directory -set -x - -if [ -d "$ParaView_DIR" -a -r "$ParaView_DIR" ] -then - case "$ParaView_VERSION" in - 2*) - wmake libso vtkFoam - ( - cd PVFoamReader - mkdir -p Make/$WM_OPTIONS > /dev/null 2>&1 - cd Make/$WM_OPTIONS - cmake ../.. - make - ) - ;; - esac -fi - -# ----------------------------------------------------------------- end-of-file diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/CMakeLists.txt b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/CMakeLists.txt deleted file mode 100644 index 1c88efbbfff2b768cc1cdb3938bc190d54d7e45e..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/CMakeLists.txt +++ /dev/null @@ -1,79 +0,0 @@ -# Set the project/library name here. Classes should be declared as -# "class VTK_FoamReader_EXPORT vtkFoo", where PVFoamReader is the name of the -# project set here. -PROJECT(PVFoamReader) - -# Set your list of sources here. Do not change the name of the -# PVFoamReader_SRCS variable. -SET(PVFoamReader_SRCS - vtkFoamReader.cxx - vtkFoamData.cxx -) - -# List the kits from VTK that are needed by this project. Do not -# change the name of the PVFoamReader_LIBS variable. -SET(PVFoamReader_LIBS - vtkGraphics -) - -INCLUDE_DIRECTORIES( - $ENV{WM_PROJECT_DIR}/src/OpenFOAM/lnInclude - $ENV{WM_PROJECT_DIR}/src/finiteVolume/lnInclude - $ENV{ParaView_INST_DIR}/include - ../vtkFoam/lnInclude -) -ADD_DEFINITIONS(-DWM_$ENV{WM_PRECISION_OPTION}) - -#----------------------------------------------------------------------------- -# Most users should not need to change anything below this line. - -# Need to include class headers and the configuration header. -INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}) -INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}) - -# Import ParaView build settings. -FIND_PACKAGE(ParaView) -IF(NOT ParaView_FOUND) - MESSAGE(FATAL_ERROR "ParaView is required. Set ParaView_DIR.") -ENDIF(NOT ParaView_FOUND) -IF(NOT PARAVIEW_BUILD_SHARED_LIBS) - MESSAGE(FATAL_ERROR "ParaView must be built with BUILD_SHARED_LIBS ON.") -ENDIF(NOT PARAVIEW_BUILD_SHARED_LIBS) -INCLUDE(${PARAVIEW_USE_FILE}) - -# Configure output directories. -SET (LIBRARY_OUTPUT_PATH $ENV{FOAM_LIBBIN} CACHE INTERNAL - "Single output directory for building all libraries.") -SET (EXECUTABLE_OUTPUT_PATH $ENV{FOAM_APPBIN} CACHE INTERNAL - "Single output directory for building all executables.") - -# Create the configuration header. -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PVFoamReaderConfigure.h.in - ${PROJECT_BINARY_DIR}/vtk${PROJECT_NAME}Configure.h - @ONLY IMMEDIATE) - -# Must be defined before ADD_LIBRARY for cmake version 2.3.4-20060317 -LINK_DIRECTORIES($ENV{FOAM_LIBBIN}) -LINK_DIRECTORIES($ENV{FOAM_USER_LIBBIN}) - -# Create vtk client/server wrappers for the classes. -VTK_WRAP_ClientServer(${PROJECT_NAME} PVFoamReaderCS_SRCS "${PVFoamReader_SRCS}") - -# Build the package as a plugin for ParaView. -ADD_LIBRARY(${PROJECT_NAME} MODULE ${PVFoamReader_SRCS} ${PVFoamReaderCS_SRCS}) -LINK_DIRECTORIES($ENV{ParaView_INST_DIR}/lib) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} vtkClientServer) -FOREACH(c ${PVFoamReader_LIBS}) - TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${c}CS) -ENDFOREACH(c) - -# Place the package configuration file into the build tree. -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PVFoamReader.xml.in - ${PROJECT_BINARY_DIR}/../${PROJECT_NAME}.xml @ONLY IMMEDIATE) - -# Place the package configuration file into the build tree. -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PVFoamReader.pvsm.in - ${PROJECT_BINARY_DIR}/../${PROJECT_NAME}.pvsm @ONLY IMMEDIATE) - -TARGET_LINK_LIBRARIES(${PROJECT_NAME} OpenFOAM finiteVolume vtkFoam) -#----------------------------------------------------------------------------- diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/Make/PVFoamReader.pvsm b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/Make/PVFoamReader.pvsm deleted file mode 100644 index e3a097219e5bd6396d5e40f4eeac95c03be8a0f8..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/Make/PVFoamReader.pvsm +++ /dev/null @@ -1,154 +0,0 @@ -<ServerManagerConfiguration> - <ProxyGroup name="sources"> - <SourceProxy - - name="FoamReader" - class="vtkFoamReader"> - - <StringVectorProperty - name="FileName" - command="SetFileName" - number_of_elements="1"> - <StringListDomain name="files"/> - </StringVectorProperty> - - <IntVectorProperty - name="UpdateGUI" - command="SetUpdateGUI" - number_of_elements="1" - default_values="0"> - <BooleanDomain name="bool"/> - </IntVectorProperty> - - <IntVectorProperty - name="CacheMesh" - command="SetCacheMesh" - number_of_elements="1" - default_values="1"> - <BooleanDomain name="bool"/> - </IntVectorProperty> - - <IntVectorProperty - name="TimeStepRangeInfo" - command="GetTimeStepRange" - information_only="1"> - <SimpleIntInformationHelper/> - </IntVectorProperty> - <IntVectorProperty - name="TimeStep" - command="SetTimeStep" - number_of_elements="1" - animateable="1" - default_values="0"> - <IntRangeDomain name="range"> - <RequiredProperties> - <Property name="TimeStepRangeInfo" function="Range"/> - </RequiredProperties> - </IntRangeDomain> - </IntVectorProperty> - - <IntVectorProperty - name="TimeStepLimitsInfo" - command="GetTimeStepLimits" - information_only="1"> - <SimpleIntInformationHelper/> - </IntVectorProperty> - <IntVectorProperty - name="TimeStepLimits" - command="SetTimeStepLimits" - number_of_elements="2" - default_values="2 5" > - <IntRangeDomain name="range"> - <RequiredProperties> - <Property name="TimeStepLimitsInfo" function="Range"/> - </RequiredProperties> - </IntRangeDomain> - </IntVectorProperty> - - <StringVectorProperty - name="TimeArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="Time"/> - </StringVectorProperty> - <StringVectorProperty - name="TimeStatus" - command="SetTimeArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="TimeArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="TimeArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - <StringVectorProperty - name="RegionArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="Region"/> - </StringVectorProperty> - <StringVectorProperty - name="RegionStatus" - command="SetRegionArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="RegionArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="RegionArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - <StringVectorProperty - name="VolFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="VolField"/> - </StringVectorProperty> - <StringVectorProperty - name="VolFieldStatus" - command="SetVolFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="VolFieldArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="VolFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - <StringVectorProperty - name="PointFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="PointField"/> - </StringVectorProperty> - <StringVectorProperty - name="PointFieldStatus" - command="SetPointFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="PointFieldArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="PointFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - </SourceProxy> - </ProxyGroup> -</ServerManagerConfiguration> diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/Make/PVFoamReader.xml b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/Make/PVFoamReader.xml deleted file mode 100644 index 91e00b78d68150cdae95e6221506415d09d4638a..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/Make/PVFoamReader.xml +++ /dev/null @@ -1,71 +0,0 @@ -<ModuleInterfaces> - <Library name="PVFoamReader"/> - <ServerManagerFile name="PVFoamReader.pvsm"/> - - <Module name="FoamReader" - class="vtkPVAdvancedReaderModule" - root_name="Foam" - output="vtkDataSet" - module_type="Reader" - extensions=".foam" - file_description="Foam case"> - - <Source class="vtkFoamReader"/> - - <LabeledToggle - label="Update GUI" - trace_name="UpdateGUI" - property="UpdateGUI" - help="To update GUI without execution toggle this Accept and Reset."/> - - <LabeledToggle - label="Cache Mesh" - trace_name="CacheMesh" - property="CacheMesh" - help="Cache the FOAM mesh between GUI selection changes."/> - - <Scale - property="TimeStep" - trace_name="TimeStep" - label="Time step" - display_entry="0" - display_value="1" - entry_and_label_on_top="0" - help="Select a time step." - keeps_timesteps="1" - range_source="TimeStepRange"/> - - <VectorEntry - property="TimeStepLimits" - type="int" - trace_name="TimeStepLimits" - length="2" - label="Lower and Upper Times" - help="Maximum lower and upper number of time steps displayed in the selection list."/> - - <ArraySelection - label_text="Time" - property="TimeStatus" - trace_name="TimeArrays"/> - - <ArraySelection - label_text="Region" - property="RegionStatus" - trace_name="RegionArrays"/> - - <ArraySelection - label_text="Vol Field" - property="VolFieldStatus" - trace_name="CellArrays"/> - - <ArraySelection - label_text="Point Field" - property="PointFieldStatus" - trace_name="PointArrays"/> - - <Documentation> - ParaView Foam reader module - </Documentation> - </Module> - -</ModuleInterfaces> diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReader.pvsm.in b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReader.pvsm.in deleted file mode 100644 index e3a097219e5bd6396d5e40f4eeac95c03be8a0f8..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReader.pvsm.in +++ /dev/null @@ -1,154 +0,0 @@ -<ServerManagerConfiguration> - <ProxyGroup name="sources"> - <SourceProxy - - name="FoamReader" - class="vtkFoamReader"> - - <StringVectorProperty - name="FileName" - command="SetFileName" - number_of_elements="1"> - <StringListDomain name="files"/> - </StringVectorProperty> - - <IntVectorProperty - name="UpdateGUI" - command="SetUpdateGUI" - number_of_elements="1" - default_values="0"> - <BooleanDomain name="bool"/> - </IntVectorProperty> - - <IntVectorProperty - name="CacheMesh" - command="SetCacheMesh" - number_of_elements="1" - default_values="1"> - <BooleanDomain name="bool"/> - </IntVectorProperty> - - <IntVectorProperty - name="TimeStepRangeInfo" - command="GetTimeStepRange" - information_only="1"> - <SimpleIntInformationHelper/> - </IntVectorProperty> - <IntVectorProperty - name="TimeStep" - command="SetTimeStep" - number_of_elements="1" - animateable="1" - default_values="0"> - <IntRangeDomain name="range"> - <RequiredProperties> - <Property name="TimeStepRangeInfo" function="Range"/> - </RequiredProperties> - </IntRangeDomain> - </IntVectorProperty> - - <IntVectorProperty - name="TimeStepLimitsInfo" - command="GetTimeStepLimits" - information_only="1"> - <SimpleIntInformationHelper/> - </IntVectorProperty> - <IntVectorProperty - name="TimeStepLimits" - command="SetTimeStepLimits" - number_of_elements="2" - default_values="2 5" > - <IntRangeDomain name="range"> - <RequiredProperties> - <Property name="TimeStepLimitsInfo" function="Range"/> - </RequiredProperties> - </IntRangeDomain> - </IntVectorProperty> - - <StringVectorProperty - name="TimeArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="Time"/> - </StringVectorProperty> - <StringVectorProperty - name="TimeStatus" - command="SetTimeArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="TimeArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="TimeArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - <StringVectorProperty - name="RegionArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="Region"/> - </StringVectorProperty> - <StringVectorProperty - name="RegionStatus" - command="SetRegionArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="RegionArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="RegionArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - <StringVectorProperty - name="VolFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="VolField"/> - </StringVectorProperty> - <StringVectorProperty - name="VolFieldStatus" - command="SetVolFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="VolFieldArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="VolFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - <StringVectorProperty - name="PointFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper attribute_name="PointField"/> - </StringVectorProperty> - <StringVectorProperty - name="PointFieldStatus" - command="SetPointFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="PointFieldArrayInfo"> - <ArraySelectionDomain name="array_list"> - <RequiredProperties> - <Property name="PointFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - - </SourceProxy> - </ProxyGroup> -</ServerManagerConfiguration> diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReader.xml.in b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReader.xml.in deleted file mode 100644 index 5eb2a4a8e8a4f674474ac098450dfbb2748ff391..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReader.xml.in +++ /dev/null @@ -1,71 +0,0 @@ -<ModuleInterfaces> - <Library name="@PROJECT_NAME@"/> - <ServerManagerFile name="@PROJECT_NAME@.pvsm"/> - - <Module name="FoamReader" - class="vtkPVAdvancedReaderModule" - root_name="Foam" - output="vtkDataSet" - module_type="Reader" - extensions=".foam" - file_description="Foam case"> - - <Source class="vtkFoamReader"/> - - <LabeledToggle - label="Update GUI" - trace_name="UpdateGUI" - property="UpdateGUI" - help="To update GUI without execution toggle this Accept and Reset."/> - - <LabeledToggle - label="Cache Mesh" - trace_name="CacheMesh" - property="CacheMesh" - help="Cache the FOAM mesh between GUI selection changes."/> - - <Scale - property="TimeStep" - trace_name="TimeStep" - label="Time step" - display_entry="0" - display_value="1" - entry_and_label_on_top="0" - help="Select a time step." - keeps_timesteps="1" - range_source="TimeStepRange"/> - - <VectorEntry - property="TimeStepLimits" - type="int" - trace_name="TimeStepLimits" - length="2" - label="Lower and Upper Times" - help="Maximum lower and upper number of time steps displayed in the selection list."/> - - <ArraySelection - label_text="Time" - property="TimeStatus" - trace_name="TimeArrays"/> - - <ArraySelection - label_text="Region" - property="RegionStatus" - trace_name="RegionArrays"/> - - <ArraySelection - label_text="Vol Field" - property="VolFieldStatus" - trace_name="CellArrays"/> - - <ArraySelection - label_text="Point Field" - property="PointFieldStatus" - trace_name="PointArrays"/> - - <Documentation> - ParaView Foam reader module - </Documentation> - </Module> - -</ModuleInterfaces> diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReaderConfigure.h.in b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReaderConfigure.h.in deleted file mode 100644 index aae4a079a2faf8d11545d4048049e4f0a4a258ed..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/PVFoamReaderConfigure.h.in +++ /dev/null @@ -1,18 +0,0 @@ -/*========================================================================= -This source has no copyright. It is intended to be copied by users -wishing to create their own ParaView plugin classes locally. -=========================================================================*/ -#ifndef __vtk@PROJECT_NAME@_h -#define __vtk@PROJECT_NAME@_h - -#if defined(_WIN32) -# if defined(@PROJECT_NAME@_EXPORTS) -# define VTK_@PROJECT_NAME@_EXPORT __declspec(dllexport) -# else -# define VTK_@PROJECT_NAME@_EXPORT __declspec(dllimport) -# endif -#else -# define VTK_@PROJECT_NAME@_EXPORT -#endif - -#endif diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamReader.cxx b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamReader.cxx deleted file mode 100644 index d977104ce28e26993b12342c86d4847a141a12ba..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamReader.cxx +++ /dev/null @@ -1,411 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - -\*---------------------------------------------------------------------------*/ - -#include <ctype.h> - -#include "vtkFoamReader.h" - -#include "vtkCallbackCommand.h" -#include "vtkDataArraySelection.h" -#include "vtkDataArrayCollection.h" -#include "vtkObjectFactory.h" -#include "vtkDataSet.h" -#include "vtkErrorCode.h" -#include "vtkUnstructuredGrid.h" - -#include "vtkFoam.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -vtkCxxRevisionMacro(vtkFoamReader, "$Revision: 1.20 $"); -vtkStandardNewMacro(vtkFoamReader); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -vtkFoamReader::vtkFoamReader() -{ - StoredOutputs = NULL; - - FileName = NULL; - foamData_ = NULL; - - CacheMesh = 0; - - UpdateGUI = 1; - UpdateGUIOld = 1; - TimeStep = 0; - TimeStepRange[0] = 0; - TimeStepRange[1] = 0; - - TimeStepLimits[0] = 2; - TimeStepLimits[1] = 5; - - TimeSelection = vtkDataArraySelection::New(); - RegionSelection = vtkDataArraySelection::New(); - VolFieldSelection = vtkDataArraySelection::New(); - PointFieldSelection = vtkDataArraySelection::New(); - - // Setup the selection callback to modify this object when an array - // selection is changed. - SelectionObserver = vtkCallbackCommand::New(); - SelectionObserver->SetCallback(&vtkFoamReader::SelectionModifiedCallback); - SelectionObserver->SetClientData(this); - - TimeSelection->AddObserver - ( - vtkCommand::ModifiedEvent, - this->SelectionObserver - ); - RegionSelection->AddObserver - ( - vtkCommand::ModifiedEvent, - this->SelectionObserver - ); - VolFieldSelection->AddObserver - ( - vtkCommand::ModifiedEvent, - this->SelectionObserver - ); - PointFieldSelection->AddObserver - ( - vtkCommand::ModifiedEvent, - this->SelectionObserver - ); - - // This is needed by ParaView 2.?.? - this->SetNumberOfOutputPorts(0); -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -vtkFoamReader::~vtkFoamReader() -{ - if (foamData_) - { - delete foamData_; - } - - if (StoredOutputs) - { - StoredOutputs->Delete(); - } - - if (FileName) - { - delete [] FileName; - } - - TimeSelection->RemoveObserver(this->SelectionObserver); - RegionSelection->RemoveObserver(this->SelectionObserver); - VolFieldSelection->RemoveObserver(this->SelectionObserver); - PointFieldSelection->RemoveObserver(this->SelectionObserver); - SelectionObserver->Delete(); - - TimeSelection->Delete(); - RegionSelection->Delete(); - VolFieldSelection->Delete(); - PointFieldSelection->Delete(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void vtkFoamReader::ExecuteInformation() -{ - if (!foamData_) - { - vtkDebugMacro( << "Reading Foam case" << FileName); - foamData_ = new Foam::vtkFoam(FileName, this); - } - else - { - foamData_->UpdateInformation(); - } - - vtkDebugMacro( << "end of ExecuteInformation\n"); -} - - -void vtkFoamReader::Execute() -{ - if (!StoredOutputs) - { - foamData_->Update(); - - StoredOutputs = vtkFoamData::New(); - - for (int i = 0; i < GetNumberOfOutputs(); i++) - { - vtkDataObject* tmp = GetOutput(i); - vtkDataObject* output = tmp->NewInstance(); - output->ShallowCopy(tmp); - StoredOutputs->SetNthOutput(i, output); - output->Delete(); - } - } - else - { - for (int i = 0; i < GetNumberOfOutputs(); i++) - { - vtkDataObject* output = GetOutput(i); - int tempExtent[6]; - output->GetUpdateExtent(tempExtent); - output->ShallowCopy(StoredOutputs->GetOutput(i)); - output->SetUpdateExtent(tempExtent); - } - - if (UpdateGUIOld == GetUpdateGUI()) - { - foamData_->Update(); - - for (int i = 0; i < GetNumberOfOutputs(); i++) - { - vtkDataObject* tmp = GetOutput(i); - vtkDataObject* output = tmp->NewInstance(); - output->ShallowCopy(tmp); - StoredOutputs->SetNthOutput(i, output); - output->Delete(); - } - } - } - - UpdateGUIOld = GetUpdateGUI(); -} - - -void vtkFoamReader::SetFileName(const char *name) -{ - if (name && !FileName || (FileName && !strcmp(FileName,name))) - { - if (!FileName) - { - FileName = new char[strlen(name) + 1]; - strcpy(FileName, name); - } - } - else - { - vtkErrorMacro("Changing case is not currently supported.\nPlease delete reader and create a new one for the new case."); - return; - } - - /* - if ( FileName && name && (!strcmp(FileName,name))) - { - return; - } - - if (!name && !FileName) - { - return; - } - - if (FileName) - { - delete [] FileName; - } - - FileName = new char[strlen(name) + 1]; - strcpy(FileName, name); - - if (foamData_) - { - delete foamData_; - foamData_ = NULL; - - if (StoredOutputs) - { - StoredOutputs->Delete(); - StoredOutputs = NULL; - } - } - - Modified(); - */ -} - - -void vtkFoamReader::PrintSelf(ostream& os, vtkIndent indent) -{ - Superclass::PrintSelf(os,indent); - - os << indent << "File Name: " - << (FileName ? FileName : "(none)") << "\n"; -} - - -vtkDataArraySelection* vtkFoamReader::GetTimeSelection() -{ - return TimeSelection; -} - -int vtkFoamReader::GetNumberOfTimeArrays() -{ - return TimeSelection->GetNumberOfArrays(); -} - -const char* vtkFoamReader::GetTimeArrayName(int index) -{ - return TimeSelection->GetArrayName(index); -} - -int vtkFoamReader::GetTimeArrayStatus(const char* name) -{ - return TimeSelection->ArrayIsEnabled(name); -} - -void vtkFoamReader::SetTimeArrayStatus(const char* name, int status) -{ - if(status) - { - TimeSelection->EnableArray(name); - } - else - { - TimeSelection->DisableArray(name); - } -} - -vtkDataArraySelection* vtkFoamReader::GetRegionSelection() -{ - return RegionSelection; -} - -int vtkFoamReader::GetNumberOfRegionArrays() -{ - return RegionSelection->GetNumberOfArrays(); -} - -const char* vtkFoamReader::GetRegionArrayName(int index) -{ - return RegionSelection->GetArrayName(index); -} - -int vtkFoamReader::GetRegionArrayStatus(const char* name) -{ - return RegionSelection->ArrayIsEnabled(name); -} - -void vtkFoamReader::SetRegionArrayStatus(const char* name, int status) -{ - if(status) - { - RegionSelection->EnableArray(name); - } - else - { - RegionSelection->DisableArray(name); - } -} - - -vtkDataArraySelection* vtkFoamReader::GetVolFieldSelection() -{ - return VolFieldSelection; -} - -int vtkFoamReader::GetNumberOfVolFieldArrays() -{ - return VolFieldSelection->GetNumberOfArrays(); -} - -const char* vtkFoamReader::GetVolFieldArrayName(int index) -{ - return VolFieldSelection->GetArrayName(index); -} - -int vtkFoamReader::GetVolFieldArrayStatus(const char* name) -{ - return VolFieldSelection->ArrayIsEnabled(name); -} - -void vtkFoamReader::SetVolFieldArrayStatus(const char* name, int status) -{ - if(status) - { - VolFieldSelection->EnableArray(name); - } - else - { - VolFieldSelection->DisableArray(name); - } -} - - -vtkDataArraySelection* vtkFoamReader::GetPointFieldSelection() -{ - return PointFieldSelection; -} - -int vtkFoamReader::GetNumberOfPointFieldArrays() -{ - return PointFieldSelection->GetNumberOfArrays(); -} - -const char* vtkFoamReader::GetPointFieldArrayName(int index) -{ - return PointFieldSelection->GetArrayName(index); -} - -int vtkFoamReader::GetPointFieldArrayStatus(const char* name) -{ - return PointFieldSelection->ArrayIsEnabled(name); -} - -void vtkFoamReader::SetPointFieldArrayStatus(const char* name, int status) -{ - if(status) - { - PointFieldSelection->EnableArray(name); - } - else - { - PointFieldSelection->DisableArray(name); - } -} - - -void vtkFoamReader::SelectionModifiedCallback -( - vtkObject*, - unsigned long, - void* clientdata, - void* -) -{ - static_cast<vtkFoamReader*>(clientdata)->SelectionModified(); -} - -void vtkFoamReader::SelectionModified() -{ - Modified(); -} - - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamReader.h b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamReader.h deleted file mode 100644 index 023c064086ba8a8c691143dc27a65c18795f1a97..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamReader.h +++ /dev/null @@ -1,200 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - vtkFoamReader - -Description - -SourceFiles - vtkFoamReader.cxx - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoamReader_h -#define vtkFoamReader_h - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "vtkDataSetSource.h" -#include "vtkFoamData.h" - -// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * // - -namespace Foam -{ - class vtkFoam; -} - -class vtkPoints; -class vtkDataArraySelection; -class vtkDataArrayCollection; -class vtkCallbackCommand; - -/*---------------------------------------------------------------------------*\ - Class vtkFoamReader Declaration -\*---------------------------------------------------------------------------*/ - -class VTK_IO_EXPORT vtkFoamReader -: - public vtkDataSetSource -{ - -public: - - //- Standard VTK class creation function - static vtkFoamReader *New(); - - //- Standard VTK class type and revision declaration macro - vtkTypeRevisionMacro(vtkFoamReader,vtkDataSetSource); - - //- Standard VTK class print function - void PrintSelf(ostream& os, vtkIndent indent); - - // File name of FOAM datafile to read - void SetFileName(const char *); - //vtkSetStringMacro(FileName); - vtkGetStringMacro(FileName); - - // GUI update control - vtkSetMacro(UpdateGUI, int); - vtkGetMacro(UpdateGUI, int); - - // FOAM mesh caching control - vtkSetMacro(CacheMesh, int); - vtkGetMacro(CacheMesh, int); - - // Time-step slider control - vtkSetMacro(TimeStep, int); - vtkGetMacro(TimeStep, int); - vtkSetVector2Macro(TimeStepRange, int); - vtkGetVector2Macro(TimeStepRange, int); - - // Control of the upper and lower limits on the number of times - // displayed in the selection list - vtkSetVector2Macro(TimeStepLimits, int); - vtkGetVector2Macro(TimeStepLimits, int); - - // Time selection list control - vtkDataArraySelection* GetTimeSelection(); - int GetNumberOfTimeArrays(); - const char* GetTimeArrayName(int index); - int GetTimeArrayStatus(const char* name); - void SetTimeArrayStatus(const char* name, int status); - - // Region selection list control - vtkDataArraySelection* GetRegionSelection(); - int GetNumberOfRegionArrays(); - const char* GetRegionArrayName(int index); - int GetRegionArrayStatus(const char* name); - void SetRegionArrayStatus(const char* name, int status); - - // volField selection list control - vtkDataArraySelection* GetVolFieldSelection(); - int GetNumberOfVolFieldArrays(); - const char* GetVolFieldArrayName(int index); - int GetVolFieldArrayStatus(const char* name); - void SetVolFieldArrayStatus(const char* name, int status); - - // pointField selection list control - vtkDataArraySelection* GetPointFieldSelection(); - int GetNumberOfPointFieldArrays(); - const char* GetPointFieldArrayName(int index); - int GetPointFieldArrayStatus(const char* name); - void SetPointFieldArrayStatus(const char* name, int status); - - // SetNthOutput provided so that vtkFoam can access it - void SetNthOutput(int num, vtkDataObject *output) - { - vtkDataSetSource::SetNthOutput(num, output); - } - - // Standard VTK ExecuteInformation function overriding the base-class. - // Called by ParaView before GUI is displayed. - virtual void ExecuteInformation(); - - // Callback registered with the SelectionObserver - // for all the selection lists - static void SelectionModifiedCallback - ( - vtkObject* caller, - unsigned long eid, - void* clientdata, - void* calldata - ); - - void SelectionModified(); - - -protected: - - vtkFoamReader(); - ~vtkFoamReader(); - - // Standard VTK execute function overriding the base-class. - // Called by ParaView when Accept is pressed. - void Execute(); - - // Cache for the outputs. These are stored before the end of Execute() - // and re-instated at the beginning because the Outputs would disappear - // otherwise. - vtkFoamData* StoredOutputs; - - // FOAM file name (*.foam) - char *FileName; - - //BTX - Foam::vtkFoam* foamData_; - //ETX - - int CacheMesh; - - int UpdateGUI; - int UpdateGUIOld; - int TimeStep; - int TimeStepRange[2]; - - int TimeStepLimits[2]; - - vtkDataArraySelection* TimeSelection; - vtkDataArraySelection* RegionSelection; - vtkDataArraySelection* VolFieldSelection; - vtkDataArraySelection* PointFieldSelection; - - // The observer to modify this object when the array selections are modified - vtkCallbackCommand* SelectionObserver; - - -private: - - vtkFoamReader(const vtkFoamReader&); // Not implemented. - void operator=(const vtkFoamReader&); // Not implemented. -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamSelectTimeSet.cxx b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamSelectTimeSet.cxx deleted file mode 100644 index fd948578da81a6a9df0553c6f80c6ef841baece3..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamSelectTimeSet.cxx +++ /dev/null @@ -1,531 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: $RCSfile: vtkPVFoamSelectTimeSet.cxx,v $ - - Copyright (c) Kitware, Inc. - All rights reserved. - See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ -#include "vtkPVFoamSelectTimeSet.h" - -#include "vtkDataArrayCollection.h" -#include "vtkFloatArray.h" -#include "vtkKWFrame.h" -#include "vtkKWLabel.h" -#include "vtkKWLabeledFrame.h" -#include "vtkKWMenu.h" -#include "vtkObjectFactory.h" -#include "vtkPVAnimationInterfaceEntry.h" -#include "vtkPVApplication.h" -#include "vtkPVProcessModule.h" -#include "vtkPVScalarListWidgetProperty.h" -#include "vtkPVSource.h" -#include "vtkPVXMLElement.h" - -#include <vtkstd/string> - -//----------------------------------------------------------------------------- -vtkStandardNewMacro(vtkPVFoamSelectTimeSet); -vtkCxxRevisionMacro(vtkPVFoamSelectTimeSet, "$Revision: 1.39 $"); - -//----------------------------------------------------------------------------- -int vtkDataArrayCollectionCommand(ClientData cd, Tcl_Interp *interp, - int argc, char *argv[]); - -//----------------------------------------------------------------------------- -vtkPVFoamSelectTimeSet::vtkPVFoamSelectTimeSet() -{ - this->LabeledFrame = vtkKWLabeledFrame::New(); - this->LabeledFrame->SetParent(this); - - this->TimeLabel = vtkKWLabel::New(); - this->TimeLabel->SetParent(this->LabeledFrame->GetFrame()); - - this->TreeFrame = vtkKWWidget::New(); - this->TreeFrame->SetParent(this->LabeledFrame->GetFrame()); - - this->Tree = vtkKWWidget::New(); - this->Tree->SetParent(this->TreeFrame); - - this->TimeValue = 0.0; - - this->FrameLabel = 0; - - this->TimeSets = vtkDataArrayCollection::New(); - - this->Property = 0; - - this->SetCommand = 0; - this->ServerSideID.ID = 0; -} - -//----------------------------------------------------------------------------- -vtkPVFoamSelectTimeSet::~vtkPVFoamSelectTimeSet() -{ - this->LabeledFrame->Delete(); - this->Tree->Delete(); - this->TreeFrame->Delete(); - this->TimeLabel->Delete(); - this->SetFrameLabel(0); - this->TimeSets->Delete(); - this->SetSetCommand(0); - if(this->ServerSideID.ID) - { - vtkPVProcessModule* pm = this->GetPVApplication()->GetProcessModule(); - pm->DeleteStreamObject(this->ServerSideID); - pm->SendStream(vtkProcessModule::DATA_SERVER); - } -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SetLabel(const char* label) -{ - this->SetFrameLabel(label); - if (this->GetApplication()) - { - this->LabeledFrame->SetLabel(label); - } -} - -//----------------------------------------------------------------------------- -const char* vtkPVFoamSelectTimeSet::GetLabel() -{ - return this->GetFrameLabel(); -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::Create(vtkKWApplication *pvApp) -{ - // Call the superclass to create the widget and set the appropriate flags - - if (!this->vtkKWWidget::Create(pvApp, "frame", "-bd 2 -relief flat")) - { - vtkErrorMacro("Failed creating widget " << this->GetClassName()); - return; - } - - // For getting the widget in a script. - if ((this->TraceNameState == vtkPVWidget::Uninitialized || - this->TraceNameState == vtkPVWidget::Default) ) - { - this->SetTraceName("FoamSelectTimeSet"); - this->SetTraceNameState(vtkPVWidget::SelfInitialized); - } - - this->LabeledFrame->Create(this->GetApplication(), 0); - if (this->FrameLabel) - { - this->LabeledFrame->SetLabel(this->FrameLabel); - } - this->TimeLabel->Create(this->GetApplication(), ""); - - char label[32]; - sprintf(label, "Time value: %12.5e", 0.0); - this->TimeLabel->SetLabel(label); - this->Script("pack %s", this->TimeLabel->GetWidgetName()); - - this->TreeFrame->Create(this->GetApplication(), "ScrolledWindow", - "-relief sunken -bd 2"); - - this->Tree->Create(this->GetApplication(), "Tree", - "-background white -bd 0 -width 15 -padx 2 " - "-redraw 1 -relief flat -selectbackground red"); - this->Script("%s bindText <ButtonPress-1> {%s SetTimeValueCallback}", - this->Tree->GetWidgetName(), this->GetTclName()); - this->Script("%s setwidget %s", this->TreeFrame->GetWidgetName(), - this->Tree->GetWidgetName()); - - this->Script("pack %s -expand t -fill x", this->TreeFrame->GetWidgetName()); - - this->Script("pack %s -side top -expand t -fill x", - this->LabeledFrame->GetWidgetName()); - -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SetTimeValue(float time) -{ - if (this->TimeValue != time || - !this->TimeLabel->GetLabel() || - !strcmp(this->TimeLabel->GetLabel(), "No timesets available.")) - { - this->TimeValue = time; - - char label[32]; - sprintf(label, "Time value: %12.5e", time); - this->TimeLabel->SetLabel(label); - this->Modified(); - } -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SetTimeValueCallback(const char* item) -{ - if (this->TimeSets->GetNumberOfItems() == 0) - { - return; - } - - if ( strncmp(item, "timeset", strlen("timeset")) == 0 ) - { - this->Script("if [%s itemcget %s -open] " - "{%s closetree %s} else {%s opentree %s}", - this->Tree->GetWidgetName(), item, - this->Tree->GetWidgetName(), item, - this->Tree->GetWidgetName(), item); - return; - } - - this->Script("%s selection set %s", this->Tree->GetWidgetName(), - item); - this->Script("%s itemcget %s -data", this->Tree->GetWidgetName(), - item); - const char* result = this->GetApplication()->GetMainInterp()->result; - if (result[0] == '\0') - { - return; - } - - int index[2]; - sscanf(result, "%d %d", &(index[0]), &(index[1])); - - this->SetTimeSetsFromReader(); - this->SetTimeValue(this->TimeSets->GetItem(index[0])->GetTuple1(index[1])); - this->ModifiedCallback(); -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::AddRootNode(const char* name, const char* text) -{ - if (!this->GetApplication()) - { - return; - } - this->Script("%s insert end root %s -text {%s}", this->Tree->GetWidgetName(), - name, text); -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::AddChildNode(const char* parent, const char* name, - const char* text, const char* data) -{ - if (!this->GetApplication()) - { - return; - } - this->Script("%s insert end %s %s -text {%s} -data %s", - this->Tree->GetWidgetName(), parent, name, text, data); -} - - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SaveInBatchScript(ofstream *file) -{ - *file << " [$pvTemp" << this->PVSource->GetVTKSourceID(0) - << " GetProperty " << this->SetCommand << "] SetElements1 " - << this->Property->GetScalar(0) << endl; -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::AcceptInternal(vtkClientServerID sourceID) -{ - if (this->ModifiedFlag) - { - this->Script("%s selection get", this->Tree->GetWidgetName()); - this->AddTraceEntry("$kw(%s) SetTimeValueCallback {%s}", - this->GetTclName(), - this->GetApplication()->GetMainInterp()->result); - } - - this->Property->SetVTKSourceID(sourceID); - this->Property->SetScalars(1, &this->TimeValue); - this->Property->AcceptInternal(); - - this->ModifiedFlag = 0; -} - -//--------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::Trace(ofstream *file) -{ - if ( ! this->InitializeTrace(file)) - { - return; - } - - this->Script("%s selection get", this->Tree->GetWidgetName()); - *file << "$kw(" << this->GetTclName() << ") SetTimeValueCallback {" - << this->GetApplication()->GetMainInterp()->result << "}" << endl; -} - - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::ResetInternal() -{ - if ( ! this->ModifiedFlag) - { - return; - } - - // Command to update the UI. - if (!this->Tree) - { - return; - } - - this->Script("%s delete [%s nodes root]", this->Tree->GetWidgetName(), - this->Tree->GetWidgetName()); - - this->SetTimeSetsFromReader(); - - int timeSetId=0; - char timeSetName[32]; - char timeSetText[32]; - - char timeValueName[32]; - char timeValueText[32]; - char indices[32]; - - float actualTimeValue = this->Property->GetScalar(0); - int matchFound = 0; - - this->ModifiedFlag = 0; - - if (this->TimeSets->GetNumberOfItems() == 0) - { - this->Script("pack forget %s", this->TreeFrame->GetWidgetName()); - this->TimeLabel->SetLabel("No timesets available."); - return; - } - else - { - this->SetTimeValue(actualTimeValue); - this->Script("pack %s -expand t -fill x", this->TreeFrame->GetWidgetName()); - } - - this->TimeSets->InitTraversal(); - vtkDataArray* da; - while( (da=this->TimeSets->GetNextItem()) ) - { - timeSetId++; - sprintf(timeSetName,"timeset%d", timeSetId); - sprintf(timeSetText,"Time Set %d", timeSetId); - this->AddRootNode(timeSetName, timeSetText); - - vtkIdType tuple; - for(tuple=0; tuple<da->GetNumberOfTuples(); tuple++) - { - float timeValue = da->GetTuple1(tuple); - sprintf(timeValueName, "time%d_%-12.5e", timeSetId, timeValue); - sprintf(timeValueText, "%-12.5e", timeValue); - ostrstream str; - str << "{" << timeSetId-1 << " " << tuple << "}" << ends; - sprintf(indices, "%s", str.str()); - str.rdbuf()->freeze(0); - this->AddChildNode(timeSetName, timeValueName, timeValueText, indices); - if (actualTimeValue == timeValue && !matchFound) - { - matchFound=1; - this->Script("%s selection set %s", this->Tree->GetWidgetName(), - timeValueName); - } - } - if (timeSetId == 1) - { - this->Script("%s opentree %s", this->Tree->GetWidgetName(), - timeSetName); - } - } - - this->SetTimeValue(actualTimeValue); -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::AddAnimationScriptsToMenu(vtkKWMenu *menu, - vtkPVAnimationInterfaceEntry *ai) -{ - char methodAndArgs[500]; - - sprintf(methodAndArgs, "AnimationMenuCallback %s", ai->GetTclName()); - // I do not under stand why the trace name is used for the - // menu entry, but Berk must know. - menu->AddCommand(this->GetTraceName(), this, methodAndArgs, 0, ""); -} - - -//----------------------------------------------------------------------------- -// What a pain. I need this method for tracing. -// Maybe the animation should call PVwidget methods and not vtk object methods. -void vtkPVFoamSelectTimeSet::AnimationMenuCallback(vtkPVAnimationInterfaceEntry *ai) -{ - if (ai->InitializeTrace(NULL)) - { - this->AddTraceEntry("$kw(%s) AnimationMenuCallback $kw(%s)", - this->GetTclName(), ai->GetTclName()); - } - - // I do not under stand why the trace name is used for the - // menu entry, but Berk must know. - ai->SetLabelAndScript(this->GetTraceName(), NULL, this->GetTraceName()); - ai->SetCurrentProperty(this->Property); - ai->Update(); -} - - - -//----------------------------------------------------------------------------- -vtkPVFoamSelectTimeSet* vtkPVFoamSelectTimeSet::ClonePrototype(vtkPVSource* pvSource, - vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map) -{ - vtkPVWidget* clone = this->ClonePrototypeInternal(pvSource, map); - return vtkPVFoamSelectTimeSet::SafeDownCast(clone); -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::CopyProperties(vtkPVWidget* clone, - vtkPVSource* pvSource, - vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map) -{ - this->Superclass::CopyProperties(clone, pvSource, map); - vtkPVFoamSelectTimeSet* pvts = vtkPVFoamSelectTimeSet::SafeDownCast(clone); - if (pvts) - { - pvts->SetLabel(this->FrameLabel); - pvts->SetSetCommand(this->SetCommand); - } - else - { - vtkErrorMacro( - "Internal error. Could not downcast clone to PVFoamSelectTimeSet."); - } -} - -//----------------------------------------------------------------------------- -int vtkPVFoamSelectTimeSet::ReadXMLAttributes(vtkPVXMLElement* element, - vtkPVXMLPackageParser* parser) -{ - if(!this->Superclass::ReadXMLAttributes(element, parser)) { return 0; } - - // Setup the Label. - const char* label = element->GetAttribute("label"); - if(label) - { - this->SetLabel(label); - } - - this->SetSetCommand(element->GetAttribute("set_command")); - - return 1; -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SetTimeSetsFromReader() -{ - vtkPVProcessModule* pm = this->GetPVApplication()->GetProcessModule(); - this->TimeSets->RemoveAllItems(); - - // Create the server-side helper if necessary. - if(!this->ServerSideID.ID) - { - this->ServerSideID = pm->NewStreamObject("vtkPVFoamServerSelectTimeSet"); - pm->SendStream(vtkProcessModule::DATA_SERVER); - } - - // Get the time sets from the reader on the server. - // Reader -> VTKSourceID (0). We assume that there is 1 VTKSource. - pm->GetStream() << vtkClientServerStream::Invoke - << this->ServerSideID << "GetTimeSets" - << this->PVSource->GetVTKSourceID(0) - << vtkClientServerStream::End; - pm->SendStream(vtkProcessModule::DATA_SERVER_ROOT); - vtkClientServerStream timeSets; - if(!pm->GetLastServerResult().GetArgument(0, 0, &timeSets)) - { - vtkErrorMacro("Error getting time sets from server."); - return; - } - - // There is one time set per message. - for(int m=0; m < timeSets.GetNumberOfMessages(); ++m) - { - // Each argument in the message is a time set entry. - vtkFloatArray* timeSet = vtkFloatArray::New(); - int n = timeSets.GetNumberOfArguments(m); - timeSet->SetNumberOfTuples(n); - for(int i=0; i < n; ++i) - { - float value; - if(!timeSets.GetArgument(m, i, &value)) - { - vtkErrorMacro("Error reading time set value."); - timeSet->Delete(); - return; - } - timeSet->SetTuple1(i, value); - } - this->TimeSets->AddItem(timeSet); - timeSet->Delete(); - } - - if (this->Property->GetNumberOfScalars() == 0 && - this->TimeSets->GetNumberOfItems() > 0) - { - vtkFloatArray *ts = - vtkFloatArray::SafeDownCast(this->TimeSets->GetItem(0)); - this->Property->SetScalars(1, ts->GetPointer(0)); - } -} - -//---------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SaveInBatchScriptForPart(ofstream *file, - vtkClientServerID sourceID) -{ - if (sourceID.ID == 0) - { - vtkErrorMacro(<< this->GetClassName() - << " must not have SaveInBatchScript method."); - return; - } - - *file << "\t" << "pvTemp" << sourceID - << " SetTimeValue " << this->GetTimeValue() - << endl;; -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::SetProperty(vtkPVWidgetProperty *prop) -{ - this->Property = vtkPVScalarListWidgetProperty::SafeDownCast(prop); - if (this->Property) - { - int numScalars = 1; - this->Property->SetVTKCommands(1, &this->SetCommand, &numScalars); - } -} - -//----------------------------------------------------------------------------- -vtkPVWidgetProperty* vtkPVFoamSelectTimeSet::GetProperty() -{ - return this->Property; -} - -//----------------------------------------------------------------------------- -vtkPVWidgetProperty* vtkPVFoamSelectTimeSet::CreateAppropriateProperty() -{ - return vtkPVScalarListWidgetProperty::New(); -} - -//----------------------------------------------------------------------------- -void vtkPVFoamSelectTimeSet::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os, indent); - os << indent << "TimeValue: " << this->TimeValue << endl; - os << indent << "LabeledFrame: " << this->LabeledFrame << endl; - os << indent << "SetCommand: " - << (this->SetCommand ? this->SetCommand : "(none)") << endl; -} diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamSelectTimeSet.h b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamSelectTimeSet.h deleted file mode 100644 index 70ab8cc97fb2393529cc2424cefb7f36fa1206ec..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamSelectTimeSet.h +++ /dev/null @@ -1,164 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: $RCSfile: vtkPVFoamSelectTimeSet.h,v $ - - Copyright (c) Kitware, Inc. - All rights reserved. - See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ -// .NAME vtkPVFoamSelectTimeSet - Special time selection widget used by PVFoamReaderModule -// .SECTION Description -// This is a PVWidget specially designed to be used with PVFoamReaderModule. -// It provides support for multiple sets. The time value selected by -// the user is passed to the Foam reader with a SetTimeValue() call. - -#ifndef __vtkPVFoamSelectTimeSet_h -#define __vtkPVFoamSelectTimeSet_h - -#include "vtkPVWidget.h" - -class vtkKWLabel; -class vtkKWMenu; -class vtkKWLabeledFrame; -class vtkDataArrayCollection; -class vtkPVScalarListWidgetProperty; - -class VTK_EXPORT vtkPVFoamSelectTimeSet : public vtkPVWidget -{ -public: - static vtkPVFoamSelectTimeSet* New(); - vtkTypeRevisionMacro(vtkPVFoamSelectTimeSet, vtkPVWidget); - void PrintSelf(ostream& os, vtkIndent indent); - - virtual void Create(vtkKWApplication *pvApp); - - //BTX - // Description: - // Called when accept button is pushed. - // Sets objects variable to the widgets value. - // Adds a trace entry. Side effect is to turn modified flag off. - virtual void AcceptInternal(vtkClientServerID); - //ETX - - // Description: - // Called when the reset button is pushed. - // Sets widget's value to the object-variable's value. - // Side effect is to turn the modified flag off. - virtual void ResetInternal(); - - // Description: - // Adds a script to the menu of the animation interface. - virtual void AddAnimationScriptsToMenu(vtkKWMenu *menu, - vtkPVAnimationInterfaceEntry *ai); - - // Description: - // Called whenthe animation method menu item is selected. - // Needed for proper tracing. - // It would be nice if the menu and cascade menus would trace - // invokation of items (?relying of enumeration of menu items or label?) - void AnimationMenuCallback(vtkPVAnimationInterfaceEntry *ai); - - // Description: - // This is the labeled frame around the timeset tree. - vtkGetObjectMacro(LabeledFrame, vtkKWLabeledFrame); - - // Description: - // Label displayed on the labeled frame. - void SetLabel(const char* label); - const char* GetLabel(); - - // Description: - // Updates the time value label and the time ivar. - void SetTimeValue(float time); - vtkGetMacro(TimeValue, float); - - // Description: - // Calls this->SetTimeValue () and Reader->SetTimeValue() - // with currently selected time value. - void SetTimeValueCallback(const char* item); - -//BTX - // Description: - // Creates and returns a copy of this widget. It will create - // a new instance of the same type as the current object - // using NewInstance() and then copy some necessary state - // parameters. - vtkPVFoamSelectTimeSet* ClonePrototype(vtkPVSource* pvSource, - vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map); -//ETX - - // Description: - // This serves a dual purpose. For tracing and for saving state. - virtual void Trace(ofstream *file); - - // Description: - // Set/get the property to use with this widget. - virtual void SetProperty(vtkPVWidgetProperty *prop); - virtual vtkPVWidgetProperty* GetProperty(); - - // Description: - // Create the right property for use with this widget. - virtual vtkPVWidgetProperty* CreateAppropriateProperty(); - - // Description: - // Set/get the command to pass the value to VTK. - vtkSetStringMacro(SetCommand); - vtkGetStringMacro(SetCommand); - - // Description: - // Save this widget to a file. - virtual void SaveInBatchScript(ofstream *file); - -protected: - vtkPVFoamSelectTimeSet(); - ~vtkPVFoamSelectTimeSet(); - - vtkPVFoamSelectTimeSet(const vtkPVFoamSelectTimeSet&); // Not implemented - void operator=(const vtkPVFoamSelectTimeSet&); // Not implemented - - vtkPVScalarListWidgetProperty *Property; - - char *SetCommand; - - vtkSetStringMacro(FrameLabel); - vtkGetStringMacro(FrameLabel); - - vtkKWWidget* Tree; - vtkKWWidget* TreeFrame; - vtkKWLabel* TimeLabel; - vtkKWLabeledFrame* LabeledFrame; - - void AddRootNode(const char* name, const char* text); - void AddChildNode(const char* parent, const char* name, - const char* text, const char* data); - - float TimeValue; - char* FrameLabel; - - vtkDataArrayCollection* TimeSets; - vtkClientServerID ServerSideID; - - // Fill the TimeSets collection with that from the actual reader. - void SetTimeSetsFromReader(); - -//BTX - virtual void CopyProperties(vtkPVWidget* clone, vtkPVSource* pvSource, - vtkArrayMap<vtkPVWidget*, vtkPVWidget*>* map); -//ETX - - int ReadXMLAttributes(vtkPVXMLElement* element, - vtkPVXMLPackageParser* parser); - - // Description: - // An interface for saving a widget into a script. - virtual void SaveInBatchScriptForPart(ofstream *file, vtkClientServerID); - -}; - -#endif diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamServerSelectTimeSet.cxx b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamServerSelectTimeSet.cxx deleted file mode 100644 index acfce9bab2bbb6587c5a7303c703f0120bfd23fc..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamServerSelectTimeSet.cxx +++ /dev/null @@ -1,85 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: $RCSfile: vtkPVFoamServerSelectTimeSet.cxx,v $ - - Copyright (c) Kitware, Inc. - All rights reserved. - See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ -#include "vtkPVFoamServerSelectTimeSet.h" - -#include "vtkClientServerInterpreter.h" -#include "vtkObjectFactory.h" -#include "vtkPVProcessModule.h" -#include "vtkFoamReader.h" -#include "vtkDataArrayCollection.h" -#include "vtkDataArrayCollectionIterator.h" -#include "vtkClientServerStream.h" - -#include <vtkstd/string> - -//---------------------------------------------------------------------------- -vtkStandardNewMacro(vtkPVFoamServerSelectTimeSet); -vtkCxxRevisionMacro(vtkPVFoamServerSelectTimeSet, "$Revision: 1.4 $"); - -//---------------------------------------------------------------------------- -class vtkPVFoamServerSelectTimeSetInternals -{ -public: - vtkClientServerStream Result; -}; - -//---------------------------------------------------------------------------- -vtkPVFoamServerSelectTimeSet::vtkPVFoamServerSelectTimeSet() -{ - this->Internal = new vtkPVFoamServerSelectTimeSetInternals; -} - -//---------------------------------------------------------------------------- -vtkPVFoamServerSelectTimeSet::~vtkPVFoamServerSelectTimeSet() -{ - delete this->Internal; -} - -//---------------------------------------------------------------------------- -void vtkPVFoamServerSelectTimeSet::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os,indent); -} - -//---------------------------------------------------------------------------- -const vtkClientServerStream& -vtkPVFoamServerSelectTimeSet::GetTimeSets(vtkFoamReader* reader) -{ - // Reset the stream for a new list of time sets. - this->Internal->Result.Reset(); - - // Get the time sets from the reader. - vtkDataArrayCollection* timeSets = reader->GetTimeSets(); - - // Iterate through the time sets. - vtkDataArrayCollectionIterator* iter = vtkDataArrayCollectionIterator::New(); - iter->SetCollection(timeSets); - for(iter->GoToFirstItem(); !iter->IsDoneWithTraversal(); - iter->GoToNextItem()) - { - // Each time set is stored in one message. - this->Internal->Result << vtkClientServerStream::Reply; - vtkDataArray* da = iter->GetDataArray(); - for(int i=0; i < da->GetNumberOfTuples(); ++i) - { - this->Internal->Result << da->GetTuple1(i); - } - this->Internal->Result << vtkClientServerStream::End; - } - iter->Delete(); - - // Return the stream. - return this->Internal->Result; -} diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamServerSelectTimeSet.h b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamServerSelectTimeSet.h deleted file mode 100644 index 99f755c9f39651decfd8be7cf684bbd6bc3d89e4..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkPVFoamServerSelectTimeSet.h +++ /dev/null @@ -1,49 +0,0 @@ -/*========================================================================= - - Program: ParaView - Module: $RCSfile: vtkPVFoamServerSelectTimeSet.h,v $ - - Copyright (c) Kitware, Inc. - All rights reserved. - See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ -// .NAME vtkPVFoamServerSelectTimeSet - Server-side helper for vtkPVFoamSelectTimeSet. -// .SECTION Description - -#ifndef __vtkPVFoamServerSelectTimeSet_h -#define __vtkPVFoamServerSelectTimeSet_h - -#include "vtkPVServerObject.h" - -class vtkClientServerStream; -class vtkPVFoamServerSelectTimeSetInternals; -class vtkFoamReader; - -class VTK_EXPORT vtkPVFoamServerSelectTimeSet : public vtkPVServerObject -{ -public: - static vtkPVFoamServerSelectTimeSet* New(); - vtkTypeRevisionMacro(vtkPVFoamServerSelectTimeSet, vtkPVServerObject); - void PrintSelf(ostream& os, vtkIndent indent); - - // Description: - // Get a list the time sets provided by the given reader. - const vtkClientServerStream& GetTimeSets(vtkFoamReader*); - -protected: - vtkPVFoamServerSelectTimeSet(); - ~vtkPVFoamServerSelectTimeSet(); - - // Internal implementation details. - vtkPVFoamServerSelectTimeSetInternals* Internal; -private: - vtkPVFoamServerSelectTimeSet(const vtkPVFoamServerSelectTimeSet&); // Not implemented - void operator=(const vtkPVFoamServerSelectTimeSet&); // Not implemented -}; - -#endif diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/Make/files b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/Make/files deleted file mode 100644 index f5a5526caa156bc2135854331db70929d286caf8..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/Make/files +++ /dev/null @@ -1,5 +0,0 @@ -vtkFoam.C -vtkFoamAddInternalMesh.C -vtkFoamAddPatch.C - -LIB = $(FOAM_LIBBIN)/libvtkFoam diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/Make/options b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/Make/options deleted file mode 100644 index 7dd2c76c8b3f0e89a1192f4cdf48e988b7b66e35..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/Make/options +++ /dev/null @@ -1,9 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(ParaView_INST_DIR)/include \ - -I../PVFoamReader - -LIB_LIBS = \ - -lfiniteVolume \ - -lgenericPatchFields \ - $(GLIBS) diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkDataArrayTemplateImplicit.txx b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkDataArrayTemplateImplicit.txx deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoam.C b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoam.C deleted file mode 100644 index 6a1830b5d14dd60a851496247830f9a6942c983c..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoam.C +++ /dev/null @@ -1,665 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "vtkFoam.H" - -#include "argList.H" -#include "Time.H" -#include "polyBoundaryMeshEntries.H" -#include "IOobjectList.H" -#include "wordList.H" -#include "fvMesh.H" -#include "volFields.H" -#include "pointMesh.H" -#include "volPointInterpolation.H" - -#include "vtkFoamReader.h" -#include "vtkDataArraySelection.h" -#include "vtkUnstructuredGrid.h" -#include "vtkPointData.h" -#include "vtkCellData.h" -#include "vtkFloatArray.h" -#include "vtkCharArray.h" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(Foam::vtkFoam, 0); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -#include "vtkFoamConvertFields.H" - -void Foam::vtkFoam::SetName -( - vtkUnstructuredGrid* vtkMesh, - const char* name -) -{ - vtkCharArray* nmArray = vtkCharArray::New(); - nmArray->SetName("Name"); - size_t len = strlen(name); - nmArray->SetNumberOfTuples(static_cast<vtkIdType>(len)+1); - char* copy = nmArray->GetPointer(0); - memcpy(copy, name, len); - copy[len] = '\0'; - vtkMesh->GetFieldData()->AddArray(nmArray); - nmArray->Delete(); -} - - -Foam::string Foam::vtkFoam::padTimeString(const string& ts) -{ - return ts + string(" ", max(label(12 - ts.size()), 0)); -} - - -// Pad the patch name string in order to account for dynamic changes -// in patch names during topological changes -Foam::string Foam::vtkFoam::padPatchString(const string& ps) -{ - label n = max(label(50 - ps.size()), 0); - return ps + string(" ", n); -} - - -void Foam::vtkFoam::setSelectedTime -( - Time& runTime, - vtkFoamReader* reader -) -{ - // Get times list - instantList Times = runTime.times(); - int timeIndex = min(max(reader->GetTimeStep() + 1, 0), Times.size()-1); - - // If this is the first call timeIndex will be 0 ("constant") - // so reset to the first time step if one exists and deselect every - // element of the selection array - if (timeIndex == 0) - { - timeIndex = min(1, Times.size()-1); - reader->GetTimeSelection()->DisableAllArrays(); - } - - label selectedTimeIndex = -1; - label nSelectedTimes = reader->GetTimeSelection()->GetNumberOfArrays(); - - for (label i=nSelectedTimes-1; i>=0; i--) - { - if(reader->GetTimeSelection()->GetArraySetting(i)) - { - word timeName = string::validate<word> - ( - reader->GetTimeSelection()->GetArrayName(i) - ); - - forAll(Times, j) - { - if (Times[j].name() == timeName) - { - selectedTimeIndex = j; - break; - } - } - break; - } - } - - if (selectedTimeIndex != -1) - { - timeIndex = min(selectedTimeIndex, Times.size()-1); - } - - if (debug) - { - Info<< "Selecting time " << Times[timeIndex].name() << endl; - } - - runTime.setTime(Times[timeIndex], timeIndex); - - Times = runTime.times(); - - reader->SetTimeStepRange(0, max(Times.size()-2, 0)); - - // reset the time steps ... - reader->GetTimeSelection()->RemoveAllArrays(); - - int* TimeStepLimits = reader->GetTimeStepLimits(); - label maxStartTimes = min(Times.size(), TimeStepLimits[0]); - label maxNTimes = min(Times.size() - maxStartTimes, TimeStepLimits[1]); - - for (label i=0; i<maxStartTimes; i++) - { - reader->GetTimeSelection() - ->AddArray(padTimeString(Times[i].name()).c_str()); - } - - if (Times.size() > TimeStepLimits[0] + TimeStepLimits[1]) - { - reader->GetTimeSelection()->AddArray(padTimeString("...").c_str()); - } - - for (label i=Times.size() - maxNTimes; i<Times.size(); i++) - { - reader->GetTimeSelection() - ->AddArray(padTimeString(Times[i].name()).c_str()); - } - - // Disable all the time selections (which are all selected by default) ... - reader->GetTimeSelection()->DisableAllArrays(); - - // But maintain the selections made previously - if (selectedTimeIndex != -1 && selectedTimeIndex < Times.size()) - { - reader->GetTimeSelection()->EnableArray - (padTimeString(Times[selectedTimeIndex].name()).c_str()); - } -} - - -void Foam::vtkFoam::updateSelectedRegions() -{ - if (debug) - { - Info<< "Foam::vtkFoam::updateSelectedRegions()" << endl; - } - - label nRegions = reader_->GetRegionSelection()->GetNumberOfArrays(); - - selectedRegions_.setSize(nRegions); - - // Read the selected patches and add to the region list - for (int i=0; i<nRegions; i++) - { - selectedRegions_[i] = - reader_->GetRegionSelection()->GetArraySetting(i); - } -} - - -void Foam::vtkFoam::convertMesh() -{ - if (debug) - { - Info<< "Foam::vtkFoam::convertMesh()" << endl; - } - - const fvMesh& mesh = *meshPtr_; - - // Read the internal mesh as region 0 if selected - if (reader_->GetRegionSelection()->GetArraySetting(0)) - { - selectedRegions_[0] = true; - addInternalMesh - ( - mesh, - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0)) - ); - } - else - { - selectedRegions_[0] = false; - - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0)); - - vtkMesh->Initialize(); - SetName(vtkMesh, "(Internal Mesh)"); - } - - - // Read the selected patches and add to the region list - - polyBoundaryMeshEntries patchEntries - ( - IOobject - ( - "boundary", - dbPtr_().findInstance(polyMesh::meshSubDir, "boundary"), - polyMesh::meshSubDir, - dbPtr_(), - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ) - ); - - label regioni = 0; - label regioniLast = 0; - - // Read in the number Outputs (patch regions) currently being used - label currNOutputs = reader_->GetNumberOfOutputs(); - - // Cycle through all the patches in the boundary file for the relevant - // time step - forAll(patchEntries, entryi) - { - // Number of faces in the current patch (Used to detect dummy patches - // of size zero) - label nFaces(readLabel(patchEntries[entryi].dict().lookup("nFaces"))); - - // Check to see if the patch is currently a part of the displayed list - if - ( - reader_->GetRegionSelection()->ArrayExists - ( - padPatchString(patchEntries[entryi].keyword()).c_str() - ) - ) - { - if (!nFaces) - { - // Remove patch if it is only a dummy patch in the current - // time step with zero faces - reader_->GetRegionSelection()->RemoveArrayByName - ( - padPatchString(patchEntries[entryi].keyword()).c_str() - ); - } - else - { - // A patch already existent in the list and which - // continues to exist found - regioni++; - } - } - else - { - // A new patch so far not yet included into the list has been found - if (nFaces) - { - regioni++; - - // Add a new entry to the list of regions - reader_->GetRegionSelection()->AddArray - ( - padPatchString(patchEntries[entryi].keyword()).c_str() - ); - - // AddArray automatically enables a new array... disable - // it manually - reader_->GetRegionSelection()->DisableArray - ( - padPatchString(patchEntries[entryi].keyword()).c_str() - ); - } - } - - // Avoid Initialization of the same Output twice - if (regioni != regioniLast) - { - // Only setup an Output if it has not been setup before - if(regioni >= currNOutputs) - { - vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::New(); - reader_->SetNthOutput(regioni,ugrid); - ugrid->Delete(); - } - // Initialize -> Delete memory used, and reset to zero state - reader_->GetOutput(regioni)->Initialize(); - regioniLast = regioni; - } - } - - // Initialize (reset to zero and free) any outputs which are not used - // anymore - if (regioni < currNOutputs) - { - for(label i = (regioni+1); i < currNOutputs;i++) - { - reader_->GetOutput(i)->Initialize(); - } - } - - selectedRegions_.setSize(regioni + 1); - - regioni = 0; - - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - - forAll (patches, patchi) - { - if (patches[patchi].size()) - { - regioni++; - - if (reader_->GetRegionSelection()->GetArraySetting(regioni)) - { - selectedRegions_[regioni] = true; - addPatch - ( - patches[patchi], - vtkUnstructuredGrid::SafeDownCast - ( - reader_->GetOutput(regioni) - ) - ); - } - else - { - selectedRegions_[regioni] = false; - - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast - ( - reader_->GetOutput(regioni) - ); - - vtkMesh->Initialize(); - SetName - ( - vtkMesh, - ('(' + padPatchString(patches[patchi].name()) + ')').c_str() - ); - } - } - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::vtkFoam::vtkFoam(const char* const FileName, vtkFoamReader* reader) -: - reader_(reader), - argsPtr_(NULL), - dbPtr_(NULL), - meshPtr_(NULL) -{ - fileName fullCasePath(fileName(FileName).path()); - - if (!isDir(fullCasePath)) - { - return; - } - - char* argvStrings[3]; - argvStrings[0] = new char[9]; - strcpy(argvStrings[0], "/vtkFoam"); - argvStrings[1] = new char[6]; - strcpy(argvStrings[1], "-case"); - argvStrings[2] = new char[fullCasePath.size()+1]; - strcpy(argvStrings[2], fullCasePath.c_str()); - - int argc = 3; - char** argv = &argvStrings[0]; - argsPtr_.reset(new argList(argc, argv)); - - for(int i = 0; i < argc; i++) - { - delete[] argvStrings[i]; - } - - dbPtr_.reset - ( - new Time - ( - Time::controlDictName, - argsPtr_().rootPath(), - argsPtr_().caseName() - ) - ); - dbPtr_().functionObjects().off(); - setSelectedTime(dbPtr_(), reader_); - - if (debug) - { - Info<< "vtkFoam::ExecuteInformation: Initialising outputs" << endl; - } - - reader_->GetRegionSelection()->AddArray("Internal Mesh"); - - vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::New(); - reader_->SetNthOutput(0, ugrid); - ugrid->Delete(); - reader_->GetOutput(0)->Initialize(); - - polyBoundaryMeshEntries patchEntries - ( - IOobject - ( - "boundary", - dbPtr_().findInstance(polyMesh::meshSubDir, "boundary"), - polyMesh::meshSubDir, - dbPtr_(), - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ) - ); - - label regioni = 0; - forAll(patchEntries, entryi) - { - label nFaces(readLabel(patchEntries[entryi].dict().lookup("nFaces"))); - - if (nFaces) - { - regioni++; - - reader_->GetRegionSelection()->AddArray - ( - padPatchString(patchEntries[entryi].keyword()).c_str() - ); - - vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::New(); - reader_->SetNthOutput(regioni, ugrid); - ugrid->Delete(); - reader_->GetOutput(regioni)->Initialize(); - } - } - - selectedRegions_.setSize(regioni + 1); - selectedRegions_ = true; - - UpdateInformation(); -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::vtkFoam::~vtkFoam() -{ - // Do NOT delete meshPtr_ since still referenced somehow. -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -#include "vtkFoamAddFields.H" - -void Foam::vtkFoam::UpdateInformation() -{ - if (debug) - { - Info<< "TimeStep = " << reader_->GetTimeStep() << endl; - } - - setSelectedTime(dbPtr_(), reader_); - - // Search for list of objects for this time - IOobjectList objects(dbPtr_(), dbPtr_().timeName()); - - addFields<volScalarField>(reader_->GetVolFieldSelection(), objects); - addFields<volVectorField>(reader_->GetVolFieldSelection(), objects); - addFields<volSphericalTensorField>(reader_->GetVolFieldSelection(), objects); - addFields<volSymmTensorField>(reader_->GetVolFieldSelection(), objects); - addFields<volTensorField>(reader_->GetVolFieldSelection(), objects); - - addFields<pointScalarField>(reader_->GetPointFieldSelection(), objects); - addFields<pointVectorField>(reader_->GetPointFieldSelection(), objects); - addFields<pointSphericalTensorField>(reader_->GetPointFieldSelection(), objects); - addFields<pointSymmTensorField>(reader_->GetPointFieldSelection(), objects); - addFields<pointTensorField>(reader_->GetPointFieldSelection(), objects); -} - - -void Foam::vtkFoam::Update() -{ - if - ( - !reader_->GetCacheMesh() - || reader_->GetTimeSelection()->GetArraySetting(0) - ) - { - meshPtr_= NULL; - } - - // Clear the current set of selected fields - - for (label i=0; i<reader_->GetNumberOfOutputs(); i++) - { - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(i)); - - vtkCellData* cellData = vtkMesh->GetCellData(); - int numberOfCellArrays = cellData->GetNumberOfArrays(); - - wordList cellFieldNames(numberOfCellArrays); - for (int j=0; j<numberOfCellArrays; j++) - { - cellFieldNames[j] = cellData->GetArrayName(j); - } - - for (int j=0; j<numberOfCellArrays; j++) - { - cellData->RemoveArray(cellFieldNames[j].c_str()); - } - - vtkPointData* pointData = vtkMesh->GetPointData(); - int numberOfPointArrays = pointData->GetNumberOfArrays(); - - wordList pointFieldNames(numberOfPointArrays); - for (int j=0; j<numberOfPointArrays; j++) - { - pointFieldNames[j] = pointData->GetArrayName(j); - } - - for (int j=0; j<numberOfPointArrays; j++) - { - pointData->RemoveArray(pointFieldNames[j].c_str()); - } - } - - // Check to see if the mesh has been created - - if (!meshPtr_) - { - if (debug) - { - Info<< "Reading Mesh" << endl; - } - meshPtr_ = - new fvMesh - ( - IOobject - ( - fvMesh::defaultRegion, - dbPtr_().timeName(), - dbPtr_() - ) - ); - convertMesh(); - } - else - { - boolList oldSelectedRegions = selectedRegions_; - updateSelectedRegions(); - if - ( - meshPtr_->readUpdate() != fvMesh::UNCHANGED - || oldSelectedRegions != selectedRegions_ - ) - { - convertMesh(); - } - } - - if (debug) - { - Info<< "converting fields" << endl; - } - - const fvMesh& mesh = *meshPtr_; - - // Construct interpolation on the raw mesh - Foam::pointMesh pMesh(mesh); - - Foam::volPointInterpolation pInterp(mesh, pMesh); - - // Search for list of objects for this time - Foam::IOobjectList objects(mesh, dbPtr_().timeName()); - - convertVolFields<Foam::scalar> - ( - mesh, pInterp, objects, reader_->GetVolFieldSelection() - ); - convertVolFields<Foam::vector> - ( - mesh, pInterp, objects, reader_->GetVolFieldSelection() - ); - convertVolFields<Foam::sphericalTensor> - ( - mesh, pInterp, objects, reader_->GetVolFieldSelection() - ); - convertVolFields<Foam::symmTensor> - ( - mesh, pInterp, objects, reader_->GetVolFieldSelection() - ); - convertVolFields<Foam::tensor> - ( - mesh, pInterp, objects, reader_->GetVolFieldSelection() - ); - - convertPointFields<Foam::scalar> - ( - mesh, objects, reader_->GetPointFieldSelection() - ); - convertPointFields<Foam::vector> - ( - mesh, objects, reader_->GetPointFieldSelection() - ); - convertPointFields<Foam::sphericalTensor> - ( - mesh, objects, reader_->GetPointFieldSelection() - ); - convertPointFields<Foam::symmTensor> - ( - mesh, objects, reader_->GetPointFieldSelection() - ); - convertPointFields<Foam::tensor> - ( - mesh, objects, reader_->GetPointFieldSelection() - ); - - if (debug) - { - Info<< "done" << endl; - } -} - - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoam.H b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoam.H deleted file mode 100644 index baca6a38637d2e7172a025eb842796b97985297d..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoam.H +++ /dev/null @@ -1,256 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - Foam::vtkFoam - -Description - -SourceFiles - vtkFoam.C - vtkFoamInsertNextPoint.H - vtkFoamAddFields.H - vtkFoamAddInternalMesh.H - vtkFoamConvertFields.H - vtkFoamConvertVolField.H - vtkFoamConvertPatchFaceField.H - vtkFoamConvertPointField.H - vtkFoamConvertPatchPointField.H - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoam_H -#define vtkFoam_H - -#include "className.H" -#include "fileName.H" -#include "volPointInterpolation.H" - -// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * // - -// VTK class forward declarations -class vtkFoamReader; -class vtkUnstructuredGrid; -class vtkPoints; -class vtkDataArraySelection; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Foam class forward declarations -class argList; -class Time; -class fvMesh; -class IOobjectList; -class polyPatch; - - -/*---------------------------------------------------------------------------*\ - Class vtkFoam Declaration -\*---------------------------------------------------------------------------*/ - -class vtkFoam -{ - // Private data - - //- Access to the controlling vtkFoamReader - vtkFoamReader *reader_; - - autoPtr<argList> argsPtr_; - autoPtr<Time> dbPtr_; - fvMesh* meshPtr_; - - //- Selected regions, [0] = internal mesh, [1-nPatches] = patches - boolList selectedRegions_; - - //- Lables of cell-centres used as additional points when decomposing - // polyhedra - labelList addPointCellLabels_; - - //- Label of original cell the decomposed cells are split from - labelList superCells_; - - - // Private Member Functions - - //- Pad-out the time name to avoid bug in the GUI redraw - static string padTimeString(const string&); - - //- Pad-out the patch name - static string padPatchString(const string&); - - //- Find and set the selected time from all the methods of selection - static void setSelectedTime - ( - Time& runTime, - vtkFoamReader* reader - ); - - //- Update the selected regions - void updateSelectedRegions(); - - //- Convert the mesh according to the list of selected regions - void convertMesh(); - - //- Add the internal mesh to the set of Outputs if selected - void addInternalMesh(const fvMesh&, vtkUnstructuredGrid*); - - //- Add the internal patch to the set of Outputs if selected - void addPatch(const polyPatch&, vtkUnstructuredGrid*); - - //- Add the fields in th selested time directory to the selection lists - template<class GeoField> - void addFields - ( - vtkDataArraySelection *fieldSelection, - const IOobjectList& objects - ); - - //- Convert the selected volFields - template<class Type> - void convertVolFields - ( - const fvMesh& mesh, - const volPointInterpolation& pInterp, - const IOobjectList& objects, - vtkDataArraySelection *fieldSelection - ); - - template<class Type> - void convertVolField - ( - const GeometricField<Type, fvPatchField, volMesh>& tf - ); - - template<class Type> - void convertPatchFaceField - ( - const word& name, - const Field<Type>& tf, - const label regioni - ); - - //- Convert the selected pointFields - template<class Type> - void convertPointFields - ( - const fvMesh& mesh, - const IOobjectList& objects, - vtkDataArraySelection *fieldSelection - ); - - template<class Type> - void convertPointField - ( - const GeometricField<Type, pointPatchField, pointMesh>& ptf, - const GeometricField<Type, fvPatchField, volMesh>& tf - ); - - template<class Type> - void convertPatchPointField - ( - const word& name, - const Field<Type>& tf, - const label regioni - ); - - //- Set the name of the Output vtkUnstructuredGrid - void SetName(vtkUnstructuredGrid *vtkMesh, const char* name); - - - //- Disallow default bitwise copy construct - vtkFoam(const vtkFoam&); - - //- Disallow default bitwise assignment - void operator=(const vtkFoam&); - - -public: - - // Static data members - - ClassName("vtkFoam"); - - - // Constructors - - //- Construct from components - vtkFoam(const char* const FileName, vtkFoamReader* reader); - - - // Destructor - - ~vtkFoam(); - - - // Member Functions - - void UpdateInformation(); - void Update(); -}; - - -// * * * * * * * * * * * * * Template Specialisations * * * * * * * * * * * // - -template<> -void vtkFoam::convertVolField -( - const GeometricField<scalar, fvPatchField, volMesh>& sf -); - -template<> -void vtkFoam::convertPatchFaceField -( - const word& name, - const Field<scalar>& sf, - const label regioni -); - -template<> -void vtkFoam::convertPointField -( - const GeometricField<scalar, pointPatchField, pointMesh>& psf, - const GeometricField<scalar, fvPatchField, volMesh>& sf -); - -template<> -void vtkFoam::convertPatchPointField -( - const word& name, - const Field<scalar>& sf, - const label regioni -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddInternalMesh.C b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddInternalMesh.C deleted file mode 100644 index aa818bb82796b7d62cd56d891332b8cacd72bdb9..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddInternalMesh.C +++ /dev/null @@ -1,299 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - -\*---------------------------------------------------------------------------*/ - -#include "vtkFoam.H" -#include "fvMesh.H" -#include "cellModeller.H" - -#include "vtkUnstructuredGrid.h" -#include "vtkCellArray.h" - -#include "vtkFoamInsertNextPoint.H" - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::vtkFoam::addInternalMesh -( - const fvMesh& mesh, - vtkUnstructuredGrid* vtkMesh -) -{ - SetName(vtkMesh, "Internal Mesh"); - - // Number of additional points needed by the decomposition of polyhedra - label nAddPoints = 0; - - // Number of additional cells generated by the decomposition of polyhedra - label nAddCells = 0; - - const cellModel& tet = *(cellModeller::lookup("tet")); - const cellModel& pyr = *(cellModeller::lookup("pyr")); - const cellModel& prism = *(cellModeller::lookup("prism")); - const cellModel& wedge = *(cellModeller::lookup("wedge")); - const cellModel& tetWedge = *(cellModeller::lookup("tetWedge")); - const cellModel& hex = *(cellModeller::lookup("hex")); - - // Scan for cells which need to be decomposed and count additional points - // and cells - if (debug) - { - Info<< "building cell-shapes" << endl; - } - const cellShapeList& cellShapes = mesh.cellShapes(); - - if (debug) - { - Info<< "scanning" << endl; - } - - forAll(cellShapes, cellI) - { - const cellModel& model = cellShapes[cellI].model(); - - if - ( - model != hex - && model != wedge - && model != prism - && model != pyr - && model != tet - && model != tetWedge - ) - { - const cell& cFaces = mesh.cells()[cellI]; - - forAll(cFaces, cFaceI) - { - const face& f = mesh.faces()[cFaces[cFaceI]]; - - label nFacePoints = f.size(); - - label nQuads = (nFacePoints - 2)/2; - label nTris = (nFacePoints - 2)%2; - nAddCells += nQuads + nTris; - } - - nAddCells--; - nAddPoints++; - } - } - - // Set size of additional point addressing array - // (from added point to original cell) - addPointCellLabels_.setSize(nAddPoints); - - // Set size of additional cells mapping array - // (from added cell to original cell) - superCells_.setSize(mesh.nCells() + nAddCells); - - if (debug) - { - Info<< "converting points" << endl; - } - - // Convert Foam mesh vertices to VTK - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(mesh.nPoints() + nAddPoints); - - const Foam::pointField& points = mesh.points(); - - forAll(points, i) - { - vtkFoamInsertNextPoint(vtkpoints, points[i]); - } - - if (debug) - { - Info<< "converting cells" << endl; - } - - vtkMesh->Allocate(mesh.nCells() + nAddCells); - - // Set counters for additional points and additional cells - label api = 0, aci = 0; - - forAll(cellShapes, celli) - { - const cellShape& cellShape = cellShapes[celli]; - const cellModel& cellModel = cellShape.model(); - - superCells_[aci++] = celli; - - if (cellModel == tet) - { - vtkMesh->InsertNextCell - ( - VTK_TETRA, - 4, - const_cast<int*>(cellShape.begin()) - ); - } - else if (cellModel == pyr) - { - vtkMesh->InsertNextCell - ( - VTK_PYRAMID, - 5, - const_cast<int*>(cellShape.begin()) - ); - } - else if (cellModel == prism) - { - vtkMesh->InsertNextCell - ( - VTK_WEDGE, - 6, - const_cast<int*>(cellShape.begin()) - ); - } - else if (cellModel == tetWedge) - { - // Treat as squeezed prism - - int vtkVerts[6]; - vtkVerts[0] = cellShape[0]; - vtkVerts[1] = cellShape[2]; - vtkVerts[2] = cellShape[1]; - vtkVerts[3] = cellShape[3]; - vtkVerts[4] = cellShape[4]; - vtkVerts[5] = cellShape[4]; - - vtkMesh->InsertNextCell(VTK_WEDGE, 6, vtkVerts); - } - else if (cellModel == wedge) - { - // Treat as squeezed hex - - int vtkVerts[8]; - vtkVerts[0] = cellShape[0]; - vtkVerts[1] = cellShape[1]; - vtkVerts[2] = cellShape[2]; - vtkVerts[3] = cellShape[2]; - vtkVerts[4] = cellShape[3]; - vtkVerts[5] = cellShape[4]; - vtkVerts[6] = cellShape[5]; - vtkVerts[7] = cellShape[6]; - - vtkMesh->InsertNextCell(VTK_HEXAHEDRON, 8, vtkVerts); - } - else if (cellModel == hex) - { - vtkMesh->InsertNextCell - ( - VTK_HEXAHEDRON, - 8, - const_cast<int*>(cellShape.begin()) - ); - } - else - { - // Polyhedral cell. Decompose into tets + prisms. - - // Mapping from additional point to cell - addPointCellLabels_[api] = celli; - - // Insert the new vertex from the cell-centre - label newVertexLabel = mesh.nPoints() + api; - vtkFoamInsertNextPoint(vtkpoints, mesh.C()[celli]); - - // Whether to insert cell in place of original or not. - bool substituteCell = true; - - const labelList& cFaces = mesh.cells()[celli]; - - forAll(cFaces, cFaceI) - { - const face& f = mesh.faces()[cFaces[cFaceI]]; - - label nFacePoints = f.size(); - - label nQuads = (nFacePoints - 2)/2; - label nTris = (nFacePoints - 2)%2; - - label qpi = 0; - - for (label quadi=0; quadi<nQuads; quadi++) - { - label thisCellI = -1; - - if (substituteCell) - { - thisCellI = celli; - substituteCell = false; - } - else - { - thisCellI = mesh.nCells() + aci; - superCells_[aci++] = celli; - } - - int addVtkVerts[5]; - addVtkVerts[0] = f[0]; - addVtkVerts[1] = f[qpi + 1]; - addVtkVerts[2] = f[qpi + 2]; - addVtkVerts[3] = f[qpi + 3]; - addVtkVerts[4] = newVertexLabel; - vtkMesh->InsertNextCell(VTK_PYRAMID, 5, addVtkVerts); - - qpi += 2; - } - - if (nTris) - { - label thisCellI = -1; - - if (substituteCell) - { - thisCellI = celli; - substituteCell = false; - } - else - { - thisCellI = mesh.nCells() + aci; - superCells_[aci++] = celli; - } - - int addVtkVerts[4]; - addVtkVerts[0] = f[0]; - addVtkVerts[1] = f[qpi + 1]; - addVtkVerts[2] = f[qpi + 2]; - addVtkVerts[3] = newVertexLabel; - vtkMesh->InsertNextCell(VTK_TETRA, 4, addVtkVerts); - } - } - - api++; - } - } - - vtkMesh->SetPoints(vtkpoints); - vtkpoints->Delete(); -} - - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddPatch.C b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddPatch.C deleted file mode 100644 index 5db4f79555b30c5e3fd76b7802003ab3e09c674a..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddPatch.C +++ /dev/null @@ -1,115 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - -\*---------------------------------------------------------------------------*/ - -#include "vtkFoam.H" -#include "polyPatch.H" - -#include "vtkUnstructuredGrid.h" -#include "vtkCellArray.h" - -#include "vtkFoamInsertNextPoint.H" - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::vtkFoam::addPatch -( - const polyPatch& p, - vtkUnstructuredGrid *vtkPatch -) -{ - if (debug) - { - Info<< "Adding patch " << p.name() << endl; - } - - SetName(vtkPatch, p.name().c_str()); - - if (debug) - { - Info<< "converting points" << endl; - } - - const Foam::pointField& points = p.localPoints(); - - // Convert Foam mesh vertices to VTK - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(points.size()); - - forAll(points, i) - { - vtkFoamInsertNextPoint(vtkpoints, points[i]); - } - - if (debug) - { - Info<< "converting faces" << endl; - } - - const faceList& faces = p.localFaces(); - - vtkPatch->Allocate(faces.size()); - - forAll(faces, facei) - { - const face& f = faces[facei]; - - if (f.size() == 3) - { - vtkPatch->InsertNextCell - ( - VTK_TRIANGLE, - 3, - const_cast<int*>(f.begin()) - ); - } - else if (f.size() == 4) - { - vtkPatch->InsertNextCell - ( - VTK_QUAD, - 4, - const_cast<int*>(f.begin()) - ); - } - else - { - vtkPatch->InsertNextCell - ( - VTK_POLYGON, - f.size(), - const_cast<int*>(f.begin()) - ); - } - } - - vtkPatch->SetPoints(vtkpoints); - vtkpoints->Delete(); -} - - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertFields.H b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertFields.H deleted file mode 100644 index 6ba4435d1afe6cf7191937bae428951c2bd90049..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertFields.H +++ /dev/null @@ -1,235 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - Foam::vtkFoam - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoamConvertFields_H -#define vtkFoamConvertFields_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "vtkFoamConvertVolField.H" -#include "vtkFoamConvertPointField.H" - -#include "vtkFoamConvertPatchFaceField.H" -#include "vtkFoamConvertPatchPointField.H" - -#include "emptyFvPatchField.H" - -template<class Type> -void Foam::vtkFoam::convertVolFields -( - const fvMesh& mesh, - const volPointInterpolation& pInterp, - const IOobjectList& objects, - vtkDataArraySelection *fieldSelection -) -{ - IOobjectList fieldObjects - ( - objects.lookupClass - ( - GeometricField<Type, fvPatchField, volMesh>::typeName - ) - ); - - label nSelectedFields = fieldSelection->GetNumberOfArrays(); - - for (label i=0; i<nSelectedFields; i++) - { - if(fieldSelection->GetArraySetting(i)) - { - word fieldName = fieldSelection->GetArrayName(i); - - if (fieldObjects.found(fieldName)) - { - GeometricField<Type, fvPatchField, volMesh> tf - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ - ), - mesh - ); - - tmp<GeometricField<Type, pointPatchField, pointMesh> > tptf - ( - pInterp.interpolate(tf) - ); - - if (selectedRegions_[0]) - { - convertVolField(tf); - convertPointField(tptf(), tf); - } - - label regioni = 0; - forAll (mesh.boundaryMesh(), patchi) - { - if (mesh.boundaryMesh()[patchi].size()) - { - regioni++; - - if (selectedRegions_[regioni]) - { - const fvPatchField<Type>& ptf - ( - tf.boundaryField()[patchi] - ); - - if (!isType<emptyFvPatchField<Type> >(ptf)) - { - convertPatchFaceField - ( - tf.name(), - ptf, - regioni - ); - - convertPatchPointField - ( - tptf().name(), - tptf().boundaryField()[patchi] - .patchInternalField()(), - regioni - ); - } - else - { - fvPatch p - ( - ptf.patch().patch(), - tf.mesh().boundary() - ); - - convertPatchFaceField - ( - tf.name(), - fvPatchField<Type>(p, tf) - .patchInternalField()(), - regioni - ); - - convertPatchPointField - ( - tptf().name(), - tptf().boundaryField()[patchi] - .patchInternalField()(), - regioni - ); - } - } - } - } - } - } - } -} - - -template<class Type> -void Foam::vtkFoam::convertPointFields -( - const fvMesh& mesh, - const IOobjectList& objects, - vtkDataArraySelection *fieldSelection -) -{ - IOobjectList fieldObjects - ( - objects.lookupClass - ( - GeometricField<Type, pointPatchField, pointMesh>::typeName - ) - ); - - label nSelectedFields = fieldSelection->GetNumberOfArrays(); - - for (label i=0; i<nSelectedFields; i++) - { - if(fieldSelection->GetArraySetting(i)) - { - word fieldName = fieldSelection->GetArrayName(i); - - if (fieldObjects.found(fieldName)) - { - pointMesh pMesh(mesh); - - GeometricField<Type, pointPatchField, pointMesh> ptf - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ - ), - pMesh - ); - - if (selectedRegions_[0]) - { - convertPointField - ( - ptf, - GeometricField<Type, fvPatchField, volMesh>::null() - ); - } - - label regioni = 0; - forAll (mesh.boundaryMesh(), patchi) - { - if (mesh.boundaryMesh()[patchi].size()) - { - regioni++; - - if (selectedRegions_[regioni]) - { - convertPatchPointField - ( - ptf.name(), - ptf.boundaryField()[patchi] - .patchInternalField()(), - regioni - ); - } - } - } - } - } - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPatchFaceField.H b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPatchFaceField.H deleted file mode 100644 index 9b5fd9353f600b13f45a8be895c38db68c86da94..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPatchFaceField.H +++ /dev/null @@ -1,106 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - Foam::vtkFoam - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoamConvertPatchFaceField_H -#define vtkFoamConvertPatchFaceField_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type> -void Foam::vtkFoam::convertPatchFaceField -( - const word& name, - const Field<Type>& ptf, - const label regioni -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni)); - - vtkFloatArray *cellTypes = vtkFloatArray::New(); - cellTypes->SetNumberOfTuples(ptf.size()); - cellTypes->SetNumberOfComponents(Type::nComponents); - cellTypes->Allocate(Type::nComponents*ptf.size()); - cellTypes->SetName(name.c_str()); - - float vec[Type::nComponents]; - - forAll(ptf, i) - { - const Type& t = ptf[i]; - for (direction d=0; d<Type::nComponents; d++) - { - vec[d] = t[d]; - } - - cellTypes->InsertTuple(i, vec); - } - - vtkMesh->GetCellData()->AddArray(cellTypes); - cellTypes->Delete(); -} - - -template<> -void Foam::vtkFoam::convertPatchFaceField -( - const word& name, - const Field<scalar>& psf, - const label regioni -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni)); - - vtkFloatArray *cellScalars = vtkFloatArray::New(); - cellScalars->SetNumberOfTuples(psf.size()); - cellScalars->SetNumberOfComponents(1); - cellScalars->Allocate(psf.size()); - cellScalars->SetName(name.c_str()); - - forAll(psf, i) - { - cellScalars->InsertComponent(i, 0, psf[i]); - } - - vtkMesh->GetCellData()->AddArray(cellScalars); - if (!vtkMesh->GetCellData()->GetScalars()) - { - vtkMesh->GetCellData()->SetScalars(cellScalars); - } - - cellScalars->Delete(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPatchPointField.H b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPatchPointField.H deleted file mode 100644 index 911ec08d714caeed843bd295d27976d6cba84970..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPatchPointField.H +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - Foam::vtkFoam - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoamConvertPatchPointField_H -#define vtkFoamConvertPatchPointField_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type> -void Foam::vtkFoam::convertPatchPointField -( - const word& name, - const Field<Type>& pptf, - const label regioni -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni)); - - vtkFloatArray *pointTypes = vtkFloatArray::New(); - pointTypes->SetNumberOfTuples(pptf.size()); - pointTypes->SetNumberOfComponents(Type::nComponents); - pointTypes->Allocate(Type::nComponents*pptf.size()); - pointTypes->SetName(name.c_str()); - - float vec[Type::nComponents]; - - forAll(pptf, i) - { - for (direction d=0; d<Type::nComponents; d++) - { - vec[d] = pptf[i][d]; - } - - pointTypes->InsertTuple(i, vec); - } - - vtkMesh->GetPointData()->AddArray(pointTypes); - pointTypes->Delete(); -} - - -template<> -void Foam::vtkFoam::convertPatchPointField -( - const word& name, - const Field<scalar>& ppsf, - const label regioni -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(regioni)); - - vtkFloatArray *pointScalars = vtkFloatArray::New(); - pointScalars->SetNumberOfTuples(ppsf.size()); - pointScalars->SetNumberOfComponents(1); - pointScalars->Allocate(ppsf.size()); - pointScalars->SetName(name.c_str()); - - for (int i=0; i<ppsf.size(); i++) - { - pointScalars->InsertComponent(i, 0, ppsf[i]); - } - - vtkMesh->GetPointData()->AddArray(pointScalars); - if (!vtkMesh->GetPointData()->GetScalars()) - { - vtkMesh->GetPointData()->SetScalars(pointScalars); - } - - pointScalars->Delete(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPointField.H b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPointField.H deleted file mode 100644 index d09d9da23eb5d134b0b7359490612e4ecbc0090a..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertPointField.H +++ /dev/null @@ -1,163 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - Foam::vtkFoam - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoamConvertPointField_H -#define vtkFoamConvertPointField_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "interpolatePointToCell.H" - -template<class Type> -void Foam::vtkFoam::convertPointField -( - const GeometricField<Type, pointPatchField, pointMesh>& ptf, - const GeometricField<Type, fvPatchField, volMesh>& tf -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0)); - - vtkFloatArray *pointTypes = vtkFloatArray::New(); - pointTypes->SetNumberOfTuples(ptf.size() + addPointCellLabels_.size()); - pointTypes->SetNumberOfComponents(Type::nComponents); - pointTypes->Allocate(Type::nComponents*ptf.size()); - pointTypes->SetName(ptf.name().c_str()); - - float vec[Type::nComponents]; - - forAll(ptf, i) - { - for (direction d=0; d<Type::nComponents; d++) - { - vec[d] = ptf[i][d]; - } - - pointTypes->InsertTuple(i, vec); - } - - label i = ptf.size(); - - if (&tf != &GeometricField<Type, fvPatchField, volMesh>::null()) - { - forAll(addPointCellLabels_, api) - { - Type t = tf[addPointCellLabels_[api]]; - - for (direction d=0; d<Type::nComponents; d++) - { - vec[d] = t[d]; - } - - pointTypes->InsertTuple(i++, vec); - } - } - else - { - forAll(addPointCellLabels_, api) - { - Type t = interpolatePointToCell(ptf, addPointCellLabels_[api]); - - for (direction d=0; d<Type::nComponents; d++) - { - vec[d] = t[d]; - } - - pointTypes->InsertTuple(i++, vec); - } - } - - vtkMesh->GetPointData()->AddArray(pointTypes); - pointTypes->Delete(); -} - - -template<> -void Foam::vtkFoam::convertPointField -( - const GeometricField<scalar, pointPatchField, pointMesh>& psf, - const GeometricField<scalar, fvPatchField, volMesh>& sf -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0)); - - vtkFloatArray *pointScalars = vtkFloatArray::New(); - pointScalars->SetNumberOfTuples(psf.size() + addPointCellLabels_.size()); - pointScalars->SetNumberOfComponents(1); - pointScalars->Allocate(psf.size()); - pointScalars->SetName(psf.name().c_str()); - - for (int i=0; i<psf.size(); i++) - { - pointScalars->InsertComponent(i, 0, psf[i]); - } - - label i = psf.size(); - - if (&sf != &GeometricField<scalar, fvPatchField, volMesh>::null()) - { - forAll(addPointCellLabels_, api) - { - pointScalars->InsertComponent - ( - i++, - 0, - sf[addPointCellLabels_[api]] - ); - } - } - else - { - forAll(addPointCellLabels_, api) - { - pointScalars->InsertComponent - ( - i++, - 0, - interpolatePointToCell(psf, addPointCellLabels_[api]) - ); - } - } - - vtkMesh->GetPointData()->AddArray(pointScalars); - if (!vtkMesh->GetPointData()->GetScalars()) - { - vtkMesh->GetPointData()->SetScalars(pointScalars); - } - - pointScalars->Delete(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertVolField.H b/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertVolField.H deleted file mode 100644 index 7762e906d17f2d49fdfecfc7fff96ffabd78941c..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamConvertVolField.H +++ /dev/null @@ -1,102 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - Foam::vtkFoam - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkFoamConvertVolField_H -#define vtkFoamConvertVolField_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type> -void Foam::vtkFoam::convertVolField -( - const GeometricField<Type, fvPatchField, volMesh>& tf -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0)); - - vtkFloatArray *cellTypes = vtkFloatArray::New(); - cellTypes->SetNumberOfTuples(superCells_.size()); - cellTypes->SetNumberOfComponents(Type::nComponents); - cellTypes->Allocate(Type::nComponents*tf.size()); - cellTypes->SetName(tf.name().c_str()); - - float vec[Type::nComponents]; - - forAll(superCells_, sci) - { - const Type& t = tf[superCells_[sci]]; - for (direction d=0; d<Type::nComponents; d++) - { - vec[d] = t[d]; - } - - cellTypes->InsertTuple(sci, vec); - } - - vtkMesh->GetCellData()->AddArray(cellTypes); - cellTypes->Delete(); -} - - -template<> -void Foam::vtkFoam::convertVolField -( - const GeometricField<scalar, fvPatchField, volMesh>& sf -) -{ - vtkUnstructuredGrid *vtkMesh = - vtkUnstructuredGrid::SafeDownCast(reader_->GetOutput(0)); - - vtkFloatArray *cellScalars = vtkFloatArray::New(); - cellScalars->SetNumberOfTuples(superCells_.size()); - cellScalars->SetNumberOfComponents(1); - cellScalars->Allocate(sf.size()); - cellScalars->SetName(sf.name().c_str()); - - forAll(superCells_, sci) - { - cellScalars->InsertComponent(sci, 0, sf[superCells_[sci]]); - } - - vtkMesh->GetCellData()->AddArray(cellScalars); - if (!vtkMesh->GetCellData()->GetScalars()) - { - vtkMesh->GetCellData()->SetScalars(cellScalars); - } - - cellScalars->Delete(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml index 8506772e5ce9b6a98c63fab60ebec6f40d74e9ef..18bccb0398ca89d61eed1e7a9166ee37c47b95f8 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml @@ -16,6 +16,17 @@ </Documentation> </StringVectorProperty> + <!-- Send discrete time info to the animation panel --> + <DoubleVectorProperty + name="TimestepValues" + repeatable="1" + information_only="1"> + <TimeStepsInformationHelper/> + <Documentation> + Available timestep values. + </Documentation> + </DoubleVectorProperty> + <!-- Cache Mesh check-box --> <IntVectorProperty name="UiCacheMesh" @@ -30,20 +41,33 @@ </Documentation> </IntVectorProperty> - - <!-- Send discrete time info to the animation panel --> - <DoubleVectorProperty - name="TimestepValues" - repeatable="1" - information_only="1"> - <TimeStepsInformationHelper/> + <!-- Refresh button --> + <IntVectorProperty + name="UiRefresh" + command="SetRefresh" + number_of_elements="1" + is_internal="0" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> <Documentation> - Available timestep values. + Rescan for updated timesteps/fields. </Documentation> - </DoubleVectorProperty> - + </IntVectorProperty> - <!-- Global settings --> + <!-- Skip Zero Time check-box --> + <IntVectorProperty + name="UiZeroTime" + command="SetSkipZeroTime" + number_of_elements="1" + is_internal="1" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> + <Documentation> + Skip including the 0/ time directory + </Documentation> + </IntVectorProperty> <!-- Extrapolate Patches check-box --> <IntVectorProperty @@ -60,22 +84,24 @@ <!-- Include Sets check-box --> <IntVectorProperty - name="IncludeSets" + name="UiIncludeSets" command="SetIncludeSets" number_of_elements="1" + is_internal="1" default_values="0" animateable="0"> <Documentation> - Searches the polyMesh/sets/ directory + Search the polyMesh/sets/ directory </Documentation> <BooleanDomain name="bool"/> </IntVectorProperty> <!-- Include Zones check-box --> <IntVectorProperty - name="IncludeZones" + name="UiIncludeZones" command="SetIncludeZones" number_of_elements="1" + is_internal="1" default_values="0" animateable="0"> <Documentation> @@ -95,7 +121,7 @@ animateable="0"> <BooleanDomain name="bool"/> <Documentation> - Show patch names in render window. + Show patch names in render window </Documentation> </IntVectorProperty> @@ -112,12 +138,13 @@ </Documentation> </IntVectorProperty> - - <!-- Selections --> + <!-- + | Selections + --> <!-- Available Parts (volume, patches, lagrangian) array --> <StringVectorProperty - name="PartArrayInfo" + name="PartArrayStatus" information_only="1"> <ArraySelectionInformationHelper attribute_name="Part"/> </StringVectorProperty> @@ -129,18 +156,21 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="PartArrayInfo" + information_property="PartArrayStatus" animateable="0"> <ArraySelectionDomain name="array_list"> <RequiredProperties> - <Property name="PartArrayInfo" function="ArrayList"/> + <Property name="PartArrayStatus" function="ArrayList"/> </RequiredProperties> </ArraySelectionDomain> + <Documentation> + This property contains a list of the mesh parts (patches, sets, zones). + </Documentation> </StringVectorProperty> <!-- Available volFields array --> <StringVectorProperty - name="VolFieldArrayInfo" + name="VolFieldArrayStatus" information_only="1"> <ArraySelectionInformationHelper attribute_name="VolField"/> </StringVectorProperty> @@ -152,18 +182,21 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="VolFieldArrayInfo" + information_property="VolFieldArrayStatus" animateable="0"> <ArraySelectionDomain name="array_list"> <RequiredProperties> - <Property name="VolFieldArrayInfo" function="ArrayList"/> + <Property name="VolFieldArrayStatus" function="ArrayList"/> </RequiredProperties> </ArraySelectionDomain> + <Documentation> + This property contains a list of the volume fields + </Documentation> </StringVectorProperty> <!-- Available Lagrangian fields array --> <StringVectorProperty - name="LagrangianFieldArrayInfo" + name="LagrangianFieldArrayStatus" information_only="1"> <ArraySelectionInformationHelper attribute_name="LagrangianField"/> </StringVectorProperty> @@ -175,18 +208,21 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="LagrangianFieldArrayInfo" + information_property="LagrangianFieldArrayStatus" animateable="0"> <ArraySelectionDomain name="array_list"> <RequiredProperties> - <Property name="LagrangianFieldArrayInfo" function="ArrayList"/> + <Property name="LagrangianFieldArrayStatus" function="ArrayList"/> </RequiredProperties> </ArraySelectionDomain> + <Documentation> + This property contains a list of the lagrangian fields + </Documentation> </StringVectorProperty> <!-- Available pointFields array --> <StringVectorProperty - name="PointFieldArrayInfo" + name="PointFieldArrayStatus" information_only="1"> <ArraySelectionInformationHelper attribute_name="PointField"/> </StringVectorProperty> @@ -198,19 +234,26 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="PointFieldArrayInfo" + information_property="PointFieldArrayStatus" animateable="0"> <ArraySelectionDomain name="array_list"> <RequiredProperties> - <Property name="PointFieldArrayInfo" function="ArrayList"/> + <Property name="PointFieldArrayStatus" function="ArrayList"/> </RequiredProperties> </ArraySelectionDomain> + <Documentation> + This property contains a list of the point fields + </Documentation> </StringVectorProperty> <Hints> <Property name="FileName" show="0"/> <Property name="UiCacheMesh" show="0"/> + <Property name="UiZeroTime" show="0"/> + <Property name="UiRefresh" show="0"/> <Property name="UiShowPatchNames" show="0"/> + <Property name="UiIncludeSets" show="0"/> + <Property name="UiIncludeZones" show="0"/> </Hints> diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx index 4f12089f45d71be3aa020764467268814bac681d..7d421cbedd0dc863e371e5c81ee08376580f5d00 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx @@ -32,9 +32,10 @@ License #include <QLabel> #include <QLayout> #include <QString> +#include <QPushButton> #include <QtDebug> -// Paraview<->QT UI +// Paraview <-> QT UI #include "pqAnimationScene.h" #include "pqApplicationCore.h" #include "pqPipelineRepresentation.h" @@ -56,51 +57,169 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel QWidget *p ) : - pqAutoGeneratedObjectPanel(proxy, p), - sourceProxy_(vtkSMSourceProxy::SafeDownCast(this->proxy())) + pqAutoGeneratedObjectPanel(proxy, p) { // create first sublayout (at top of the panel) - QGridLayout *sect1 = new QGridLayout(); - this->PanelLayout->addLayout(sect1, 0, 0, 1, -1); + QGridLayout *form = new QGridLayout(); + this->PanelLayout->addLayout(form, 0, 0, 1, -1); + vtkSMProperty* prop = 0; + + // refresh button for updating times/fields + if ((prop = this->proxy()->GetProperty("UiRefresh")) != 0) + { + prop->SetImmediateUpdate(1); + QPushButton *refresh = new QPushButton("Refresh Times"); + refresh->setToolTip("Rescan for updated times/fields."); + + form->addWidget(refresh, 0, 0, Qt::AlignLeft); + QObject::connect + ( + refresh, + SIGNAL(clicked()), + this, + SLOT(RefreshPressed()) + ); + } + + // checkbox for skip zeroTime + if ((prop = this->proxy()->GetProperty("UiZeroTime")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + ZeroTime_ = new QCheckBox("Skip Zero Time"); + ZeroTime_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + ZeroTime_->setToolTip + ( + "Skip including the 0/ time directory." + ); + + form->addWidget(ZeroTime_, 0, 1, Qt::AlignLeft); + connect + ( + ZeroTime_, + SIGNAL(stateChanged(int)), + this, + SLOT(ZeroTimeToggled()) + ); + } - // checkbox for caching mesh - CacheMesh_ = new QCheckBox("Cache Mesh"); - CacheMesh_->setChecked(true); // checkbox for caching mesh - ShowPatchNames_ = new QCheckBox("Show Patch Names"); - ShowPatchNames_->setChecked(false); + if ((prop = this->proxy()->GetProperty("UiCacheMesh")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); - connect - ( - CacheMesh_, - SIGNAL(stateChanged(int)), - this, - SLOT(CacheMeshToggled()) - ); + CacheMesh_ = new QCheckBox("Cache Mesh"); + CacheMesh_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + CacheMesh_->setToolTip + ( + "Cache the fvMesh in memory." + ); - connect - ( - ShowPatchNames_, - SIGNAL(stateChanged(int)), - this, - SLOT(ShowPatchNamesToggled()) - ); + form->addWidget(CacheMesh_, 1, 0, Qt::AlignLeft); + connect + ( + CacheMesh_, + SIGNAL(stateChanged(int)), + this, + SLOT(CacheMeshToggled()) + ); + } - sect1->addWidget(CacheMesh_); - sect1->addWidget(ShowPatchNames_); + // checkbox for patch names + if ((prop = this->proxy()->GetProperty("UiShowPatchNames")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + ShowPatchNames_ = new QCheckBox("Patch Names"); + ShowPatchNames_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + ShowPatchNames_->setToolTip + ( + "Show patch names in render window." + ); + + // row/col 0,1 + form->addWidget(ShowPatchNames_, 1, 1, Qt::AlignLeft); + connect + ( + ShowPatchNames_, + SIGNAL(stateChanged(int)), + this, + SLOT(ShowPatchNamesToggled()) + ); + } + + + // checkbox for include sets + if ((prop = this->proxy()->GetProperty("UiIncludeSets")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + IncludeSets_ = new QCheckBox("Include Sets"); + IncludeSets_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + IncludeSets_->setToolTip + ( + "Search the polyMesh/sets/ directory." + ); + + // row/col 1,0 + form->addWidget(IncludeSets_, 2, 0, Qt::AlignLeft); + connect + ( + IncludeSets_, + SIGNAL(stateChanged(int)), + this, + SLOT(IncludeSetsToggled()) + ); + } + + + // checkbox for include zones + if ((prop = this->proxy()->GetProperty("UiIncludeZones")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + IncludeZones_ = new QCheckBox("Include Zones"); + IncludeZones_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + IncludeZones_->setToolTip + ( + "ZoneMesh information is used to find {cell,face,point}Zones. " + "The polyMesh/ directory is only checked on startup." + ); + + // row/col 1,1 + form->addWidget(IncludeZones_, 2, 1, Qt::AlignLeft); + connect + ( + IncludeZones_, + SIGNAL(stateChanged(int)), + this, + SLOT(IncludeZonesToggled()) + ); + } - // immediate update on the Server Manager side - vtkSMIntVectorProperty::SafeDownCast - ( - sourceProxy_->GetProperty("UiCacheMesh") - )->SetImmediateUpdate(true); - vtkSMIntVectorProperty::SafeDownCast - ( - sourceProxy_->GetProperty("UiShowPatchNames") - )->SetImmediateUpdate(true); } @@ -110,16 +229,43 @@ void pqPV3FoamReaderPanel::CacheMeshToggled() { vtkSMIntVectorProperty::SafeDownCast ( - sourceProxy_->GetProperty("UiCacheMesh") + this->proxy()->GetProperty("UiCacheMesh") )->SetElement(0, CacheMesh_->isChecked()); } +void pqPV3FoamReaderPanel::RefreshPressed() +{ + // update everything + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiRefresh") + )->Modified(); + + vtkSMSourceProxy::SafeDownCast(this->proxy())->UpdatePipeline(); + + // render all views + pqApplicationCore::instance()->render(); +} + + +void pqPV3FoamReaderPanel::ZeroTimeToggled() +{ + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiZeroTime") + )->SetElement(0, ZeroTime_->isChecked()); + + // update everything + RefreshPressed(); +} + + void pqPV3FoamReaderPanel::ShowPatchNamesToggled() { vtkSMIntVectorProperty::SafeDownCast ( - sourceProxy_->GetProperty("UiShowPatchNames") + this->proxy()->GetProperty("UiShowPatchNames") )->SetElement(0, ShowPatchNames_->isChecked()); // update the active view @@ -132,4 +278,37 @@ void pqPV3FoamReaderPanel::ShowPatchNamesToggled() } +void pqPV3FoamReaderPanel::IncludeSetsToggled() +{ + vtkSMProperty* prop; + + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiIncludeSets") + )->SetElement(0, IncludeSets_->isChecked()); + + if ((prop = this->proxy()->GetProperty("PartArrayStatus")) != 0) + { + this->proxy()->UpdatePropertyInformation(prop); + } +} + + +void pqPV3FoamReaderPanel::IncludeZonesToggled() +{ + vtkSMProperty* prop; + + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiIncludeZones") + )->SetElement(0, IncludeZones_->isChecked()); + + if ((prop = this->proxy()->GetProperty("PartArrayStatus")) != 0) + { + this->proxy()->UpdatePropertyInformation(prop); + } + +} + + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h index fc4f5f9adad0b89b6f395a492632d1f24de18075..49a3e11edad26ca2b82e1aea9a260c7a75df569d 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h @@ -37,6 +37,7 @@ SourceFiles #ifndef pqPV3FoamReaderPanel_h #define pqPV3FoamReaderPanel_h + #include "pqAutoGeneratedObjectPanel.h" // Forward declaration of QT classes @@ -62,8 +63,8 @@ class pqPV3FoamReaderPanel Q_OBJECT; typedef pqAutoGeneratedObjectPanel Superclass; - //- Server Manager Source Proxy - vtkSMSourceProxy* sourceProxy_; + //- ZeroTime checkbox + QCheckBox* ZeroTime_; //- CacheMesh checkbox QCheckBox* CacheMesh_; @@ -71,10 +72,20 @@ class pqPV3FoamReaderPanel //- Show Patch Names checkbox QCheckBox* ShowPatchNames_; + //- IncludeSets checkbox + QCheckBox* IncludeSets_; + + //- IncludeZones checkbox + QCheckBox* IncludeZones_; + protected slots: void CacheMeshToggled(); + void ZeroTimeToggled(); + void RefreshPressed(); void ShowPatchNamesToggled(); + void IncludeSetsToggled(); + void IncludeZonesToggled(); public: diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx index 32b01eb7958d8ff805c8fdeeea779d1a34b32cf1..4e5806b99c6137fe7ca2b2dbbe411a362746d47b 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx @@ -79,7 +79,9 @@ vtkPV3FoamReader::vtkPV3FoamReader() TimeStepRange[1] = 0; CacheMesh = 1; + Refresh = 0; + SkipZeroTime = 0; ExtrapolatePatches = 0; IncludeSets = 0; IncludeZones = 0; @@ -336,7 +338,6 @@ int vtkPV3FoamReader::RequestData foamData_->setTime(nRequestTime, requestTime); } - vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast ( outputVector->GetInformationObject(0)->Get @@ -420,7 +421,39 @@ int vtkPV3FoamReader::RequestData } -void vtkPV3FoamReader::SetShowPatchNames(const int val) +void vtkPV3FoamReader::SetRefresh(int val) +{ + Modified(); +} + + +void vtkPV3FoamReader::SetIncludeSets(int val) +{ + if (IncludeSets != val) + { + IncludeSets = val; + if (foamData_) + { + foamData_->updateInfo(); + } + } +} + + +void vtkPV3FoamReader::SetIncludeZones(int val) +{ + if (IncludeZones != val) + { + IncludeZones = val; + if (foamData_) + { + foamData_->updateInfo(); + } + } +} + + +void vtkPV3FoamReader::SetShowPatchNames(int val) { if (ShowPatchNames != val) { @@ -430,7 +463,6 @@ void vtkPV3FoamReader::SetShowPatchNames(const int val) } - void vtkPV3FoamReader::updatePatchNamesView(const bool show) { pqApplicationCore* appCore = pqApplicationCore::instance(); @@ -452,7 +484,7 @@ void vtkPV3FoamReader::updatePatchNamesView(const bool show) // Get all the pqRenderView instances QList<pqRenderView*> renderViews = smModel->findItems<pqRenderView*>(); - for (int viewI=0; viewI<renderViews.size(); viewI++) + for (int viewI=0; viewI < renderViews.size(); ++viewI) { foamData_->renderPatchNames ( @@ -521,7 +553,8 @@ int vtkPV3FoamReader::GetPartArrayStatus(const char* name) void vtkPV3FoamReader::SetPartArrayStatus(const char* name, int status) { - vtkDebugMacro(<<"SetPartArrayStatus"); + vtkDebugMacro("Set mesh part \"" << name << "\" status to: " << status); + if (status) { PartSelection->EnableArray(name); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h index df73979205ef11886c27c7d0ced23907d9edfb9f..f3ac8a5d92958d69808af84d9435852c8e5efda9 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h @@ -83,6 +83,15 @@ public: vtkSetMacro(CacheMesh, int); vtkGetMacro(CacheMesh, int); + // Description: + // FOAM refresh times/fields + virtual void SetRefresh(int); + + // Description: + // FOAM Skip/include the 0/ time directory + vtkSetMacro(SkipZeroTime, int); + vtkGetMacro(SkipZeroTime, int); + // Description: // GUI update control vtkSetMacro(UpdateGUI, int); @@ -93,13 +102,14 @@ public: vtkSetMacro(ExtrapolatePatches, int); vtkGetMacro(ExtrapolatePatches, int); + // Description: // FOAM read sets control - vtkSetMacro(IncludeSets, int); + virtual void SetIncludeSets(int); vtkGetMacro(IncludeSets, int); // Description: // FOAM read zones control - vtkSetMacro(IncludeZones, int); + virtual void SetIncludeZones(int); vtkGetMacro(IncludeZones, int); // Description: @@ -113,7 +123,7 @@ public: // Description: // Parts selection list control - vtkDataArraySelection* GetPartSelection(); + virtual vtkDataArraySelection* GetPartSelection(); int GetNumberOfPartArrays(); int GetPartArrayStatus(const char* name); void SetPartArrayStatus(const char* name, int status); @@ -121,7 +131,7 @@ public: // Description: // volField selection list control - vtkDataArraySelection* GetVolFieldSelection(); + virtual vtkDataArraySelection* GetVolFieldSelection(); int GetNumberOfVolFieldArrays(); int GetVolFieldArrayStatus(const char* name); void SetVolFieldArrayStatus(const char* name, int status); @@ -129,7 +139,7 @@ public: // Description: // pointField selection list control - vtkDataArraySelection* GetPointFieldSelection(); + virtual vtkDataArraySelection* GetPointFieldSelection(); int GetNumberOfPointFieldArrays(); int GetPointFieldArrayStatus(const char* name); void SetPointFieldArrayStatus(const char* name, int status); @@ -137,7 +147,7 @@ public: // Description: // lagrangianField selection list control - vtkDataArraySelection* GetLagrangianFieldSelection(); + virtual vtkDataArraySelection* GetLagrangianFieldSelection(); int GetNumberOfLagrangianFieldArrays(); int GetLagrangianFieldArrayStatus(const char* name); void SetLagrangianFieldArrayStatus(const char* name, int status); @@ -156,7 +166,6 @@ public: void SelectionModified(); - protected: //- Construct null @@ -185,9 +194,10 @@ protected: //- Fill in additional port information virtual int FillOutputPortInformation(int, vtkInformation*); - // The observer to modify this object when array selections are modified + //- The observer to modify this object when array selections are modified vtkCallbackCommand* SelectionObserver; + //- The file name for this case char* FileName; private: @@ -202,14 +212,16 @@ private: void updatePatchNamesView(const bool show); int TimeStepRange[2]; + int Refresh; int CacheMesh; + int SkipZeroTime; int ExtrapolatePatches; int IncludeSets; int IncludeZones; int ShowPatchNames; - //- Dummy variable/switch for invoke a reader update + //- Dummy variable/switch to invoke a reader update int UpdateGUI; vtkDataArraySelection* PartSelection; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C index 6a5ab601fb4be12d8f3d424b4f661bf84da1e51a..41933d5ebfec7834e4596c962deb875dc80d1284 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C @@ -50,16 +50,16 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0); void Foam::vtkPV3Foam::resetCounters() { - // Reset mesh part ids and sizes - partInfoVolume_.reset(); - partInfoPatches_.reset(); - partInfoLagrangian_.reset(); - partInfoCellZones_.reset(); - partInfoFaceZones_.reset(); - partInfoPointZones_.reset(); - partInfoCellSets_.reset(); - partInfoFaceSets_.reset(); - partInfoPointSets_.reset(); + // Reset array range information (ids and sizes) + arrayRangeVolume_.reset(); + arrayRangePatches_.reset(); + arrayRangeLagrangian_.reset(); + arrayRangeCellZones_.reset(); + arrayRangeFaceZones_.reset(); + arrayRangePointZones_.reset(); + arrayRangeCellSets_.reset(); + arrayRangeFaceSets_.reset(); + arrayRangePointSets_.reset(); } @@ -92,21 +92,6 @@ void Foam::vtkPV3Foam::reduceMemory() int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[]) { - if (debug) - { - Info<< "<beg> Foam::vtkPV3Foam::setTime("; - for (int requestI = 0; requestI < nRequest; ++requestI) - { - if (requestI) - { - Info<< ", "; - } - - Info<< requestTimes[requestI]; - } - Info << ") - previousIndex = " << timeIndex_ << endl; - } - Time& runTime = dbPtr_(); // Get times list @@ -128,6 +113,22 @@ int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[]) nearestIndex = 0; } + if (debug) + { + Info<< "<beg> Foam::vtkPV3Foam::setTime("; + for (int requestI = 0; requestI < nRequest; ++requestI) + { + if (requestI) + { + Info<< ", "; + } + + Info<< requestTimes[requestI]; + } + Info<< ") - previousIndex = " << timeIndex_ + << ", nearestIndex = " << nearestIndex << endl; + } + // see what has changed if (timeIndex_ != nearestIndex) @@ -230,15 +231,15 @@ Foam::vtkPV3Foam::vtkPV3Foam timeIndex_(-1), meshChanged_(true), fieldsChanged_(true), - partInfoVolume_("unzoned"), - partInfoPatches_("patches"), - partInfoLagrangian_("lagrangian"), - partInfoCellZones_("cellZone"), - partInfoFaceZones_("faceZone"), - partInfoPointZones_("pointZone"), - partInfoCellSets_("cellSet"), - partInfoFaceSets_("faceSet"), - partInfoPointSets_("pointSet") + arrayRangeVolume_("unzoned"), + arrayRangePatches_("patches"), + arrayRangeLagrangian_("lagrangian"), + arrayRangeCellZones_("cellZone"), + arrayRangeFaceZones_("faceZone"), + arrayRangePointZones_("pointZone"), + arrayRangeCellSets_("cellSet"), + arrayRangeFaceSets_("faceSet"), + arrayRangePointSets_("pointSet") { if (debug) { @@ -288,7 +289,7 @@ Foam::vtkPV3Foam::vtkPV3Foam meshRegion_ = caseName.substr(beg+1, end-beg-1); // some safety - if (!meshRegion_.size()) + if (meshRegion_.empty()) { meshRegion_ = polyMesh::defaultRegion; } @@ -352,6 +353,14 @@ void Foam::vtkPV3Foam::updateInfo() vtkDataArraySelection* partSelection = reader_->GetPartSelection(); + // there are two ways to ensure we have the correct list of parts: + // 1. remove everything and then set particular entries 'on' + // 2. build a 'char **' list and call SetArraysWithDefault() + // + // Nr. 2 has the potential advantage of not touching the modification + // time of the vtkDataArraySelection, but the qt/paraview proxy + // layer doesn't care about that anyhow. + // enable 'internalMesh' on the first call // or preserve the enabled selections stringList enabledEntries; @@ -369,11 +378,11 @@ void Foam::vtkPV3Foam::updateInfo() partSelection->RemoveAllArrays(); // Update mesh parts list - add Lagrangian at the bottom - updateInfoInternalMesh(); - updateInfoPatches(); - updateInfoSets(); - updateInfoZones(); - updateInfoLagrangian(); + updateInfoInternalMesh(partSelection); + updateInfoPatches(partSelection); + updateInfoSets(partSelection); + updateInfoZones(partSelection); + updateInfoLagrangian(partSelection); // restore the enabled selections setSelectedArrayEntries(partSelection, enabledEntries); @@ -396,6 +405,8 @@ void Foam::vtkPV3Foam::updateInfo() if (debug) { + // just for debug info + getSelectedArrayEntries(partSelection); Info<< "<end> Foam::vtkPV3Foam::updateInfo" << endl; } @@ -559,11 +570,25 @@ double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps) nTimes = timeLst.size() - timeI; - // always skip "constant" time if possible + // skip "constant" time whenever possible if (timeI == 0 && nTimes > 1) { - timeI = 1; - --nTimes; + if (timeLst[timeI].name() == "constant") + { + ++timeI; + --nTimes; + } + } + + + // skip "0/" time if requested and possible + if (nTimes > 1 && reader_->GetSkipZeroTime()) + { + if (mag(timeLst[timeI].value()) < SMALL) + { + ++timeI; + --nTimes; + } } if (nTimes) @@ -607,10 +632,10 @@ void Foam::vtkPV3Foam::renderPatchNames(vtkRenderer* renderer, const bool show) wordHashSet selectedPatches = getSelected ( reader_->GetPartSelection(), - partInfoPatches_ + arrayRangePatches_ ); - if (!selectedPatches.size()) + if (selectedPatches.empty()) { return; } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H index 05c84744775953e3672c2805f215b7f2d7b966b3..6037e78781f193928365cfcae265603383f2d776 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H @@ -111,7 +111,7 @@ class vtkPV3Foam // Private classes //- Bookkeeping for GUI checklists and the multi-block organization - class partInfo + class arrayRange { const char *name_; int block_; @@ -120,11 +120,11 @@ class vtkPV3Foam public: - partInfo(const char *name, const int blockNo=0) + arrayRange(const char *name, const int blockNo=0) : name_(name), block_(blockNo), - start_(-1), + start_(0), size_(0) {} @@ -142,21 +142,25 @@ class vtkPV3Foam return prev; } + //- Return block name const char* name() const { return name_; } + //- Return array start index int start() const { return start_; } + //- Return array end index int end() const { return start_ + size_; } + //- Return sublist size int size() const { return size_; @@ -167,16 +171,10 @@ class vtkPV3Foam return !size_; } - void reset() + //- Reset the size to zero and optionally assign a new start + void reset(const int startAt = 0) { - start_ = -1; - size_ = 0; - } - - //- Assign new start and reset the size - void operator=(const int i) - { - start_ = i; + start_ = startAt; size_ = 0; } @@ -282,15 +280,15 @@ class vtkPV3Foam //- First instance and size of various mesh parts // used to index into partStatus_ and partDataset_ - partInfo partInfoVolume_; - partInfo partInfoPatches_; - partInfo partInfoLagrangian_; - partInfo partInfoCellZones_; - partInfo partInfoFaceZones_; - partInfo partInfoPointZones_; - partInfo partInfoCellSets_; - partInfo partInfoFaceSets_; - partInfo partInfoPointSets_; + arrayRange arrayRangeVolume_; + arrayRange arrayRangePatches_; + arrayRange arrayRangeLagrangian_; + arrayRange arrayRangeCellZones_; + arrayRange arrayRangeFaceZones_; + arrayRange arrayRangePointZones_; + arrayRange arrayRangeCellSets_; + arrayRange arrayRangeFaceSets_; + arrayRange arrayRangePointSets_; //- Decomposed cells information (mesh regions) // TODO: regions @@ -313,7 +311,7 @@ class vtkPV3Foam ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo&, + const arrayRange&, const label datasetNo, const std::string& datasetName ); @@ -323,7 +321,7 @@ class vtkPV3Foam static vtkDataSet* GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -332,7 +330,7 @@ class vtkPV3Foam static label GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& + const arrayRange& ); //- Reset data counters @@ -344,19 +342,19 @@ class vtkPV3Foam void updateMeshPartsStatus(); //- Internal mesh info - void updateInfoInternalMesh(); + void updateInfoInternalMesh(vtkDataArraySelection*); //- Lagrangian info - void updateInfoLagrangian(); + void updateInfoLagrangian(vtkDataArraySelection*); //- Patch info - void updateInfoPatches(); + void updateInfoPatches(vtkDataArraySelection*); //- Set info - void updateInfoSets(); + void updateInfoSets(vtkDataArraySelection*); //- Zone info - void updateInfoZones(); + void updateInfoZones(vtkDataArraySelection*); //- Read zone names for zoneType from file wordList readZoneNames(const word& zoneType); @@ -511,7 +509,7 @@ class vtkPV3Foam const GeometricField<Type, fvPatchField, volMesh>&, autoPtr<GeometricField<Type, pointPatchField, pointMesh> >&, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange&, const List<polyDecomp>& decompLst ); @@ -521,7 +519,7 @@ class vtkPV3Foam ( const GeometricField<Type, fvPatchField, volMesh>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const polyDecomp& ); @@ -533,7 +531,7 @@ class vtkPV3Foam const word& name, const Field<Type>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -543,7 +541,7 @@ class vtkPV3Foam ( const GeometricField<Type, fvPatchField, volMesh>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const fvMesh&, const labelList& faceLabels @@ -555,7 +553,7 @@ class vtkPV3Foam ( const GeometricField<Type, fvPatchField, volMesh>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const fvMesh&, const faceSet& @@ -576,7 +574,7 @@ class vtkPV3Foam ( const IOField<Type>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -596,7 +594,7 @@ class vtkPV3Foam ( const GeometricField<Type, pointPatchField, pointMesh>&, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange&, const List<polyDecomp>& ); @@ -607,7 +605,7 @@ class vtkPV3Foam const GeometricField<Type, pointPatchField, pointMesh>&, const GeometricField<Type, fvPatchField, volMesh>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo, const polyDecomp& ); @@ -619,7 +617,7 @@ class vtkPV3Foam const word& name, const Field<Type>&, vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -640,7 +638,7 @@ class vtkPV3Foam static wordHashSet getSelected ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Retrieve the current selections @@ -650,7 +648,7 @@ class vtkPV3Foam static stringList getSelectedArrayEntries ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Set selection(s) @@ -661,7 +659,7 @@ class vtkPV3Foam ); //- Get the first word from the mesh parts selection - word getPartName(int); + word getPartName(const int); //- Disallow default bitwise copy construct diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H index d6b1f1ed5233ed8bad59aabbcbb08232b33a684e..b945d6c6a063a476e4f346a444dfbf34b6fb6c8d 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H @@ -50,11 +50,17 @@ Foam::label Foam::vtkPV3Foam::addToSelection { if (suffix.size()) { - select->AddArray((names[nameI] + suffix).c_str()); + select->AddArray + ( + (names[nameI] + suffix).c_str() + ); } else { - select->AddArray(names[nameI].c_str()); + select->AddArray + ( + (names[nameI]).c_str() + ); } } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H index dba8d97d373c280c3d9334e4dbb85ba25dd10bca..68f551ae5a3979f16e7ddca13ce408a3e0950907 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H @@ -35,6 +35,7 @@ InClass #include "vtkFloatArray.h" #include "vtkMultiBlockDataSet.h" #include "vtkPolyData.h" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class Type> @@ -42,7 +43,7 @@ void Foam::vtkPV3Foam::convertFaceField ( const GeometricField<Type, fvPatchField, volMesh>& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const fvMesh& mesh, const labelList& faceLabels @@ -53,11 +54,11 @@ void Foam::vtkPV3Foam::convertFaceField const labelList& faceOwner = mesh.faceOwner(); const labelList& faceNeigh = mesh.faceNeighbour(); - vtkFloatArray *cellData = vtkFloatArray::New(); - cellData->SetNumberOfTuples( faceLabels.size() ); - cellData->SetNumberOfComponents( nComp ); - cellData->Allocate( nComp*faceLabels.size() ); - cellData->SetName( tf.name().c_str() ); + vtkFloatArray* cellData = vtkFloatArray::New(); + cellData->SetNumberOfTuples(faceLabels.size()); + cellData->SetNumberOfComponents(nComp); + cellData->Allocate(nComp*faceLabels.size()); + cellData->SetName(tf.name().c_str()); if (debug) { @@ -99,7 +100,7 @@ void Foam::vtkPV3Foam::convertFaceField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(cellData); @@ -112,7 +113,7 @@ void Foam::vtkPV3Foam::convertFaceField ( const GeometricField<Type, fvPatchField, volMesh>& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const fvMesh& mesh, const faceSet& fSet @@ -123,11 +124,11 @@ void Foam::vtkPV3Foam::convertFaceField const labelList& faceOwner = mesh.faceOwner(); const labelList& faceNeigh = mesh.faceNeighbour(); - vtkFloatArray *cellData = vtkFloatArray::New(); - cellData->SetNumberOfTuples( fSet.size() ); - cellData->SetNumberOfComponents( nComp ); - cellData->Allocate( nComp*fSet.size() ); - cellData->SetName( tf.name().c_str() ); + vtkFloatArray* cellData = vtkFloatArray::New(); + cellData->SetNumberOfTuples(fSet.size()); + cellData->SetNumberOfComponents(nComp); + cellData->Allocate(nComp*fSet.size()); + cellData->SetName(tf.name().c_str()); if (debug) { @@ -172,7 +173,7 @@ void Foam::vtkPV3Foam::convertFaceField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(cellData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C index 38cc52f68047303136cd08d02e15c3ded723bcc7..b712fdebfe40b6dedb3006b053c1645b097d7cd7 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C @@ -51,7 +51,7 @@ void Foam::vtkPV3Foam::pruneObjectList ) { // hash all the selected field names - if (!selected.size()) + if (selected.empty()) { objects.clear(); } @@ -79,7 +79,7 @@ void Foam::vtkPV3Foam::convertVolFields reader_->GetVolFieldSelection() ); - if (!selectedFields.size()) + if (selectedFields.empty()) { return; } @@ -89,7 +89,7 @@ void Foam::vtkPV3Foam::convertVolFields IOobjectList objects(mesh, dbPtr_().timeName()); pruneObjectList(objects, selectedFields); - if (!objects.size()) + if (objects.empty()) { return; } @@ -164,7 +164,7 @@ void Foam::vtkPV3Foam::convertPointFields reader_->GetPointFieldSelection() ); - if (!selectedFields.size()) + if (selectedFields.empty()) { return; } @@ -174,7 +174,7 @@ void Foam::vtkPV3Foam::convertPointFields IOobjectList objects(mesh, dbPtr_().timeName()); pruneObjectList(objects, selectedFields); - if (!objects.size()) + if (objects.empty()) { return; } @@ -229,7 +229,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields vtkMultiBlockDataSet* output ) { - partInfo& selector = partInfoLagrangian_; + arrayRange& range = arrayRangeLagrangian_; const fvMesh& mesh = *meshPtr_; wordHashSet selectedFields = getSelected @@ -237,7 +237,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields reader_->GetLagrangianFieldSelection() ); - if (!selectedFields.size()) + if (selectedFields.empty()) { return; } @@ -248,7 +248,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word cloudName = getPartName(partId); const label datasetNo = partDataset_[partId]; @@ -270,7 +270,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields ); pruneObjectList(objects, selectedFields); - if (!objects.size()) + if (objects.empty()) { continue; } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H index 58422d69f49eb4a78b1db291d32df7a7596f6783..1b6e2a15681070cd4599aeb587f72209c46b8bfa 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H @@ -42,7 +42,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields const label datasetNo ) { - const partInfo& selector = partInfoLagrangian_; + const arrayRange& range = arrayRangeLagrangian_; forAllConstIter(IOobjectList, objects, iter) { @@ -50,7 +50,7 @@ void Foam::vtkPV3Foam::convertLagrangianFields if (iter()->headerClassName() == IOField<Type>::typeName) { IOField<Type> tf(*iter()); - convertLagrangianField(tf, output, selector, datasetNo); + convertLagrangianField(tf, output, range, datasetNo); } } } @@ -61,7 +61,7 @@ void Foam::vtkPV3Foam::convertLagrangianField ( const IOField<Type>& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { @@ -97,7 +97,7 @@ void Foam::vtkPV3Foam::convertLagrangianField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetPointData() ->AddArray(pointData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C index 6550a960e14aac0b594aa80215e33f4deb536bd1..516b29d3ef4ddea2b23a473a27b7ad999442dbcb 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C @@ -49,13 +49,13 @@ void Foam::vtkPV3Foam::convertMeshVolume int& blockNo ) { - partInfo& selector = partInfoVolume_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeVolume_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; // resize for decomposed polyhedra - regionPolyDecomp_.setSize(selector.size()); + regionPolyDecomp_.setSize(range.size()); if (debug) { @@ -65,7 +65,7 @@ void Foam::vtkPV3Foam::convertMeshVolume // Convert the internalMesh // this looks like more than one part, but it isn't - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word partName = "internalMesh"; @@ -82,7 +82,7 @@ void Foam::vtkPV3Foam::convertMeshVolume if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -109,8 +109,8 @@ void Foam::vtkPV3Foam::convertMeshLagrangian int& blockNo ) { - partInfo& selector = partInfoLagrangian_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeLagrangian_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -120,7 +120,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word cloudName = getPartName(partId); @@ -133,7 +133,7 @@ void Foam::vtkPV3Foam::convertMeshLagrangian if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, cloudName); + AddToBlock(output, vtkmesh, range, datasetNo, cloudName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -160,8 +160,8 @@ void Foam::vtkPV3Foam::convertMeshPatches int& blockNo ) { - partInfo& selector = partInfoPatches_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangePatches_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -172,7 +172,7 @@ void Foam::vtkPV3Foam::convertMeshPatches printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word patchName = getPartName(partId); const label patchId = patches.findPatchID(patchName); @@ -192,7 +192,7 @@ void Foam::vtkPV3Foam::convertMeshPatches if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, patchName); + AddToBlock(output, vtkmesh, range, datasetNo, patchName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -219,15 +219,15 @@ void Foam::vtkPV3Foam::convertMeshCellZones int& blockNo ) { - partInfo& selector = partInfoCellZones_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeCellZones_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; // resize for decomposed polyhedra - zonePolyDecomp_.setSize(selector.size()); + zonePolyDecomp_.setSize(range.size()); - if (!selector.size()) + if (range.empty()) { return; } @@ -239,7 +239,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones } const cellZoneMesh& zMesh = mesh.cellZones(); - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word zoneName = getPartName(partId); const label zoneId = zMesh.findZoneID(zoneName); @@ -281,7 +281,7 @@ void Foam::vtkPV3Foam::convertMeshCellZones // copy pointMap as well, otherwise pointFields fail zonePolyDecomp_[datasetNo].pointMap() = subsetter.pointMap(); - AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); + AddToBlock(output, vtkmesh, range, datasetNo, zoneName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -308,13 +308,13 @@ void Foam::vtkPV3Foam::convertMeshCellSets int& blockNo ) { - partInfo& selector = partInfoCellSets_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeCellSets_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; // resize for decomposed polyhedra - csetPolyDecomp_.setSize(selector.size()); + csetPolyDecomp_.setSize(range.size()); if (debug) { @@ -322,7 +322,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word partName = getPartName(partId); @@ -363,7 +363,7 @@ void Foam::vtkPV3Foam::convertMeshCellSets // copy pointMap as well, otherwise pointFields fail csetPolyDecomp_[datasetNo].pointMap() = subsetter.pointMap(); - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -390,12 +390,12 @@ void Foam::vtkPV3Foam::convertMeshFaceZones int& blockNo ) { - partInfo& selector = partInfoFaceZones_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeFaceZones_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; - if (!selector.size()) + if (range.empty()) { return; } @@ -407,7 +407,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones } const faceZoneMesh& zMesh = mesh.faceZones(); - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word zoneName = getPartName(partId); const label zoneId = zMesh.findZoneID(zoneName); @@ -426,7 +426,7 @@ void Foam::vtkPV3Foam::convertMeshFaceZones vtkPolyData* vtkmesh = faceZoneVTKMesh(mesh, zMesh[zoneId]); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); + AddToBlock(output, vtkmesh, range, datasetNo, zoneName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -453,8 +453,8 @@ void Foam::vtkPV3Foam::convertMeshFaceSets int& blockNo ) { - partInfo& selector = partInfoFaceSets_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeFaceSets_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -464,7 +464,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const word partName = getPartName(partId); @@ -483,7 +483,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSets vtkPolyData* vtkmesh = faceSetVTKMesh(mesh, fSet); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -510,8 +510,8 @@ void Foam::vtkPV3Foam::convertMeshPointZones int& blockNo ) { - partInfo& selector = partInfoPointZones_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangePointZones_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -521,10 +521,10 @@ void Foam::vtkPV3Foam::convertMeshPointZones printMemory(); } - if (selector.size()) + if (range.size()) { const pointZoneMesh& zMesh = mesh.pointZones(); - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { word zoneName = getPartName(partId); label zoneId = zMesh.findZoneID(zoneName); @@ -537,7 +537,7 @@ void Foam::vtkPV3Foam::convertMeshPointZones vtkPolyData* vtkmesh = pointZoneVTKMesh(mesh, zMesh[zoneId]); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, zoneName); + AddToBlock(output, vtkmesh, range, datasetNo, zoneName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -566,8 +566,8 @@ void Foam::vtkPV3Foam::convertMeshPointSets int& blockNo ) { - partInfo& selector = partInfoPointSets_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangePointSets_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const fvMesh& mesh = *meshPtr_; @@ -577,7 +577,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets printMemory(); } - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { word partName = getPartName(partId); @@ -596,7 +596,7 @@ void Foam::vtkPV3Foam::convertMeshPointSets vtkPolyData* vtkmesh = pointSetVTKMesh(mesh, pSet); if (vtkmesh) { - AddToBlock(output, vtkmesh, selector, datasetNo, partName); + AddToBlock(output, vtkmesh, range, datasetNo, partName); vtkmesh->Delete(); partDataset_[partId] = datasetNo++; @@ -616,4 +616,5 @@ void Foam::vtkPV3Foam::convertMeshPointSets } } + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C index e653b05adb5ada83590b9d1646f1434c5f2b0b8b..0d46db1d49a9e4de75ae46dfb5e2a851680f9b29 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C @@ -80,8 +80,8 @@ vtkPolyData* Foam::vtkPV3Foam::lagrangianVTKMesh vtkPoints* vtkpoints = vtkPoints::New(); vtkCellArray* vtkcells = vtkCellArray::New(); - vtkpoints->Allocate( parcels.size() ); - vtkcells->Allocate( parcels.size() ); + vtkpoints->Allocate(parcels.size()); + vtkcells->Allocate(parcels.size()); vtkIdType particleId = 0; forAllConstIter(Cloud<passiveParticle>, parcels, iter) diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C index d7c0f2f013b6ff47eb3e4f5f6d1a03b7e10fce72..ace25f527fafd2627a45379ee0d7b957abec9f7c 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "vtkPV3Foam.H" @@ -40,10 +38,7 @@ Description // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh -( - const polyPatch& p -) +vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh(const polyPatch& p) { vtkPolyData* vtkmesh = vtkPolyData::New(); @@ -56,8 +51,8 @@ vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh // Convert Foam mesh vertices to VTK const Foam::pointField& points = p.localPoints(); - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate( points.size() ); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate(points.size()); forAll(points, i) { vtkInsertNextOpenFOAMPoint(vtkpoints, points[i]); @@ -71,7 +66,7 @@ vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh const faceList& faces = p.localFaces(); vtkCellArray* vtkcells = vtkCellArray::New(); - vtkcells->Allocate( faces.size() ); + vtkcells->Allocate(faces.size()); forAll(faces, faceI) { const face& f = faces[faceI]; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C index f363beae45c2588834788a4ff321b5de064f88e3..431df1f9c5fefad23c4f7a781e59eb23aae2fe32 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "vtkPV3Foam.H" @@ -71,8 +69,8 @@ vtkPolyData* Foam::vtkPV3Foam::faceSetVTKMesh // Convert Foam mesh vertices to VTK const pointField& points = p.localPoints(); - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate( points.size() ); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate(points.size()); forAll(points, i) { vtkInsertNextOpenFOAMPoint(vtkpoints, points[i]); @@ -84,7 +82,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceSetVTKMesh const faceList& faces = p.localFaces(); vtkCellArray* vtkcells = vtkCellArray::New(); - vtkcells->Allocate( faces.size() ); + vtkcells->Allocate(faces.size()); forAll(faces, faceI) { @@ -127,8 +125,8 @@ vtkPolyData* Foam::vtkPV3Foam::pointSetVTKMesh const pointField& meshPoints = mesh.points(); - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate( pSet.size() ); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate(pSet.size()); forAllConstIter(pointSet, pSet, iter) { diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C index e1fd59ccd0d1c50262ac43d7c2d12b22b4b94020..b39dfd453fed58af52ff4c64e5bcaa9f37719a46 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "vtkPV3Foam.H" @@ -136,8 +134,8 @@ vtkUnstructuredGrid* Foam::vtkPV3Foam::volumeVTKMesh } // Convert Foam mesh vertices to VTK - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate( mesh.nPoints() + nAddPoints ); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate(mesh.nPoints() + nAddPoints); const Foam::pointField& points = mesh.points(); @@ -152,7 +150,7 @@ vtkUnstructuredGrid* Foam::vtkPV3Foam::volumeVTKMesh Info<< "... converting cells" << endl; } - vtkmesh->Allocate( mesh.nCells() + nAddCells ); + vtkmesh->Allocate(mesh.nCells() + nAddCells); // Set counters for additional points and additional cells label addPointI = 0, addCellI = 0; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C index 0a21310a633b868c8b489943c749cc3b90c48545..9b8bcb956d972328a7d1f7048cafdd94a580fa08 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "vtkPV3Foam.H" @@ -69,7 +67,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh const pointField& points = p.localPoints(); vtkPoints* vtkpoints = vtkPoints::New(); - vtkpoints->Allocate( points.size() ); + vtkpoints->Allocate(points.size()); forAll(points, i) { vtkInsertNextOpenFOAMPoint(vtkpoints, points[i]); @@ -83,7 +81,7 @@ vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh const faceList& faces = p.localFaces(); vtkCellArray* vtkcells = vtkCellArray::New(); - vtkcells->Allocate( faces.size() ); + vtkcells->Allocate(faces.size()); forAll(faces, faceI) { @@ -126,8 +124,8 @@ vtkPolyData* Foam::vtkPV3Foam::pointZoneVTKMesh const pointField& meshPoints = mesh.points(); - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate( pointLabels.size() ); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate(pointLabels.size()); forAll(pointLabels, pointI) { diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H index 7b7de4d022ffd4a02beb60fc0d2666785d8054c6..7e473a7c74950b842831cc054784262970a2390c 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H @@ -45,17 +45,17 @@ void Foam::vtkPV3Foam::convertPatchField const word& name, const Field<Type>& ptf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { const label nComp = pTraits<Type>::nComponents; vtkFloatArray* cellData = vtkFloatArray::New(); - cellData->SetNumberOfTuples( ptf.size() ); - cellData->SetNumberOfComponents( nComp ); - cellData->Allocate( nComp*ptf.size() ); - cellData->SetName( name.c_str() ); + cellData->SetNumberOfTuples(ptf.size()); + cellData->SetNumberOfComponents(nComp); + cellData->Allocate(nComp*ptf.size()); + cellData->SetName(name.c_str()); float vec[nComp]; forAll(ptf, i) @@ -70,7 +70,7 @@ void Foam::vtkPV3Foam::convertPatchField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(cellData); @@ -85,17 +85,17 @@ void Foam::vtkPV3Foam::convertPatchPointField const word& name, const Field<Type>& pptf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { const label nComp = pTraits<Type>::nComponents; - vtkFloatArray *pointData = vtkFloatArray::New(); - pointData->SetNumberOfTuples( pptf.size() ); - pointData->SetNumberOfComponents( nComp ); - pointData->Allocate( nComp*pptf.size() ); - pointData->SetName( name.c_str() ); + vtkFloatArray* pointData = vtkFloatArray::New(); + pointData->SetNumberOfTuples(pptf.size()); + pointData->SetNumberOfComponents(nComp); + pointData->Allocate(nComp*pptf.size()); + pointData->SetName(name.c_str()); float vec[nComp]; forAll(pptf, i) @@ -111,7 +111,7 @@ void Foam::vtkPV3Foam::convertPatchPointField vtkPolyData::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetPointData() ->AddArray(pointData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H index 3a609b2bde50f28d1946ae23fb598175d5720046..697044bc6b9b96f881fc610327ed0c18bee4130c 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H @@ -77,7 +77,7 @@ void Foam::vtkPV3Foam::convertPointFields ( ptf, output, - partInfoVolume_, + arrayRangeVolume_, regionPolyDecomp_ ); @@ -86,7 +86,7 @@ void Foam::vtkPV3Foam::convertPointFields ( ptf, output, - partInfoCellZones_, + arrayRangeCellZones_, zonePolyDecomp_ ); @@ -95,7 +95,7 @@ void Foam::vtkPV3Foam::convertPointFields ( ptf, output, - partInfoCellSets_, + arrayRangeCellSets_, csetPolyDecomp_ ); @@ -105,14 +105,14 @@ void Foam::vtkPV3Foam::convertPointFields // for ( - int partId = partInfoPatches_.start(); - partId < partInfoPatches_.end(); + int partId = arrayRangePatches_.start(); + partId < arrayRangePatches_.end(); ++partId ) { - const word patchName = getPartName(partId); + const word patchName = getPartName(partId); const label datasetNo = partDataset_[partId]; - const label patchId = patches.findPatchID(patchName); + const label patchId = patches.findPatchID(patchName); if (!partStatus_[partId] || datasetNo < 0 || patchId < 0) { @@ -124,7 +124,7 @@ void Foam::vtkPV3Foam::convertPointFields fieldName, ptf.boundaryField()[patchId].patchInternalField()(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); } @@ -137,11 +137,11 @@ void Foam::vtkPV3Foam::convertPointFieldBlock ( const GeometricField<Type, pointPatchField, pointMesh>& ptf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const List<polyDecomp>& decompLst ) { - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const label datasetNo = partDataset_[partId]; @@ -152,7 +152,7 @@ void Foam::vtkPV3Foam::convertPointFieldBlock ptf, GeometricField<Type, fvPatchField, volMesh>::null(), output, - selector, + range, datasetNo, decompLst[datasetNo] ); @@ -167,7 +167,7 @@ void Foam::vtkPV3Foam::convertPointField const GeometricField<Type, pointPatchField, pointMesh>& ptf, const GeometricField<Type, fvPatchField, volMesh>& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const polyDecomp& decomp ) @@ -187,7 +187,7 @@ void Foam::vtkPV3Foam::convertPointField nPoints = ptf.size(); } - vtkFloatArray *pointData = vtkFloatArray::New(); + vtkFloatArray* pointData = vtkFloatArray::New(); pointData->SetNumberOfTuples(nPoints + addPointCellLabels.size()); pointData->SetNumberOfComponents(nComp); pointData->Allocate(nComp*(nPoints + addPointCellLabels.size())); @@ -260,7 +260,7 @@ void Foam::vtkPV3Foam::convertPointField vtkUnstructuredGrid::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetPointData() ->AddArray(pointData); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C index 59e445e341c60784bd3eea82a8ec830270a39763..2bed6fabd4040dea85128c9d5ab928518b483fe4 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C @@ -118,33 +118,39 @@ Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType) } -void Foam::vtkPV3Foam::updateInfoInternalMesh() +void Foam::vtkPV3Foam::updateInfoInternalMesh +( + vtkDataArraySelection* arraySelection +) { if (debug) { Info<< "<beg> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - // Determine mesh parts (internalMesh, patches...) //- Add internal mesh as first entry - partInfoVolume_ = partSelection->GetNumberOfArrays(); - partSelection->AddArray("internalMesh"); - partInfoVolume_ += 1; + arrayRangeVolume_.reset( arraySelection->GetNumberOfArrays() ); + arraySelection->AddArray + ( + "internalMesh" + ); + arrayRangeVolume_ += 1; if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; } - } -void Foam::vtkPV3Foam::updateInfoLagrangian() +void Foam::vtkPV3Foam::updateInfoLagrangian +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -167,34 +173,35 @@ void Foam::vtkPV3Foam::updateInfoLagrangian() readDir(dbPtr_->timePath()/lagrangianPrefix, fileName::DIRECTORY) ); - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - partInfoLagrangian_ = partSelection->GetNumberOfArrays(); + arrayRangeLagrangian_.reset( arraySelection->GetNumberOfArrays() ); int nClouds = 0; forAll(cloudDirs, cloudI) { // Add cloud to GUI list - partSelection->AddArray + arraySelection->AddArray ( (cloudDirs[cloudI] + " - lagrangian").c_str() ); ++nClouds; } - - partInfoLagrangian_ += nClouds; + arrayRangeLagrangian_ += nClouds; if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangian" << endl; } } -void Foam::vtkPV3Foam::updateInfoPatches() +void Foam::vtkPV3Foam::updateInfoPatches +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -202,8 +209,7 @@ void Foam::vtkPV3Foam::updateInfoPatches() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - partInfoPatches_ = partSelection->GetNumberOfArrays(); + arrayRangePatches_.reset( arraySelection->GetNumberOfArrays() ); int nPatches = 0; if (meshPtr_) @@ -216,7 +222,7 @@ void Foam::vtkPV3Foam::updateInfoPatches() if (pp.size()) { // Add patch to GUI list - partSelection->AddArray + arraySelection->AddArray ( (pp.name() + " - patch").c_str() ); @@ -261,7 +267,7 @@ void Foam::vtkPV3Foam::updateInfoPatches() // Valid patch if nFace > 0 - add patch to GUI list if (nFaces) { - partSelection->AddArray + arraySelection->AddArray ( (patchEntries[entryI].keyword() + " - patch").c_str() ); @@ -271,19 +277,22 @@ void Foam::vtkPV3Foam::updateInfoPatches() } } } - partInfoPatches_ += nPatches; + arrayRangePatches_ += nPatches; if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3Foam::updateInfoPatches" << endl; } } -void Foam::vtkPV3Foam::updateInfoZones() +void Foam::vtkPV3Foam::updateInfoZones +( + vtkDataArraySelection* arraySelection +) { if (!reader_->GetIncludeZones()) { @@ -296,7 +305,6 @@ void Foam::vtkPV3Foam::updateInfoZones() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); wordList namesLst; // @@ -311,12 +319,15 @@ void Foam::vtkPV3Foam::updateInfoZones() namesLst = readZoneNames("cellZones"); } - partInfoCellZones_ = partSelection->GetNumberOfArrays(); + arrayRangeCellZones_.reset( arraySelection->GetNumberOfArrays() ); forAll(namesLst, elemI) { - partSelection->AddArray((namesLst[elemI] + " - cellZone").c_str()); + arraySelection->AddArray + ( + (namesLst[elemI] + " - cellZone").c_str() + ); } - partInfoCellZones_ += namesLst.size(); + arrayRangeCellZones_ += namesLst.size(); // @@ -331,15 +342,15 @@ void Foam::vtkPV3Foam::updateInfoZones() namesLst = readZoneNames("faceZones"); } - partInfoFaceZones_ = partSelection->GetNumberOfArrays(); + arrayRangeFaceZones_.reset( arraySelection->GetNumberOfArrays() ); forAll(namesLst, elemI) { - partSelection->AddArray + arraySelection->AddArray ( (namesLst[elemI] + " - faceZone").c_str() ); } - partInfoFaceZones_ += namesLst.size(); + arrayRangeFaceZones_ += namesLst.size(); // @@ -354,28 +365,30 @@ void Foam::vtkPV3Foam::updateInfoZones() namesLst = readZoneNames("pointZones"); } - partInfoPointZones_ = partSelection->GetNumberOfArrays(); + arrayRangePointZones_.reset( arraySelection->GetNumberOfArrays() ); forAll(namesLst, elemI) { - partSelection->AddArray + arraySelection->AddArray ( (namesLst[elemI] + " - pointZone").c_str() ); } - partInfoPointZones_ += namesLst.size(); - + arrayRangePointZones_ += namesLst.size(); if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3Foam::updateInfoZones" << endl; } } -void Foam::vtkPV3Foam::updateInfoSets() +void Foam::vtkPV3Foam::updateInfoSets +( + vtkDataArraySelection* arraySelection +) { if (!reader_->GetIncludeSets()) { @@ -387,8 +400,6 @@ void Foam::vtkPV3Foam::updateInfoSets() Info<< "<beg> Foam::vtkPV3Foam::updateInfoSets" << endl; } - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); - // Add names of sets IOobjectList objects ( @@ -398,26 +409,26 @@ void Foam::vtkPV3Foam::updateInfoSets() ); - partInfoCellSets_ = partSelection->GetNumberOfArrays(); - partInfoCellSets_ += addToSelection<cellSet> + arrayRangeCellSets_.reset( arraySelection->GetNumberOfArrays() ); + arrayRangeCellSets_ += addToSelection<cellSet> ( - partSelection, + arraySelection, objects, " - cellSet" ); - partInfoFaceSets_ = partSelection->GetNumberOfArrays(); - partInfoFaceSets_ += addToSelection<faceSet> + arrayRangeFaceSets_.reset( arraySelection->GetNumberOfArrays() ); + arrayRangeFaceSets_ += addToSelection<faceSet> ( - partSelection, + arraySelection, objects, " - faceSet" ); - partInfoPointSets_ = partSelection->GetNumberOfArrays(); - partInfoPointSets_ += addToSelection<pointSet> + arrayRangePointSets_.reset( arraySelection->GetNumberOfArrays() ); + arrayRangePointSets_ += addToSelection<pointSet> ( - partSelection, + arraySelection, objects, " - pointSet" ); @@ -425,7 +436,7 @@ void Foam::vtkPV3Foam::updateInfoSets() if (debug) { // just for debug info - getSelectedArrayEntries(partSelection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3Foam::updateInfoSets" << endl; } @@ -440,26 +451,24 @@ void Foam::vtkPV3Foam::updateInfoLagrangianFields() << endl; } - vtkDataArraySelection *fieldSelection = + vtkDataArraySelection* fieldSelection = reader_->GetLagrangianFieldSelection(); // preserve the enabled selections stringList enabledEntries = getSelectedArrayEntries(fieldSelection); fieldSelection->RemoveAllArrays(); - // // TODO - currently only get fields from ONE cloud // have to decide if the second set of fields get mixed in // or dealt with separately - const partInfo& selector = partInfoLagrangian_; - int partId = selector.start(); - - if (!selector.size() || partId < 0) + const arrayRange& range = arrayRangeLagrangian_; + if (range.empty()) { return; } + int partId = range.start(); word cloudName = getPartName(partId); // use the db directly since this might be called without a mesh, diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H index 7e28460a465c74ffb690359aff588df63accc756..4d35525efe56f52e83c8c6e716c0a9b5abd14ec1 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H @@ -35,7 +35,7 @@ InClass template<template<class> class patchType, class meshType> void Foam::vtkPV3Foam::updateInfoFields ( - vtkDataArraySelection *select + vtkDataArraySelection* select ) { if (debug) @@ -112,4 +112,5 @@ void Foam::vtkPV3Foam::updateInfoFields // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C index a9d12c303a22b3ea023b3a1c72b23eafc448f09b..74a57fb5597a987c79e5323d2ed821ac291cc15d 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUtils.C @@ -69,18 +69,19 @@ namespace Foam } // End namespace Foam + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::vtkPV3Foam::AddToBlock ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const std::string& datasetName ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -116,7 +117,7 @@ void Foam::vtkPV3Foam::AddToBlock output->GetMetaData(blockNo)->Set ( vtkCompositeDataSet::NAME(), - selector.name() + range.name() ); } @@ -134,11 +135,11 @@ void Foam::vtkPV3Foam::AddToBlock vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -156,10 +157,10 @@ vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& selector + const arrayRange& range ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -172,7 +173,7 @@ Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets } -Foam::word Foam::vtkPV3Foam::getPartName(int partId) +Foam::word Foam::vtkPV3Foam::getPartName(const int partId) { return getFirstWord(reader_->GetPartArrayName(partId)); } @@ -201,13 +202,13 @@ Foam::wordHashSet Foam::vtkPV3Foam::getSelected Foam::wordHashSet Foam::vtkPV3Foam::getSelected ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { int nElem = select->GetNumberOfArrays(); wordHashSet selections(2*nElem); - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -261,13 +262,13 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { - stringList selections(selector.size()); + stringList selections(range.size()); label nElem = 0; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -280,7 +281,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries if (debug) { Info<< "available("; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { Info<< " \"" << select->GetArrayName(elemI) << "\""; } @@ -362,7 +363,7 @@ void Foam::vtkPV3Foam::printMemory() } } - Info << "memUsed: " << (memTotal - memFree) << " kB\n"; + Info<< "memUsed: " << (memTotal - memFree) << " kB\n"; } } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H index d5387be61f3e703d191d96c8640deccb7a4131b9..e28e3940a8c08e600ba664bdfa64d99d5a0bdd76 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H @@ -81,7 +81,7 @@ void Foam::vtkPV3Foam::convertVolFields tf, ptfPtr, output, - partInfoVolume_, + arrayRangeVolume_, regionPolyDecomp_ ); @@ -91,7 +91,7 @@ void Foam::vtkPV3Foam::convertVolFields tf, ptfPtr, output, - partInfoCellZones_, + arrayRangeCellZones_, zonePolyDecomp_ ); @@ -101,7 +101,7 @@ void Foam::vtkPV3Foam::convertVolFields tf, ptfPtr, output, - partInfoCellSets_, + arrayRangeCellSets_, csetPolyDecomp_ ); @@ -117,8 +117,8 @@ void Foam::vtkPV3Foam::convertVolFields for ( - int partId = partInfoPatches_.start(); - partId < partInfoPatches_.end(); + int partId = arrayRangePatches_.start(); + partId < arrayRangePatches_.end(); ++partId ) { @@ -155,7 +155,7 @@ void Foam::vtkPV3Foam::convertVolFields tf.name(), tpptf(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); @@ -164,7 +164,7 @@ void Foam::vtkPV3Foam::convertVolFields pointFldName, ppInterpList[patchId].faceToPointInterpolate(tpptf)(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); } @@ -175,7 +175,7 @@ void Foam::vtkPV3Foam::convertVolFields tf.name(), ptf, output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); @@ -184,7 +184,7 @@ void Foam::vtkPV3Foam::convertVolFields pointFldName, ppInterpList[patchId].faceToPointInterpolate(ptf)(), output, - partInfoPatches_, + arrayRangePatches_, datasetNo ); } @@ -195,8 +195,8 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int partId = partInfoFaceZones_.start(); - partId < partInfoFaceZones_.end(); + int partId = arrayRangeFaceZones_.start(); + partId < arrayRangeFaceZones_.end(); ++partId ) { @@ -220,7 +220,7 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - partInfoFaceZones_, + arrayRangeFaceZones_, datasetNo, mesh, zMesh[zoneId] @@ -234,8 +234,8 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int partId = partInfoFaceSets_.start(); - partId < partInfoFaceSets_.end(); + int partId = arrayRangeFaceSets_.start(); + partId < arrayRangeFaceSets_.end(); ++partId ) { @@ -253,7 +253,7 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - partInfoFaceSets_, + arrayRangeFaceSets_, datasetNo, mesh, fSet @@ -271,11 +271,11 @@ void Foam::vtkPV3Foam::convertVolFieldBlock const GeometricField<Type, fvPatchField, volMesh>& tf, autoPtr<GeometricField<Type, pointPatchField, pointMesh> >& ptfPtr, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const List<polyDecomp>& decompLst ) { - for (int partId = selector.start(); partId < selector.end(); ++partId) + for (int partId = range.start(); partId < range.end(); ++partId) { const label datasetNo = partDataset_[partId]; @@ -285,7 +285,7 @@ void Foam::vtkPV3Foam::convertVolFieldBlock ( tf, output, - selector, + range, datasetNo, decompLst[datasetNo] ); @@ -309,7 +309,7 @@ void Foam::vtkPV3Foam::convertVolFieldBlock ptfPtr(), tf, output, - selector, + range, datasetNo, decompLst[datasetNo] ); @@ -323,7 +323,7 @@ void Foam::vtkPV3Foam::convertVolField ( const GeometricField<Type, fvPatchField, volMesh>& tf, vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const polyDecomp& decompInfo ) @@ -359,7 +359,7 @@ void Foam::vtkPV3Foam::convertVolField vtkUnstructuredGrid::SafeDownCast ( - GetDataSetFromBlock(output, selector, datasetNo) + GetDataSetFromBlock(output, range, datasetNo) ) ->GetCellData() ->AddArray(celldata); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml index 2ac4774ff0de47f3e5dff9ec5a4cb01c8fb14434..b5bb304a652ff1eabd93d15c25a6e6e48ab270f1 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/PV3blockMeshReader_SM.xml @@ -43,34 +43,40 @@ </Documentation> </IntVectorProperty> - <!-- Selections --> - <!-- Available Parts (blocks) array --> + <!-- + | Selections + --> + + <!-- Available Blocks array --> <StringVectorProperty - name="PartArrayInfo" + name="BlockArrayStatus" information_only="1"> - <ArraySelectionInformationHelper attribute_name="Part"/> + <ArraySelectionInformationHelper attribute_name="Block"/> </StringVectorProperty> <StringVectorProperty - name="PartStatus" + name="BlockStatus" label="Blocks" - command="SetPartArrayStatus" + command="SetBlockArrayStatus" number_of_elements="0" repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="PartArrayInfo" + information_property="BlockArrayStatus" animateable="0"> <ArraySelectionDomain name="array_list"> <RequiredProperties> - <Property name="PartArrayInfo" function="ArrayList"/> + <Property name="BlockArrayStatus" function="ArrayList"/> </RequiredProperties> </ArraySelectionDomain> + <Documentation> + This property contains a list of the blocks + </Documentation> </StringVectorProperty> - <!-- Available Parts (blocks) array --> + <!-- Available CurvedEdges array --> <StringVectorProperty - name="CurvedEdgesArrayInfo" + name="CurvedEdgesArrayStatus" information_only="1"> <ArraySelectionInformationHelper attribute_name="CurvedEdges"/> </StringVectorProperty> @@ -82,13 +88,16 @@ repeat_command="1" number_of_elements_per_command="2" element_types="2 0" - information_property="CurvedEdgesArrayInfo" + information_property="CurvedEdgesArrayStatus" animateable="0"> <ArraySelectionDomain name="array_list"> <RequiredProperties> - <Property name="CurvedEdgesArrayInfo" function="ArrayList"/> + <Property name="CurvedEdgesArrayStatus" function="ArrayList"/> </RequiredProperties> </ArraySelectionDomain> + <Documentation> + This property contains a list of the curved edges + </Documentation> </StringVectorProperty> <Hints> diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx index 8114a1470907a46c4976aad1812e7ccc997a4613..6a56583134674e8a02e33401494e43a0f28469b1 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.cxx @@ -32,9 +32,10 @@ License #include <QLabel> #include <QLayout> #include <QString> +#include <QPushButton> #include <QtDebug> -// Paraview<->QT UI +// Paraview <-> QT UI #include "pqAnimationScene.h" #include "pqApplicationCore.h" #include "pqPipelineRepresentation.h" @@ -56,34 +57,35 @@ pqPV3blockMeshReaderPanel::pqPV3blockMeshReaderPanel QWidget *p ) : - pqAutoGeneratedObjectPanel(proxy, p), - sourceProxy_(vtkSMSourceProxy::SafeDownCast(this->proxy())) + pqAutoGeneratedObjectPanel(proxy, p) { // create first sublayout (at top of the panel) - QGridLayout *sect1 = new QGridLayout(); - this->PanelLayout->addLayout(sect1, 0, 0, 1, -1); - + QGridLayout *form = new QGridLayout(); + this->PanelLayout->addLayout(form, 0, 0, 1, -1); + vtkSMProperty* prop = 0; // checkbox for showing point numbers - ShowPointNumbers_ = new QCheckBox("Show Point Numbers"); - ShowPointNumbers_->setChecked(true); - - connect - ( - ShowPointNumbers_, - SIGNAL(stateChanged(int)), - this, - SLOT(ShowPointNumbersToggled()) - ); - - sect1->addWidget(ShowPointNumbers_); - - - // immediate update on the Server Manager side - vtkSMIntVectorProperty::SafeDownCast - ( - sourceProxy_->GetProperty("UiShowPointNumbers") - )->SetImmediateUpdate(true); + if ((prop = this->proxy()->GetProperty("UiShowPointNumbers")) != 0) + { + prop->SetImmediateUpdate(true); + + ShowPointNumbers_ = new QCheckBox("Show Point Numbers"); + ShowPointNumbers_->setToolTip("Show point numbers in render window."); + ShowPointNumbers_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + + form->addWidget(ShowPointNumbers_); + + connect + ( + ShowPointNumbers_, + SIGNAL(stateChanged(int)), + this, + SLOT(ShowPointNumbersToggled()) + ); + } } @@ -93,7 +95,7 @@ void pqPV3blockMeshReaderPanel::ShowPointNumbersToggled() { vtkSMIntVectorProperty::SafeDownCast ( - sourceProxy_->GetProperty("UiShowPointNumbers") + this->proxy()->GetProperty("UiShowPointNumbers") )->SetElement(0, ShowPointNumbers_->isChecked()); // update the active view diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h index 8096338315ec3532e5abc15c9b44916ae53c8998..0b1929af6d88beaae86a7d1cec93ccc6bc7e41c0 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/pqPV3blockMeshReaderPanel.h @@ -62,9 +62,6 @@ class pqPV3blockMeshReaderPanel Q_OBJECT; typedef pqAutoGeneratedObjectPanel Superclass; - //- Server Manager Source Proxy - vtkSMSourceProxy* sourceProxy_; - //- Show Point Numbers checkbox QCheckBox* ShowPointNumbers_; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx index bf17a60ca314c90c312c14cd57de55ba5ff261e9..52239e388666e2cf1f15fe67eb512ec5113c0799 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.cxx @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,7 +64,7 @@ vtkPV3blockMeshReader::vtkPV3blockMeshReader() ShowPointNumbers = 1; UpdateGUI = 0; - PartSelection = vtkDataArraySelection::New(); + BlockSelection = vtkDataArraySelection::New(); CurvedEdgesSelection = vtkDataArraySelection::New(); // Setup the selection callback to modify this object when an array @@ -77,7 +77,7 @@ vtkPV3blockMeshReader::vtkPV3blockMeshReader() SelectionObserver->SetClientData(this); - PartSelection->AddObserver + BlockSelection->AddObserver ( vtkCommand::ModifiedEvent, this->SelectionObserver @@ -109,11 +109,11 @@ vtkPV3blockMeshReader::~vtkPV3blockMeshReader() delete [] FileName; } - PartSelection->RemoveObserver(this->SelectionObserver); + BlockSelection->RemoveObserver(this->SelectionObserver); CurvedEdgesSelection->RemoveObserver(this->SelectionObserver); SelectionObserver->Delete(); - PartSelection->Delete(); + BlockSelection->Delete(); } @@ -292,50 +292,50 @@ void vtkPV3blockMeshReader::PrintSelf(ostream& os, vtkIndent indent) // ---------------------------------------------------------------------- -// Parts selection list control +// Block selection list control -vtkDataArraySelection* vtkPV3blockMeshReader::GetPartSelection() +vtkDataArraySelection* vtkPV3blockMeshReader::GetBlockSelection() { - vtkDebugMacro(<<"GetPartSelection"); - return PartSelection; + vtkDebugMacro(<<"GetBlockSelection"); + return BlockSelection; } -int vtkPV3blockMeshReader::GetNumberOfPartArrays() +int vtkPV3blockMeshReader::GetNumberOfBlockArrays() { - vtkDebugMacro(<<"GetNumberOfPartArrays"); - return PartSelection->GetNumberOfArrays(); + vtkDebugMacro(<<"GetNumberOfBlockArrays"); + return BlockSelection->GetNumberOfArrays(); } -const char* vtkPV3blockMeshReader::GetPartArrayName(int index) +const char* vtkPV3blockMeshReader::GetBlockArrayName(int index) { - vtkDebugMacro(<<"GetPartArrayName"); - return PartSelection->GetArrayName(index); + vtkDebugMacro(<<"GetBlockArrayName"); + return BlockSelection->GetArrayName(index); } -int vtkPV3blockMeshReader::GetPartArrayStatus(const char* name) +int vtkPV3blockMeshReader::GetBlockArrayStatus(const char* name) { - vtkDebugMacro(<<"GetPartArrayStatus"); - return PartSelection->ArrayIsEnabled(name); + vtkDebugMacro(<<"GetBlockArrayStatus"); + return BlockSelection->ArrayIsEnabled(name); } -void vtkPV3blockMeshReader::SetPartArrayStatus +void vtkPV3blockMeshReader::SetBlockArrayStatus ( const char* name, int status ) { - vtkDebugMacro(<<"SetPartArrayStatus"); + vtkDebugMacro(<<"SetBlockArrayStatus"); if (status) { - PartSelection->EnableArray(name); + BlockSelection->EnableArray(name); } else { - PartSelection->DisableArray(name); + BlockSelection->DisableArray(name); } } @@ -399,14 +399,7 @@ void vtkPV3blockMeshReader::SelectionModifiedCallback void* ) { - static_cast<vtkPV3blockMeshReader*>(clientdata)->SelectionModified(); -} - - -void vtkPV3blockMeshReader::SelectionModified() -{ - vtkDebugMacro(<<"SelectionModified"); - Modified(); + static_cast<vtkPV3blockMeshReader*>(clientdata)->Modified(); } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h index ae704d4a3be6f9a011b796c032a88837ab8295a1..d1679507d356ac8f4541b18afdbb0052858964d4 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/PV3blockMeshReader/vtkPV3blockMeshReader.h @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -84,15 +84,15 @@ public: // Description: - // Parts (blocks) selection list control - vtkDataArraySelection* GetPartSelection(); - int GetNumberOfPartArrays(); - int GetPartArrayStatus(const char*); - void SetPartArrayStatus(const char*, int status); - const char* GetPartArrayName(int index); + // Blocks selection list control + vtkDataArraySelection* GetBlockSelection(); + int GetNumberOfBlockArrays(); + int GetBlockArrayStatus(const char*); + void SetBlockArrayStatus(const char*, int status); + const char* GetBlockArrayName(int index); // Description: - // Parts (blocks) selection list control + // CurvedEdges selection list control vtkDataArraySelection* GetCurvedEdgesSelection(); int GetNumberOfCurvedEdgesArrays(); int GetCurvedEdgesArrayStatus(const char*); @@ -110,8 +110,6 @@ public: void* calldata ); - void SelectionModified(); - protected: @@ -164,7 +162,7 @@ private: //- Dummy variable/switch to invoke a reader update int UpdateGUI; - vtkDataArraySelection* PartSelection; + vtkDataArraySelection* BlockSelection; vtkDataArraySelection* CurvedEdgesSelection; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C index e9d36ec91eee61a8a67473b68656d0bd393cad32..01e75e95a7dff70237343e8c90941449a753c688 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,13 +49,16 @@ defineTypeNameAndDebug(Foam::vtkPV3blockMesh, 0); void Foam::vtkPV3blockMesh::resetCounters() { // Reset mesh part ids and sizes - partInfoBlocks_.reset(); - partInfoEdges_.reset(); - partInfoCorners_.reset(); + arrayRangeBlocks_.reset(); + arrayRangeEdges_.reset(); + arrayRangeCorners_.reset(); } -void Foam::vtkPV3blockMesh::updateInfoBlocks() +void Foam::vtkPV3blockMesh::updateInfoBlocks +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -63,8 +66,7 @@ void Foam::vtkPV3blockMesh::updateInfoBlocks() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* selection = reader_->GetPartSelection(); - partInfoBlocks_ = selection->GetNumberOfArrays(); + arrayRangeBlocks_.reset( arraySelection->GetNumberOfArrays() ); const blockMesh& blkMesh = *meshPtr_; const int nBlocks = blkMesh.size(); @@ -81,22 +83,25 @@ void Foam::vtkPV3blockMesh::updateInfoBlocks() } // Add blockId and zoneName to GUI list - selection->AddArray(partName.c_str()); + arraySelection->AddArray(partName.c_str()); } - partInfoBlocks_ += nBlocks; + arrayRangeBlocks_ += nBlocks; if (debug) { // just for debug info - getSelectedArrayEntries(selection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3blockMesh::updateInfoBlocks" << endl; } } -void Foam::vtkPV3blockMesh::updateInfoEdges() +void Foam::vtkPV3blockMesh::updateInfoEdges +( + vtkDataArraySelection* arraySelection +) { if (debug) { @@ -104,8 +109,7 @@ void Foam::vtkPV3blockMesh::updateInfoEdges() << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection* selection = reader_->GetCurvedEdgesSelection(); - partInfoEdges_ = selection->GetNumberOfArrays(); + arrayRangeEdges_.reset( arraySelection->GetNumberOfArrays() ); const blockMesh& blkMesh = *meshPtr_; const curvedEdgeList& edges = blkMesh.edges(); @@ -119,15 +123,15 @@ void Foam::vtkPV3blockMesh::updateInfoEdges() << edges[edgeI].type(); // Add "beg:end - type" to GUI list - selection->AddArray(ostr.str().c_str()); + arraySelection->AddArray(ostr.str().c_str()); } - partInfoEdges_ += nEdges; + arrayRangeEdges_ += nEdges; if (debug) { // just for debug info - getSelectedArrayEntries(selection); + getSelectedArrayEntries(arraySelection); Info<< "<end> Foam::vtkPV3blockMesh::updateInfoEdges" << endl; } @@ -145,9 +149,9 @@ Foam::vtkPV3blockMesh::vtkPV3blockMesh reader_(reader), dbPtr_(NULL), meshPtr_(NULL), - partInfoBlocks_("block"), - partInfoEdges_("edges"), - partInfoCorners_("corners") + arrayRangeBlocks_("block"), + arrayRangeEdges_("edges"), + arrayRangeCorners_("corners") { if (debug) { @@ -243,7 +247,7 @@ void Foam::vtkPV3blockMesh::updateInfo() resetCounters(); - vtkDataArraySelection* partSelection = reader_->GetPartSelection(); + vtkDataArraySelection* blockSelection = reader_->GetBlockSelection(); vtkDataArraySelection* edgeSelection = reader_->GetCurvedEdgesSelection(); // enable 'internalMesh' on the first call @@ -251,33 +255,33 @@ void Foam::vtkPV3blockMesh::updateInfo() stringList enabledParts; stringList enabledEdges; bool firstTime = false; - if (!partSelection->GetNumberOfArrays() && !meshPtr_) + if (!blockSelection->GetNumberOfArrays() && !meshPtr_) { firstTime = true; } else { - enabledParts = getSelectedArrayEntries(partSelection); + enabledParts = getSelectedArrayEntries(blockSelection); enabledEdges = getSelectedArrayEntries(edgeSelection); } // Clear current mesh parts list - partSelection->RemoveAllArrays(); + blockSelection->RemoveAllArrays(); edgeSelection->RemoveAllArrays(); // need a blockMesh updateFoamMesh(); // Update mesh parts list - updateInfoBlocks(); + updateInfoBlocks( blockSelection ); // Update curved edges list - updateInfoEdges(); + updateInfoEdges( edgeSelection ); // restore the enabled selections if (!firstTime) { - setSelectedArrayEntries(partSelection, enabledParts); + setSelectedArrayEntries(blockSelection, enabledParts); setSelectedArrayEntries(edgeSelection, enabledEdges); } @@ -337,7 +341,7 @@ void Foam::vtkPV3blockMesh::Update reader_->UpdateProgress(0.1); // Set up mesh parts selection(s) - updateBoolListStatus(partStatus_, reader_->GetPartSelection()); + updateBoolListStatus(blockStatus_, reader_->GetBlockSelection()); // Set up curved edges selection(s) updateBoolListStatus(edgeStatus_, reader_->GetCurvedEdgesSelection()); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H index a159b3cba58978185c46eebdfb8d5579996ce2df..656567ebda77899bf6162d345f3aa3ba65890046 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMesh.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -88,7 +88,7 @@ class vtkPV3blockMesh // Private classes //- Bookkeeping for GUI checklists and the multi-block organization - class partInfo + class arrayRange { const char *name_; int block_; @@ -97,11 +97,11 @@ class vtkPV3blockMesh public: - partInfo(const char *name, const int blockNo=0) + arrayRange(const char *name, const int blockNo=0) : name_(name), block_(blockNo), - start_(-1), + start_(0), size_(0) {} @@ -119,21 +119,25 @@ class vtkPV3blockMesh return prev; } + //- Return block name const char* name() const { return name_; } + //- Return array start index int start() const { return start_; } + //- Return array end index int end() const { return start_ + size_; } + //- Return sublist size int size() const { return size_; @@ -144,16 +148,10 @@ class vtkPV3blockMesh return !size_; } - void reset() + //- Reset the size to zero and optionally assign a new start + void reset(const int startAt = 0) { - start_ = -1; - size_ = 0; - } - - //- Assign new start and reset the size - void operator=(const int i) - { - start_ = i; + start_ = startAt; size_ = 0; } @@ -177,22 +175,20 @@ class vtkPV3blockMesh blockMesh* meshPtr_; //- Selected geometrical parts - boolList partStatus_; + boolList blockStatus_; //- Selected curved edges boolList edgeStatus_; //- First instance and size of bleckMesh blocks - // used to index into partStatus_ - partInfo partInfoBlocks_; + // used to index into blockStatus_ + arrayRange arrayRangeBlocks_; - //- First instance and size of CurvedEdges - // only partially used - partInfo partInfoEdges_; + //- First instance and size of CurvedEdges (only partially used) + arrayRange arrayRangeEdges_; - //- First instance and size of block corners - // only partially used - partInfo partInfoCorners_; + //- First instance and size of block corners (only partially used) + arrayRange arrayRangeCorners_; //- List of point numbers for rendering to window List<vtkTextActor*> pointNumberTextActorsPtrs_; @@ -205,7 +201,7 @@ class vtkPV3blockMesh ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo&, + const arrayRange&, const label datasetNo, const std::string& datasetName ); @@ -215,7 +211,7 @@ class vtkPV3blockMesh static vtkDataSet* GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo&, + const arrayRange&, const label datasetNo ); @@ -224,7 +220,7 @@ class vtkPV3blockMesh static label GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& + const arrayRange& ); //- Update boolList from GUI selection @@ -240,10 +236,10 @@ class vtkPV3blockMesh // Update information helper functions //- Internal block info - void updateInfoBlocks(); + void updateInfoBlocks(vtkDataArraySelection*); //- block curved edges info - void updateInfoEdges(); + void updateInfoEdges(vtkDataArraySelection*); // Update helper functions @@ -271,7 +267,7 @@ class vtkPV3blockMesh static wordHashSet getSelected ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Retrieve the current selections @@ -281,7 +277,7 @@ class vtkPV3blockMesh static stringList getSelectedArrayEntries ( vtkDataArraySelection*, - const partInfo& + const arrayRange& ); //- Set selection(s) diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C index 4f76f5ebf2225f4c4915a3aa352052dc796b1d31..b6858ea3bff74b4c8e7014aaddf7c4f1fea305a5 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,9 +52,9 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks int& blockNo ) { - vtkDataArraySelection* selection = reader_->GetPartSelection(); - partInfo& selector = partInfoBlocks_; - selector.block(blockNo); // set output block + vtkDataArraySelection* selection = reader_->GetBlockSelection(); + arrayRange& range = arrayRangeBlocks_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const blockMesh& blkMesh = *meshPtr_; @@ -70,25 +70,18 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks for ( - int partId = selector.start(); - partId < selector.end(); + int partId = range.start(); + partId < range.end(); ++partId, ++blockI ) { - if (!partStatus_[partId]) + if (!blockStatus_[partId]) { continue; } const blockDescriptor& blockDef = blkMesh[blockI].blockDef(); - word partName("block"); - -// // append the (optional) zone name -// if (!blockDef.zoneName().empty()) -// { -// partName += " - " + blockDef.zoneName(); -// } -// + vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New(); // Convert Foam mesh vertices to VTK @@ -123,7 +116,7 @@ void Foam::vtkPV3blockMesh::convertMeshBlocks AddToBlock ( - output, vtkmesh, selector, datasetNo, + output, vtkmesh, range, datasetNo, selection->GetArrayName(partId) ); @@ -152,9 +145,9 @@ void Foam::vtkPV3blockMesh::convertMeshEdges ) { vtkDataArraySelection* selection = reader_->GetCurvedEdgesSelection(); - partInfo& selector = partInfoEdges_; + arrayRange& range = arrayRangeEdges_; - selector.block(blockNo); // set output block + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const blockMesh& blkMesh = *meshPtr_; @@ -165,8 +158,8 @@ void Foam::vtkPV3blockMesh::convertMeshEdges for ( - int partId = selector.start(); - partId < selector.end(); + int partId = range.start(); + partId < range.end(); ++partId, ++edgeI ) { @@ -187,9 +180,7 @@ void Foam::vtkPV3blockMesh::convertMeshEdges edgeList blkEdges = blockDef.blockShape().edges(); - // find the corresponding edge within the block - label foundEdgeI = -1; forAll(blkEdges, blkEdgeI) { @@ -236,7 +227,7 @@ void Foam::vtkPV3blockMesh::convertMeshEdges AddToBlock ( - output, vtkmesh, selector, datasetNo, + output, vtkmesh, range, datasetNo, selection->GetArrayName(partId) ); @@ -269,8 +260,8 @@ void Foam::vtkPV3blockMesh::convertMeshCorners int& blockNo ) { - partInfo& selector = partInfoCorners_; - selector.block(blockNo); // set output block + arrayRange& range = arrayRangeCorners_; + range.block(blockNo); // set output block label datasetNo = 0; // restart at dataset 0 const pointField& blockPoints = meshPtr_->blockPointField(); @@ -310,7 +301,11 @@ void Foam::vtkPV3blockMesh::convertMeshCorners vtkmesh->SetVerts(vtkcells); vtkcells->Delete(); - AddToBlock(output, vtkmesh, selector, datasetNo, partInfoCorners_.name()); + AddToBlock + ( + output, vtkmesh, range, datasetNo, + arrayRangeCorners_.name() + ); vtkmesh->Delete(); datasetNo++; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C index bde724d9a7fee2c9d90c18d6768b9b5648ec1501..c02de1d0c8015fabf9f4cb2f9d55b1fdea431053 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshUtils.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -71,12 +71,12 @@ void Foam::vtkPV3blockMesh::AddToBlock ( vtkMultiBlockDataSet* output, vtkDataSet* dataset, - const partInfo& selector, + const arrayRange& range, const label datasetNo, const std::string& datasetName ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -112,7 +112,7 @@ void Foam::vtkPV3blockMesh::AddToBlock output->GetMetaData(blockNo)->Set ( vtkCompositeDataSet::NAME(), - selector.name() + range.name() ); } @@ -130,11 +130,11 @@ void Foam::vtkPV3blockMesh::AddToBlock vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock ( vtkMultiBlockDataSet* output, - const partInfo& selector, + const arrayRange& range, const label datasetNo ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -152,10 +152,10 @@ vtkDataSet* Foam::vtkPV3blockMesh::GetDataSetFromBlock Foam::label Foam::vtkPV3blockMesh::GetNumberOfDataSets ( vtkMultiBlockDataSet* output, - const partInfo& selector + const arrayRange& range ) { - const int blockNo = selector.block(); + const int blockNo = range.block(); vtkDataObject* blockDO = output->GetBlock(blockNo); vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO); @@ -191,13 +191,13 @@ Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected Foam::wordHashSet Foam::vtkPV3blockMesh::getSelected ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { int nElem = select->GetNumberOfArrays(); wordHashSet selections(2*nElem); - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -251,13 +251,13 @@ Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries ( vtkDataArraySelection* select, - const partInfo& selector + const arrayRange& range ) { - stringList selections(selector.size()); + stringList selections(range.size()); label nElem = 0; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { if (select->GetArraySetting(elemI)) { @@ -270,7 +270,7 @@ Foam::stringList Foam::vtkPV3blockMesh::getSelectedArrayEntries if (debug) { Info<< "available("; - for (int elemI = selector.start(); elemI < selector.end(); ++elemI) + for (int elemI = range.start(); elemI < range.end(); ++elemI) { Info<< " \"" << select->GetArrayName(elemI) << "\""; } diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H index ce9277dceab5987c27ded660d0be8f36d1d16007..6a47c6ecf29900449c93411bc0f236a43398b257 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_bkup.H @@ -7,7 +7,7 @@ int USERD_bkup int backup_type) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_bkup" << endl + Info<< "Entering: USERD_bkup" << endl << flush; #endif return Z_ERR; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H index d00b5de8bbb114d098710e66a0004a3b4894e595..b6fdf9c2c46d7b859f55aa7926a6e5a608aed0bb 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_exit_routine.H @@ -5,7 +5,7 @@ void USERD_exit_routine ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_exit_routine" << endl + Info<< "Entering: USERD_exit_routine" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H index 39399cf9eaab248df90a19e18c8332ada08126c8..5ea3202b8ce5d8b72b850148527a927c6b89eb5d 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_availability.H @@ -8,8 +8,8 @@ int USERD_get_border_availability ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_border_availability for part_number " - << part_number << endl + Info<< "Entering: USERD_get_border_availability for part_number " + << part_number << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H index e4f75704b0a032529934a1e7c19aaa3c52f93529..29536014be42f741099ed1a634a8716cdb7c68f1 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_border_elements_by_type.H @@ -11,7 +11,7 @@ int USERD_get_border_elements_by_type ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_border_elements_by_type" << endl + Info<< "Entering: USERD_get_border_elements_by_type" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H index 9b0970f3d9044ecf028146e1a363cbfff92c4fbe..2df1e6a7617c6538a944abd17bd7ba764551ad0e 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_changing_geometry_status.H @@ -2,7 +2,7 @@ int USERD_get_changing_geometry_status(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_changing_geometry_status" << endl << flush; + Info<< "Entering: USERD_get_changing_geometry_status" << endl << flush; #endif // Choose the most general option diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H index 1b87e2c8a907ff54d9a5721510ede54e3ca02caa..d14dc7a17a5bad0871280153e66098d3feafda9e 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_constant_val.H @@ -9,7 +9,7 @@ float USERD_get_constant_val ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_constant_val" << endl << flush; + Info<< "Entering: USERD_get_constant_val" << endl << flush; #endif return 0.0; } diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H index 3de57267f0e376a2476e60109a07e820c270d1fe..1076d2de38d8268db29aec707221e5da54daaf70 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_descrip_lines.H @@ -9,7 +9,7 @@ int USERD_get_descrip_lines ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_descrip_lines" << endl + Info<< "Entering: USERD_get_descrip_lines" << endl << flush; #endif @@ -24,7 +24,7 @@ int USERD_get_descrip_lines } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_descrip_lines" << endl + Info<< "Leaving: USERD_get_descrip_lines" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H index 3aae59c84e54a0702ced1790612d4c8178d9c47e..d65e7bad70f2d1261c65daa878cd5a7f9769d2ea 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_element_label_status.H @@ -4,7 +4,7 @@ int USERD_get_element_label_status(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_element_label_status" << endl << flush; + Info<< "Entering: USERD_get_element_label_status" << endl << flush; #endif return TRUE; } diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H index 59dd293f51607f4843cf9ef7da5e047f26d518b6..9b0df36a20d98efcf6ed9ec24d812ef9f5a44f7d 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_geom_timeset_number.H @@ -4,7 +4,7 @@ int USERD_get_geom_timeset_number ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_geom_timeset_number" << endl + Info<< "Entering: USERD_get_geom_timeset_number" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H index ca8da4727c38987c580690e034236a4d09e60054..3d278c03675119d899014a6dd415d084999a5360 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_part_build_info.H @@ -13,7 +13,7 @@ int USERD_get_gold_part_build_info ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_gold_part_build_info" << endl << flush; + Info<< "Entering: USERD_get_gold_part_build_info" << endl << flush; #endif //# include "checkForNewMesh.H" @@ -32,7 +32,7 @@ int USERD_get_gold_part_build_info strncpy(part_descriptions[0], meshName, Z_BUFL); - for(label i=0; i<nPatches; i++) + for (label i=0; i<nPatches; i++) { word patchName(meshPtr->boundary()[i].name()); strncpy(part_descriptions[i+1], patchName.c_str(), Z_BUFL); @@ -93,18 +93,18 @@ int USERD_get_gold_part_build_info number_of_elements[0][Z_NFACED] = nFaced; /* - Info << "nTet04 = " << nTet04 << endl; - Info << "nPyr05 = " << nPyr05 << endl; - Info << "nHex08 = " << nHex08 << endl; - Info << "nPen06 = " << nPen06 << endl; - Info << "nFaced = " << nFaced << endl; + Info<< "nTet04 = " << nTet04 << endl; + Info<< "nPyr05 = " << nPyr05 << endl; + Info<< "nHex08 = " << nHex08 << endl; + Info<< "nPen06 = " << nPen06 << endl; + Info<< "nFaced = " << nFaced << endl; */ number_of_nodes[0] = meshPtr->nPoints(); const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); - for(label i=0; i<nPatches; i++) + for (label i=0; i<nPatches; i++) { label nTri03 = 0; label nQuad04 = 0; @@ -148,7 +148,7 @@ int USERD_get_gold_part_build_info } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_gold_part_build_info" << endl << flush; + Info<< "Leaving: USERD_get_gold_part_build_info" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H index 7a17f74f0fdb52ec23033731e818d26c45bb7215..91c205b0b5b60cc852c45c8e163b64c77c1c7512 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_gold_variable_info.H @@ -15,7 +15,7 @@ int USERD_get_gold_variable_info ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_gold_variable_info" << endl + Info<< "Entering: USERD_get_gold_variable_info" << endl << flush; #endif @@ -112,7 +112,7 @@ int USERD_get_gold_variable_info } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_gold_variable_info" << endl + Info<< "Leaving: USERD_get_gold_variable_info" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H index 87b3af93f4c73a5dd7373599cedefc7cb9baf2e9..8f1b417ee473d348ca5cf9d76d231422a667cc66 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_set_info.H @@ -6,7 +6,7 @@ int USERD_get_matf_set_info ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_matf_set_info" << endl + Info<< "Entering: USERD_get_matf_set_info" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H index 980415b76edd2d9fb193d6d397fc052ad9c6fd7e..9f4bf9c8cd0296cb75339c571b2ff83e02afc877 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_matf_var_info.H @@ -7,7 +7,7 @@ int USERD_get_matf_var_info ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_matf_var_info" << endl + Info<< "Entering: USERD_get_matf_var_info" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H index 7c4ef69a4fd06f91e26a2ce00cefdae159743af5..c47d153f9626b5c921675633b7e080c93503e95d 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_maxsize_info.H @@ -5,10 +5,10 @@ int USERD_get_maxsize_info int *max_ijk_dimensions[3] ) { - return Z_ERR; + return Z_ERR; #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_maxsize_info" << endl; + Info<< "Entering: USERD_get_maxsize_info" << endl; #endif label maxNPoints = 0; @@ -34,10 +34,10 @@ int USERD_get_maxsize_info Info<< "Checking time = " << runTimePtr->timeName() << endl; const cellShapeList& cells = meshPtr->cellShapes(); - + const label nPoints = meshPtr->nPoints(); const label nCells = cells.size(); - + maxNPoints = max(maxNPoints, nPoints); for (label n=0; n<nCells;n++) diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H index c65fa09691bcb46b25afd43f8638b6157031d43d..b78438ae7d70e36a5b18e2dd3c9b56dcc7c93379 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_model_extents.H @@ -7,7 +7,7 @@ int USERD_get_model_extents ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_model_extents" << endl + Info<< "Entering: USERD_get_model_extents" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H index eceaf3cb9c903d9bf20b5eaaef0f6548c3921376..c055407b534cabf180ba87d09a85db9228d63ca8 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_name_of_reader.H @@ -8,7 +8,7 @@ int USERD_get_name_of_reader ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_name_of_reader" << endl << flush; + Info<< "Entering: USERD_get_name_of_reader" << endl << flush; #endif strncpy(reader_name, readerName, Z_MAX_USERD_NAME); diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H index 20e4b4b62bf0048e13d5af6a2185c39d0e046185..436d68d2591796cf55892afdc489faf3f8f97cd4 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_conn.H @@ -6,9 +6,9 @@ int USERD_get_nfaced_conn ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_nfaced_conn" + Info<< "Entering: USERD_get_nfaced_conn" << ", part_number = " << part_number - << endl + << endl << flush; #endif @@ -36,11 +36,11 @@ int USERD_get_nfaced_conn {} else { - for(label i=0; i<nFacesInCell; i++) + for (label i=0; i<nFacesInCell; i++) { label facei = cells[n][i]; label nPoints = faces[facei].size(); - for(label j=0; j<nPoints; j++) + for (label j=0; j<nPoints; j++) { nfaced_conn_array[nPoint++] = faces[facei][j] + 1; } @@ -49,22 +49,22 @@ int USERD_get_nfaced_conn } else { - for(label i=0; i<nFacesInCell; i++) + for (label i=0; i<nFacesInCell; i++) { label facei = cells[n][i]; label nPoints = faces[facei].size(); - for(label j=0; j<nPoints; j++) + for (label j=0; j<nPoints; j++) { nfaced_conn_array[nPoint++] = faces[facei][j] + 1; } } } } - + } else if (part_number < nPatches+2) { - + } else { @@ -72,7 +72,7 @@ int USERD_get_nfaced_conn } #ifdef ENSIGHTDEBUG - Info << "Exiting: USERD_get_nfaced_conn" << endl + Info<< "Exiting: USERD_get_nfaced_conn" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H index 9fd57aa82ab9e52deb519ba86070d20745f2b5cb..335f928516a0f92fc2aa0b0f7f2df0fc5aaa151f 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nfaced_nodes_per_face.H @@ -6,9 +6,9 @@ int USERD_get_nfaced_nodes_per_face ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_nfaced_nodes_per_face" + Info<< "Entering: USERD_get_nfaced_nodes_per_face" << ", part_number = " << part_number - << endl + << endl << flush; #endif @@ -38,7 +38,7 @@ int USERD_get_nfaced_nodes_per_face {} else { - for(label i=0; i<nFacesInCell; i++) + for (label i=0; i<nFacesInCell; i++) { label facei = cells[n][i]; label nFacePoints = faces[facei].size(); @@ -48,7 +48,7 @@ int USERD_get_nfaced_nodes_per_face } else { - for(label i=0; i<nFacesInCell; i++) + for (label i=0; i<nFacesInCell; i++) { label facei = cells[n][i]; label nFacePoints = faces[facei].size(); @@ -56,7 +56,7 @@ int USERD_get_nfaced_nodes_per_face } } } - + } else if (part_number < nPatches+2) { @@ -67,7 +67,7 @@ int USERD_get_nfaced_nodes_per_face return Z_ERR; } #ifdef ENSIGHTDEBUG - Info << "Exiting: USERD_get_nfaced_nodes_per_face" << endl + Info<< "Exiting: USERD_get_nfaced_nodes_per_face" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H index f45f20e63abd809c7a3c6bd11cdaf8800dad67dc..65791f70f7256e5983fe4bdf6d36f71b54a04cc2 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_node_label_status.H @@ -4,7 +4,7 @@ int USERD_get_node_label_status(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_node_label_status" << endl << flush; + Info<< "Entering: USERD_node_label_status" << endl << flush; #endif return TRUE; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H index 370fb341adb77210fe88ddb2e9ac768e844fe866..c99361c3fb077e25fee9eab4e8077e717be36e3d 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_nsided_conn.H @@ -2,18 +2,18 @@ int USERD_get_nsided_conn ( int part_number, - int *nsided_conn_array + int *nsided_conn_array ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_nsided_conn" + Info<< "Entering: USERD_get_nsided_conn" << ", part_number = " << part_number - << endl + << endl << flush; #endif if (part_number == 1) { - Info << "************* EEEEEEEEERRRRRRRRRRRRRRRRRR *************** " << endl << flush; + Info<< "************* EEEEEEEEERRRRRRRRRRRRRRRRRR *************** " << endl << flush; } else if (part_number < nPatches+2) @@ -30,7 +30,7 @@ int USERD_get_nsided_conn label nPoints = bMesh[patchi][facei].size(); if ((nPoints != 3) && (nPoints != 4)) { - for(label i=0; i<nPoints; i++) + for (label i=0; i<nPoints; i++) { nsided_conn_array[np++] = bMesh[patchi][facei][i] + 1; } @@ -42,7 +42,7 @@ int USERD_get_nsided_conn return Z_ERR; } #ifdef ENSIGHTDEBUG - Info << "Exiting: USERD_get_nsided_conn" << endl + Info<< "Exiting: USERD_get_nsided_conn" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H index f780b95c40ff5cb0053b97ae92adc834346d49d1..37a1a5c06e00f54e94f085332cdc59def3702e3c 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_num_of_time_steps.H @@ -7,7 +7,7 @@ int USERD_get_num_of_time_steps ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_num_of_time_steps" << endl + Info<< "Entering: USERD_get_num_of_time_steps" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H index ac426a7ee0bf8894fd882fedaab0fce544c4af51..e2246d27daa838dacb82e533372200132f7e6936 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_files_in_dataset.H @@ -1,10 +1,10 @@ //====================================================================== -// +// //====================================================================== int USERD_get_number_of_files_in_dataset(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_number_of_files_in_dataset" << endl << flush; + Info<< "Entering: USERD_get_number_of_files_in_dataset" << endl << flush; #endif // use 1 insted of 0 which gives an un-necessary warning. diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H index 39feab9bce5853bae6b16041a7acfc278db35575..f8a0477645515bcae9742a5c772a4556df075bce 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_material_sets.H @@ -1,14 +1,14 @@ int USERD_get_number_of_material_sets -( - void +( + void ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_number_of_material_sets" << endl + Info<< "Entering: USERD_get_number_of_material_sets" << endl << flush; #endif // No materials - return 0; + return 0; } diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H index 8e97d2f1c6edef64921ead7235f3948582f0b93e..98162b2e11f45d727fd6d6cd4d2d0a0bb67d019c 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_materials.H @@ -5,7 +5,7 @@ int USERD_get_number_of_materials ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_number_of_materials" << endl + Info<< "Entering: USERD_get_number_of_materials" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H index e7a68d2c3a9da73d49daab321221af81efd33e98..cef0a64b1cd10403128440ccdecf6d8d0a51a275 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_model_parts.H @@ -2,7 +2,7 @@ int USERD_get_number_of_model_parts(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_number_of_model_parts" << endl << flush; + Info<< "Entering: USERD_get_number_of_model_parts" << endl << flush; #endif return Numparts_available; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H index b858a8017844ece67f0cbff5f735fd973a25e389..acb342135714809739f7724dc0f1dab0a55bae88 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_of_variables.H @@ -2,7 +2,7 @@ int USERD_get_number_of_variables(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_number_of_variables" << endl << flush; + Info<< "Entering: USERD_get_number_of_variables" << endl << flush; #endif return Num_variables; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H index 1844d71e6420a8287ebe1b7a8822d2e023aaf934..e4fc922fbd5d6a088a31a10fa58a4a896097d6f1 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_number_timesets.H @@ -4,7 +4,7 @@ int USERD_get_number_of_timesets ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_number_of_timesets" << endl + Info<< "Entering: USERD_get_number_of_timesets" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H index 54ab4da3af1d6b3bb67971a44448ac93fb49520e..68ebbf768e5fab26c2a1b0efcf1ff4ddb043bab2 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_coords.H @@ -8,7 +8,7 @@ int USERD_get_part_coords { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_part_coords" << endl << + Info<< "Entering: USERD_get_part_coords" << endl << "part_number = " << part_number << endl << flush; #endif @@ -19,7 +19,7 @@ int USERD_get_part_coords const vectorField& points = meshPtr->points(); label nPoints = points.size(); - + for (label indx=0; indx<nPoints; indx++) { coord_array[0][indx+1] = (float)points[indx].x(); @@ -36,7 +36,7 @@ int USERD_get_part_coords const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); const vectorField& points = bMesh[patchi].points(); label nPoints = points.size(); - + for (label indx=0; indx<nPoints; indx++) { coord_array[0][indx+1] = (float)points[indx].x(); @@ -70,7 +70,7 @@ int USERD_get_part_coords } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_part_coords" << endl << flush; + Info<< "Leaving: USERD_get_part_coords" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H index 67c3478880a2a571e42ce6aeff068c8d5c105369..4b82c06f33a1d54c328d0defa88296f52902aae8 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_element_ids_by_type.H @@ -7,8 +7,8 @@ int USERD_get_part_element_ids_by_type { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_part_element_ids_by_type" << endl - << "part_number = " << part_number << endl + Info<< "Entering: USERD_get_part_element_ids_by_type" << endl + << "part_number = " << part_number << endl << "element_type = " << element_type << endl << flush; #endif @@ -31,7 +31,7 @@ int USERD_get_part_element_ids_by_type { label nFaces = cells[n].size(); labelList points = cellShapes[n]; - + if ((nFaces == 6) && (points.size() == 8)) { elemid_array[nHex08++] = n + 1; @@ -44,7 +44,7 @@ int USERD_get_part_element_ids_by_type { label nFaces = cells[n].size(); labelList points = cellShapes[n]; - + if ((nFaces == 5) && (points.size() == 6)) { elemid_array[nPen06++] = n + 1; @@ -57,7 +57,7 @@ int USERD_get_part_element_ids_by_type { label nFaces = cells[n].size(); labelList points = cellShapes[n]; - + if ((nFaces == 5) && (points.size() == 5)) { elemid_array[nPyr05++] = n + 1; @@ -70,7 +70,7 @@ int USERD_get_part_element_ids_by_type { label nFaces = cells[n].size(); labelList points = cellShapes[n]; - + if ((nFaces == 4) && (points.size() == 4)) { elemid_array[nTet04++] = n + 1; @@ -101,7 +101,7 @@ int USERD_get_part_element_ids_by_type } else if (part_number < nPatches+2) { - + const polyBoundaryMesh& bMesh = meshPtr->boundaryMesh(); label patchi = part_number - 2; @@ -127,7 +127,7 @@ int USERD_get_part_element_ids_by_type { elemid_array[nQuad04++] = facei + 1; } - } + } } else if (element_type == Z_NSIDED) { @@ -155,7 +155,7 @@ int USERD_get_part_element_ids_by_type } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_part_element_ids_by_type" << endl << flush; + Info<< "Leaving: USERD_get_part_element_ids_by_type" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H index d8713a8224c171b1585dd78c8a0f14916b13c02d..d90f3643fc7aa8d4de4e143f265f49fafe855e1a 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_elements_by_type.H @@ -11,47 +11,47 @@ int USERD_get_part_elements_by_type << "element_type = " << element_type; if (element_type == Z_HEX08) { - Info << " Z_HEX08"; + Info<< " Z_HEX08"; } else if (element_type == Z_PEN06) { - Info << " Z_PEN06"; + Info<< " Z_PEN06"; } else if (element_type == Z_PYR05) { - Info << " Z_PYR05"; + Info<< " Z_PYR05"; } else if (element_type == Z_TET04) { - Info << " Z_TET04"; + Info<< " Z_TET04"; } else if (element_type == Z_TRI03) { - Info << " Z_TRI03"; + Info<< " Z_TRI03"; } else if (element_type == Z_QUA04) { - Info << " Z_QUA04"; + Info<< " Z_QUA04"; } else if (element_type == Z_NFACED) { - Info << " Z_NFACED"; + Info<< " Z_NFACED"; } else if (element_type == Z_NSIDED) { - Info << " Z_NSIDED"; + Info<< " Z_NSIDED"; } else { - Info << " unknown"; + Info<< " unknown"; } - Info << endl << flush; + Info<< endl << flush; # endif if (part_number == 1) { const cellShapeList& cellShapes = meshPtr->cellShapes(); - + //================================ // hexahedron //================================ @@ -64,7 +64,7 @@ int USERD_get_part_elements_by_type { const cellShape& cellShape = cellShapes[celli]; const cellModel& cellModel = cellShape.model(); - + if (cellModel == hex) { forAll(cellShape, ip) @@ -87,7 +87,7 @@ int USERD_get_part_elements_by_type { const cellShape& cellShape = cellShapes[celli]; const cellModel& cellModel = cellShape.model(); - + if (cellModel == prism) { forAll(cellShape, ip) @@ -110,7 +110,7 @@ int USERD_get_part_elements_by_type { const cellShape& cellShape = cellShapes[celli]; const cellModel& cellModel = cellShape.model(); - + if (cellModel == pyr) { forAll(cellShape, ip) @@ -133,7 +133,7 @@ int USERD_get_part_elements_by_type { const cellShape& cellShape = cellShapes[celli]; const cellModel& cellModel = cellShape.model(); - + if (cellModel == tet) { forAll(cellShape, ip) @@ -193,7 +193,7 @@ int USERD_get_part_elements_by_type label nPoints = bMesh[patchi][n].size(); if (nPoints == 3) { - for(label i=0; i<nPoints; i++) + for (label i=0; i<nPoints; i++) { label ip = bMesh[patchi][n][i]; conn_array[nTri03][i] = ip + 1; @@ -209,7 +209,7 @@ int USERD_get_part_elements_by_type label nPoints = bMesh[patchi][n].size(); if (nPoints == 4) { - for(label i=0; i<nPoints; i++) + for (label i=0; i<nPoints; i++) { label ip = bMesh[patchi][n][i]; conn_array[nQuad04][i] = ip + 1; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H index 3ee4feff131851d762936f679785e5fabf8c6d26..c05af41ccd674ead3f2058c7c9938451a26a60a4 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_part_node_ids.H @@ -5,8 +5,8 @@ int USERD_get_part_node_ids ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_part_node_ids" << endl - << "part_number = " << part_number << endl + Info<< "Entering: USERD_get_part_node_ids" << endl + << "part_number = " << part_number << endl << flush; #endif @@ -25,7 +25,7 @@ int USERD_get_part_node_ids const vectorField& points = bMesh[patchi].points(); label nPoints = points.size(); - + for (label indx=0; indx<nPoints; indx++) { nodeid_array[indx] = indx + 1; @@ -52,7 +52,7 @@ int USERD_get_part_node_ids } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_part_node_ids" << endl + Info<< "Leaving: USERD_get_part_node_ids" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H index 3a75b16675db1a99afbd93ffaf0fb057cad54a73..5ebd4425cb76f5894fde7989ffeb1e6af4b3bcc9 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_release.H @@ -5,13 +5,13 @@ int USERD_get_reader_release { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_reader_release" << endl; + Info<< "Entering: USERD_get_reader_release" << endl; #endif strncpy(release_number, Foam::FOAMbuild, Z_MAX_USERD_NAME); #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_reader_release" << endl; + Info<< "Leaving: USERD_get_reader_release" << endl; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H index 7c8206664bd524ff83b905391d24fb19f8dae418..a8fd102fe3b6fc380123b6fc20c00618c0622673 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_reader_version.H @@ -5,13 +5,13 @@ int USERD_get_reader_version { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_reader_version" << endl; + Info<< "Entering: USERD_get_reader_version" << endl; #endif strncpy(version_number, readerVersion, Z_MAX_USERD_NAME); #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_reader_version" << endl; + Info<< "Leaving: USERD_get_reader_version" << endl; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H index dcc64822897df9246929b025bf1e64e61167673d..223b0c2164af3f96c5764d33e0378bacae6c7948 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_sol_times.H @@ -29,7 +29,7 @@ int USERD_get_sol_times { solution_times[n] += addCAD; - Info << "Time[" << n << "] = " << timeDirs[n+1].value() + Info<< "Time[" << n << "] = " << timeDirs[n+1].value() << " was corrected to " << solution_times[n] << endl; } diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H index bf811b73220d954f72cae8b1afb9986c661024a0..89c0140b4a8087ee1a6efd51c465466c0026ce88 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_by_component.H @@ -10,7 +10,7 @@ int USERD_get_var_by_component ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_var_by_component" << endl + Info<< "Entering: USERD_get_var_by_component" << endl << "which_variable = " << which_variable << endl << "which_part = " << which_part << endl << "var_type = " << var_type << endl @@ -32,7 +32,7 @@ int USERD_get_var_by_component { if (which_part == 1) { -# include "getFieldScalar.H" +# include "getFieldScalar.H" } else if (which_part < nPatches+2) { @@ -51,7 +51,7 @@ int USERD_get_var_by_component { if (which_part == 1) { -# include "getFieldVector.H" +# include "getFieldVector.H" } else if (which_part < nPatches+2) { @@ -70,10 +70,10 @@ int USERD_get_var_by_component else if (var_type == Z_TENSOR9) { // all tensor are treated as asymmetric tensors here - + if (which_part == 1) { -# include "getFieldTensor.H" +# include "getFieldTensor.H" } else if (which_part < nPatches+2) { @@ -89,13 +89,13 @@ int USERD_get_var_by_component } } - else + else { return Z_UNDEF; } #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_var_by_component" << endl + Info<< "Leaving: USERD_get_var_by_component" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H index d9ea31f4507e8ec3e08a73f91ae072706454a1d2..d569726f6a30197d01ee47d6a63a9e2e6ab6a897 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_get_var_value_at_specific.H @@ -11,7 +11,7 @@ int USERD_get_var_value_at_specific ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_get_var_value_at_specific" << endl + Info<< "Entering: USERD_get_var_value_at_specific" << endl << flush; #endif // Not sure if it is 0 or 1 based @@ -63,7 +63,7 @@ int USERD_get_var_value_at_specific #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_get_var_value_at_specific" << endl + Info<< "Leaving: USERD_get_var_value_at_specific" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H index 2c03738bd5f922dbc8c707427bbfa8fdc20c555a..c89cc5f253cfcce257f3740029d5eaf176c21780 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_load_matf_data.H @@ -6,11 +6,11 @@ int USERD_load_matf_data int wtyp, int mat_type, int *ids_list, - float *val_list + float *val_list ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_load_matf_data" << endl + Info<< "Entering: USERD_load_matf_data" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H index 712ce53b869072019ca37fa40c749d35197b1b2f..ccaad12cb3af8febdbfd6c759b5ae5b6efe8e4d8 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_filenames.H @@ -10,7 +10,7 @@ int USERD_set_filenames ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_set_filenames" << endl << flush; + Info<< "Entering: USERD_set_filenames" << endl << flush; #endif char tmp[100]; @@ -87,7 +87,7 @@ int USERD_set_filenames // set the number of fields and store their names // a valid field must exist for all time-steps - runTime.setTime(timeDirs[timeDirs.size()-1], timeDirs.size()-1); + runTime.setTime(timeDirs.last(), timeDirs.size()-1); IOobjectList objects(*meshPtr, runTime.timeName()); fieldNames = objects.names(); @@ -173,7 +173,7 @@ int USERD_set_filenames if (sprayHeader.headerOk()) { - Info << "[Found lagrangian]" << endl; + Info<< "[Found lagrangian]" << endl; delete sprayPtr; @@ -201,7 +201,7 @@ int USERD_set_filenames Numparts_available = Num_unstructured_parts + Num_structured_parts + nPatches; #ifdef ENSIGHTDEBUG - Info << "Leaving: USERD_set_filenames" << endl << flush; + Info<< "Leaving: USERD_set_filenames" << endl << flush; #endif return Z_OK; diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H index 3918280b95fd3a61bd0634b22d404fe439a2336d..f0ff4b24fceb4c348f479f20316d597b318e8660 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_server_number.H @@ -5,7 +5,7 @@ void USERD_set_server_number ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_set_server_number" << endl + Info<< "Entering: USERD_set_server_number" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H index 5e4c5815323af4948db69d381d5e37483bbb0185..5459f67ba6b71e6e02ad04571aa2ba148050e92f 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_set_time_set_and_step.H @@ -6,7 +6,7 @@ void USERD_set_time_set_and_step ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_set_time_set_and_step" << endl << flush; + Info<< "Entering: USERD_set_time_set_and_step" << endl << flush; #endif // update the global pointers and variables // to the current time-step diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H index 85cdcfab5c231bd2d2811884eedf34f7bef18ccb..c48fa13bfb85f1ddfdb3c9c453b17876abe7415a 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_size_matf_data.H @@ -5,11 +5,11 @@ int USERD_size_matf_data int part_id, int wtyp, int mat_type, - int *matf_size + int *matf_size ) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_size_matf_data" << endl + Info<< "Entering: USERD_size_matf_data" << endl << flush; #endif diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H index 13ac17682e4d25a503945b1db0f431aeacdd0070..c6262b8ee1375a8aafd31981ac67ba5b758cedfd 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/USERD_stop_part_building.H @@ -2,7 +2,7 @@ void USERD_stop_part_building(void) { #ifdef ENSIGHTDEBUG - Info << "Entering: USERD_stop_part_building" << endl << flush; + Info<< "Entering: USERD_stop_part_building" << endl << flush; #endif } diff --git a/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H b/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H index 39ccf6c07f288b2003285d8baedf5adde265e15f..3c1d5f84cb8a8211d7621986b439fb37167c013a 100644 --- a/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H +++ b/applications/utilities/postProcessing/graphics/ensightFoamReader/getLagrangianScalar.H @@ -29,7 +29,7 @@ if (nVar >= 0) } else { - // Info << "getLagrangianScalar: nVar = " << nVar << endl; + // Info<< "getLagrangianScalar: nVar = " << nVar << endl; return Z_UNDEF; } diff --git a/applications/utilities/postProcessing/graphics/fieldview9Reader/Allwmake b/applications/utilities/postProcessing/graphics/fieldview9Reader/Allwmake index a2dc313fb1957b75938552cc1dd23cc62bef0c8b..e4825541df7abca62ba2b230030f6046cef7a2e2 100755 --- a/applications/utilities/postProcessing/graphics/fieldview9Reader/Allwmake +++ b/applications/utilities/postProcessing/graphics/fieldview9Reader/Allwmake @@ -6,3 +6,5 @@ # then # wmake fieldview9Reader # fi + +# ----------------------------------------------------------------- end-of-file diff --git a/applications/utilities/postProcessing/graphics/fieldview9Reader/fieldview9Reader.C b/applications/utilities/postProcessing/graphics/fieldview9Reader/fieldview9Reader.C index 17f1dfcb2eec7d1172caa099e4f5b9d519b44322..a658631a9f1b9793c27c803c0c89f3afa324b657 100644 --- a/applications/utilities/postProcessing/graphics/fieldview9Reader/fieldview9Reader.C +++ b/applications/utilities/postProcessing/graphics/fieldview9Reader/fieldview9Reader.C @@ -314,7 +314,7 @@ static void storeScalarField Info<< "Storing " << nTotPoints << " of dummy values of " << fieldName << endl; - for(label i = 0; i < nPoints; i++) + for (label i = 0; i < nPoints; i++) { vars[pointI++] = 0.0; } @@ -388,7 +388,7 @@ static void storeVectorField for (direction d = 0; d < vector::nComponents; d++) { - for(label i = 0; i < nPoints; i++) + for (label i = 0; i < nPoints; i++) { vars[pointI++] = 0.0; } diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C index 3ad01ef870cbed3bad0679237c047cff41b22df7..1f58708d283aaab20e2ebf128e6e2f918a6b23f0 100644 --- a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C +++ b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C @@ -103,7 +103,7 @@ int main(int argc, char *argv[]) { startIds[i+1] += startIds[i] + numIds[i]; } - label nParticle = startIds[startIds.size()-1] + numIds[startIds.size()-1]; + label nParticle = startIds.last() + numIds[startIds.size()-1]; diff --git a/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C b/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C index 65356b382b26678e2db9db3a7d3ce511ce61972f..08ec6431467fb951052a0ad78a7ae3a161a7a4ab 100644 --- a/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C +++ b/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C @@ -83,7 +83,7 @@ int main(int argc, char *argv[]) Info<< "\nVmax = " << Vmax; Info<< ", Vmin = " << Vmin << endl; Info<< "Vmax/Vmin = " << Vmax/Vmin << endl; - Info<< "\nEnd" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/miscellaneous/pdfPlot/pdfPlot.C b/applications/utilities/postProcessing/miscellaneous/pdfPlot/pdfPlot.C index 09e85cb6492084eef0cfeb2729cd10ccfae4d976..3347e4dcdb5a074dda8bffeef66dc29da376b864 100644 --- a/applications/utilities/postProcessing/miscellaneous/pdfPlot/pdfPlot.C +++ b/applications/utilities/postProcessing/miscellaneous/pdfPlot/pdfPlot.C @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) makeGraph(x, samples, p->type(), pdfPath, runTime.graphFormat()); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/miscellaneous/postChannel/postChannel.C b/applications/utilities/postProcessing/miscellaneous/postChannel/postChannel.C index 559e769cf1c293e3de4ca34a1ce4751ad72de5c9..53e198c8d980d94249e3b937827ed954faae03ae 100644 --- a/applications/utilities/postProcessing/miscellaneous/postChannel/postChannel.C +++ b/applications/utilities/postProcessing/miscellaneous/postChannel/postChannel.C @@ -90,7 +90,7 @@ int main(int argc, char *argv[]) # include "collapse.H" } - Info<< "\nEnd" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C b/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C index bc26ec509fbe6cc9a8dca2792aeef1373c2dccce..cc4a69944ea39226540506981ddcbcd36f45d478 100644 --- a/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C +++ b/applications/utilities/postProcessing/miscellaneous/writeCellCentres/writeCellCentres.C @@ -101,7 +101,7 @@ int main(int argc, char *argv[]) } } - Info<< "\nEnd" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C index 54a7b53c461a55f77fc3a8d698bb89dce87aeac4..0e12decde29a7fe48ac4d10f747fbe1b629364b6 100644 --- a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C +++ b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) # include "createMesh.H" - runTime.setTime(timeDirs[timeDirs.size()-1], timeDirs.size()-1); + runTime.setTime(timeDirs.last(), timeDirs.size()-1); volScalarField pMean ( diff --git a/applications/utilities/postProcessing/velocityField/Lambda2/Lambda2.C b/applications/utilities/postProcessing/velocityField/Lambda2/Lambda2.C index d60f18fdafa6aab0b2e2fef64e6db352b6d768ef..84ef11619435f26b4dfee189dae251909a5a81c4 100644 --- a/applications/utilities/postProcessing/velocityField/Lambda2/Lambda2.C +++ b/applications/utilities/postProcessing/velocityField/Lambda2/Lambda2.C @@ -72,7 +72,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) -eigenValues(SSplusWW)().component(vector::Y) ); - Info << " Writing -Lambda2" << endl; + Info<< " Writing -Lambda2" << endl; Lambda2.write(); } else diff --git a/applications/utilities/postProcessing/velocityField/Pe/Pe.C b/applications/utilities/postProcessing/velocityField/Pe/Pe.C index 27a4576b6f5e522aff5dab6c0afa2822c6c7e44f..68402834e809760f5a8ff7454f0371144cea515b 100644 --- a/applications/utilities/postProcessing/velocityField/Pe/Pe.C +++ b/applications/utilities/postProcessing/velocityField/Pe/Pe.C @@ -351,7 +351,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) } */ - Info << "Pe max : " << max(PePtr()).value() << endl; + Info<< "Pe max : " << max(PePtr()).value() << endl; if (writeResults) { diff --git a/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C b/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C index 44ab386d9fa5b5c1682eab319aa28c72b30b0b6e..2b4e3ce58d9809cdedd1b92ac4c268c73ed277b3 100644 --- a/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C +++ b/applications/utilities/postProcessing/velocityField/streamFunction/streamFunction.C @@ -446,7 +446,7 @@ int main(int argc, char *argv[]) } } while (!finished); - Info << endl; + Info<< endl; } while (!finished); streamFunction.boundaryField() = 0.0; diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C index a11404646ca18bfe4f6ef7511753ee1899b6c0ef..a71e0fb1d2527f8f690f603a1ea4e4ca942d12ff 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C +++ b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C @@ -126,7 +126,7 @@ void calcCompressibleYPlus return; } - Info << "Reading field rho\n" << endl; + Info<< "Reading field rho\n" << endl; volScalarField rho(rhoHeader, mesh); #include "compressibleCreatePhi.H" @@ -236,7 +236,7 @@ int main(int argc, char *argv[]) if (UHeader.headerOk()) { - Info << "Reading field U\n" << endl; + Info<< "Reading field U\n" << endl; volVectorField U(UHeader, mesh); if (compressible) diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/Make/options b/applications/utilities/preProcessing/applyBoundaryLayer/Make/options index 06d42b6c3c9c5642799cda141c957280418d00b0..31f1dd4d95e821dd1c1dcee8d5ef2ce9cc568563 100644 --- a/applications/utilities/preProcessing/applyBoundaryLayer/Make/options +++ b/applications/utilities/preProcessing/applyBoundaryLayer/Make/options @@ -1,8 +1,14 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ -lfiniteVolume \ + -lincompressibleRASModels \ + -lincompressibleTransportModels \ -lgenericPatchFields \ -lmeshTools diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C index 5714cccbffcbc71a1d995bf49afe448b8d419fda..52d79cec81526771683e8ca8debdc7c1350a09db 100644 --- a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C +++ b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C @@ -37,6 +37,8 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" +#include "singlePhaseTransportModel.H" +#include "RASModel.H" #include "wallDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -52,54 +54,14 @@ int main(int argc, char *argv[]) argList::validOptions.insert("Cbl", "scalar"); argList::validOptions.insert("writenut", ""); -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - Info<< "Reading field U\n" << endl; - volVectorField U - ( - IOobject - ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - mesh - ); - -# include "createPhi.H" - - Info<< "Calculating wall distance field" << endl; - volScalarField y = wallDist(mesh).y(); - - // Set the mean boundary-layer thickness - dimensionedScalar ybl("ybl", dimLength, 0); - - if (args.optionFound("ybl")) - { - // If the boundary-layer thickness is provided use it - ybl.value() = args.optionRead<scalar>("ybl"); - } - else if (args.optionFound("Cbl")) - { - // Calculate boundary layer thickness as Cbl * mean distance to wall - ybl.value() = gAverage(y) * args.optionRead<scalar>("Cbl"); - } - else - { - FatalErrorIn(args.executable()) - << "Neither option 'ybl' or 'Cbl' have been provided to calculate" - " the boundary-layer thickness" - << exit(FatalError); - } + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info<< "\nCreating boundary-layer for U of thickness " - << ybl.value() << " m" << nl << endl; + Info<< "Time = " << runTime.timeName() << nl << endl; // Modify velocity by applying a 1/7th power law boundary-layer // u/U0 = (y/ybl)^(1/7) @@ -114,58 +76,88 @@ int main(int argc, char *argv[]) } } - Info<< "Writing U" << endl; + Info<< "Writing U\n" << endl; U.write(); // Update/re-write phi phi = fvc::interpolate(U) & mesh.Sf(); phi.write(); - // Read and modify turbulence fields if present + // Calculate nut + tmp<volScalarField> tnut = turbulence->nut(); + volScalarField& nut = tnut(); + volScalarField S = mag(dev(symm(fvc::grad(U)))); + nut = sqr(kappa*min(y, ybl))*::sqrt(2)*S; - IOobject epsilonHeader - ( - "epsilon", - runTime.timeName(), - mesh, - IOobject::MUST_READ - ); + if (args.optionFound("writenut")) + { + Info<< "Writing nut" << endl; + nut.write(); + } + + // Create G field - used by RAS wall functions + volScalarField G("RASModel::G", nut*2*sqr(S)); + + + //--- Read and modify turbulence fields + + // Turbulence k + tmp<volScalarField> tk = turbulence->k(); + volScalarField& k = tk(); + scalar ck0 = pow025(Cmu)*kappa; + k = sqr(nut/(ck0*min(y, ybl))); + k.correctBoundaryConditions(); + + Info<< "Writing k\n" << endl; + k.write(); - IOobject kHeader + + // Turbulence epsilon + tmp<volScalarField> tepsilon = turbulence->epsilon(); + volScalarField& epsilon = tepsilon(); + scalar ce0 = ::pow(Cmu, 0.75)/kappa; + epsilon = ce0*k*sqrt(k)/min(y, ybl); + epsilon.correctBoundaryConditions(); + + Info<< "Writing epsilon\n" << endl; + epsilon.write(); + + + // Turbulence omega + IOobject omegaHeader ( - "k", + "omega", runTime.timeName(), mesh, - IOobject::MUST_READ + IOobject::MUST_READ, + IOobject::NO_WRITE, + false ); + if (omegaHeader.headerOk()) + { + volScalarField omega(omegaHeader, mesh); + omega = epsilon/(Cmu*k); + omega.correctBoundaryConditions(); + + Info<< "Writing omega\n" << endl; + omega.write(); + } + + + // Turbulence nuTilda IOobject nuTildaHeader ( "nuTilda", runTime.timeName(), mesh, - IOobject::MUST_READ + IOobject::MUST_READ, + IOobject::NO_WRITE, + false ); - // First calculate nut - volScalarField nut - ( - "nut", - sqr(kappa*min(y, ybl))*::sqrt(2)*mag(dev(symm(fvc::grad(U)))) - ); - - if (args.optionFound("writenut")) - { - Info<< "Writing nut" << endl; - nut.write(); - } - - - // Read and modify turbulence fields if present - if (nuTildaHeader.headerOk()) { - Info<< "Reading field nuTilda\n" << endl; volScalarField nuTilda(nuTildaHeader, mesh); nuTilda = nut; nuTilda.correctBoundaryConditions(); @@ -174,28 +166,6 @@ int main(int argc, char *argv[]) nuTilda.write(); } - if (kHeader.headerOk() && epsilonHeader.headerOk()) - { - Info<< "Reading field k\n" << endl; - volScalarField k(kHeader, mesh); - - Info<< "Reading field epsilon\n" << endl; - volScalarField epsilon(epsilonHeader, mesh); - - scalar ck0 = ::pow(Cmu, 0.25)*kappa; - k = sqr(nut/(ck0*min(y, ybl))); - k.correctBoundaryConditions(); - - scalar ce0 = ::pow(Cmu, 0.75)/kappa; - epsilon = ce0*k*sqrt(k)/min(y, ybl); - epsilon.correctBoundaryConditions(); - - Info<< "Writing k\n" << endl; - k.write(); - - Info<< "Writing epsilon\n" << endl; - epsilon.write(); - } Info<< nl << "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/createFields.H b/applications/utilities/preProcessing/applyBoundaryLayer/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..e168ed978d56c716266c9e259875c9b5f91f57cc --- /dev/null +++ b/applications/utilities/preProcessing/applyBoundaryLayer/createFields.H @@ -0,0 +1,78 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + + Info<< "Reading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + mesh + ); + + #include "createPhi.H" + + singlePhaseTransportModel laminarTransport(U, phi); + + autoPtr<incompressible::RASModel> turbulence + ( + incompressible::RASModel::New(U, phi, laminarTransport) + ); + + Info<< "Calculating wall distance field" << endl; + volScalarField y = wallDist(mesh).y(); + + // Set the mean boundary-layer thickness + dimensionedScalar ybl("ybl", dimLength, 0); + + if (args.optionFound("ybl")) + { + // If the boundary-layer thickness is provided use it + ybl.value() = args.optionRead<scalar>("ybl"); + } + else if (args.optionFound("Cbl")) + { + // Calculate boundary layer thickness as Cbl * mean distance to wall + ybl.value() = gAverage(y)*args.optionRead<scalar>("Cbl"); + } + else + { + FatalErrorIn(args.executable()) + << "Neither option 'ybl' or 'Cbl' have been provided to calculate " + << "the boundary-layer thickness" + << exit(FatalError); + } + + Info<< "\nCreating boundary-layer for U of thickness " + << ybl.value() << " m" << nl << endl; + + +// ************************************************************************* // diff --git a/applications/utilities/preProcessing/engineSwirl/engineSwirl.C b/applications/utilities/preProcessing/engineSwirl/engineSwirl.C index 089689b47b0ffe6ea3bf9cedc1445d97bb1d1d83..de6e9a2640d782f67613641796beb306928eacf5 100644 --- a/applications/utilities/preProcessing/engineSwirl/engineSwirl.C +++ b/applications/utilities/preProcessing/engineSwirl/engineSwirl.C @@ -69,11 +69,11 @@ int main(int argc, char *argv[]) } } - Info << "Umax = " << Umax << endl; + Info<< "Umax = " << Umax << endl; U.write(); - Info << "\n end\n"; + Info<< "\n end\n"; return 0; } diff --git a/applications/utilities/preProcessing/mapFields/createTimes.H b/applications/utilities/preProcessing/mapFields/createTimes.H index 8367e595579842d813bbd2d15945ffc63d5c16d0..91e6a349aec8a23b44f898603aedec5e93e1a07c 100644 --- a/applications/utilities/preProcessing/mapFields/createTimes.H +++ b/applications/utilities/preProcessing/mapFields/createTimes.H @@ -1,4 +1,4 @@ - Info << "\nCreate databases as time" << endl; + Info<< "\nCreate databases as time" << endl; Time runTimeSource ( diff --git a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C index 475aedb66b68e303317d40ebb8dbe09ce178af81..c713a9816df97c2f1bb78b36391af855ec4be816 100644 --- a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C +++ b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) Info<< nl << "ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; - Info << nl << "End\n" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/preProcessing/setFields/setFields.C b/applications/utilities/preProcessing/setFields/setFields.C index d164709504a234271b150538fb947536be91e3a9..b33541dc62b90f18ce6f2efa16a94e392a17ee7a 100644 --- a/applications/utilities/preProcessing/setFields/setFields.C +++ b/applications/utilities/preProcessing/setFields/setFields.C @@ -235,7 +235,7 @@ int main(int argc, char *argv[]) ); } - Info<< "\nEnd" << endl; + Info<< "\nEnd\n" << endl; return 0; } diff --git a/applications/utilities/preProcessing/wallFunctionTable/Allwmake b/applications/utilities/preProcessing/wallFunctionTable/Allwmake index 57795a542fae3d0cdd2659b8b95b2e4d266db12f..55a6cbd37fa9dcbaf7e2eb1f32402e0d74f79d11 100755 --- a/applications/utilities/preProcessing/wallFunctionTable/Allwmake +++ b/applications/utilities/preProcessing/wallFunctionTable/Allwmake @@ -1,5 +1,8 @@ #!/bin/sh +cd ${0%/*} || exit 1 # run from this directory +set -x wmake libso tabulatedWallFunction wmake +# ----------------------------------------------------------------- end-of-file diff --git a/applications/utilities/preProcessing/wallFunctionTable/tabulatedWallFunction/general/general.C b/applications/utilities/preProcessing/wallFunctionTable/tabulatedWallFunction/general/general.C index 76792dc2f83cdffdbe6382f81ab31076230d14c6..d889ca784d95198171d2f1347ee819a5a35c82b1 100644 --- a/applications/utilities/preProcessing/wallFunctionTable/tabulatedWallFunction/general/general.C +++ b/applications/utilities/preProcessing/wallFunctionTable/tabulatedWallFunction/general/general.C @@ -93,13 +93,13 @@ Foam::scalar Foam::tabulatedWallFunctions::general::interpolate { case itLinear: { - if (xi < x[0]) + if (xi <= x[0]) { return fx[0]; } - else if (xi > x[x.size()-1]) + else if (xi >= x.last()) { - return fx[x.size()-1]; + return fx.last(); } else { diff --git a/applications/utilities/preProcessing/wallFunctionTable/wallFunctionTableApp.C b/applications/utilities/preProcessing/wallFunctionTable/wallFunctionTableApp.C index a729a771c9251f7c601f6c1e4f9e22ac48c137fc..17f38bbb16a03f0a4838fc7a406f400f5029764a 100644 --- a/applications/utilities/preProcessing/wallFunctionTable/wallFunctionTableApp.C +++ b/applications/utilities/preProcessing/wallFunctionTable/wallFunctionTableApp.C @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) twf->write(); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceAdd/surfaceAdd.C b/applications/utilities/surface/surfaceAdd/surfaceAdd.C index 587461d403af11e21187addf58a5950b3a4289f3..e8f1d3b70385caed61d316be7c590f676807a45d 100644 --- a/applications/utilities/surface/surfaceAdd/surfaceAdd.C +++ b/applications/utilities/surface/surfaceAdd/surfaceAdd.C @@ -263,12 +263,12 @@ int main(int argc, char *argv[]) Info<< endl; - Info << "Writing : " << outFileName << endl; + Info<< "Writing : " << outFileName << endl; // No need to 'group' while writing since all in correct order anyway. combinedSurf.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceAutoPatch/surfaceAutoPatch.C b/applications/utilities/surface/surfaceAutoPatch/surfaceAutoPatch.C index 16acfa7415ac6a458f9e091188063c2ae03766ee..0a7d8a2cc59af865eaa1cd6fcf4782f253ab8993 100644 --- a/applications/utilities/surface/surfaceAutoPatch/surfaceAutoPatch.C +++ b/applications/utilities/surface/surfaceAutoPatch/surfaceAutoPatch.C @@ -64,13 +64,13 @@ int main(int argc, char *argv[]) // Read // ~~~~ - Info << "Reading : " << inFileName << endl; + Info<< "Reading : " << inFileName << endl; triSurface surf(inFileName); Info<< "Read surface:" << endl; surf.writeStats(Info); Info<< endl; - + // Construct features from surface&featureangle @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) } - Info << "Writing : " << outFileName << endl; + Info<< "Writing : " << outFileName << endl; surf.write(outFileName, true); Info<< "End\n" << endl; diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index d283ec66afc37ba554e37ddcb6d84df7dc5ce105..1a8253b25d7b1532e886923cff3f9e7ff5759c6a 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -550,7 +550,7 @@ int main(int argc, char *argv[]) fileName surfFileNameBase(surfFileName.name()); - for(label zone = 0; zone < numZones; zone++) + for (label zone = 0; zone < numZones; zone++) { boolList includeMap(surf.size(), false); diff --git a/applications/utilities/surface/surfaceClean/collapseBase.C b/applications/utilities/surface/surfaceClean/collapseBase.C index 58168e5722a9a3cc79d59b0866209dfc368d099d..f5370d0c6091c65df15b1957d8292d00382e0b1b 100644 --- a/applications/utilities/surface/surfaceClean/collapseBase.C +++ b/applications/utilities/surface/surfaceClean/collapseBase.C @@ -128,7 +128,7 @@ static void splitTri labelledTri ( f[fp2], - splitPoints[splitPoints.size()-1], + splitPoints.last(), f[fp1], f.region() ) @@ -144,7 +144,7 @@ static void splitTri ( f[fp1], f[fp2], - splitPoints[splitPoints.size()-1], + splitPoints.last(), f.region() ) ); diff --git a/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C b/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C index 3ec618189e9f673e88b71f2117042b8b9356df89..ea4f795edad7203a2e5095ae7c63221aff3132ec 100644 --- a/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C +++ b/applications/utilities/surface/surfaceCoarsen/surfaceCoarsen.C @@ -54,7 +54,7 @@ int mapVertex(::List<int>& collapse_map, int a, int mx) return 0; } while (a >= mx) - { + { a = collapse_map[a]; } return a; @@ -122,28 +122,28 @@ int main(int argc, char *argv[]) td.v[1]=f[1]; td.v[2]=f[2]; tri.Add(td); - } + } ::List<int> collapse_map; // to which neighbor each vertex collapses ::List<int> permutation; ::ProgressiveMesh(vert,tri,collapse_map,permutation); - // rearrange the vertex list + // rearrange the vertex list ::List< ::Vector> temp_list; - for(int i=0;i<vert.num;i++) + for (int i=0;i<vert.num;i++) { temp_list.Add(vert[i]); } - for(int i=0;i<vert.num;i++) + for (int i=0;i<vert.num;i++) { vert[permutation[i]]=temp_list[i]; } // update the changes in the entries in the triangle list - for(int i=0;i<tri.num;i++) + for (int i=0;i<tri.num;i++) { - for(int j=0;j<3;j++) + for (int j=0;j<3;j++) { tri[i].v[j] = permutation[tri[i].v[j]]; } @@ -167,7 +167,7 @@ int main(int argc, char *argv[]) int p2 = mapVertex(collapse_map, tri[i].v[2], render_num); // note: serious optimization opportunity here, - // by sorting the triangles the following "continue" + // by sorting the triangles the following "continue" // could have been made into a "break" statement. if (p0 == p1 || p1 == p2 || p2 == p0) { @@ -181,7 +181,7 @@ int main(int argc, char *argv[]) // Convert vert into pointField. pointField newPoints(vert.num); - for(int i=0; i<vert.num; i++) + for (int i=0; i<vert.num; i++) { const ::Vector & v = vert[i]; @@ -205,7 +205,7 @@ int main(int argc, char *argv[]) surf2.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceFind/surfaceFind.C b/applications/utilities/surface/surfaceFind/surfaceFind.C index 13d769fd1a7795b25c10fab05b888abc923b1e73..b710a52493e5ccc3793c2405f37ae7d2f651234a 100644 --- a/applications/utilities/surface/surfaceFind/surfaceFind.C +++ b/applications/utilities/surface/surfaceFind/surfaceFind.C @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C index fb7d42746329b821f4cacfb29ea778d79950d4b2..132fca6c342362ecf8dd624bb6e554e18c883151 100644 --- a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C +++ b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C @@ -320,7 +320,7 @@ int main(int argc, char *argv[]) } } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceOrient/surfaceOrient.C b/applications/utilities/surface/surfaceOrient/surfaceOrient.C index 1b728711cdce6ff1c052009698d5a5c3e19cad83..c6fd31c0294ef3c365c45c14ebabcdc3b14b9218 100644 --- a/applications/utilities/surface/surfaceOrient/surfaceOrient.C +++ b/applications/utilities/surface/surfaceOrient/surfaceOrient.C @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) surf.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C index 1ba618ec01ef97aa04beddbd4fc365ce594c281d..f206f6e931eed12b13ec8d832df2ace5e6caef4b 100644 --- a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C +++ b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) triSurface cleanSurf(surf1); - while(true) + while (true) { label nOldVert = cleanSurf.nPoints(); @@ -83,7 +83,7 @@ int main(int argc, char *argv[]) cleanSurf.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C index cdb041ce350d19b6f79e893bd114d014f32e4e09..8b37f70fe44fe0a0c5f2d3f892485002cd5f00ba 100644 --- a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C +++ b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C @@ -62,7 +62,7 @@ void writeProcStats // Determine surface bounding boxes, faces, points List<treeBoundBox> surfBb(Pstream::nProcs()); { - surfBb[Pstream::myProcNo()] = boundBox(s.points(), false); + surfBb[Pstream::myProcNo()] = treeBoundBox(s.points()); Pstream::gatherList(surfBb); Pstream::scatterList(surfBb); } diff --git a/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C b/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C index 49efe5293a27b894eaf4de74fce6ee8ff8bc3b87..7b94ca60e2b89dedca57beddc72936ba1103492c 100644 --- a/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C +++ b/applications/utilities/surface/surfaceRefineRedGreen/surfaceRefineRedGreen.C @@ -79,7 +79,7 @@ int main(int argc, char *argv[]) surf2.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceSmooth/surfaceSmooth.C b/applications/utilities/surface/surfaceSmooth/surfaceSmooth.C index cb843d3a4651874d089d55d736a7ce3255e95136..bce23c9846897dd0f98b7314e7277a27b9ed6b2a 100644 --- a/applications/utilities/surface/surfaceSmooth/surfaceSmooth.C +++ b/applications/utilities/surface/surfaceSmooth/surfaceSmooth.C @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) const labelListList& pointEdges = surf1.pointEdges(); - for(label iter = 0; iter < iters; iter++) + for (label iter = 0; iter < iters; iter++) { forAll(pointEdges, vertI) { @@ -111,7 +111,7 @@ int main(int argc, char *argv[]) surf2.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C index 71ab4c8b01da1ee05f882d7d87eca95dbfbea09d..a597fc5c2c199030c810a24a3ae7dccc79c3c64c 100644 --- a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C +++ b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C @@ -106,7 +106,7 @@ int main(int argc, char *argv[]) } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C index c14771030f4480d7d1152a36ec734b1ececbcc88..09d13cb2a89c2a7014437b2584c34bccffa792f8 100644 --- a/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C +++ b/applications/utilities/surface/surfaceSplitNonManifolds/surfaceSplitNonManifolds.C @@ -973,7 +973,7 @@ int main(int argc, char *argv[]) surf.write(outSurfName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/surface/surfaceSubset/surfaceSubset.C b/applications/utilities/surface/surfaceSubset/surfaceSubset.C index 1c1a725cad267ae5cca8e2389dba06bac8987aac..e32677fe7710f379b03b224bce2014f8936cabdf 100644 --- a/applications/utilities/surface/surfaceSubset/surfaceSubset.C +++ b/applications/utilities/surface/surfaceSubset/surfaceSubset.C @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) if (markedPoints.size()) { - Info << "Found " << markedPoints.size() << " marked point(s)." << endl; + Info<< "Found " << markedPoints.size() << " marked point(s)." << endl; // pick up cells sharing the point @@ -155,7 +155,7 @@ int main(int argc, char *argv[]) if (markedEdges.size()) { - Info << "Found " << markedEdges.size() << " marked edge(s)." << endl; + Info<< "Found " << markedEdges.size() << " marked edge(s)." << endl; // pick up cells sharing the edge @@ -194,7 +194,7 @@ int main(int argc, char *argv[]) const point& min = markedZone[0]; const point& max = markedZone[1]; - Info << "Using zone min:" << min << " max:" << max << endl; + Info<< "Using zone min:" << min << " max:" << max << endl; forAll(surf1, faceI) { @@ -295,7 +295,7 @@ int main(int argc, char *argv[]) if (markedFaces.size()) { - Info << "Found " << markedFaces.size() << " marked face(s)." << endl; + Info<< "Found " << markedFaces.size() << " marked face(s)." << endl; // Check and mark faces to pick up forAll (markedFaces, faceI) @@ -373,11 +373,11 @@ int main(int argc, char *argv[]) Info<< "Subset:" << endl; surf2.writeStats(Info); - Info << endl; + Info<< endl; fileName outFileName(args.additionalArgs()[2]); - Info << "Writing surface to " << outFileName << endl; + Info<< "Writing surface to " << outFileName << endl; surf2.write(outFileName); diff --git a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C index 87ce69ddf77b49e8b52ede588d7918f4f83fd07d..f602fa47b013bb95bc333353053b28262a01310e 100644 --- a/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C +++ b/applications/utilities/surface/surfaceToPatch/surfaceToPatch.C @@ -311,7 +311,7 @@ int main(int argc, char *argv[]) runTime++; // Write resulting mesh - Info << "Writing modified mesh to time " << runTime.value() << endl; + Info<< "Writing modified mesh to time " << runTime.value() << endl; mesh.write(); } diff --git a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C index 1b9fcf0d0a30c0f0f3a00af661464b22484a2931..be4449c6ae432bc706386378f1b9992d14b737bf 100644 --- a/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C +++ b/applications/utilities/surface/surfaceTransformPoints/surfaceTransformPoints.C @@ -166,7 +166,7 @@ int main(int argc, char *argv[]) surf2.write(outFileName); - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C b/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C index 18befde0afa83e6d0b1681ada37c273b47432380..f1cb5ee1b3f174f625713041ed5bfe8a6d43a2ed 100644 --- a/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C +++ b/applications/utilities/thermophysical/chemkinToFoam/chemkinToFoam.C @@ -60,7 +60,7 @@ int main(int argc, char *argv[]) OFstream thermoFile(FOAMThermodynamicsFileName); thermoFile<< cr.speciesThermo() << endl; - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C b/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C index 277a4e787fbbf40809c8b1ca53d01724f4db2baa..5e4c41dbe9ff9a0d4c2a8d4ab9791d867992e340 100644 --- a/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C +++ b/applications/utilities/thermophysical/mixtureAdiabaticFlameT/mixtureAdiabaticFlameT.C @@ -116,7 +116,7 @@ int main(int argc, char *argv[]) + 2*pMix[i].volFrac()*thermo(CpData.lookup(pMix[i].name())); } - Info << "Adiabatic flame temperature of mixture " << rMix.name() << " = " + Info<< "Adiabatic flame temperature of mixture " << rMix.name() << " = " << products.TH(reactants.H(T0), 1000.0) << " K" << endl; return 0; diff --git a/bin/foamCopySettings b/bin/foamCopySettings index eaa6a0cc8c3beb0aedb9ab52b57bed19509f2b95..1a41a3a59f2556b7d764b663e36ffd8fca02f61a 100755 --- a/bin/foamCopySettings +++ b/bin/foamCopySettings @@ -1,9 +1,9 @@ #!/bin/sh -#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------- # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------- # License @@ -36,7 +36,7 @@ # Note # The foamCopySettings.rc (found with the ~OpenFOAM expansion) can be used # to add any custom rsync options. -#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------- Script=${0##*/} if [ "$1" = "-h" -o "$1" = "-help" -o "$#" -ne 2 ] then @@ -48,8 +48,8 @@ Usage: $Script srcDir dstDir - requires rsync Note - The $Script.rc (found with the ~OpenFOAM expansion) can be used - to add any custom rsync options. + The $Script.rc (found via the ~OpenFOAM expansion - see foamEtcFile) + can be used to add any custom rsync options. USAGE exit 1 @@ -78,7 +78,6 @@ done # avoid processor directories here too to make for cleaner output fileList=$(find -H $srcDir -mindepth 1 -maxdepth 1 -not -name "processor*") - # avoid polyMesh and processor* directories rsync="rsync --exclude polyMesh --exclude processor*" @@ -108,15 +107,20 @@ do # skip numerical (results) directories (except 0) # and things that look like log files or queuing system output case "$name" in - [1-9] | [0-9]?* | log | *.log | foam.[eo][1-9]* ) + ( [1-9] | [0-9]?* | log | *.log | foam.[eo][1-9]* ) + echo "$i [skipped]" + continue + ;; + # skip things that look sampled directories and converted data + ( probes | sets | surfaces | En[Ss]ight ) echo "$i [skipped]" continue ;; - *) + (*) echo "$i -> $dstDir/$name" $rsync -a $i $dstDir ;; esac done -# --------------------------------------------------------------- end-of-file +# ------------------------------------------------------------------ end-of-file diff --git a/bin/mpirunDebug b/bin/mpirunDebug index 57df760873478f36ba49b44ac000ec76d7be37d0..2376d22601c0e1c6f7f58cc1f95a70e9bef9476a 100755 --- a/bin/mpirunDebug +++ b/bin/mpirunDebug @@ -206,6 +206,21 @@ done cmd="" if [ .$WM_MPLIB = .OPENMPI ]; then cmd="mpirun -app $PWD/mpirun.schema </dev/null" +elif [ .$WM_MPLIB = .MPICH ]; then + cmd="mpiexec" + for ((proc=0; proc<$nProcs; proc++)) + do + read procCmd + + procXtermCmdFile="$PWD/processor${proc}Xterm.sh" + echo "#!/bin/sh" > $procXtermCmdFile + echo "$procCmd" >> $procXtermCmdFile + chmod +x $procXtermCmdFile + if [ $proc -ne 0 ]; then + cmd="${cmd} :" + fi + cmd="${cmd} -n 1 ${procXtermCmdFile}" + done < $PWD/mpirun.schema fi echo "Constructed $PWD/mpirun.schema file." diff --git a/bin/paraFoam b/bin/paraFoam index 31d286fcc9fb2835091386548abdbe1587840fe3..5dcba75094e39a362250a08165fa4c6d48a102f6 100755 --- a/bin/paraFoam +++ b/bin/paraFoam @@ -130,18 +130,7 @@ OpenFOAM) esac case "$ParaView_VERSION" in -2*) - trap "rm -f paraFoam.pvs $caseFile 2>/dev/null; exit 0" EXIT TERM INT - touch "$caseFile" - - # since we are now in the cwd, %CASE% is '$PWD/$caseFile' - sed -e s@%CASE%@$PWD/$caseFile@g \ - $WM_PROJECT_DIR/bin/tools/paraFoam.pvs > paraFoam.pvs - - paraview paraFoam.pvs - ;; - -*) +3*) # only create/remove caseFile if it didn't already exist [ -e $caseFile ] || { trap "rm -f $caseFile 2>/dev/null; exit 0" EXIT TERM INT diff --git a/bin/templates/source/_TemplateApp.C b/bin/templates/source/_TemplateApp.C index 7ce97539e6ab351103502e5ca0594cd045e52d2d..42f2df0db8ea3c8a43b3b9afd151aad9af9218ed 100644 --- a/bin/templates/source/_TemplateApp.C +++ b/bin/templates/source/_TemplateApp.C @@ -41,8 +41,7 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "End\n" << endl; - + Info<< "\nEnd\n" << endl; return 0; } diff --git a/bin/tools/org-batch b/bin/tools/org-batch new file mode 100755 index 0000000000000000000000000000000000000000..809552b54f7370333f92c2a779dfed254bbc731d --- /dev/null +++ b/bin/tools/org-batch @@ -0,0 +1,108 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# Script +# org-batch +# +# Description +# Batch process emacs org-mode files to create html/LaTeX etc. +# +#------------------------------------------------------------------------------ +Script=${0##*/} + +usage() { + while [ "$#" -ge 1 ]; do echo "$1"; shift; done + cat<<USAGE + +usage: ${0##*/} [OPTIONS] file1 [.. fileN] +options: + -html create html (default) + -latex create LaTeX + +* Batch process emacs org-mode files to create html/LaTeX etc. + +USAGE + exit 1 +} + + +# default is html export: +mode=html + +case $Script in +*latex) + mode=latex + ;; +*html) + mode=html + ;; +esac + + +# parse options +while [ "$#" -gt 0 ] +do + case "$1" in + -h | -help) + usage + ;; + -html) + mode=html + shift + ;; + -latex) + mode=latex + shift + ;; + -*) + usage "unknown option: '$*'" + ;; + *) + break + ;; + esac +done + +# default is the current directory +[ "$#" -gt 0 ] || usage "No files specified" + +type emacs >/dev/null 2>&1 || usage "No emacs found in PATH" + + +for org +do + echo "Processing: $org" + echo "----------" + if [ -f "$org" ] + then + emacs --batch -l org --visit=$org \ + --funcall org-export-as-$mode-batch + else + echo "File not found" + fi + echo "----------" +done + +#------------------------------------------------------------------------------ diff --git a/bin/tools/org-html b/bin/tools/org-html new file mode 120000 index 0000000000000000000000000000000000000000..3c8e28ed2ecded91a876dde16aa83b2df835ae16 --- /dev/null +++ b/bin/tools/org-html @@ -0,0 +1 @@ +org-batch \ No newline at end of file diff --git a/bin/tools/org-latex b/bin/tools/org-latex new file mode 120000 index 0000000000000000000000000000000000000000..3c8e28ed2ecded91a876dde16aa83b2df835ae16 --- /dev/null +++ b/bin/tools/org-latex @@ -0,0 +1 @@ +org-batch \ No newline at end of file diff --git a/bin/tools/paraFoam.pvs b/bin/tools/paraFoam.pvs deleted file mode 100644 index 8cbca6dc411ede8c5239ecb8880b0b699a93165e..0000000000000000000000000000000000000000 --- a/bin/tools/paraFoam.pvs +++ /dev/null @@ -1,12 +0,0 @@ -# ParaView State Version 2.2 - -set kw(vtkTemp2) [$Application GetMainWindow] -set kw(vtkTemp29) [$kw(vtkTemp2) GetMainView] -set kw(vtkTemp980) [$kw(vtkTemp2) GetAnimationManager] -[$kw(vtkTemp2) GetRotateCameraButton] SetState 1 -$kw(vtkTemp2) ChangeInteractorStyle 1 -set kw(vtkTemp840) [$kw(vtkTemp2) InitializeReadCustom "FoamReader" "%CASE%"] -$kw(vtkTemp2) ReadFileInformation $kw(vtkTemp840) "%CASE%" -$kw(vtkTemp2) FinalizeRead $kw(vtkTemp840) "%CASE%" -set kw(vtkTemp868) [$kw(vtkTemp840) GetPVWidget {Filename}] -$kw(vtkTemp868) SetValue "%CASE%" diff --git a/doc/Doxygen/Doxyfile b/doc/Doxygen/Doxyfile index 908fa543b949ae68c460d8d72c29cf91f7c190b2..68ff8430b205ad285cfc0e03936441425d305b3c 100644 --- a/doc/Doxygen/Doxyfile +++ b/doc/Doxygen/Doxyfile @@ -689,13 +689,13 @@ HTML_FILE_EXTENSION = .html # each generated HTML page. If it is left blank doxygen will generate a # standard header. -HTML_HEADER = FoamHeader.html +HTML_HEADER = $(WM_PROJECT_DIR)/doc/Doxygen/FoamHeader.html # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. -HTML_FOOTER = FoamFooter.html +HTML_FOOTER = $(WM_PROJECT_DIR)/doc/Doxygen/FoamFooter.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to diff --git a/doc/GUIDELINES b/doc/GUIDELINES index 8038f997de186017c4b2fe1519fc8aa471a0bd0c..5603ca3f657c13001b1e584452c3592d0be93360 100644 --- a/doc/GUIDELINES +++ b/doc/GUIDELINES @@ -109,7 +109,7 @@ eg, | | Within the implementation, a loop over all patches is done: | @code - | forAll (patches, patchI) + | forAll(patches, patchI) | { | ... // some operation | } @@ -222,4 +222,4 @@ The doc/Doxygen/tools directory contains miscellaneous scripts for finding and possibly repairing documentation issues. -Updated: 2008-03-17 +Updated: 2009-11-27 diff --git a/doc/codingStyleGuide.org b/doc/codingStyleGuide.org index d9c5c3c9c660453fda988dfa79ddc2214bb53293..27725cf1cd0addeeba79b5e658b9d52d6f5c6551 100644 --- a/doc/codingStyleGuide.org +++ b/doc/codingStyleGuide.org @@ -10,239 +10,252 @@ *** General + 80 character lines max + + The normal indentation is 4 spaces per logical level. + + Use spaces for indentation, not tab characters. + + Avoid trailing whitespace. + The body of control statements (eg, if, else, while, etc). - always delineated with brace brackets + always delineated with brace brackets. A possible exception can be + made with 'break' or 'continue' as part of a control structure. + stream output - << is always four characters after the start of the stream, so that the << - symbols align, i.e. - - Info<< - os << + =<<= is always four characters after the start of the stream, + so that the =<<= symbols align, i.e. + :Info<< ... + :os << ... so - WarningIn("className::functionName()") - << "Warning message" + :WarningIn("className::functionName()") + : << "Warning message" NOT - WarningIn("className::functionName()") - << "Warning message" - - + no unnecessary class section headers, i.e. remove + :WarningIn("className::functionName()") + :<< "Warning message" - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - // Check - - // Edit + + no unnecessary class section headers, i.e. remove - // Write + :// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + : + :// Check + : + :// Edit + : + :// Write if they contain nothing, even if planned for 'future use' + class titles are centred - /*---------------------------------------------------------------------------*\ - Class exampleClass Declaration - \*---------------------------------------------------------------------------*/ + :/*---------------------------------------------------------------------------*\ + : Class exampleClass Declaration + :\*---------------------------------------------------------------------------*/ - NOT + NOT - /*---------------------------------------------------------------------------*\ - Class exampleClass Declaration - \*---------------------------------------------------------------------------*/ + :/*---------------------------------------------------------------------------*\ + : Class exampleClass Declaration + :\*---------------------------------------------------------------------------*/ -*** .H Files +*** The =.H= Files + header file spacing - Leave two empty lines between sections (as per functions in the .C file etc) + Leave two empty lines between sections (as per functions in the =.C= file etc) + use "//- Comment" comments in header file + add descriptions to class data and functions + destructor If adding a comment to the destructor - use //- and code as a normal function: - //- Destructor - ~className(); + ://- Destructor + :~className(); + + inline functions Use inline functions where appropriate in a separate classNameI.H file. - Do not clutter up the header file with function bodies + Avoid cluttering the header file with function bodies. -*** .C Files - + Do not open/close namespaces in a .C file +*** The =.C= Files + + Do not open/close namespaces in a =.C= file Fully scope the function name, i.e. - Foam::returnType Foam::className::functionName() + :Foam::returnType Foam::className::functionName() NOT - namespace Foam - { - ... - - returnType className::functionName() - - ... - } + :namespace Foam + :{ + : ... + : + : returnType className::functionName() + : + : ... + :} EXCEPTION - When there are multiple levels of namespace, they may be used in the .C + When there are multiple levels of namespace, they may be used in the =.C= file, i.e. - namespace Foam - { - namespace compressible - { - namespace RASModels - { - - ... - - } // End namespace RASModels - } // End namespace compressible - } // End namespace Foam + :namespace Foam + :{ + :namespace compressible + :{ + :namespace RASModels + :{ + : + : ... + : + :} // End namespace RASModels + :} // End namespace compressible + :} // End namespace Foam + Use two empty lines between functions -*** Coding Practise +*** Coding Practice + passing data as arguments or return - Pass label and scalar as copy, anything bigger by reference + Pass bool, label and scalar as copy, anything larger by reference. + + const Use everywhere it is applicable. + + variable initialisation using "=" - const className& variableName = otherClass.data(); + : const className& variableName = otherClass.data(); NOT - const className& variableName(otherClass.data()); + : const className& variableName(otherClass.data()); + virtual functions If a class is virtual - make all derived classes virtual. *** Conditional Statements - if (condition) - { - code; - } + :if (condition) + :{ + : code; + :} OR - if - ( - long condition - ) - { - code; - } + :if + :( + : long condition + :) + :{ + : code; + :} NOT (no space between "if" and "(") - if(condition) - { - code; - } + :if(condition) + :{ + : code; + :} -*** `for' Loops - for (i = 0; i < maxI; i++) - { - code; - } +*** =for= and =while= Loops + :for (i = 0; i < maxI; i++) + :{ + : code; + :} OR - for - ( - i = 0; - i < maxI; - i++ - ) - { - code; - } + :for + :( + : i = 0; + : i < maxI; + : i++ + :) + :{ + : code; + :} NOT (no space between "for" and "(") - for(i = 0; i < maxI; i++) - { - code; - } + :for(i = 0; i < maxI; i++) + :{ + : code; + :} -*** `forAll' loops - like for loops, but + Note that when indexing through iterators, it is often slightly more + efficient to use the pre-increment form. Eg, =++iter= instead of =iter++= - forAll( +*** =forAll= , =forAllIter=, etc. loops + like =for= loops, but + + :forAll( NOT - forAll ( + :forAll ( *** Splitting Over Multiple Lines - + splitting return type and function name + +**** Splitting return type and function name + split initially after the function return type and left align - + do not put "const" onto it's own line - use a split to keep it with the - function name and arguments. + + do not put "const" onto its own line - use a split to keep it with + the function name and arguments. so: - const Foam::longReturnTypeName& - Foam::longClassName::longFunctionName const + :const Foam::longReturnTypeName& + :Foam::longClassName::longFunctionName const NOT - const Foam::longReturnTypeName& - Foam::longClassName::longFunctionName const + :const Foam::longReturnTypeName& + : Foam::longClassName::longFunctionName const NOR - const Foam::longReturnTypeName& Foam::longClassName::longFunctionName - const + :const Foam::longReturnTypeName& Foam::longClassName::longFunctionName + :const NOR - const Foam::longReturnTypeName& Foam::longClassName:: - longFunctionName const + :const Foam::longReturnTypeName& Foam::longClassName:: + :longFunctionName const - + if need to split again, split at the function name (leaving behind the - preceding scoping "::"'s), and again, left align, i.e. + + if it needs to be split again, split at the function name (leaving + behind the preceding scoping "::"s), and again, left align, i.e. - const Foam::longReturnTypeName& - Foam::veryveryveryverylongClassName:: - veryveryveryverylongFunctionName const + For example, - + splitting long lines at an "=" + :const Foam::longReturnTypeName& + :Foam::veryveryveryverylongClassName:: + :veryveryveryverylongFunctionName const + +**** Splitting long lines at an "=" Indent after split - variableName = - longClassName.longFunctionName(longArgument); + :variableName = + : longClassName.longFunctionName(longArgument); OR (where necessary) - variableName = - longClassName.longFunctionName - ( - longArgument1, - longArgument2 - ); + :variableName = + : longClassName.longFunctionName + : ( + : longArgument1, + : longArgument2 + : ); NOT - variableName = - longClassName.longFunctionName(longArgument); + :variableName = + :longClassName.longFunctionName(longArgument); NOR - variableName = longClassName.longFunctionName - ( - longArgument1, - longArgument2 - ); + :variableName = longClassName.longFunctionName + :( + : longArgument1, + : longArgument2 + :); *** Maths and Logic + operator spacing @@ -258,18 +271,201 @@ with the operator on the lower line. Align operator so that first variable, function or bracket on the next line is 4 spaces indented i.e. - variableName = - a*(a + b) - - exp(c/d) - *(k + t) + :variableName = + : a * (a + b) + : - exp(c/d) + : * (k + t); + + This is sometime more legible when surrounded by extra parentheses: + + :variableName = + :( + : a * (a + b) + : - exp(c/d) + : * (k + t) + :); + splitting logical tests over several lines - indent operator so that the next variable to test is aligned with the - four space indentation, i.e. + outdent the operator so that the next variable to test is aligned with + the four space indentation, i.e. + + :if + :( + : a == true + : && b == c + :) + +** Documentation + +*** General + + + For readability in the comment blocks, certain tags are used that are + translated by pre-filtering the file before sending it to Doxygen. + + + The tags start in column 1, the contents follow on the next lines and + indented by 4 spaces. The filter removes the leading 4 spaces from the + following lines until the next tag that starts in column 1. + + + The 'Class' and 'Description' tags are the most important ones. + + + The first paragraph following the 'Description' will be used for the + brief description, the remaining paragraphs become the detailed + description. + + For example, + + :Class + : Foam::myClass + : + :Description + : A class for specifying the documentation style. + : + : The class is implemented as a set of recommendations that may + : sometimes be useful. + + + The class name must be qualified by its namespace, otherwise Doxygen + will think you are documenting some other class. + + + If you don't have anything to say about the class (at the moment), use + the namespace-qualified class name for the description. This aids with + finding these under-documented classes later. + + + :Class + : Foam::myUnderDocumentedClass + : + :Description + : Foam::myUnderDocumentedClass + + + + Use 'Class' and 'Namespace' tags in the header files. + The Description block then applies to documenting the class. + + + Use 'InClass' and 'InNamespace' in the source files. + The Description block then applies to documenting the file itself. + + + :InClass + : Foam::myClass + : + :Description + : Implements the read and writing of files. + +*** Doxygen Special Commands + + Doxygen has a large number of special commands with a '\' prefix or a + (alternatively) an '@' prefix. + + The '@' prefix form is recommended for most Doxygen specials, since it + has the advantage of standing out. It also happens to be what projects + like gcc and VTK are using. + + The '\' prefix form, however, looks a bit better for the '\n' newline + command and when escaping single characters - eg, '\@', '\<', '\>', etc. + + Since the filtering removes the leading 4 spaces within the blocks, the + Doxygen commmands can be inserted within the block without problems. + + + :InClass + : Foam::myClass + : + :Description + : Implements the read and writing of files. + : + : An example input file: + : @verbatim + : patchName + : { + : type myPatchType; + : refValue 100; + : value uniform 1; + : } + : @endverbatim + : + : Within the implementation, a loop over all patches is done: + : @code + : forAll(patches, patchI) + : { + : ... // some operation + : } + : @endcode + +*** HTML Special Commands + + Since Doxygen also handles HTML tags to a certain extent, the angle + brackets need quoting in the documentation blocks. Non-HTML tags cause + Doxygen to complain, but seem to work anyhow. + + eg, + + The template with type <HR> is a bad example. + + + The template with type \<HR\> is a better example. + + + The template with type <Type> causes Doxygen to complain about an + unknown html type, but it seems to work okay anyhow. + + +*** Documenting Namespaces + + + If namespaces are explictly declared with the Namespace() macro, + they should be documented there. + + + If the namespaces is used to hold sub-models, the namespace can be + documented in the same file as the class with the model selector. + eg, + :documented namespace 'Foam::functionEntries' within the + :class 'Foam::functionEntry' + + + If nothing else helps, find some sensible header. + eg, + :namespace 'Foam' is documented in the foamVersion.H file + + +*** Documenting Typedefs and classes defined via macros + + ... not yet properly resolved + + +*** Documenting Applications + + Any number of classes might be defined by a particular application, but + these classes will not, however, be available to other parts of + OpenFOAM. At the moment, the sole purpuse for running Doxygen on the + applications is to extract program usage information for the '-doc' + option. + + The documentation for a particular application is normally contained + within the first comment block in a =.C= source file. The solution is this + to invoke a special filter for the "applications/{solver,utilities}" + directories that only allows the initial comment block for the =.C= files + through. + + The layout of the application documentation has not yet been finalized, + but foamToVTK shows an initial attempt. + +*** Orthography (an opinion) + + Given the origins of OpenFOAM, the British spellings (eg, neighbour and + not neighbor) are generally favoured. For code sections that interact + with external libraries, it can be useful to adopt American spellings, + especially for names that constitute a significant part of the external + library - eg, 'color' within graphics sub-systems. + + Both '-ize' and the '-ise' variant are found in the code comments. If + used as a variable or class method name, it is probably better to use + '-ize', which is considered the main form by the Oxford University + Press. + + Eg, + :myClass.initialize() + + + The word "its" (possesive) vs. "it's" (colloquial for "it is" or "it has") + seems to confuse non-native (and some native) English speakers. + It is better to donate the extra keystrokes and write "it is" or "it has". + Any remaining "it's" are likely an incorrect spelling of "its". + + - if - ( - a == true - && b == c - ) diff --git a/etc/apps/paraview/bashrc b/etc/apps/paraview/bashrc deleted file mode 100644 index a6e2c08051a3db1fcb293cdfec30f56116d51909..0000000000000000000000000000000000000000 --- a/etc/apps/paraview/bashrc +++ /dev/null @@ -1,67 +0,0 @@ -#----------------------------------*-sh-*-------------------------------------- -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# -# Script -# paraview/bashrc -# -# Description -# Setup file for paraview-2.x -# Sourced from OpenFOAM-*/etc/bashrc -# -#------------------------------------------------------------------------------ - -# determine the cmake to be used -unset CMAKE_HOME -for cmake in cmake-2.6.4 cmake-2.6.2 cmake-2.4.6 -do - cmake=$WM_THIRD_PARTY_DIR/$cmake/platforms/$WM_ARCH - if [ -r $cmake ] - then - export CMAKE_HOME=$cmake - export PATH=$CMAKE_HOME/bin:$PATH - break - fi -done - -paraviewMajor=paraview-2.4 -export ParaView_VERSION=2.4.4 - -export ParaView_INST_DIR=$WM_THIRD_PARTY_DIR/ParaView$ParaView_VERSION -export ParaView_DIR=$ParaView_INST_DIR/lib/$paraviewMajor - -if [ -r $ParaView_INST_DIR ] -then - export PV_INTERFACE_PATH=$FOAM_UTILITIES/postProcessing/graphics/PVFoamReader/PVFoamReader/Make - - export PATH=$ParaView_INST_DIR/bin:$PATH - export LD_LIBRARY_PATH=${ParaView_INST_DIR}/lib:${ParaView_INST_DIR}/lib/vtk:${LD_LIBRARY_PATH} -fi - -if [ -r $ParaView_DIR ] -then - export VTK_DIR=$ParaView_DIR/VTK -fi - -unset cmake paraviewMajor -# ----------------------------------------------------------------------------- diff --git a/etc/apps/paraview/cshrc b/etc/apps/paraview/cshrc deleted file mode 100644 index a1552a511686013ff9eef29b79d8153a07e9448d..0000000000000000000000000000000000000000 --- a/etc/apps/paraview/cshrc +++ /dev/null @@ -1,63 +0,0 @@ -#----------------------------------*-sh-*-------------------------------------- -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# -# Script -# paraview/cshrc -# -# Description -# Setup file for paraview-2.x -# Sourced from OpenFOAM-*/etc/cshrc -# -#------------------------------------------------------------------------------ - -# determine the cmake to be used -unsetenv CMAKE_HOME -foreach cmake ( cmake-2.6.4 cmake-2.6.2 cmake-2.4.6 ) - set cmake=$WM_THIRD_PARTY_DIR/$cmake/platforms/$WM_ARCH - if ( -r $cmake ) then - setenv CMAKE_HOME $cmake - set path=($CMAKE_HOME/bin $path) - break - endif -end - -set paraviewMajor=paraview-2.4 -setenv ParaView_VERSION 2.4.4 - -setenv ParaView_INST_DIR $WM_THIRD_PARTY_DIR/ParaView$ParaView_VERSION -setenv ParaView_DIR $ParaView_INST_DIR/lib/$paraviewMajor - -if ( -r $ParaView_INST_DIR ) then - setenv PV_INTERFACE_PATH $FOAM_UTILITIES/postProcessing/graphics/PVFoamReader/PVFoamReader/Make - - set path=($ParaView_INST_DIR/bin $path) - setenv LD_LIBRARY_PATH ${ParaView_INST_DIR}/lib:${ParaView_INST_DIR}/lib/vtk:${LD_LIBRARY_PATH} -endif - -if ( -r $ParaView_DIR ) then - setenv VTK_DIR $ParaView_DIR/VTK -endif - -unset cmake paraviewMajor -# ----------------------------------------------------------------------------- diff --git a/etc/apps/paraview3/bashrc b/etc/apps/paraview3/bashrc index 354687e30a50c46efe739382ff8f0745d8c3bc56..7209dc0da8367746ca5eb9a2008258a60bbfef8e 100644 --- a/etc/apps/paraview3/bashrc +++ b/etc/apps/paraview3/bashrc @@ -46,21 +46,22 @@ do fi done -paraviewMajor=paraview-3.6 -export ParaView_VERSION=3.6.1 +# set MAJOR and VERSION variables if not already set +[ -z "$ParaView_MAJOR" ] && export ParaView_MAJOR=paraview-3.6 +[ -z "$ParaView_VERSION" ] && export ParaView_VERSION=3.6.1 export ParaView_INST_DIR=$WM_THIRD_PARTY_DIR/paraview-$ParaView_VERSION export ParaView_DIR=$ParaView_INST_DIR/platforms/$WM_ARCH$WM_COMPILER # add in python libraries if required -paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping -if [ -r $paraviewPython ] +ParaView_PYTHON_DIR=$ParaView_DIR/Utilities/VTKPythonWrapping +if [ -r $ParaView_PYTHON_DIR ] then if [ "$PYTHONPATH" ] then - export PYTHONPATH=$PYTHONPATH:$paraviewPython:$ParaView_DIR/lib/$paraviewMajor + export PYTHONPATH=$PYTHONPATH:$ParaView_PYTHON_DIR:$ParaView_DIR/lib/$ParaView_MAJOR else - export PYTHONPATH=$paraviewPython:$ParaView_DIR/lib/$paraviewMajor + export PYTHONPATH=$ParaView_PYTHON_DIR:$ParaView_DIR/lib/$ParaView_MAJOR fi fi @@ -70,5 +71,5 @@ then export PV_PLUGIN_PATH=$FOAM_LIBBIN fi -unset cmake paraviewMajor paraviewPython +unset cmake ParaView_PYTHON_DIR # ----------------------------------------------------------------------------- diff --git a/etc/bashrc b/etc/bashrc index df864b40e12321ed5ac303a9eda1442a1525bde9..308d33bf84c1a37b0d064077b20c9b88b773c91a 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -82,8 +82,8 @@ export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION : ${WM_OSTYPE:=POSIX}; export WM_OSTYPE -# Compiler: set to Gcc, Gcc43 or Icc (for Intel's icc) -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Compiler: set to Gcc, Gcc43, Gcc44, or Icc (for Intel's icc) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : ${WM_COMPILER:=Gcc}; export WM_COMPILER export WM_COMPILER_ARCH= diff --git a/etc/cshrc b/etc/cshrc index f5fe32d26e1b3fce73b4f6436607517b780519c7..9ef6fb2d068da7d25cee0f81ef369b6521958d1f 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -76,8 +76,8 @@ setenv WM_THIRD_PARTY_DIR $WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION if ( ! $?WM_OSTYPE ) setenv WM_OSTYPE POSIX -# Compiler: set to Gcc, Gcc43 or Icc (for Intel's icc) -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Compiler: set to Gcc, Gcc43, Gcc44 or Icc (for Intel's icc) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if ( ! $?WM_COMPILER ) setenv WM_COMPILER Gcc setenv WM_COMPILER_ARCH diff --git a/etc/settings.csh b/etc/settings.csh index 1b33c5c42dd0b3f7561bb4198cd3c14620f95f29..a2a9c37b07071417948aa46353b381604f23f3d0 100644 --- a/etc/settings.csh +++ b/etc/settings.csh @@ -87,12 +87,12 @@ switch ("$compilerInstall") case OpenFOAM: switch ("$WM_COMPILER") case Gcc: - setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.3.3/platforms/$WM_ARCH$WM_COMPILER_ARCH + setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.4.2/platforms/$WM_ARCH$WM_COMPILER_ARCH _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib _foamAddLib $WM_THIRD_PARTY_DIR/gmp-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib breaksw case Gcc44: - setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH + setenv WM_COMPILER_DIR $WM_THIRD_PARTY_DIR/gcc-4.4.2/platforms/$WM_ARCH$WM_COMPILER_ARCH _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib _foamAddLib $WM_THIRD_PARTY_DIR/gmp-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib breaksw @@ -132,7 +132,7 @@ unset MPI_ARCH_PATH switch ("$WM_MPLIB") case OPENMPI: - set mpi_version=openmpi-1.3.3 + set mpi_version=openmpi-1.3.4 setenv MPI_HOME $WM_THIRD_PARTY_DIR/$mpi_version setenv MPI_ARCH_PATH $MPI_HOME/platforms/$WM_OPTIONS diff --git a/etc/settings.sh b/etc/settings.sh index f1abf1242394cc69ef4049114a91d12b57c961df..5dc56ac0188b38538d9c0dd494a10347d8b89c01 100644 --- a/etc/settings.sh +++ b/etc/settings.sh @@ -111,12 +111,12 @@ case "${compilerInstall:-OpenFOAM}" in OpenFOAM) case "$WM_COMPILER" in Gcc) - export WM_COMPILER_DIR=$WM_THIRD_PARTY_DIR/gcc-4.3.3/platforms/$WM_ARCH$WM_COMPILER_ARCH + export WM_COMPILER_DIR=$WM_THIRD_PARTY_DIR/gcc-4.4.2/platforms/$WM_ARCH$WM_COMPILER_ARCH _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib _foamAddLib $WM_THIRD_PARTY_DIR/gmp-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib ;; Gcc44) - export WM_COMPILER_DIR=$WM_THIRD_PARTY_DIR/gcc-4.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH + export WM_COMPILER_DIR=$WM_THIRD_PARTY_DIR/gcc-4.4.2/platforms/$WM_ARCH$WM_COMPILER_ARCH _foamAddLib $WM_THIRD_PARTY_DIR/mpfr-2.4.1/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib _foamAddLib $WM_THIRD_PARTY_DIR/gmp-4.2.4/platforms/$WM_ARCH$WM_COMPILER_ARCH/lib ;; @@ -163,7 +163,7 @@ unset MPI_ARCH_PATH case "$WM_MPLIB" in OPENMPI) - mpi_version=openmpi-1.3.3 + mpi_version=openmpi-1.3.4 export MPI_HOME=$WM_THIRD_PARTY_DIR/$mpi_version export MPI_ARCH_PATH=$MPI_HOME/platforms/$WM_OPTIONS diff --git a/src/Allwmake b/src/Allwmake index e4724a1e8f14bf4f331697de3da1895926345725..6592f244d711e9300cf0be993b87c706d712161d 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -27,7 +27,7 @@ wmake libso edgeMesh wmake libso surfMesh # Decomposition methods needed by meshTools -decompositionMethods/Allwmake +wmake libso parallel/decompositionMethods wmake libso meshTools wmake libso finiteVolume @@ -46,6 +46,7 @@ thermophysicalModels/Allwmake transportModels/Allwmake turbulenceModels/Allwmake lagrangian/Allwmake +parallel/Allwmake postProcessing/Allwmake conversion/Allwmake mesh/Allwmake diff --git a/src/OSspecific/POSIX/printStack.C b/src/OSspecific/POSIX/printStack.C index a6c2743298b8d320cba12c569960776c28f5a028..134107637577b697577bd620fa817e33b0ff8df0 100644 --- a/src/OSspecific/POSIX/printStack.C +++ b/src/OSspecific/POSIX/printStack.C @@ -181,7 +181,7 @@ void error::printStack(Ostream& os) { IFstream is("/proc/" + name(pid()) + "/maps"); - while(is.good()) + while (is.good()) { string line; is.getLine(line); diff --git a/src/OpenFOAM/algorithms/MeshWave/FaceCellWave.C b/src/OpenFOAM/algorithms/MeshWave/FaceCellWave.C index 5159644fbff9386867cd546fa728428a4efaa9e4..d7367856cc3bd7053286e10d3e5e5cd7fe44ef0a 100644 --- a/src/OpenFOAM/algorithms/MeshWave/FaceCellWave.C +++ b/src/OpenFOAM/algorithms/MeshWave/FaceCellWave.C @@ -57,11 +57,11 @@ Foam::Ostream& Foam::FaceCellWave<Type>::writeFaces { os << nFaces; - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { os << ' ' << faceLabels[i]; } - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { os << ' ' << faceInfo[i]; } @@ -70,11 +70,11 @@ Foam::Ostream& Foam::FaceCellWave<Type>::writeFaces { os << nFaces; - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { os << faceLabels[i]; } - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { os << faceInfo[i]; } @@ -95,11 +95,11 @@ Foam::Istream& Foam::FaceCellWave<Type>::readFaces { is >> nFaces; - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { is >> faceLabels[i]; } - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { is >> faceInfo[i]; } @@ -254,7 +254,7 @@ void Foam::FaceCellWave<Type>::checkCyclic(const polyPatch& patch) const { label cycOffset = patch.size()/2; - for(label patchFaceI = 0; patchFaceI < cycOffset; patchFaceI++) + for (label patchFaceI = 0; patchFaceI < cycOffset; patchFaceI++) { label i1 = patch.start() + patchFaceI; label i2 = i1 + cycOffset; @@ -339,7 +339,7 @@ void Foam::FaceCellWave<Type>::mergeFaceInfo const bool ) { - for(label changedFaceI = 0; changedFaceI < nFaces; changedFaceI++) + for (label changedFaceI = 0; changedFaceI < nFaces; changedFaceI++) { const Type& neighbourWallInfo = changedFacesInfo[changedFaceI]; label patchFaceI = changedFaces[changedFaceI]; @@ -377,7 +377,7 @@ Foam::label Foam::FaceCellWave<Type>::getChangedPatchFaces { label nChangedPatchFaces = 0; - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { label patchFaceI = i + startFaceI; @@ -406,7 +406,7 @@ void Foam::FaceCellWave<Type>::leaveDomain { const vectorField& fc = mesh_.faceCentres(); - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { label patchFaceI = faceLabels[i]; @@ -428,7 +428,7 @@ void Foam::FaceCellWave<Type>::enterDomain { const vectorField& fc = mesh_.faceCentres(); - for(label i = 0; i < nFaces; i++) + for (label i = 0; i < nFaces; i++) { label patchFaceI = faceLabels[i]; @@ -451,14 +451,14 @@ void Foam::FaceCellWave<Type>::transform { const tensor& T = rotTensor[0]; - for(label faceI = 0; faceI < nFaces; faceI++) + for (label faceI = 0; faceI < nFaces; faceI++) { faceInfo[faceI].transform(mesh_, T); } } else { - for(label faceI = 0; faceI < nFaces; faceI++) + for (label faceI = 0; faceI < nFaces; faceI++) { faceInfo[faceI].transform(mesh_, rotTensor[faceI]); } @@ -510,7 +510,7 @@ void Foam::FaceCellWave<Type>::offset labelList& faces ) { - for(label faceI = 0; faceI < nFaces; faceI++) + for (label faceI = 0; faceI < nFaces; faceI++) { faces[faceI] += cycOffset; } @@ -1064,7 +1064,7 @@ Foam::label Foam::FaceCellWave<Type>::iterate(const label maxIter) handleProcPatches(); } - while(iter_ < maxIter) + while (iter_ < maxIter) { if (debug) { diff --git a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H index b80240310622e57cf2752076ecfbe31f1e95413f..42bfbacb27b6857ed58c300de535fcce4cffd261 100644 --- a/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H +++ b/src/OpenFOAM/containers/Dictionaries/DictionaryBase/DictionaryBase.H @@ -144,7 +144,7 @@ public: void clear(); //- Transfer the contents of the argument into this DictionaryBase - // and annull the argument. + // and annul the argument. void transfer(DictionaryBase<IDLListType, T>&); // Member operators diff --git a/src/OpenFOAM/containers/HashTables/HashSet/HashSet.C b/src/OpenFOAM/containers/HashTables/HashSet/HashSet.C index d63921f95bac5638f029190f1a5a7077bdbdf2f6..041f0ccf77ac68cad3a807e215931084cb83485a 100644 --- a/src/OpenFOAM/containers/HashTables/HashSet/HashSet.C +++ b/src/OpenFOAM/containers/HashTables/HashSet/HashSet.C @@ -32,14 +32,30 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class Key, class Hash> -template<class AnyType> -Foam::HashSet<Key, Hash>::HashSet(const HashTable<AnyType, Key, Hash>& h) +Foam::HashSet<Key, Hash>::HashSet(const UList<Key>& lst) +: + HashTable<nil, Key, Hash>(2*lst.size()) +{ + forAll(lst, elemI) + { + insert(lst[elemI]); + } +} + + +template<class Key, class Hash> +template<class AnyType, class AnyHash> +Foam::HashSet<Key, Hash>::HashSet +( + const HashTable<AnyType, Key, AnyHash>& h +) : HashTable<nil, Key, Hash>(h.size()) { for ( - typename HashTable<AnyType, Key, Hash>::const_iterator cit = h.cbegin(); + typename HashTable<AnyType, Key, AnyHash>::const_iterator + cit = h.cbegin(); cit != h.cend(); ++cit ) @@ -49,6 +65,24 @@ Foam::HashSet<Key, Hash>::HashSet(const HashTable<AnyType, Key, Hash>& h) } +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Key, class Hash> +Foam::label Foam::HashSet<Key, Hash>::insert(const UList<Key>& lst) +{ + label count = 0; + forAll(lst, elemI) + { + if (insert(lst[elemI])) + { + ++count; + } + } + + return count; +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template<class Key, class Hash> @@ -105,7 +139,7 @@ template<class Key, class Hash> void Foam::HashSet<Key, Hash>::operator&=(const HashSet<Key, Hash>& rhs) { // Remove elements not also found in rhs - for (iterator iter = this->cbegin(); iter != this->cend(); ++iter) + for (iterator iter = this->begin(); iter != this->end(); ++iter) { if (!rhs.found(iter.key())) { @@ -145,8 +179,6 @@ void Foam::HashSet<Key, Hash>::operator-=(const HashSet<Key, Hash>& rhs) } -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // - /* * * * * * * * * * * * * * * * Global operators * * * * * * * * * * * * * */ template<class Key, class Hash> diff --git a/src/OpenFOAM/containers/HashTables/HashSet/HashSet.H b/src/OpenFOAM/containers/HashTables/HashSet/HashSet.H index 6353818d7efea8e8b93e8e499f821feecc9b3c13..15d408bf87641378ab169b43a76b1cca916fd043 100644 --- a/src/OpenFOAM/containers/HashTables/HashSet/HashSet.H +++ b/src/OpenFOAM/containers/HashTables/HashSet/HashSet.H @@ -84,15 +84,7 @@ public: {} //- Construct from UList of Key - HashSet(const UList<Key>& lst) - : - HashTable<nil, Key, Hash>(2*lst.size()) - { - forAll(lst, i) - { - insert(lst[i]); - } - } + HashSet(const UList<Key>&); //- Construct as copy HashSet(const HashSet<Key, Hash>& hs) @@ -114,8 +106,9 @@ public: //- Construct from the keys of another HashTable, // the type of values held is arbitrary. - template<class AnyType> - HashSet(const HashTable<AnyType, Key, Hash>&); + template<class AnyType, class AnyHash> + HashSet(const HashTable<AnyType, Key, AnyHash>&); + // Member Functions @@ -127,12 +120,23 @@ public: return HashTable<nil, Key, Hash>::insert(key, nil()); } + //- Insert keys from a UList of Key + // Return the number of new elements inserted + label insert(const UList<Key>&); + //- Same as insert (cannot overwrite nil content) bool set(const Key& key) { - return HashTable<nil, Key, Hash>::insert(key, nil()); + return insert(key); } + //- Same as insert (cannot overwrite nil content) + label set(const UList<Key>& lst) + { + return insert(lst); + } + + // Member Operators //- Return true if the entry exists, same as found() @@ -163,7 +167,6 @@ public: //- Remove entries listed in the given HashSet from this HashSet void operator-=(const HashSet<Key, Hash>&); - }; diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H index a945859880a15c6da17ad2e5e7dba099ac3536ba..492d6a9e0f4ce6d206e6486955f027fea4684e43 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H @@ -287,7 +287,7 @@ public: void shrink(); //- Transfer the contents of the argument table into this table - // and annull the argument table. + // and annul the argument table. void transfer(HashTable<T, Key, Hash>&); //- Transfer contents to the Xfer container @@ -463,7 +463,7 @@ public: inline iterator operator++(int); }; - //- iterator set to the begining of the HashTable + //- iterator set to the beginning of the HashTable inline iterator begin(); diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H index 610f3ccf2fd059c8a9700ee2da0985147824e2f1..9c870fdf45547f7d5a366da9db3505cd6f4920f4 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H @@ -180,7 +180,7 @@ inline Foam::HashTable<T, Key, Hash>::iteratorBase::iteratorBase entryPtr_(0), hashIndex_(0) { - if (hashTable_->nElmts_ && hashTable_->table_) + if (hashTable_->nElmts_) { // find first non-NULL table entry while diff --git a/src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTable.H b/src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTable.H index 09edf50c4644135cfa6d20330bf8d989894022a9..9806a138e00bdb60762d740651b32af853a8ee41 100644 --- a/src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTable.H +++ b/src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTable.H @@ -247,7 +247,7 @@ public: void clearStorage(); //- Transfer the contents of the argument table into this table - // and annull the argument table. + // and annul the argument table. void transfer(StaticHashTable<T, Key, Hash>&); //- Transfer contents to the Xfer container diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H index 20635fa53f944bedcaa4f240d05657a09782f2df..759d0c5dbe116705f4224e13a9fa8bb3d28d5de5 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H @@ -140,7 +140,7 @@ public: void clear(); //- Transfer the contents of the argument into this List - // and annull the argument list. + // and annul the argument list. void transfer(ILList<LListBase, T>&); diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H index 0905f5543cbd7f272845f62d5d7d8afa0633b9ae..a5e99a63e4d49cc3752acfccebfedc659668f272 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H @@ -202,7 +202,7 @@ public: void clear(); //- Transfer the contents of the argument into this List - // and annull the argument list. + // and annul the argument list. void transfer(LList<LListBase, T>&); // Member operators diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H index 333d916a65a4bbb84a0b75532cfcfaca28a0d463..c2e0250acd87cc74b59e96ae2a2b8e3932f01997 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H @@ -156,7 +156,7 @@ public: void clear(); //- Transfer the contents of the argument into this List - // and annull the argument list. + // and annul the argument list. void transfer(LPtrList<LListBase, T>&); diff --git a/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H b/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H index 848b797b2eabaa5c2175eb978b6f7fb20460e409..beb3c625da675c128857cc5f5c68aff6ec51a421 100644 --- a/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H +++ b/src/OpenFOAM/containers/LinkedLists/linkTypes/DLListBase/DLListBase.H @@ -172,7 +172,7 @@ public: inline void clear(); //- Transfer the contents of the argument into this List - // and annull the argument list. + // and annul the argument list. inline void transfer(DLListBase&); // STL iterator diff --git a/src/OpenFOAM/containers/LinkedLists/linkTypes/SLListBase/SLListBase.H b/src/OpenFOAM/containers/LinkedLists/linkTypes/SLListBase/SLListBase.H index b5c957a537020bd534dcd5a7670b413606516201..b2958c9e558bc81a20770d4c521ecd0548f76ddf 100644 --- a/src/OpenFOAM/containers/LinkedLists/linkTypes/SLListBase/SLListBase.H +++ b/src/OpenFOAM/containers/LinkedLists/linkTypes/SLListBase/SLListBase.H @@ -157,7 +157,7 @@ public: inline void clear(); //- Transfer the contents of the argument into this List - // and annull the argument list. + // and annul the argument list. inline void transfer(SLListBase&); // STL iterator diff --git a/src/OpenFOAM/containers/Lists/BiIndirectList/BiIndirectList.H b/src/OpenFOAM/containers/Lists/BiIndirectList/BiIndirectList.H index 5afd48d0f36c3b4ef11a09cf5bb8398df33d1338..1f761d9caf903a3d5bb50eba16130b01652baac3 100644 --- a/src/OpenFOAM/containers/Lists/BiIndirectList/BiIndirectList.H +++ b/src/OpenFOAM/containers/Lists/BiIndirectList/BiIndirectList.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class BiIndirectList Declaration + Class BiIndirectList Declaration \*---------------------------------------------------------------------------*/ template<class T> @@ -82,11 +82,16 @@ public: // Access + //- Return the number of elements in the list inline label size() const; - inline bool empty() const; + + //- Return true if the list is empty (ie, size() is zero). + inline bool empty() const; inline const UList<T>& posList() const; inline const UList<T>& negList() const; + + //- Return the list addressing inline const List<label>& addressing() const; //- Calculate index given whether index is into posList or negList diff --git a/src/OpenFOAM/containers/Lists/CompactListList/CompactListList.H b/src/OpenFOAM/containers/Lists/CompactListList/CompactListList.H index f1875dde70da930c069503e1d9a2e1b1e7ebf956..e8ee819add1a4cc2cf706d6f425f44a0d74cf4f8 100644 --- a/src/OpenFOAM/containers/Lists/CompactListList/CompactListList.H +++ b/src/OpenFOAM/containers/Lists/CompactListList/CompactListList.H @@ -61,8 +61,16 @@ namespace Foam template<class T, class Container> class CompactListList; -template<class T, class Container> Istream& operator>>(Istream&, CompactListList<T, Container>&); -template<class T, class Container> Ostream& operator<<(Ostream&, const CompactListList<T, Container>&); +template<class T, class Container> Istream& operator>> +( + Istream&, + CompactListList<T, Container>& +); +template<class T, class Container> Ostream& operator<< +( + Ostream&, + const CompactListList<T, Container>& +); /*---------------------------------------------------------------------------*\ @@ -183,7 +191,7 @@ public: labelList sizes() const; //- Transfer the contents of the argument CompactListList - // into this CompactListList and annull the argument list. + // into this CompactListList and annul the argument list. void transfer(CompactListList<T, Container>&); //- Transfer the contents to the Xfer container diff --git a/src/OpenFOAM/containers/Lists/FixedList/FixedList.H b/src/OpenFOAM/containers/Lists/FixedList/FixedList.H index 0e59184f668d5efa825f609be1875b73e4763df3..1d7285d86839e030810a46abfdb82bb75492d7af 100644 --- a/src/OpenFOAM/containers/Lists/FixedList/FixedList.H +++ b/src/OpenFOAM/containers/Lists/FixedList/FixedList.H @@ -154,6 +154,18 @@ public: // This can be used (with caution) when interfacing with C code. inline T* data(); + //- Return the first element of the list. + inline T& first(); + + //- Return first element of the list. + inline const T& first() const; + + //- Return the last element of the list. + inline T& last(); + + //- Return the last element of the list. + inline const T& last() const; + // Check diff --git a/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H b/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H index 1c3fe7131e6f179ad801a0151da2dd93d746c83e..ae762edb479254f43eb725a4b5589f1f6dcd987b 100644 --- a/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H +++ b/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H @@ -208,6 +208,34 @@ Foam::FixedList<T, Size>::data() } +template<class T, unsigned Size> +inline T& Foam::FixedList<T, Size>::first() +{ + return v_[0]; +} + + +template<class T, unsigned Size> +inline const T& Foam::FixedList<T, Size>::first() const +{ + return v_[0]; +} + + +template<class T, unsigned Size> +inline T& Foam::FixedList<T, Size>::last() +{ + return v_[Size-1]; +} + + +template<class T, unsigned Size> +inline const T& Foam::FixedList<T, Size>::last() const +{ + return v_[Size-1]; +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // // element access diff --git a/src/OpenFOAM/containers/Lists/IndirectList/IndirectList.H b/src/OpenFOAM/containers/Lists/IndirectList/IndirectList.H index cfdc03d7dc1fbc3d32a55020c423b8a5ce832ae2..a0d97af48ee42e49a22f9f7b5a1f360be07eed0a 100644 --- a/src/OpenFOAM/containers/Lists/IndirectList/IndirectList.H +++ b/src/OpenFOAM/containers/Lists/IndirectList/IndirectList.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class IndirectList Declaration + Class IndirectList Declaration \*---------------------------------------------------------------------------*/ template<class T> @@ -70,10 +70,28 @@ public: // Access + //- Return the number of elements in the list inline label size() const; - inline bool empty() const; + //- Return true if the list is empty (ie, size() is zero). + inline bool empty() const; + + //- Return the first element of the list. + inline T& first(); + + //- Return first element of the list. + inline const T& first() const; + + //- Return the last element of the list. + inline T& last(); + + //- Return the last element of the list. + inline const T& last() const; + + //- Return the complete list inline const UList<T>& completeList() const; + + //- Return the list addressing inline const List<label>& addressing() const; // Edit diff --git a/src/OpenFOAM/containers/Lists/IndirectList/IndirectListI.H b/src/OpenFOAM/containers/Lists/IndirectList/IndirectListI.H index a1e2bf9a54e7018588b183d6f55614104e69bc95..47eedb733d1115cf0aba6d91830df8440090770a 100644 --- a/src/OpenFOAM/containers/Lists/IndirectList/IndirectListI.H +++ b/src/OpenFOAM/containers/Lists/IndirectList/IndirectListI.H @@ -66,6 +66,34 @@ inline bool Foam::IndirectList<T>::empty() const } +template<class T> +inline T& Foam::IndirectList<T>::first() +{ + return completeList_[addressing_.first()]; +} + + +template<class T> +inline const T& Foam::IndirectList<T>::first() const +{ + return completeList_[addressing_.first()]; +} + + +template<class T> +inline T& Foam::IndirectList<T>::last() +{ + return completeList_[addressing_.last()]; +} + + +template<class T> +inline const T& Foam::IndirectList<T>::last() const +{ + return completeList_[addressing_.last()]; +} + + template<class T> inline const Foam::UList<T>& Foam::IndirectList<T>::completeList() const { diff --git a/src/OpenFOAM/containers/Lists/List/List.C b/src/OpenFOAM/containers/Lists/List/List.C index fb6d9a0678929e05f12888dc97361f578aadc32e..4158043b083ddcd28d799d03979dbe6f842bdbc0 100644 --- a/src/OpenFOAM/containers/Lists/List/List.C +++ b/src/OpenFOAM/containers/Lists/List/List.C @@ -404,7 +404,7 @@ void Foam::List<T>::clear() // Transfer the contents of the argument List into this List -// and anull the argument list +// and annul the argument list template<class T> void Foam::List<T>::transfer(List<T>& a) { @@ -418,7 +418,7 @@ void Foam::List<T>::transfer(List<T>& a) // Transfer the contents of the argument DynamicList into this List -// and anull the argument list +// and annul the argument list template<class T> template<unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv> void Foam::List<T>::transfer(DynamicList<T, SizeInc, SizeMult, SizeDiv>& a) @@ -431,7 +431,7 @@ void Foam::List<T>::transfer(DynamicList<T, SizeInc, SizeMult, SizeDiv>& a) // Transfer the contents of the argument SortableList into this List -// and anull the argument list +// and annul the argument list template<class T> void Foam::List<T>::transfer(SortableList<T>& a) { diff --git a/src/OpenFOAM/containers/Lists/List/List.H b/src/OpenFOAM/containers/Lists/List/List.H index 7e623f6560f8008fdedbaa0d132651d8c0c2d0f4..5fec41ef4d7a9a0ecdacda2916cd9bef02f1c171 100644 --- a/src/OpenFOAM/containers/Lists/List/List.H +++ b/src/OpenFOAM/containers/Lists/List/List.H @@ -188,16 +188,16 @@ public: inline void append(const UIndirectList<T>&); //- Transfer the contents of the argument List into this list - // and annull the argument list. + // and annul the argument list. void transfer(List<T>&); //- Transfer the contents of the argument List into this list - // and annull the argument list. + // and annul the argument list. template<unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv> void transfer(DynamicList<T, SizeInc, SizeMult, SizeDiv>&); //- Transfer the contents of the argument List into this list - // and annull the argument list. + // and annul the argument list. void transfer(SortableList<T>&); //- Transfer contents to the Xfer container diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H index 1504fb4d78363167fd2f4e934270702728afc71d..98c7660155f2f618474327a5ba553d514e23c205 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H @@ -172,7 +172,7 @@ template<class ListType> ListType createWithValues ( const label sz, - const typename ListType::const_reference initValue, + typename ListType::const_reference initValue, const UList<label>& indices, typename ListType::const_reference setValue ); diff --git a/src/OpenFOAM/containers/Lists/PackedList/PackedList.H b/src/OpenFOAM/containers/Lists/PackedList/PackedList.H index 82ac19fc0e532305100010cb82cb3fab17bc3899..78c7306b6e477d7f8a5482963b17f37c68649a7c 100644 --- a/src/OpenFOAM/containers/Lists/PackedList/PackedList.H +++ b/src/OpenFOAM/containers/Lists/PackedList/PackedList.H @@ -253,7 +253,7 @@ public: inline void shrink(); //- Transfer the contents of the argument list into this list - // and annull the argument list. + // and annul the argument list. inline void transfer(PackedList<nBits>&); //- Transfer contents to the Xfer container diff --git a/src/OpenFOAM/containers/Lists/PtrList/PtrList.H b/src/OpenFOAM/containers/Lists/PtrList/PtrList.H index 3f3e6d8fe6c284e32d1683ca6ab0010854c73b40..fdefbf597c6d7c5b5cf3d4fb0e251927b83b1076 100644 --- a/src/OpenFOAM/containers/Lists/PtrList/PtrList.H +++ b/src/OpenFOAM/containers/Lists/PtrList/PtrList.H @@ -29,8 +29,8 @@ Description A templated 1D list of pointers to objects of type \<T\>, where the size of the array is known and used for subscript bounds checking, etc. - The element operator [] returns a reference to the object - rather than to the pointer. + The element operator [] returns a reference to the object rather than a + pointer. SourceFiles PtrList.C @@ -119,7 +119,7 @@ public: //- Null Constructor. PtrList(); - //- Construct with length specified. + //- Construct with size specified. explicit PtrList(const label); //- Copy constructor. @@ -130,7 +130,7 @@ public: PtrList(const PtrList<T>&, const CloneArg&); //- Construct by transferring the parameter contents - PtrList(const Xfer<PtrList<T> >&); + PtrList(const Xfer< PtrList<T> >&); //- Construct as copy or re-use as specified. PtrList(PtrList<T>&, bool reUse); @@ -161,6 +161,17 @@ public: //- Return true if the PtrList is empty (ie, size() is zero). inline bool empty() const; + //- Return reference to the first element of the list. + inline T& first(); + + //- Return reference to first element of the list. + inline const T& first() const; + + //- Return reference to the last element of the list. + inline T& last(); + + //- Return reference to the last element of the list. + inline const T& last() const; // Edit @@ -181,11 +192,11 @@ public: void clear(); //- Transfer the contents of the argument PtrList into this PtrList - // and annull the argument list. + // and annul the argument list. void transfer(PtrList<T>&); //- Transfer contents to the Xfer container - inline Xfer<PtrList<T> > xfer(); + inline Xfer< PtrList<T> > xfer(); //- Is element set inline bool set(const label) const; diff --git a/src/OpenFOAM/containers/Lists/PtrList/PtrListI.H b/src/OpenFOAM/containers/Lists/PtrList/PtrListI.H index d450cdd09fe7107d975d338031f066878be7fca1..72cb24f78dd1226410738f7b182bd17df69039b3 100644 --- a/src/OpenFOAM/containers/Lists/PtrList/PtrListI.H +++ b/src/OpenFOAM/containers/Lists/PtrList/PtrListI.H @@ -45,6 +45,34 @@ inline bool Foam::PtrList<T>::empty() const } +template<class T> +inline T& Foam::PtrList<T>::first() +{ + return this->operator[](0); +} + + +template<class T> +inline const T& Foam::PtrList<T>::first() const +{ + return this->operator[](0); +} + + +template<class T> +inline T& Foam::PtrList<T>::last() +{ + return this->operator[](this->size()-1); +} + + +template<class T> +inline const T& Foam::PtrList<T>::last() const +{ + return this->operator[](this->size()-1); +} + + template<class T> inline void Foam::PtrList<T>::resize(const label newSize) { @@ -63,9 +91,7 @@ template<class T> inline Foam::autoPtr<T> Foam::PtrList<T>::set(const label i, T* ptr) { autoPtr<T> old(ptrs_[i]); - ptrs_[i] = ptr; - return old; } @@ -102,7 +128,7 @@ inline Foam::Xfer<Foam::PtrList<T> > Foam::PtrList<T>::xfer() // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template<class T> -const T& Foam::PtrList<T>::operator[](const label i) const +inline const T& Foam::PtrList<T>::operator[](const label i) const { if (!ptrs_[i]) { @@ -116,7 +142,7 @@ const T& Foam::PtrList<T>::operator[](const label i) const template<class T> -T& Foam::PtrList<T>::operator[](const label i) +inline T& Foam::PtrList<T>::operator[](const label i) { if (!ptrs_[i]) { @@ -130,7 +156,7 @@ T& Foam::PtrList<T>::operator[](const label i) template<class T> -const T* Foam::PtrList<T>::operator()(const label i) const +inline const T* Foam::PtrList<T>::operator()(const label i) const { return ptrs_[i]; } @@ -297,5 +323,4 @@ Foam::PtrList<T>::end() } - // ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H b/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H index 0219e02af72861fb2c92b001b498f6ff1fb68b18..61ec6bf2d144f87a3a3aab68108a75463e07ff47 100644 --- a/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H +++ b/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H @@ -27,6 +27,7 @@ Class Description A List with indirect addressing. + Like IndirectList but does not store addressing. SourceFiles @@ -73,8 +74,24 @@ public: // Access + //- Return the number of elements in the list inline label size() const; - inline bool empty() const; + + //- Return true if the list is empty (ie, size() is zero). + inline bool empty() const; + + //- Return the first element of the list. + inline T& first(); + + //- Return first element of the list. + inline const T& first() const; + + //- Return the last element of the list. + inline T& last(); + + //- Return the last element of the list. + inline const T& last() const; + inline const UList<T>& completeList() const; inline const List<label>& addressing() const; diff --git a/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectListI.H b/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectListI.H index ff8b3ebbd6d0ff9146cc259baf09bb0004218bb9..e8e7565ed1318a61a8a27a7d0a66b47065387eaf 100644 --- a/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectListI.H +++ b/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectListI.H @@ -54,6 +54,34 @@ inline bool Foam::UIndirectList<T>::empty() const } +template<class T> +inline T& Foam::UIndirectList<T>::first() +{ + return completeList_[addressing_.first()]; +} + + +template<class T> +inline const T& Foam::UIndirectList<T>::first() const +{ + return completeList_[addressing_.first()]; +} + + +template<class T> +inline T& Foam::UIndirectList<T>::last() +{ + return completeList_[addressing_.last()]; +} + + +template<class T> +inline const T& Foam::UIndirectList<T>::last() const +{ + return completeList_[addressing_.last()]; +} + + template<class T> inline const Foam::UList<T>& Foam::UIndirectList<T>::completeList() const { diff --git a/src/OpenFOAM/containers/Lists/UList/UList.H b/src/OpenFOAM/containers/Lists/UList/UList.H index 087f685ff6cf182cee3be9fe3a4c24370d3f25fa..b9332d04c2e86d37dcefe93b34542a9945569934 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.H +++ b/src/OpenFOAM/containers/Lists/UList/UList.H @@ -132,7 +132,7 @@ public: inline label fcIndex(const label i) const; //- Return the reverse circular index, i.e. the previous index - // which returns to the last at the begining of the list + // which returns to the last at the beginning of the list inline label rcIndex(const label i) const; //- Return the binary size in number of characters of the UList @@ -151,6 +151,18 @@ public: // This can be used (with caution) when interfacing with C code. inline T* data(); + //- Return the first element of the list. + inline T& first(); + + //- Return first element of the list. + inline const T& first() const; + + //- Return the last element of the list. + inline T& last(); + + //- Return the last element of the list. + inline const T& last() const; + // Check diff --git a/src/OpenFOAM/containers/Lists/UList/UListI.H b/src/OpenFOAM/containers/Lists/UList/UListI.H index 5c1df4be15c318df142cb195940dd5643b7db0d7..fb68f29ee86ed0575e541b2aaa4b0197d0110d1e 100644 --- a/src/OpenFOAM/containers/Lists/UList/UListI.H +++ b/src/OpenFOAM/containers/Lists/UList/UListI.H @@ -114,6 +114,34 @@ inline void Foam::UList<T>::checkIndex(const label i) const } +template<class T> +inline T& Foam::UList<T>::first() +{ + return this->operator[](0); +} + + +template<class T> +inline const T& Foam::UList<T>::first() const +{ + return this->operator[](0); +} + + +template<class T> +inline T& Foam::UList<T>::last() +{ + return this->operator[](this->size()-1); +} + + +template<class T> +inline const T& Foam::UList<T>::last() const +{ + return this->operator[](this->size()-1); +} + + template<class T> inline const T* Foam::UList<T>::cdata() const { diff --git a/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C b/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C index bed0214749efe46fecb7de60e3e063c612fbf7d7..93b7a514c6653282ccafd5d9169b9452ac36374e 100644 --- a/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C +++ b/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C @@ -93,8 +93,6 @@ void Foam::UPtrList<T>::clear() } -// Transfer the contents of the argument List into this List -// and anull the argument list template<class T> void Foam::UPtrList<T>::transfer(UPtrList<T>& a) { diff --git a/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.H b/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.H index a334e812543688364dbbde8b6754e4fff2542286..eaf70c3b05b1fcfbce88de1af119ef12811f3ec7 100644 --- a/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.H +++ b/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.H @@ -26,8 +26,8 @@ Class Foam::UPtrList Description - A 1D array of pointers to objects of type \<T\>, where the size of the - array is known and used for subscript bounds checking, etc. + A templated 1D list of pointers to objects of type \<T\>, where the + size of the array is known and used for subscript bounds checking, etc. The element operator [] returns a reference to the object rather than a pointer. Storage is not allocated during construction or use but is @@ -107,11 +107,11 @@ public: //- Null Constructor. UPtrList(); - //- Construct with length specified. + //- Construct with size specified. explicit UPtrList(const label); //- Construct by transferring the parameter contents - UPtrList(const Xfer<UPtrList<T> >&); + UPtrList(const Xfer< UPtrList<T> >&); //- Construct as copy or re-use as specified. UPtrList(UPtrList<T>&, bool reUse); @@ -127,6 +127,18 @@ public: //- Return true if the UPtrList is empty (ie, size() is zero). inline bool empty() const; + //- Return reference to the first element of the list. + inline T& first(); + + //- Return reference to first element of the list. + inline const T& first() const; + + //- Return reference to the last element of the list. + inline T& last(); + + //- Return reference to the last element of the list. + inline const T& last() const; + // Edit @@ -144,11 +156,11 @@ public: void clear(); //- Transfer the contents of the argument UPtrList into this - // UPtrList and annull the argument list. + // UPtrList and annul the argument list. void transfer(UPtrList<T>&); //- Transfer contents to the Xfer container - inline Xfer<UPtrList<T> > xfer(); + inline Xfer< UPtrList<T> > xfer(); //- Is element set inline bool set(const label) const; diff --git a/src/OpenFOAM/containers/Lists/UPtrList/UPtrListI.H b/src/OpenFOAM/containers/Lists/UPtrList/UPtrListI.H index 859f54fce5f7d45b2cb278be640db627183d7ceb..1d73bc920da2c71acc53b7653ed696aeffaa0cad 100644 --- a/src/OpenFOAM/containers/Lists/UPtrList/UPtrListI.H +++ b/src/OpenFOAM/containers/Lists/UPtrList/UPtrListI.H @@ -42,6 +42,34 @@ inline bool Foam::UPtrList<T>::empty() const } +template<class T> +inline T& Foam::UPtrList<T>::first() +{ + return this->operator[](0); +} + + +template<class T> +inline const T& Foam::UPtrList<T>::first() const +{ + return this->operator[](0); +} + + +template<class T> +inline T& Foam::UPtrList<T>::last() +{ + return this->operator[](this->size()-1); +} + + +template<class T> +inline const T& Foam::UPtrList<T>::last() const +{ + return this->operator[](this->size()-1); +} + + template<class T> inline void Foam::UPtrList<T>::resize(const label newSize) { @@ -55,6 +83,7 @@ inline bool Foam::UPtrList<T>::set(const label i) const return ptrs_[i] != NULL; } + template<class T> inline T* Foam::UPtrList<T>::set(const label i, T* ptr) { @@ -63,6 +92,7 @@ inline T* Foam::UPtrList<T>::set(const label i, T* ptr) return old; } + template<class T> inline Foam::Xfer<Foam::UPtrList<T> > Foam::UPtrList<T>::xfer() { @@ -73,7 +103,7 @@ inline Foam::Xfer<Foam::UPtrList<T> > Foam::UPtrList<T>::xfer() // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template<class T> -const T& Foam::UPtrList<T>::operator[](const label i) const +inline const T& Foam::UPtrList<T>::operator[](const label i) const { if (!ptrs_[i]) { @@ -87,7 +117,7 @@ const T& Foam::UPtrList<T>::operator[](const label i) const template<class T> -T& Foam::UPtrList<T>::operator[](const label i) +inline T& Foam::UPtrList<T>::operator[](const label i) { if (!ptrs_[i]) { @@ -101,7 +131,7 @@ T& Foam::UPtrList<T>::operator[](const label i) template<class T> -const T* Foam::UPtrList<T>::operator()(const label i) const +inline const T* Foam::UPtrList<T>::operator()(const label i) const { return ptrs_[i]; } diff --git a/src/OpenFOAM/db/IOobjectList/IOobjectList.C b/src/OpenFOAM/db/IOobjectList/IOobjectList.C index a55f68a42518df908f7cfd1ec746027b92188e39..41eb798407d1ea0b841e85d17386ade24baded3e 100644 --- a/src/OpenFOAM/db/IOobjectList/IOobjectList.C +++ b/src/OpenFOAM/db/IOobjectList/IOobjectList.C @@ -58,7 +58,7 @@ Foam::IOobjectList::IOobjectList } } - // Create list file names in directory + // Create a list of file names in this directory fileNameList ObjectNames = readDir(db.path(newInstance, db.dbDir()/local), fileName::FILE); @@ -130,8 +130,8 @@ Foam::IOobject* Foam::IOobjectList::lookup(const word& name) const { if (IOobject::debug) { - Info<< "IOobjectList::lookup : found " << name - << endl; + Info<< "IOobjectList::lookup : found " + << name << endl; } return const_cast<IOobject*>(*iter); @@ -140,8 +140,8 @@ Foam::IOobject* Foam::IOobjectList::lookup(const word& name) const { if (IOobject::debug) { - Info<< "IOobjectList::lookup : could not find " << name - << endl; + Info<< "IOobjectList::lookup : could not find " + << name << endl; } return NULL; @@ -151,7 +151,7 @@ Foam::IOobject* Foam::IOobjectList::lookup(const word& name) const Foam::IOobjectList Foam::IOobjectList::lookupClass(const word& ClassName) const { - IOobjectList IOobjectsOfClass(size()); + IOobjectList objectsOfClass(size()); for ( @@ -165,34 +165,26 @@ Foam::IOobjectList Foam::IOobjectList::lookupClass(const word& ClassName) const if (IOobject::debug) { Info<< "IOobjectList::lookupClass : found " - << iter()->name() - << endl; + << iter.key() << endl; } - IOobjectsOfClass.insert(iter()->name(), new IOobject(*iter())); + objectsOfClass.insert(iter.key(), new IOobject(*iter())); } } - return IOobjectsOfClass; + return objectsOfClass; } Foam::wordList Foam::IOobjectList::names() const { - wordList objectNames(size()); + return HashPtrTable<IOobject>::toc(); +} - label count = 0; - for - ( - HashPtrTable<IOobject>::const_iterator iter = begin(); - iter != end(); - ++iter - ) - { - objectNames[count++] = iter()->name(); - } - return objectNames; +Foam::wordList Foam::IOobjectList::sortedNames() const +{ + return HashPtrTable<IOobject>::sortedToc(); } @@ -210,7 +202,7 @@ Foam::wordList Foam::IOobjectList::names(const word& ClassName) const { if (iter()->headerClassName() == ClassName) { - objectNames[count++] = iter()->name(); + objectNames[count++] = iter.key(); } } @@ -220,4 +212,13 @@ Foam::wordList Foam::IOobjectList::names(const word& ClassName) const } +Foam::wordList Foam::IOobjectList::sortedNames(const word& ClassName) const +{ + wordList sortedLst = names(ClassName); + sort(sortedLst); + + return sortedLst; +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/db/IOobjectList/IOobjectList.H b/src/OpenFOAM/db/IOobjectList/IOobjectList.H index 71c63f9d38d339667e12772734b58d2daa34c60a..fc6034115f71f43ddf2bda132bd721bd319b1871 100644 --- a/src/OpenFOAM/db/IOobjectList/IOobjectList.H +++ b/src/OpenFOAM/db/IOobjectList/IOobjectList.H @@ -84,23 +84,29 @@ public: // Member functions - //- Add an IOobject to list + //- Add an IOobject to the list bool add(IOobject&); - //- Remove an IOobject from list + //- Remove an IOobject from the list bool remove(IOobject&); //- Lookup a given name and return IOobject ptr if found else NULL IOobject* lookup(const word& name) const; - //- Return the list for all IOobjects of given class + //- 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; + //- Return the list of names of the IOobjects of given class wordList names(const word& className) const; + + //- Return the sorted list of names of the IOobjects of given class + wordList sortedNames(const word& className) const; }; diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C index 87f940db406263fc8e747134db6197456772cd0a..41cb1c4f110bc75c61dfdcd904812cc77d13eac3 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C +++ b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C @@ -82,9 +82,6 @@ void Foam::PstreamBuffers::finishedSends(labelListList& sizes, const bool block) if (commsType_ == UPstream::nonBlocking) { - labelListList sizes; - labelListList send,recv; - Pstream::exchange<DynamicList<char>, char> ( sendBuf_, @@ -96,20 +93,30 @@ void Foam::PstreamBuffers::finishedSends(labelListList& sizes, const bool block) } else { - sizes.setSize(UPstream::nProcs()); - labelList& nsTransPs = sizes[UPstream::myProcNo()]; - nsTransPs.setSize(UPstream::nProcs()); - - forAll(sendBuf_, procI) - { - nsTransPs[procI] = sendBuf_[procI].size(); - } - - // Send sizes across. - int oldTag = UPstream::msgType(); - UPstream::msgType() = tag_; - combineReduce(sizes, UPstream::listEq()); - UPstream::msgType() = oldTag; + FatalErrorIn + ( + "PstreamBuffers::finishedSends(labelListList&, const bool)" + ) << "Obtaining sizes not supported in " + << UPstream::commsTypeNames[commsType_] << endl + << " since transfers already in progress. Use non-blocking instead." + << exit(FatalError); + + // Note: possible only if using different tag from write started + // by ~UOPstream. Needs some work. + //sizes.setSize(UPstream::nProcs()); + //labelList& nsTransPs = sizes[UPstream::myProcNo()]; + //nsTransPs.setSize(UPstream::nProcs()); + // + //forAll(sendBuf_, procI) + //{ + // nsTransPs[procI] = sendBuf_[procI].size(); + //} + // + //// Send sizes across. + //int oldTag = UPstream::msgType(); + //UPstream::msgType() = tag_; + //combineReduce(sizes, UPstream::listEq()); + //UPstream::msgType() = oldTag; } } diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H index d3dbbf23db7f60f61f64996439e57591f62ec3c1..75f26f1d6a9468d6caba8174921895dbf84fe1b2 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H +++ b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H @@ -138,7 +138,8 @@ public: void finishedSends(const bool block = true); //- Mark all sends as having been done. Same as above but also returns - // sizes (bytes) transferred. + // sizes (bytes) transferred. Note:currently only valid for + // non-blocking. void finishedSends(labelListList& sizes, const bool block = true); }; diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C b/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C index 64ced34ecf4c54f4e181a31a5f747f84641872d7..b950ed22f0643da83759b04587e779580902aea6 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C +++ b/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C @@ -50,43 +50,42 @@ void Pstream::exchange const bool block ) { - if (UPstream::parRun()) + if (!contiguous<T>()) { - if (!contiguous<T>()) - { - FatalErrorIn - ( - "Pstream::exchange(..)" - ) << "Continuous data only." << Foam::abort(FatalError); - } - - if (sendBufs.size() != UPstream::nProcs()) - { - FatalErrorIn - ( - "Pstream::exchange(..)" - ) << "Size of list:" << sendBufs.size() - << " does not equal the number of processors:" - << UPstream::nProcs() - << Foam::abort(FatalError); - } + FatalErrorIn + ( + "Pstream::exchange(..)" + ) << "Continuous data only." << Foam::abort(FatalError); + } - sizes.setSize(UPstream::nProcs()); - labelList& nsTransPs = sizes[UPstream::myProcNo()]; - nsTransPs.setSize(UPstream::nProcs()); + if (sendBufs.size() != UPstream::nProcs()) + { + FatalErrorIn + ( + "Pstream::exchange(..)" + ) << "Size of list:" << sendBufs.size() + << " does not equal the number of processors:" + << UPstream::nProcs() + << Foam::abort(FatalError); + } - forAll(sendBufs, procI) - { - nsTransPs[procI] = sendBufs[procI].size(); - } + sizes.setSize(UPstream::nProcs()); + labelList& nsTransPs = sizes[UPstream::myProcNo()]; + nsTransPs.setSize(UPstream::nProcs()); - // Send sizes across. - int oldTag = UPstream::msgType(); - UPstream::msgType() = tag; - combineReduce(sizes, UPstream::listEq()); - UPstream::msgType() = oldTag; + forAll(sendBufs, procI) + { + nsTransPs[procI] = sendBufs[procI].size(); + } + // Send sizes across. + int oldTag = UPstream::msgType(); + UPstream::msgType() = tag; + combineReduce(sizes, UPstream::listEq()); + UPstream::msgType() = oldTag; + if (Pstream::parRun()) + { // Set up receives // ~~~~~~~~~~~~~~~ diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C index 7405cfb5b650ccff8bf3c501025360d2976c608d..bda1666bec2995454974785a912fb3b7f63fbc7b 100644 --- a/src/OpenFOAM/db/Time/Time.C +++ b/src/OpenFOAM/db/Time/Time.C @@ -129,7 +129,7 @@ void Foam::Time::setControls() { if (timeDirs.size()) { - startTime_ = timeDirs[timeDirs.size()-1].value(); + startTime_ = timeDirs.last().value(); } } else @@ -419,9 +419,9 @@ Foam::instant Foam::Time::findClosestTime(const scalar t) const { return timeDirs[1]; } - else if (t > timeDirs[timeDirs.size()-1].value()) + else if (t > timeDirs.last().value()) { - return timeDirs[timeDirs.size()-1]; + return timeDirs.last(); } label nearestIndex = -1; @@ -532,6 +532,22 @@ bool Foam::Time::end() const } +void Foam::Time::stopAt(const stopAtControls sa) const +{ + stopAt_ = sa; + + // adjust endTime + if (sa == saEndTime) + { + controlDict_.lookup("endTime") >> endTime_; + } + else + { + endTime_ = GREAT; + } +} + + void Foam::Time::setTime(const Time& t) { value() = t.value(); @@ -662,83 +678,89 @@ Foam::Time& Foam::Time::operator++() deltaTSave_ = deltaT_; setTime(value() + deltaT_, timeIndex_ + 1); - // If the time is very close to zero reset to zero - if (mag(value()) < 10*SMALL*deltaT_) - { - setTime(0.0, timeIndex_); - } - - switch (writeControl_) + if (!subCycling_) { - case wcTimeStep: - outputTime_ = !(timeIndex_ % label(writeInterval_)); - break; + // If the time is very close to zero reset to zero + if (mag(value()) < 10*SMALL*deltaT_) + { + setTime(0.0, timeIndex_); + } - case wcRunTime: - case wcAdjustableRunTime: + switch (writeControl_) { - label outputIndex = - label(((value() - startTime_) + 0.5*deltaT_)/writeInterval_); + case wcTimeStep: + outputTime_ = !(timeIndex_ % label(writeInterval_)); + break; - if (outputIndex > outputTimeIndex_) - { - outputTime_ = true; - outputTimeIndex_ = outputIndex; - } - else + case wcRunTime: + case wcAdjustableRunTime: { - outputTime_ = false; + label outputIndex = label + ( + ((value() - startTime_) + 0.5*deltaT_) + / writeInterval_ + ); + + if (outputIndex > outputTimeIndex_) + { + outputTime_ = true; + outputTimeIndex_ = outputIndex; + } + else + { + outputTime_ = false; + } } - } - break; + break; - case wcCpuTime: - { - label outputIndex = label(elapsedCpuTime()/writeInterval_); - if (outputIndex > outputTimeIndex_) + case wcCpuTime: { - outputTime_ = true; - outputTimeIndex_ = outputIndex; + label outputIndex = label(elapsedCpuTime()/writeInterval_); + if (outputIndex > outputTimeIndex_) + { + outputTime_ = true; + outputTimeIndex_ = outputIndex; + } + else + { + outputTime_ = false; + } } - else + break; + + case wcClockTime: { - outputTime_ = false; + label outputIndex = label(elapsedClockTime()/writeInterval_); + if (outputIndex > outputTimeIndex_) + { + outputTime_ = true; + outputTimeIndex_ = outputIndex; + } + else + { + outputTime_ = false; + } } + break; } - break; - case wcClockTime: + // see if endTime needs adjustment to stop at the next run()/end() check + if (!end()) { - label outputIndex = label(elapsedClockTime()/writeInterval_); - if (outputIndex > outputTimeIndex_) + if (stopAt_ == saNoWriteNow) + { + endTime_ = value(); + } + else if (stopAt_ == saWriteNow) { + endTime_ = value(); outputTime_ = true; - outputTimeIndex_ = outputIndex; } - else + else if (stopAt_ == saNextWrite && outputTime_ == true) { - outputTime_ = false; + endTime_ = value(); } } - break; - } - - // see if endTime needs adjustment to stop at the next run()/end() check - if (!end()) - { - if (stopAt_ == saNoWriteNow) - { - endTime_ = value(); - } - else if (stopAt_ == saWriteNow) - { - endTime_ = value(); - outputTime_ = true; - } - else if (stopAt_ == saNextWrite && outputTime_ == true) - { - endTime_ = value(); - } } return *this; diff --git a/src/OpenFOAM/db/Time/Time.H b/src/OpenFOAM/db/Time/Time.H index 261d9eb0a2387497147a7c4ea364465a8dd79b4e..d90cab32ec908bc776bc847895fb6e78323082ce 100644 --- a/src/OpenFOAM/db/Time/Time.H +++ b/src/OpenFOAM/db/Time/Time.H @@ -90,17 +90,17 @@ public: //- Stop-run control options enum stopAtControls { - saEndTime, - saNoWriteNow, - saWriteNow, - saNextWrite + saEndTime, /*!< stop when Time reaches the prescribed endTime */ + saNoWriteNow, /*!< set endTime to stop immediately w/o writing */ + saWriteNow, /*!< set endTime to stop immediately w/ writing */ + saNextWrite /*!< stop the next time data are written */ }; - //- Suported time directory name formats + //- Supported time directory name formats enum fmtflags { - general = 0, - fixed = ios_base::fixed, + general = 0, + fixed = ios_base::fixed, scientific = ios_base::scientific }; @@ -111,10 +111,10 @@ protected: label startTimeIndex_; scalar startTime_; - scalar endTime_; + mutable scalar endTime_; static const NamedEnum<stopAtControls, 4> stopAtControlNames_; - stopAtControls stopAt_; + mutable stopAtControls stopAt_; static const NamedEnum<writeControls, 5> writeControlNames_; writeControls writeControl_; @@ -390,6 +390,10 @@ public: // Edit + //- Adjust the current stopAtControl. Note that this value + // only persists until the next time the dictionary is read. + virtual void stopAt(const stopAtControls) const; + //- Reset the time and time-index to those of the given time virtual void setTime(const Time&); diff --git a/src/OpenFOAM/db/dictionary/dictionary.C b/src/OpenFOAM/db/dictionary/dictionary.C index fb6f28af5b89516118eaf0597e46b176122ef1b2..9d022d5111e86400df9d64fa2ef371d0824c87fe 100644 --- a/src/OpenFOAM/db/dictionary/dictionary.C +++ b/src/OpenFOAM/db/dictionary/dictionary.C @@ -109,14 +109,21 @@ Foam::dictionary::dictionary() {} +Foam::dictionary::dictionary(const fileName& name) +: + dictionaryName(name), + parent_(dictionary::null) +{} + + Foam::dictionary::dictionary ( const dictionary& parentDict, const dictionary& dict ) : + dictionaryName(parentDict.name() + "::" + dict.name()), IDLList<entry>(dict, *this), - name_(dict.name()), parent_(parentDict) { forAllIter(IDLList<entry>, *this, iter) @@ -140,8 +147,8 @@ Foam::dictionary::dictionary const dictionary& dict ) : + dictionaryName(dict.name()), IDLList<entry>(dict, *this), - name_(dict.name()), parent_(dictionary::null) { forAllIter(IDLList<entry>, *this, iter) @@ -183,6 +190,7 @@ Foam::dictionary::dictionary parent_(parentDict) { transfer(dict()); + name() = parentDict.name() + "::" + name(); } @@ -472,6 +480,24 @@ Foam::dictionary& Foam::dictionary::subDict(const word& keyword) } +Foam::dictionary Foam::dictionary::subOrEmptyDict +( + const word& keyword +) const +{ + const entry* entryPtr = lookupEntryPtr(keyword, false, true); + + if (entryPtr == NULL) + { + return dictionary(*this, dictionary(keyword)); + } + else + { + return entryPtr->dict(); + } +} + + Foam::wordList Foam::dictionary::toc() const { wordList keys(size()); @@ -530,7 +556,7 @@ bool Foam::dictionary::add(entry* entryPtr, bool mergeEntry) if (hashedEntries_.insert(entryPtr->keyword(), entryPtr)) { - entryPtr->name() = name_ + "::" + entryPtr->keyword(); + entryPtr->name() = name() + "::" + entryPtr->keyword(); if (entryPtr->keyword().isPattern()) { @@ -558,7 +584,7 @@ bool Foam::dictionary::add(entry* entryPtr, bool mergeEntry) if (hashedEntries_.insert(entryPtr->keyword(), entryPtr)) { - entryPtr->name() = name_ + "::" + entryPtr->keyword(); + entryPtr->name() = name() + "::" + entryPtr->keyword(); IDLList<entry>::append(entryPtr); if (entryPtr->keyword().isPattern()) @@ -763,7 +789,7 @@ bool Foam::dictionary::changeKeyword // change name and HashTable, but leave DL-List untouched iter()->keyword() = newKeyword; - iter()->name() = name_ + "::" + newKeyword; + iter()->name() = name() + "::" + newKeyword; hashedEntries_.erase(oldKeyword); hashedEntries_.insert(newKeyword, iter()); @@ -838,7 +864,7 @@ void Foam::dictionary::transfer(dictionary& dict) { // changing parents probably doesn't make much sense, // but what about the names? - name_ = dict.name_; + name() = dict.name(); IDLList<entry>::transfer(dict); hashedEntries_.transfer(dict.hashedEntries_); @@ -871,7 +897,7 @@ void Foam::dictionary::operator=(const dictionary& rhs) << abort(FatalError); } - name_ = rhs.name(); + name() = rhs.name(); clear(); // Create clones of the entries in the given dictionary diff --git a/src/OpenFOAM/db/dictionary/dictionary.H b/src/OpenFOAM/db/dictionary/dictionary.H index 31ac3142378cb5d10013fa0b7e1ac20191dfacf7..8645dfadc0a8fb8b653178812741fb162b3a0f66 100644 --- a/src/OpenFOAM/db/dictionary/dictionary.H +++ b/src/OpenFOAM/db/dictionary/dictionary.H @@ -41,7 +41,7 @@ Description ToDo A merge() member function with a non-const dictionary parameter. - This would avoid unnecessary cloning in the add(entry*,bool) method + This would avoid unnecessary cloning in the add(entry*, bool) method. SourceFiles dictionary.C @@ -74,6 +74,47 @@ class SHA1Digest; Istream& operator>>(Istream&, dictionary&); Ostream& operator<<(Ostream&, const dictionary&); +/*---------------------------------------------------------------------------*\ + Class dictionaryName Declaration +\*---------------------------------------------------------------------------*/ + +class dictionaryName +{ + // Private data + + fileName name_; + + +public: + + // Constructors + + //- Construct dictionaryName null + dictionaryName() + {} + + //- Construct dictionaryName as copy of the given fileName + dictionaryName(const fileName& name) + : + name_(name) + {} + + + // Member functions + + //- Return the dictionary name + const fileName& name() const + { + return name_; + } + + //- Return the dictionary name + fileName& name() + { + return name_; + } +}; + /*---------------------------------------------------------------------------*\ Class dictionary Declaration @@ -81,13 +122,11 @@ Ostream& operator<<(Ostream&, const dictionary&); class dictionary : + public dictionaryName, public IDLList<entry> { // Private data - //- Dictionary name - fileName name_; - //- HashTable of the entries held on the DL-list for quick lookup HashTable<entry*> hashedEntries_; @@ -100,6 +139,7 @@ class dictionary //- Patterns as precompiled regular expressions DLList<autoPtr<regExp> > patternRegexps_; + // Private Member Functions //- Search patterns table for exact match or regular expression match @@ -121,16 +161,6 @@ class dictionary ); -public: - - //- Read dictionary from Istream - bool read(Istream&); - - //- Substitute the given keyword prepended by '$' with the - // corresponding sub-dictionary entries - bool substituteKeyword(const word& keyword); - - public: //- Declare friendship with the entry class for IO @@ -150,10 +180,14 @@ public: //- Construct top-level dictionary null dictionary(); - //- Construct from the parent dictionary and Istream, reading entries - // until lastEntry or EOF + //- Construct top-level empty dictionary with given name + dictionary(const fileName& name); + + //- Construct given the entry name, parent dictionary and Istream, + // reading entries until lastEntry or EOF dictionary ( + const fileName& name, const dictionary& parentDict, Istream& ); @@ -192,18 +226,6 @@ public: // Member functions - //- Return the dictionary name - const fileName& name() const - { - return name_; - } - - //- Return the dictionary name - fileName& name() - { - return name_; - } - //- Return the parent dictionary const dictionary& parent() const { @@ -320,14 +342,23 @@ public: //- Find and return a sub-dictionary for manipulation dictionary& subDict(const word&); + //- Find and return a sub-dictionary as a copy, or + // return an empty dictionary if the sub-dictionary does not exist + dictionary subOrEmptyDict(const word&) const; + //- Return the table of contents wordList toc() const; //- Return the list of available keys or patterns List<keyType> keys(bool patterns=false) const; + // Editing + //- Substitute the given keyword prepended by '$' with the + // corresponding sub-dictionary entries + bool substituteKeyword(const word& keyword); + //- Add a new entry // With the merge option, dictionaries are interwoven and // primitive entries are overwritten @@ -400,13 +431,19 @@ public: //- Clear the dictionary void clear(); - //- Transfer the contents of the argument and annull the argument. + //- Transfer the contents of the argument and annul the argument. void transfer(dictionary&); //- Transfer contents to the Xfer container Xfer<dictionary> xfer(); + // Read + + //- Read dictionary from Istream + bool read(Istream&); + + // Write void write(Ostream&, bool subDict=true) const; diff --git a/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntryIO.C b/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntryIO.C index 4ed38340530820d2d88a4852c4c1e15e96abbc80..489395e43a72dea2f3270e9475169853b8876aea 100644 --- a/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntryIO.C +++ b/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntryIO.C @@ -39,7 +39,7 @@ Foam::dictionaryEntry::dictionaryEntry Istream& is ) : - entry(is), + entry(keyType(is)), dictionary(parentDict, is) { is.fatalCheck @@ -58,10 +58,8 @@ Foam::dictionaryEntry::dictionaryEntry ) : entry(key), - dictionary(parentDict, is) + dictionary(key, parentDict, is) { - name() += "::" + key; - is.fatalCheck ( "dictionaryEntry::dictionaryEntry" diff --git a/src/OpenFOAM/db/dictionary/dictionaryIO.C b/src/OpenFOAM/db/dictionary/dictionaryIO.C index 96196e3a11ab9a9b8e2913405f54f85f28262302..446aba828db4d353e2606a6eca374834f16abb62 100644 --- a/src/OpenFOAM/db/dictionary/dictionaryIO.C +++ b/src/OpenFOAM/db/dictionary/dictionaryIO.C @@ -95,11 +95,12 @@ bool Foam::dictionary::substituteKeyword(const word& keyword) Foam::dictionary::dictionary ( + const fileName& name, const dictionary& parentDict, Istream& is ) : - name_(is.name()), + dictionaryName(parentDict.name() + "::" + name), parent_(parentDict) { read(is); @@ -108,7 +109,7 @@ Foam::dictionary::dictionary Foam::dictionary::dictionary(Istream& is) : - name_(is.name()), + dictionaryName(is.name()), parent_(dictionary::null) { // Reset input mode as this is a "top-level" dictionary @@ -132,6 +133,7 @@ Foam::Istream& Foam::operator>>(Istream& is, dictionary& dict) functionEntries::inputModeEntry::clear(); dict.clear(); + dict.name() = is.name(); dict.read(is); return is; diff --git a/src/OpenFOAM/db/dictionary/entry/entry.C b/src/OpenFOAM/db/dictionary/entry/entry.C index a3049a31519090b546ce3705324e7b164aa680f0..d153bb04e351e41b348a0d441694a266062b8d16 100644 --- a/src/OpenFOAM/db/dictionary/entry/entry.C +++ b/src/OpenFOAM/db/dictionary/entry/entry.C @@ -38,7 +38,6 @@ Foam::entry::entry(const keyType& keyword) Foam::entry::entry(const entry& e) : - IDLList<entry>::link(), keyword_(e.keyword_) {} diff --git a/src/OpenFOAM/db/dictionary/entry/entry.H b/src/OpenFOAM/db/dictionary/entry/entry.H index ddaefe74402a3a04b6ac00e7270a11a1d6c54cb3..972576e51cc5c00743cb7062923012c69ddcff5b 100644 --- a/src/OpenFOAM/db/dictionary/entry/entry.H +++ b/src/OpenFOAM/db/dictionary/entry/entry.H @@ -77,7 +77,7 @@ class entry // Private Member Functions //- Get the next valid keyword otherwise return false - static bool getKeyword(keyType& keyword, Istream& is); + static bool getKeyword(keyType&, Istream&); public: @@ -85,7 +85,7 @@ public: // Constructors //- Construct from keyword - entry(const keyType& keyword); + entry(const keyType&); //- Construct as copy entry(const entry&); @@ -102,16 +102,15 @@ public: virtual autoPtr<entry> clone() const; //- Construct from Istream and insert into dictionary - static bool New(dictionary& parentDict, Istream& is); + static bool New(dictionary& parentDict, Istream&); //- Construct on freestore from Istream and return static autoPtr<entry> New(Istream& is); - // Destructor - - virtual ~entry() - {} + //- Destructor + virtual ~entry() + {} // Member functions diff --git a/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.C index 34154cce481dd93c72b7ba02e55a513df07c18ae..78facd8e231a33e9d77432a807d66f6899dd5bc7 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.C @@ -65,8 +65,8 @@ bool Foam::functionEntries::removeEntry::execute Istream& is ) { - wordList dictKeys = parentDict.toc(); - wordReList patterns(is); + wordList dictKeys = parentDict.toc(); + wordReList patterns = readList<wordRe>(is); labelList indices = findStrings(patterns, dictKeys); diff --git a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C index 5346e95c2eecd239e3211173b07cc4da26375f1e..771a43b7dc1cf1b78fc453aafbf9224501541e42 100644 --- a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C +++ b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.C @@ -29,6 +29,19 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class OutputFilter> +Foam::IOOutputFilter<OutputFilter>::IOOutputFilter +( + const word& outputFilterName, + const IOobject& ioDict, + const bool readFromFiles +) +: + IOdictionary(ioDict), + OutputFilter(outputFilterName, ioDict.db(), *this, readFromFiles) +{} + + template<class OutputFilter> Foam::IOOutputFilter<OutputFilter>::IOOutputFilter ( diff --git a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H index 51ccc952ae9222a31dfc9edfae3842088a45a387..5781d75f17fb5557c62b2b2a4d25df7652454b83 100644 --- a/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H +++ b/src/OpenFOAM/db/functionObjects/IOOutputFilter/IOOutputFilter.H @@ -29,6 +29,11 @@ Description IOdictionary wrapper around OutputFilter to allow them to read from their associated dictionaries. +Note + The IOobject or the objectRegistry will normally have to be + derived from a fvMesh for a subsequent cast (within OutputFilter) + to work correctly. + SourceFiles IOOutputFilter.C @@ -69,6 +74,15 @@ public: // Constructors + //- Construct from an IOobject for IOdictionary + // Allow the possibility to load fields from files + IOOutputFilter + ( + const word& outputFilterName, + const IOobject& ioDict, + const bool loadFromFile = false + ); + //- Construct for given objectRegistry and dictionary // Allow dictionary to be optional // Allow the possibility to load fields from files diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C index 4e3bf3fad6849ce9daa4d5c6189716b91bd139f8..f7040df07c020f93414c8816635837dcfd385ea7 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C @@ -37,8 +37,43 @@ void Foam::OutputFilterFunctionObject<OutputFilter>::readDict() dict_.readIfPresent("region", regionName_); dict_.readIfPresent("dictionary", dictName_); dict_.readIfPresent("enabled", enabled_); + dict_.readIfPresent("storeFilter", storeFilter_); } +template<class OutputFilter> +void Foam::OutputFilterFunctionObject<OutputFilter>::allocateFilter() +{ + if (dictName_.size()) + { + ptr_.reset + ( + new IOOutputFilter<OutputFilter> + ( + name(), + time_.lookupObject<objectRegistry>(regionName_), + dictName_ + ) + ); + } + else + { + ptr_.reset + ( + new OutputFilter + ( + name(), + time_.lookupObject<objectRegistry>(regionName_), + dict_ + ) + ); + } +} + +template<class OutputFilter> +void Foam::OutputFilterFunctionObject<OutputFilter>::destroyFilter() +{ + ptr_.reset(); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -56,6 +91,7 @@ Foam::OutputFilterFunctionObject<OutputFilter>::OutputFilterFunctionObject regionName_(polyMesh::defaultRegion), dictName_(), enabled_(true), + storeFilter_(true), outputControl_(t, dict) { readDict(); @@ -83,32 +119,9 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::start() { readDict(); - if (enabled_) + if (enabled_&&storeFilter_) { - if (dictName_.size()) - { - ptr_.reset - ( - new IOOutputFilter<OutputFilter> - ( - name(), - time_.lookupObject<objectRegistry>(regionName_), - dictName_ - ) - ); - } - else - { - ptr_.reset - ( - new OutputFilter - ( - name(), - time_.lookupObject<objectRegistry>(regionName_), - dict_ - ) - ); - } + allocateFilter(); } return true; @@ -120,12 +133,22 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::execute() { if (enabled_) { + if (!storeFilter_) + { + allocateFilter(); + } + ptr_->execute(); - if (enabled_ && outputControl_.output()) + if (outputControl_.output()) { ptr_->write(); } + + if (!storeFilter_) + { + destroyFilter(); + } } return true; @@ -137,12 +160,22 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::end() { if (enabled_) { + if (!storeFilter_) + { + allocateFilter(); + } + ptr_->end(); - if (enabled_ && outputControl_.output()) + if (outputControl_.output()) { ptr_->write(); } + + if (!storeFilter_) + { + destroyFilter(); + } } return true; diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H index f6c183e803cb0aadf64d2fe346faa8d975e09d10..92f0c43196880ee575c1b89d6e20ba9021a5e9bf 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H @@ -27,7 +27,7 @@ Class Description A functionObject wrapper around OutputFilter to allow them to be - created via the functions list within controlDict. + created via the functions entry within controlDict. Note Since the timeIndex is used directly from Foam::Time, it is unaffected @@ -78,6 +78,10 @@ class OutputFilterFunctionObject //- Switch for the execution of the functionObject bool enabled_; + //- Switch to store filter in between writes or use on-the-fly + // construction + bool storeFilter_; + //- Output controls outputFilterOutputControl outputControl_; @@ -89,6 +93,12 @@ class OutputFilterFunctionObject //- Read relevant dictionary entries void readDict(); + + //- Creates most of the data associated with this object. + void allocateFilter(); + + //- Destroys most of the data associated with this object. + void destroyFilter(); //- Disallow default bitwise copy construct OutputFilterFunctionObject(const OutputFilterFunctionObject&); diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C index 452ad35ac606de8ea78b923eb85e5d89f58b772c..a8a7390015a35c3c49491edd8d290ac8cd3065ac 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C +++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C @@ -93,7 +93,7 @@ Foam::objectRegistry::~objectRegistry() } } - for (label i=0; i<nMyObjects; i++) + for (label i=0; i < nMyObjects; i++) { checkOut(*myObjects[i]); } @@ -104,15 +104,13 @@ Foam::objectRegistry::~objectRegistry() Foam::wordList Foam::objectRegistry::names() const { - wordList objectNames(size()); + return HashTable<regIOobject*>::toc(); +} - label count=0; - for (const_iterator iter = cbegin(); iter != cend(); ++iter) - { - objectNames[count++] = iter()->name(); - } - return objectNames; +Foam::wordList Foam::objectRegistry::sortedNames() const +{ + return HashTable<regIOobject*>::sortedToc(); } @@ -125,7 +123,7 @@ Foam::wordList Foam::objectRegistry::names(const word& ClassName) const { if (iter()->type() == ClassName) { - objectNames[count++] = iter()->name(); + objectNames[count++] = iter.key(); } } @@ -135,6 +133,15 @@ Foam::wordList Foam::objectRegistry::names(const word& ClassName) const } +Foam::wordList Foam::objectRegistry::sortedNames(const word& ClassName) const +{ + wordList sortedLst = names(ClassName); + sort(sortedLst); + + return sortedLst; +} + + const Foam::objectRegistry& Foam::objectRegistry::subRegistry ( const word& name @@ -151,8 +158,8 @@ Foam::label Foam::objectRegistry::getEvent() const if (event_ == labelMax) { WarningIn("objectRegistry::getEvent() const") - << "Event counter has overflowed. Resetting counter on all" - << " dependent objects." << endl + << "Event counter has overflowed. " + << "Resetting counter on all dependent objects." << nl << "This might cause extra evaluations." << endl; // Reset event counter @@ -202,7 +209,7 @@ bool Foam::objectRegistry::checkOut(regIOobject& io) const if (objectRegistry::debug) { Pout<< "objectRegistry::checkOut(regIOobject&) : " - << name() << " : checking out " << io.name() + << name() << " : checking out " << iter.key() << endl; } @@ -211,7 +218,8 @@ bool Foam::objectRegistry::checkOut(regIOobject& io) const if (objectRegistry::debug) { WarningIn("objectRegistry::checkOut(regIOobject&)") - << name() << " : attempt to checkOut copy of " << io.name() + << name() << " : attempt to checkOut copy of " + << iter.key() << endl; } @@ -286,8 +294,7 @@ void Foam::objectRegistry::readModifiedObjects() { Pout<< "objectRegistry::readModifiedObjects() : " << name() << " : Considering reading object " - << iter()->name() - << endl; + << iter.key() << endl; } iter()->readIfModified(); @@ -317,7 +324,7 @@ bool Foam::objectRegistry::writeObject { Pout<< "objectRegistry::write() : " << name() << " : Considering writing object " - << iter()->name() + << iter.key() << " with writeOpt " << iter()->writeOpt() << " to file " << iter()->objectPath() << endl; diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.H b/src/OpenFOAM/db/objectRegistry/objectRegistry.H index 1f2d30d93e716f6951b30ea8f04cc4f722065b5a..6e7c5c04f6ebbf2eedeb2ea7e46e2d181717a348 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistry.H +++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.H @@ -132,9 +132,15 @@ public: //- Return the list of names of the IOobjects wordList names() const; - //- Return the list of names of the IOobjects of given class name + //- Return the sorted list of names of the IOobjects + wordList sortedNames() const; + + //- Return the list of names of IOobjects of given class name wordList names(const word& className) const; + //- Return the sorted list of names of IOobjects of given class name + wordList sortedNames(const word& className) const; + //- Return the list of names of the IOobjects of given type template<class Type> wordList names() const; @@ -142,11 +148,11 @@ public: //- Lookup and return a const sub-objectRegistry const objectRegistry& subRegistry(const word& name) const; - //- Lookup and return all the object of the given Type + //- Lookup and return all objects of the given Type template<class Type> HashTable<const Type*> lookupClass() const; - //- Is the named Type + //- Is the named Type found? template<class Type> bool foundObject(const word& name) const; diff --git a/src/OpenFOAM/db/scalarRange/scalarRange.C b/src/OpenFOAM/db/scalarRange/scalarRange.C index 393b19bba42846845b7737bdc3e125733789b5d6..239aa44c4101980ccf94312fd0767fa6fe375b26 100644 --- a/src/OpenFOAM/db/scalarRange/scalarRange.C +++ b/src/OpenFOAM/db/scalarRange/scalarRange.C @@ -315,7 +315,7 @@ Foam::Istream& Foam::operator>>(Istream& is, scalarRange& range) Info<< "rejected ill-formed range:"; for (label i=0; i<nTok; ++i) { - Info << " " << toks[i]; + Info<< " " << toks[i]; } Info<< endl; } diff --git a/src/OpenFOAM/dimensionSet/dimensionSet.C b/src/OpenFOAM/dimensionSet/dimensionSet.C index e60a3998d449859a078c6a750e98d45181c0d999..8ae8e27a3d9281734d8ec0f4f34e77d264c5e63f 100644 --- a/src/OpenFOAM/dimensionSet/dimensionSet.C +++ b/src/OpenFOAM/dimensionSet/dimensionSet.C @@ -26,6 +26,7 @@ License #include "dimensionSet.H" #include "dimensionedScalar.H" +#include "OStringStream.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -79,30 +80,109 @@ Foam::dimensionSet::dimensionSet bool Foam::dimensionSet::dimensionless() const { - bool Dimensionless = true; - - for (int Dimension=0; Dimension<nDimensions; Dimension++) + for (int Dimension=0; Dimension<nDimensions; ++Dimension) { - Dimensionless = Dimensionless && + // ie, mag(exponents_[Dimension]) > smallExponent + if ( - exponents_[Dimension] < smallExponent - && exponents_[Dimension] > -smallExponent - ); + exponents_[Dimension] > smallExponent + || exponents_[Dimension] < -smallExponent + ) + { + return false; + } } - return Dimensionless; + return true; } void Foam::dimensionSet::reset(const dimensionSet& ds) { - for (int Dimension=0; Dimension<nDimensions; Dimension++) + for (int Dimension=0; Dimension<nDimensions; ++Dimension) { exponents_[Dimension] = ds.exponents_[Dimension]; } } +Foam::string Foam::dimensionSet::asText() const +{ + OStringStream buf; + + bool Dimensionless = true; + + for (int Dimension=0; Dimension < dimensionSet::nDimensions-1; ++Dimension) + { + const scalar& expt = exponents_[Dimension]; + + if (expt < smallExponent && expt > -smallExponent) + { + continue; + } + + if (Dimensionless) + { + Dimensionless = false; + } + else + { + buf << ' '; + } + + // note: currently only handle SI + switch (Dimension) + { + case MASS: + buf << "kg"; + break; + + case LENGTH: + buf << "m"; + break; + + case TIME: + buf << "s"; + break; + + case TEMPERATURE: + buf << "K"; + break; + + case MOLES: + buf << "mol"; + break; + + case CURRENT: + buf << "A"; + break; + + case LUMINOUS_INTENSITY: + buf << "Cd"; + break; + + default: + buf << "??"; // this shouldn't be - flag as being weird + break; + } + + if (expt != 1) + { + buf << '^' << expt; + } + } + + if (Dimensionless) + { + return "none"; + } + else + { + return buf.str(); + } +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // Foam::scalar Foam::dimensionSet::operator[](const dimensionType type) const @@ -119,16 +199,19 @@ Foam::scalar& Foam::dimensionSet::operator[](const dimensionType type) bool Foam::dimensionSet::operator==(const dimensionSet& ds) const { - bool equall = true; - - for (int Dimension=0; Dimension<nDimensions; Dimension++) + for (int Dimension=0; Dimension < nDimensions; ++Dimension) { - equall = equall && - (mag(exponents_[Dimension] - ds.exponents_[Dimension]) - < smallExponent); + if + ( + mag(exponents_[Dimension] - ds.exponents_[Dimension]) + > smallExponent + ) + { + return false; + } } - return equall; + return true; } @@ -142,7 +225,7 @@ bool Foam::dimensionSet::operator=(const dimensionSet& ds) const { if (dimensionSet::debug && *this != ds) { - FatalErrorIn("dimensionSet::operator=(const dimensionSet& ds) const") + FatalErrorIn("dimensionSet::operator=(const dimensionSet&) const") << "Different dimensions for =" << endl << " dimensions : " << *this << " = " << ds << endl << abort(FatalError); @@ -156,7 +239,7 @@ bool Foam::dimensionSet::operator+=(const dimensionSet& ds) const { if (dimensionSet::debug && *this != ds) { - FatalErrorIn("dimensionSet::operator+=(const dimensionSet& ds) const") + FatalErrorIn("dimensionSet::operator+=(const dimensionSet&) const") << "Different dimensions for +=" << endl << " dimensions : " << *this << " = " << ds << endl << abort(FatalError); @@ -170,7 +253,7 @@ bool Foam::dimensionSet::operator-=(const dimensionSet& ds) const { if (dimensionSet::debug && *this != ds) { - FatalErrorIn("dimensionSet::operator-=(const dimensionSet& ds) const") + FatalErrorIn("dimensionSet::operator-=(const dimensionSet&) const") << "Different dimensions for -=" << endl << " dimensions : " << *this << " = " << ds << endl << abort(FatalError); @@ -202,7 +285,7 @@ Foam::dimensionSet Foam::max(const dimensionSet& ds1, const dimensionSet& ds2) { if (dimensionSet::debug && ds1 != ds2) { - FatalErrorIn("max(const dimensionSet& ds1, const dimensionSet& ds2)") + FatalErrorIn("max(const dimensionSet&, const dimensionSet&)") << "Arguments of max have different dimensions" << endl << " dimensions : " << ds1 << " and " << ds2 << endl << abort(FatalError); @@ -216,7 +299,7 @@ Foam::dimensionSet Foam::min(const dimensionSet& ds1, const dimensionSet& ds2) { if (dimensionSet::debug && ds1 != ds2) { - FatalErrorIn("min(const dimensionSet& ds1, const dimensionSet& ds2)") + FatalErrorIn("min(const dimensionSet&, const dimensionSet&)") << "Arguments of min have different dimensions" << endl << " dimensions : " << ds1 << " and " << ds2 << endl << abort(FatalError); @@ -271,8 +354,8 @@ Foam::dimensionSet Foam::pow { if (dimensionSet::debug && !dS.dimensions().dimensionless()) { - FatalErrorIn("pow(const dimensionSet& ds, const dimensionedScalar& dS)") - << "Exponent of pow are not dimensionless" + FatalErrorIn("pow(const dimensionSet&, const dimensionedScalar&)") + << "Exponent of pow is not dimensionless" << abort(FatalError); } @@ -301,9 +384,10 @@ Foam::dimensionSet Foam::pow ( dimensionSet::debug && !dS.dimensions().dimensionless() - && !ds.dimensionless()) + && !ds.dimensionless() + ) { - FatalErrorIn("pow(const dimensionedScalar& dS, const dimensionSet& ds)") + FatalErrorIn("pow(const dimensionedScalar&, const dimensionSet&)") << "Argument or exponent of pow not dimensionless" << endl << abort(FatalError); } @@ -394,7 +478,7 @@ Foam::dimensionSet Foam::trans(const dimensionSet& ds) { if (dimensionSet::debug && !ds.dimensionless()) { - FatalErrorIn("trans(const dimensionSet& ds)") + FatalErrorIn("trans(const dimensionSet&)") << "Argument of trancendental function not dimensionless" << abort(FatalError); } @@ -428,7 +512,7 @@ Foam::dimensionSet Foam::operator+ if (dimensionSet::debug && ds1 != ds2) { FatalErrorIn - ("operator+(const dimensionSet& ds1, const dimensionSet& ds2)") + ("operator+(const dimensionSet&, const dimensionSet&)") << "LHS and RHS of + have different dimensions" << endl << " dimensions : " << ds1 << " + " << ds2 << endl << abort(FatalError); @@ -449,7 +533,7 @@ Foam::dimensionSet Foam::operator- if (dimensionSet::debug && ds1 != ds2) { FatalErrorIn - ("operator-(const dimensionSet& ds1, const dimensionSet& ds2)") + ("operator-(const dimensionSet&, const dimensionSet&)") << "LHS and RHS of - have different dimensions" << endl << " dimensions : " << ds1 << " - " << ds2 << endl << abort(FatalError); diff --git a/src/OpenFOAM/dimensionSet/dimensionSet.H b/src/OpenFOAM/dimensionSet/dimensionSet.H index 13b0a899a9c87507d022fd5745f3c1cbad711bdc..67ca74b3c9b77bf7b70ae5ba9306ccb06b49b73c 100644 --- a/src/OpenFOAM/dimensionSet/dimensionSet.H +++ b/src/OpenFOAM/dimensionSet/dimensionSet.H @@ -27,6 +27,7 @@ Class Description Dimension set for the base types. + This type may be used to implement rigorous dimension checking for algebraic manipulation. @@ -105,7 +106,7 @@ Ostream& operator<<(Ostream&, const dimensionSet&); /*---------------------------------------------------------------------------*\ - Class dimensionSet Declaration + Class dimensionSet Declaration \*---------------------------------------------------------------------------*/ class dimensionSet @@ -184,9 +185,14 @@ public: // Member functions + //- Return true if it is dimensionless bool dimensionless() const; + void reset(const dimensionSet&); + //- Return a text representation for added readability + string asText() const; + // Member operators diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C index c0600bd97c4afc124d10ddc6eeaafc3f674c4c51..a5418574f6ae5c8e3e1affa3e9b2f2df7adb1e2a 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C @@ -412,7 +412,7 @@ template<template<class> class Field, class Type> Type max(const FieldField<Field, Type>& f) { label i = 0; - while(i < f.size() && !f[i].size()) i++; + while (i < f.size() && !f[i].size()) i++; if (i < f.size()) { @@ -440,12 +440,12 @@ template<template<class> class Field, class Type> Type min(const FieldField<Field, Type>& f) { label i = 0; - while(i < f.size() && !f[i].size()) i++; + while (i < f.size() && !f[i].size()) i++; if (i < f.size()) { label i = 0; - while(!f[i].size()) i++; + while (!f[i].size()) i++; Type Min(min(f[i])); diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C index 705ee5e2b4e7f27207a9e53f7e2e31b9aebce160..25a90ba64c3be8f10a38e614b9a0acbc8a9221f5 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C @@ -52,20 +52,11 @@ Foam::tmp typename Foam::GeometricField<Type, PatchField, GeoMesh>:: GeometricBoundaryField > -Foam::GeometricField<Type, PatchField, GeoMesh>::readField(Istream& is) +Foam::GeometricField<Type, PatchField, GeoMesh>::readField +( + const dictionary& fieldDict +) { - if (is.version() < 2.0) - { - FatalIOErrorIn - ( - "GeometricField<Type, PatchField, GeoMesh>::readField(Istream&)", - is - ) << "IO versions < 2.0 are not supported." - << exit(FatalIOError); - } - - dictionary fieldDict(is); - DimensionedField<Type, GeoMesh>::readField(fieldDict, "internalField"); tmp<GeometricBoundaryField> tboundaryField @@ -96,6 +87,28 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::readField(Istream& is) } +template<class Type, template<class> class PatchField, class GeoMesh> +Foam::tmp +< + typename Foam::GeometricField<Type, PatchField, GeoMesh>:: + GeometricBoundaryField +> +Foam::GeometricField<Type, PatchField, GeoMesh>::readField(Istream& is) +{ + if (is.version() < 2.0) + { + FatalIOErrorIn + ( + "GeometricField<Type, PatchField, GeoMesh>::readField(Istream&)", + is + ) << "IO versions < 2.0 are not supported." + << exit(FatalIOError); + } + + return readField(dictionary(is)); +} + + template<class Type, template<class> class PatchField, class GeoMesh> bool Foam::GeometricField<Type, PatchField, GeoMesh>::readIfPresent() { @@ -404,6 +417,44 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField } +template<class Type, template<class> class PatchField, class GeoMesh> +Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField +( + const IOobject& io, + const Mesh& mesh, + const dictionary& dict +) +: + DimensionedField<Type, GeoMesh>(io, mesh, dimless), + timeIndex_(this->time().timeIndex()), + field0Ptr_(NULL), + fieldPrevIterPtr_(NULL), + boundaryField_(*this, readField(dict)) +{ + // Check compatibility between field and mesh + + if (this->size() != GeoMesh::size(this->mesh())) + { + FatalErrorIn + ( + "GeometricField<Type, PatchField, GeoMesh>::GeometricField" + "(const IOobject&, const Mesh&, const dictionary&)" + ) << " number of field elements = " << this->size() + << " number of mesh elements = " << GeoMesh::size(this->mesh()) + << exit(FatalIOError); + } + + readOldTimeIfPresent(); + + if (debug) + { + Info<< "Finishing dictionary-construct of " + "GeometricField<Type, PatchField, GeoMesh>" + << endl << this->info() << endl; + } +} + + // construct as copy template<class Type, template<class> class PatchField, class GeoMesh> Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H index 71e2bbf34cf95c4e59d5ba3f4b1fc1bf317f96ec..1abca4cc871b68c6d89ee8786b2e8fab36fd0d94 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H @@ -240,6 +240,9 @@ private: // Private member functions + //- Read the field from the dictionary + tmp<GeometricBoundaryField> readField(const dictionary&); + //- Read the field from the given stream tmp<GeometricBoundaryField> readField(Istream& is); @@ -327,6 +330,14 @@ public: Istream& ); + //- Construct from dictionary + GeometricField + ( + const IOobject&, + const Mesh&, + const dictionary& + ); + //- Construct as copy GeometricField ( diff --git a/src/OpenFOAM/global/argList/argList.H b/src/OpenFOAM/global/argList/argList.H index 45c8de16ec338d21ed5b8f1d86f12e5f117b65f1..2682803807cdc7afcf95dac50aae22824ea4d44e 100644 --- a/src/OpenFOAM/global/argList/argList.H +++ b/src/OpenFOAM/global/argList/argList.H @@ -234,35 +234,16 @@ public: //- Read a value from the named option template<class T> - T optionRead(const word& opt) const - { - T val; - optionLookup(opt)() >> val; - return val; - } + T optionRead(const word& opt) const; //- Read a value from the named option if present. // Return true if the named option was found. template<class T> - bool optionReadIfPresent(const word& opt, T& val) const - { - if (optionFound(opt)) - { - optionLookup(opt)() >> val; - return true; - } - else - { - return false; - } - } + bool optionReadIfPresent(const word& opt, T& val) const; //- Read a List of values from the named option template<class T> - List<T> optionReadList(const word& opt) const - { - return readList<T>(optionLookup(opt)()); - } + List<T> optionReadList(const word& opt) const; // Edit @@ -300,6 +281,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "argListTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/OpenFOAM/global/argList/argListTemplates.C b/src/OpenFOAM/global/argList/argListTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..8bc3da3469cebeca753e0b211523727e49503d56 --- /dev/null +++ b/src/OpenFOAM/global/argList/argListTemplates.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "argList.H" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class T> +T Foam::argList::optionRead(const word& opt) const +{ + T val; + + optionLookup(opt)() >> val; + return val; +} + + +template<class T> +bool Foam::argList::optionReadIfPresent(const word& opt, T& val) const +{ + if (optionFound(opt)) + { + val = optionRead<T>(opt); + return true; + } + else + { + return false; + } +} + + +template<class T> +Foam::List<T> Foam::argList::optionReadList(const word& opt) const +{ + return readList<T>(optionLookup(opt)()); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/patchToPatchInterpolation/CalcPatchToPatchWeights.C b/src/OpenFOAM/interpolations/patchToPatchInterpolation/CalcPatchToPatchWeights.C index 534cb5e1075d67fff0fc0742a4d730d801bc0c87..2f1945ac8edd9a2c81438be7eee5bb409b7930ab 100644 --- a/src/OpenFOAM/interpolations/patchToPatchInterpolation/CalcPatchToPatchWeights.C +++ b/src/OpenFOAM/interpolations/patchToPatchInterpolation/CalcPatchToPatchWeights.C @@ -63,7 +63,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcPointAddressing() const if (debug) { - Info << "projecting points" << endl; + Info<< "projecting points" << endl; } List<objectHit> proj = @@ -139,7 +139,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcPointAddressing() const + projectionDirection[pointI]*ph.distance() - ph.missPoint() ); - + // Calculate the local tolerance scalar minEdgeLength = GREAT; @@ -244,7 +244,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcFaceAddressing() const if (debug) { - Info << "projecting face centres" << endl; + Info<< "projecting face centres" << endl; } const pointField& fromPatchPoints = fromPatch_.points(); @@ -274,7 +274,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcFaceAddressing() const ); faceAddressingPtr_ = new labelList(proj.size(), -1); - labelList& faceAddressing = *faceAddressingPtr_; + labelList& faceAddressing = *faceAddressingPtr_; forAll (faceAddressing, faceI) { diff --git a/src/OpenFOAM/matrices/Matrix/Matrix.C b/src/OpenFOAM/matrices/Matrix/Matrix.C index 7f91a5f36c81eba94c32410da02d3c1b83d66266..0062d897a431b8a33466541181e5a9db1e732598 100644 --- a/src/OpenFOAM/matrices/Matrix/Matrix.C +++ b/src/OpenFOAM/matrices/Matrix/Matrix.C @@ -235,12 +235,12 @@ void Foam::Matrix<Form, Type>::operator=(const Matrix<Form, Type>& a) template<class Form, class Type> const Type& Foam::max(const Matrix<Form, Type>& a) { - label nm = a.n_*a.m_; + label nm = a.n()*a.m(); if (nm) { label curMaxI = 0; - const Type* v = a.v_[0]; + const Type* v = a[0]; for (register label i=1; i<nm; i++) { @@ -267,12 +267,12 @@ const Type& Foam::max(const Matrix<Form, Type>& a) template<class Form, class Type> const Type& Foam::min(const Matrix<Form, Type>& a) { - label nm = a.n_*a.m_; + label nm = a.n()*a.m(); if (nm) { label curMinI = 0; - const Type* v = a.v_[0]; + const Type* v = a[0]; for (register label i=1; i<nm; i++) { @@ -301,14 +301,14 @@ const Type& Foam::min(const Matrix<Form, Type>& a) template<class Form, class Type> Form Foam::operator-(const Matrix<Form, Type>& a) { - Form na(a.n_, a.m_); + Form na(a.n(), a.m()); - if (a.n_ && a.m_) + if (a.n() && a.m()) { - Type* nav = na.v_[0]; - const Type* av = a.v_[0]; + Type* nav = na[0]; + const Type* av = a[0]; - label nm = a.n_*a.m_; + label nm = a.n()*a.m(); for (register label i=0; i<nm; i++) { nav[i] = -av[i]; @@ -322,33 +322,33 @@ Form Foam::operator-(const Matrix<Form, Type>& a) template<class Form, class Type> Form Foam::operator+(const Matrix<Form, Type>& a, const Matrix<Form, Type>& b) { - if (a.n_ != b.n_) + if (a.n() != b.n()) { FatalErrorIn ( "Matrix<Form, Type>::operator+(const Matrix<Form, Type>&, const Matrix<Form, Type>&)" ) << "attempted add matrices with different number of rows: " - << a.n_ << ", " << b.n_ + << a.n() << ", " << b.n() << abort(FatalError); } - if (a.m_ != b.m_) + if (a.m() != b.m()) { FatalErrorIn ( "Matrix<Form, Type>::operator+(const Matrix<Form, Type>&, const Matrix<Form, Type>&)" ) << "attempted add matrices with different number of columns: " - << a.m_ << ", " << b.m_ + << a.m() << ", " << b.m() << abort(FatalError); } - Form ab(a.n_, a.m_); + Form ab(a.n(), a.m()); - Type* abv = ab.v_[0]; - const Type* av = a.v_[0]; - const Type* bv = b.v_[0]; + Type* abv = ab[0]; + const Type* av = a[0]; + const Type* bv = b[0]; - label nm = a.n_*a.m_; + label nm = a.n()*a.m(); for (register label i=0; i<nm; i++) { abv[i] = av[i] + bv[i]; @@ -361,33 +361,33 @@ Form Foam::operator+(const Matrix<Form, Type>& a, const Matrix<Form, Type>& b) template<class Form, class Type> Form Foam::operator-(const Matrix<Form, Type>& a, const Matrix<Form, Type>& b) { - if (a.n_ != b.n_) + if (a.n() != b.n()) { FatalErrorIn ( "Matrix<Form, Type>::operator-(const Matrix<Form, Type>&, const Matrix<Form, Type>&)" ) << "attempted add matrices with different number of rows: " - << a.n_ << ", " << b.n_ + << a.n() << ", " << b.n() << abort(FatalError); } - if (a.m_ != b.m_) + if (a.m() != b.m()) { FatalErrorIn ( "Matrix<Form, Type>::operator-(const Matrix<Form, Type>&, const Matrix<Form, Type>&)" ) << "attempted add matrices with different number of columns: " - << a.m_ << ", " << b.m_ + << a.m() << ", " << b.m() << abort(FatalError); } - Form ab(a.n_, a.m_); + Form ab(a.n(), a.m()); - Type* abv = ab.v_[0]; - const Type* av = a.v_[0]; - const Type* bv = b.v_[0]; + Type* abv = ab[0]; + const Type* av = a[0]; + const Type* bv = b[0]; - label nm = a.n_*a.m_; + label nm = a.n()*a.m(); for (register label i=0; i<nm; i++) { abv[i] = av[i] - bv[i]; @@ -400,14 +400,14 @@ Form Foam::operator-(const Matrix<Form, Type>& a, const Matrix<Form, Type>& b) template<class Form, class Type> Form Foam::operator*(const scalar s, const Matrix<Form, Type>& a) { - Form sa(a.n_, a.m_); + Form sa(a.n(), a.m()); - if (a.n_ && a.m_) + if (a.n() && a.m()) { - Type* sav = sa.v_[0]; - const Type* av = a.v_[0]; + Type* sav = sa[0]; + const Type* av = a[0]; - label nm = a.n_*a.m_; + label nm = a.n()*a.m(); for (register label i=0; i<nm; i++) { sav[i] = s*av[i]; diff --git a/src/OpenFOAM/matrices/Matrix/Matrix.H b/src/OpenFOAM/matrices/Matrix/Matrix.H index fd623fdb206dc0746c78aaebadbd6e10ff9567a9..0847578edd5682463abdbc987f7ef28cbd9b194e 100644 --- a/src/OpenFOAM/matrices/Matrix/Matrix.H +++ b/src/OpenFOAM/matrices/Matrix/Matrix.H @@ -151,7 +151,7 @@ public: void clear(); //- Transfer the contents of the argument Matrix into this Matrix - // and annull the argument Matrix. + // and annul the argument Matrix. void transfer(Matrix<Form, Type>&); @@ -161,10 +161,10 @@ public: // Member operators - //- Return subscript-checked element of Matrix. + //- Return subscript-checked row of Matrix. inline Type* operator[](const label); - //- Return subscript-checked element of constant Matrix. + //- Return subscript-checked row of constant Matrix. inline const Type* operator[](const label) const; //- Assignment operator. Takes linear time. diff --git a/src/OpenFOAM/matrices/scalarMatrices/SVD/SVD.C b/src/OpenFOAM/matrices/scalarMatrices/SVD/SVD.C index 585c8c2dda427af99d6e0a4bb76e12be9e52d58c..3576c701c5ed88c3d1b4963c8b99723e569abd5b 100644 --- a/src/OpenFOAM/matrices/scalarMatrices/SVD/SVD.C +++ b/src/OpenFOAM/matrices/scalarMatrices/SVD/SVD.C @@ -368,7 +368,7 @@ Foam::SVD::SVD(const scalarRectangularMatrix& A, const scalar minCondition) { if (S_[i] <= minS) { - //Info << "Removing " << S_[i] << " < " << minS << endl; + //Info<< "Removing " << S_[i] << " < " << minS << endl; S_[i] = 0; nZeros_++; } @@ -382,19 +382,19 @@ Foam::SVD::SVD(const scalarRectangularMatrix& A, const scalar minCondition) multiply(SVDA, U_, S_, transpose(V_)); scalar maxDiff = 0; scalar diff = 0; - for(label i = 0; i < A.n(); i++) + for (label i = 0; i < A.n(); i++) { - for(label j = 0; j < A.m(); j++) + for (label j = 0; j < A.m(); j++) { diff = mag(A[i][j] - SVDA[i][j]); if (diff > maxDiff) maxDiff = diff; } } - Info << "Maximum discrepancy between A and svd(A) = " << maxDiff << endl; + Info<< "Maximum discrepancy between A and svd(A) = " << maxDiff << endl; if (maxDiff > 4) { - Info << "singular values " << S_ << endl; + Info<< "singular values " << S_ << endl; } */ } diff --git a/src/OpenFOAM/matrices/scalarMatrices/SVD/SVDI.H b/src/OpenFOAM/matrices/scalarMatrices/SVD/SVDI.H index 82d6c5a6c2545b4927bfaf0c017843db49d21d0f..9f406440cda09d51fcfbe4ed7eac30ec97b9cf7a 100644 --- a/src/OpenFOAM/matrices/scalarMatrices/SVD/SVDI.H +++ b/src/OpenFOAM/matrices/scalarMatrices/SVD/SVDI.H @@ -63,7 +63,7 @@ inline Foam::label Foam::SVD::nZeros() const inline Foam::scalar Foam::SVD::minNonZeroS() const { scalar minS = S_[0]; - for(label i = 1; i < S_.size(); i++) + for (label i = 1; i < S_.size(); i++) { scalar s = S_[i]; if (s > VSMALL && s < minS) minS = s; diff --git a/src/OpenFOAM/matrices/scalarMatrices/scalarMatrices.C b/src/OpenFOAM/matrices/scalarMatrices/scalarMatrices.C index 53fdf6ecfe786eabe194d8d53e635cf1dc6d7480..56fe4f6742cf9ec79bacd29b2a516c906e6e651e 100644 --- a/src/OpenFOAM/matrices/scalarMatrices/scalarMatrices.C +++ b/src/OpenFOAM/matrices/scalarMatrices/scalarMatrices.C @@ -159,11 +159,11 @@ void Foam::multiply ans = scalarRectangularMatrix(A.n(), B.m(), scalar(0)); - for(register label i = 0; i < A.n(); i++) + for (register label i = 0; i < A.n(); i++) { - for(register label j = 0; j < B.m(); j++) + for (register label j = 0; j < B.m(); j++) { - for(register label l = 0; l < B.n(); l++) + for (register label l = 0; l < B.n(); l++) { ans[i][j] += A[i][l]*B[l][j]; } @@ -210,14 +210,14 @@ void Foam::multiply ans = scalarRectangularMatrix(A.n(), C.m(), scalar(0)); - for(register label i = 0; i < A.n(); i++) + for (register label i = 0; i < A.n(); i++) { - for(register label g = 0; g < C.m(); g++) + for (register label g = 0; g < C.m(); g++) { - for(register label l = 0; l < C.n(); l++) + for (register label l = 0; l < C.n(); l++) { scalar ab = 0; - for(register label j = 0; j < A.m(); j++) + for (register label j = 0; j < A.m(); j++) { ab += A[i][j]*B[j][l]; } @@ -266,11 +266,11 @@ void Foam::multiply ans = scalarRectangularMatrix(A.n(), C.m(), scalar(0)); - for(register label i = 0; i < A.n(); i++) + for (register label i = 0; i < A.n(); i++) { - for(register label g = 0; g < C.m(); g++) + for (register label g = 0; g < C.m(); g++) { - for(register label l = 0; l < C.n(); l++) + for (register label l = 0; l < C.n(); l++) { ans[i][g] += C[l][g] * A[i][l]*B[l]; } diff --git a/src/OpenFOAM/meshes/meshShapes/cellMatcher/cellMatcher.C b/src/OpenFOAM/meshes/meshShapes/cellMatcher/cellMatcher.C index dffd5db8bb6b6b599bb8c50a1f56a5bd52b938f4..93046b330794c8c8ed6b984ee4699029b4c965f3 100644 --- a/src/OpenFOAM/meshes/meshShapes/cellMatcher/cellMatcher.C +++ b/src/OpenFOAM/meshes/meshShapes/cellMatcher/cellMatcher.C @@ -284,7 +284,7 @@ void Foam::cellMatcher::write(Foam::Ostream& os) const { os << " "; - for(label fp = 0; fp < faceSize_[faceI]; fp++) + for (label fp = 0; fp < faceSize_[faceI]; fp++) { os << ' ' << localFaces_[faceI][fp]; } diff --git a/src/OpenFOAM/meshes/meshShapes/cellMatcher/tetWedgeMatcher.C b/src/OpenFOAM/meshes/meshShapes/cellMatcher/tetWedgeMatcher.C index 00aacad3ad32cca4bea904603d550b3aca771ddd..af815d5873636a49a1b20202c602e361efc22a82 100644 --- a/src/OpenFOAM/meshes/meshShapes/cellMatcher/tetWedgeMatcher.C +++ b/src/OpenFOAM/meshes/meshShapes/cellMatcher/tetWedgeMatcher.C @@ -116,7 +116,7 @@ bool Foam::tetWedgeMatcher::matchShape const face& face0 = localFaces_[face0I]; // Try all rotations of this face - for(label face0vert0 = 0; face0vert0 < faceSize_[face0I]; face0vert0++) + for (label face0vert0 = 0; face0vert0 < faceSize_[face0I]; face0vert0++) { // // Try to follow prespecified path on faces of cell, diff --git a/src/OpenFOAM/meshes/meshShapes/cellMatcher/wedgeMatcher.C b/src/OpenFOAM/meshes/meshShapes/cellMatcher/wedgeMatcher.C index 79af03bad80b00081f44df4b802f71e74d5cd049..97512ad427ebfe72cec5174558e1e72ec067e0e0 100644 --- a/src/OpenFOAM/meshes/meshShapes/cellMatcher/wedgeMatcher.C +++ b/src/OpenFOAM/meshes/meshShapes/cellMatcher/wedgeMatcher.C @@ -108,7 +108,7 @@ bool Foam::wedgeMatcher::matchShape const face& face0 = localFaces_[face0I]; // Try all rotations of this face - for(label face0vert0 = 0; face0vert0 < faceSize_[face0I]; face0vert0++) + for (label face0vert0 = 0; face0vert0 < faceSize_[face0I]; face0vert0++) { // // Try to follow prespecified path on faces of cell, diff --git a/src/OpenFOAM/meshes/meshShapes/face/face.C b/src/OpenFOAM/meshes/meshShapes/face/face.C index 55be336fa21d507fb467995251712a1a6e449ead..7935c4a9b60460178f01ef43e9b599f6c682e33f 100644 --- a/src/OpenFOAM/meshes/meshShapes/face/face.C +++ b/src/OpenFOAM/meshes/meshShapes/face/face.C @@ -216,7 +216,7 @@ Foam::label Foam::face::split label minIndex = index; scalar minDiff = constant::mathematical::pi; - for(label i = 0; i < size() - 3; i++) + for (label i = 0; i < size() - 3; i++) { vector splitEdge ( @@ -691,6 +691,44 @@ Foam::scalar Foam::face::sweptVol } +Foam::tensor Foam::face::inertia +( + const pointField& p, + const point& refPt, + scalar density +) const +{ + // If the face is a triangle, do a direct calculation + if (size() == 3) + { + return triPointRef + ( + p[operator[](0)], + p[operator[](1)], + p[operator[](2)] + ).inertia(refPt, density); + } + + point c = centre(p); + + tensor J = tensor::zero; + + forAll(*this, i) + { + triPointRef t + ( + p[operator[](i)], + p[operator[](fcIndex(i))], + c + ); + + J += t.inertia(refPt, density); + } + + return J; +} + + Foam::edgeList Foam::face::edges() const { const labelList& points = *this; @@ -808,4 +846,3 @@ Foam::label Foam::face::trianglesQuads // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // ************************************************************************* // - diff --git a/src/OpenFOAM/meshes/meshShapes/face/face.H b/src/OpenFOAM/meshes/meshShapes/face/face.H index 25a4f8fbce5b70f44c74ffd36a7c42c45e14ce99..c317b3eef98c4a266922815c013292d19e73e0d1 100644 --- a/src/OpenFOAM/meshes/meshShapes/face/face.H +++ b/src/OpenFOAM/meshes/meshShapes/face/face.H @@ -200,6 +200,15 @@ public: const pointField& newPoints ) const; + //- Return the inertia tensor, with optional reference + // point and density specification + tensor inertia + ( + const pointField&, + const point& refPt = vector::zero, + scalar density = 1.0 + ) const; + //- Return potential intersection with face with a ray starting // at p, direction n (does not need to be normalized) // Does face-center decomposition and returns triangle intersection diff --git a/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C b/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C index 11be3c3b86282655666d4a52e7dac4aacd7c1490..36e6fe6afd0dec94487e2e37baa79080d2a0125b 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C +++ b/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C @@ -28,6 +28,9 @@ License #include "polyBoundaryMesh.H" #include "facePointPatch.H" #include "globalPointPatch.H" +#include "PstreamBuffers.H" +#include "lduSchedule.H" +#include "globalMeshData.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -58,14 +61,46 @@ Foam::pointBoundaryMesh::pointBoundaryMesh void Foam::pointBoundaryMesh::calcGeometry() { - forAll(*this, patchi) + PstreamBuffers pBufs(Pstream::defaultCommsType); + + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - operator[](patchi).initGeometry(); - } + forAll(*this, patchi) + { + operator[](patchi).initGeometry(pBufs); + } - forAll(*this, patchi) + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).calcGeometry(pBufs); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) { - operator[](patchi).calcGeometry(); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initGeometry(pBufs); + } + else + { + operator[](patchi).calcGeometry(pBufs); + } + } } } @@ -97,32 +132,92 @@ Foam::pointBoundaryMesh::globalPatch() const void Foam::pointBoundaryMesh::movePoints(const pointField& p) { - pointPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initMovePoints(p); - } + forAll(*this, patchi) + { + operator[](patchi).initMovePoints(pBufs, p); + } - forAll(patches, patchi) + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).movePoints(pBufs, p); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].movePoints(p); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initMovePoints(pBufs, p); + } + else + { + operator[](patchi).movePoints(pBufs, p); + } + } } } void Foam::pointBoundaryMesh::updateMesh() { - pointPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initUpdateMesh(); - } + forAll(*this, patchi) + { + operator[](patchi).initUpdateMesh(pBufs); + } + + pBufs.finishedSends(); - forAll(patches, patchi) + forAll(*this, patchi) + { + operator[](patchi).updateMesh(pBufs); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].updateMesh(); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initUpdateMesh(pBufs); + } + else + { + operator[](patchi).updateMesh(pBufs); + } + } } } diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H index 77cbb4162f972d3cfb623d13deab117afc685418..79a2f2363c536d645f7d8fe2150e7c2b5d7221ff 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H @@ -66,22 +66,22 @@ protected: // Protected Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry() = 0; + virtual void initGeometry(PstreamBuffers&) = 0; //- Calculate the patch geometry - virtual void calcGeometry() = 0; + virtual void calcGeometry(PstreamBuffers&) = 0; //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) = 0; + virtual void initMovePoints(PstreamBuffers&, const pointField&) = 0; //- Correct patches after moving points - virtual void movePoints(const pointField&) = 0; + virtual void movePoints(PstreamBuffers&, const pointField&) = 0; //- Initialise the update of the patch topology - virtual void initUpdateMesh() = 0; + virtual void initUpdateMesh(PstreamBuffers&) = 0; //- Update of the patch topology - virtual void updateMesh() = 0; + virtual void updateMesh(PstreamBuffers&) = 0; public: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C index 81104d726e24b88254ecc9adc4dd9a24d746ef9e..6f65c70764b4ac4768e99e710cf2364df4211d3f 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C @@ -50,13 +50,13 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void Foam::cyclicPointPatch::initGeometry() +void Foam::cyclicPointPatch::initGeometry(PstreamBuffers&) { transformPairs_.setSize(0); } -void Foam::cyclicPointPatch::calcGeometry() +void Foam::cyclicPointPatch::calcGeometry(PstreamBuffers&) { const edgeList& cp = cyclicPolyPatch_.coupledPoints(); const labelList& mp = cyclicPolyPatch_.meshPoints(); @@ -128,16 +128,20 @@ void Foam::cyclicPointPatch::calcGeometry() } else if (pointMap[cp[i][0]] == -1 && pointMap[cp[i][1]] != -1) { - FatalErrorIn("cyclicPointPatch::calcGeometry() const") - << "Point " << cp[i][0] << "of point-pair " << i + FatalErrorIn + ( + "cyclicPointPatch::calcGeometry(PstreamBuffers&) const" + ) << "Point " << cp[i][0] << "of point-pair " << i << " is a global point but the other point " << cp[i][1] << " is not" << exit(FatalError); } else if (pointMap[cp[i][0]] != -1 && pointMap[cp[i][1]] == -1) { - FatalErrorIn("cyclicPointPatch::calcGeometry() const") - << "Point " << cp[i][1] << "of point-pair " << i + FatalErrorIn + ( + "cyclicPointPatch::calcGeometry(PstreamBuffers&) const" + ) << "Point " << cp[i][1] << "of point-pair " << i << " is a global point but the other point " << cp[i][0] << " is not" << exit(FatalError); @@ -149,25 +153,25 @@ void Foam::cyclicPointPatch::calcGeometry() } -void cyclicPointPatch::initMovePoints(const pointField&) +void cyclicPointPatch::initMovePoints(PstreamBuffers&, const pointField&) {} -void cyclicPointPatch::movePoints(const pointField&) +void cyclicPointPatch::movePoints(PstreamBuffers&, const pointField&) {} -void cyclicPointPatch::initUpdateMesh() +void cyclicPointPatch::initUpdateMesh(PstreamBuffers& pBufs) { - facePointPatch::initUpdateMesh(); - cyclicPointPatch::initGeometry(); + facePointPatch::initUpdateMesh(pBufs); + cyclicPointPatch::initGeometry(pBufs); } -void cyclicPointPatch::updateMesh() +void cyclicPointPatch::updateMesh(PstreamBuffers& pBufs) { - facePointPatch::updateMesh(); - cyclicPointPatch::calcGeometry(); + facePointPatch::updateMesh(pBufs); + cyclicPointPatch::calcGeometry(pBufs); } diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H index 999c45613d209b2d1ccd6398a1af004a6167691b..1d013f3421c085903b098436a8df0f4d96f5eb0d 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H @@ -74,22 +74,22 @@ class cyclicPointPatch edgeList transformPairs_; //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C index eb99350c131d49577d126dd4f82aebd45b3499ba..d3aae3ec877fe54fc7fb68a8548ec09ef894f32e 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C @@ -52,7 +52,7 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void Foam::processorPointPatch::initGeometry() +void Foam::processorPointPatch::initGeometry(PstreamBuffers& pBufs) { // Algorithm: // Depending on whether the patch is a master or a slave, get the primitive @@ -84,16 +84,16 @@ void Foam::processorPointPatch::initGeometry() if (Pstream::parRun()) { - initPatchPatchPoints(); + initPatchPatchPoints(pBufs); } } -void Foam::processorPointPatch::calcGeometry() +void Foam::processorPointPatch::calcGeometry(PstreamBuffers& pBufs) { if (Pstream::parRun()) { - calcPatchPatchPoints(); + calcPatchPatchPoints(pBufs); } // If it is not runing parallel or there are no global points @@ -149,11 +149,11 @@ void Foam::processorPointPatch::calcGeometry() } -void processorPointPatch::initPatchPatchPoints() +void processorPointPatch::initPatchPatchPoints(PstreamBuffers& pBufs) { if (debug) { - Info<< "processorPointPatch::calcPatchPatchPoints() : " + Info<< "processorPointPatch::initPatchPatchPoints(PstreamBuffers&) : " << "constructing patch-patch points" << endl; } @@ -229,7 +229,7 @@ void processorPointPatch::initPatchPatchPoints() // Send the patchPatchPoints to the neighbouring processor - OPstream toNeighbProc(Pstream::blocking, neighbProcNo()); + UOPstream toNeighbProc(neighbProcNo(), pBufs); toNeighbProc << ppmp.size() // number of points for checking @@ -238,17 +238,17 @@ void processorPointPatch::initPatchPatchPoints() if (debug) { - Info<< "processorPointPatch::calcPatchPatchPoints() : " + Info<< "processorPointPatch::initPatchPatchPoints() : " << "constructed patch-patch points" << endl; } } -void Foam::processorPointPatch::calcPatchPatchPoints() +void Foam::processorPointPatch::calcPatchPatchPoints(PstreamBuffers& pBufs) { // Get the patchPatchPoints from the neighbouring processor - IPstream fromNeighbProc(Pstream::blocking, neighbProcNo()); + UIPstream fromNeighbProc(neighbProcNo(), pBufs); label nbrNPoints(readLabel(fromNeighbProc)); labelListList patchPatchPoints(fromNeighbProc); @@ -265,7 +265,7 @@ void Foam::processorPointPatch::calcPatchPatchPoints() // separate. if (nbrNPoints != ppmp.size()) { - WarningIn("processorPointPatch::calcPatchPatchPoints()") + WarningIn("processorPointPatch::calcPatchPatchPoints(PstreamBuffers&)") << "Processor patch " << name() << " has " << ppmp.size() << " points; coupled patch has " << nbrNPoints << " points." << endl @@ -352,25 +352,25 @@ void Foam::processorPointPatch::calcPatchPatchPoints() } -void processorPointPatch::initMovePoints(const pointField&) +void processorPointPatch::initMovePoints(PstreamBuffers&, const pointField&) {} -void processorPointPatch::movePoints(const pointField&) +void processorPointPatch::movePoints(PstreamBuffers&, const pointField&) {} -void processorPointPatch::initUpdateMesh() +void processorPointPatch::initUpdateMesh(PstreamBuffers& pBufs) { - facePointPatch::initUpdateMesh(); - processorPointPatch::initGeometry(); + facePointPatch::initUpdateMesh(pBufs); + processorPointPatch::initGeometry(pBufs); } -void processorPointPatch::updateMesh() +void processorPointPatch::updateMesh(PstreamBuffers& pBufs) { - facePointPatch::updateMesh(); - processorPointPatch::calcGeometry(); + facePointPatch::updateMesh(pBufs); + processorPointPatch::calcGeometry(pBufs); } diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H index f17a00ca832c9e1926d4ccc5998fac055743e916..373416ac0a46c8817656025a919033e9cf6c3ea0 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H @@ -68,30 +68,30 @@ class processorPointPatch // Private Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the points on this patch which are should also be // on a neighbouring patch but are not part of faces of that patch - void initPatchPatchPoints(); + void initPatchPatchPoints(PstreamBuffers&); //- Calculate the points on this patch which are should also be // on a neighbouring patch but are not part of faces of that patch - void calcPatchPatchPoints(); + void calcPatchPatchPoints(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); //- Disallow default construct as copy diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H index dc2437877daf6dcef9e0ade04e4be2ebe6cdee69..a77af7af305f5713ee7f6736b29a7e60f7c8c6f7 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H @@ -86,7 +86,7 @@ protected: // Construction of demand-driven data //- Calculate mesh points - virtual void calcGeometry() = 0; + virtual void calcGeometry(PstreamBuffers&) = 0; public: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H index 990ab0de9a45c5356c2a6316c7eaec7c5884bd2b..ba89ca950cb2f3ce3b0eb6cc7e96e0cf3cb59af9 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H @@ -67,27 +67,27 @@ class globalPointPatch // Protected Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry() + virtual void initGeometry(PstreamBuffers&) {} //- Calculate the patch geometry - virtual void calcGeometry() + virtual void calcGeometry(PstreamBuffers&) {} //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) + virtual void initMovePoints(PstreamBuffers&, const pointField&) {} //- Correct patches after moving points - virtual void movePoints(const pointField&) + virtual void movePoints(PstreamBuffers&, const pointField&) {} //- Initialise the update of the patch topology - virtual void initUpdateMesh() + virtual void initUpdateMesh(PstreamBuffers&) {} //- Update of the patch topology - virtual void updateMesh() + virtual void updateMesh(PstreamBuffers&) {} diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C index 25c91dd398769b9fd5c0c333b0b5fa39c97c7f9e..fb15ac4b96733f71451bfff030f53bfc710425f7 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C @@ -51,7 +51,7 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void facePointPatch::initGeometry() +void facePointPatch::initGeometry(PstreamBuffers&) { meshPoints_.setSize(0); localPoints_.setSize(0); @@ -59,25 +59,25 @@ void facePointPatch::initGeometry() } -void facePointPatch::calcGeometry() +void facePointPatch::calcGeometry(PstreamBuffers&) {} -void facePointPatch::initMovePoints(const pointField&) +void facePointPatch::initMovePoints(PstreamBuffers&, const pointField&) {} -void facePointPatch::movePoints(const pointField&) +void facePointPatch::movePoints(PstreamBuffers&, const pointField&) {} -void facePointPatch::initUpdateMesh() +void facePointPatch::initUpdateMesh(PstreamBuffers& pBufs) { - facePointPatch::initGeometry(); + facePointPatch::initGeometry(pBufs); } -void facePointPatch::updateMesh() +void facePointPatch::updateMesh(PstreamBuffers&) {} diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H index 7a75b4017f3136a0bce2bd8173d60e484a24869b..0094d4ce1a0030f71beb7d1ee96a31b0edc5427f 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H @@ -76,22 +76,22 @@ protected: // Protected Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); private: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H index bdf67c879bece7bb2aa4519909b0396193b5dc1e..637ac659dd8796f5cc9a842c4a608000f1c3a551 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H @@ -49,6 +49,7 @@ namespace Foam class pointBoundaryMesh; class pointConstraint; +class PstreamBuffers; /*---------------------------------------------------------------------------*\ Class pointPatch Declaration @@ -79,27 +80,27 @@ protected: friend class pointBoundaryMesh; //- Initialise the calculation of the patch geometry - virtual void initGeometry() + virtual void initGeometry(PstreamBuffers&) {} //- Calculate the patch geometry - virtual void calcGeometry() + virtual void calcGeometry(PstreamBuffers&) {} //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) + virtual void initMovePoints(PstreamBuffers&, const pointField&) {} //- Correct patches after moving points - virtual void movePoints(const pointField&) + virtual void movePoints(PstreamBuffers&, const pointField&) {} //- Initialise the update of the patch topology - virtual void initUpdateMesh() + virtual void initUpdateMesh(PstreamBuffers&) {} //- Update of the patch topology - virtual void updateMesh() + virtual void updateMesh(PstreamBuffers&) {} diff --git a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C index eff7af933cabc52791bcf22958e3dbd29094c5c9..07bb357ff34bb39318d0638c1491779cd3509c79 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C +++ b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C @@ -29,6 +29,9 @@ License #include "primitiveMesh.H" #include "processorPolyPatch.H" #include "stringListOps.H" +#include "PstreamBuffers.H" +#include "lduSchedule.H" +#include "globalMeshData.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -144,14 +147,46 @@ void Foam::polyBoundaryMesh::clearAddressing() void Foam::polyBoundaryMesh::calcGeometry() { - forAll(*this, patchi) + PstreamBuffers pBufs(Pstream::defaultCommsType); + + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - operator[](patchi).initGeometry(); - } + forAll(*this, patchi) + { + operator[](patchi).initGeometry(pBufs); + } + + pBufs.finishedSends(); - forAll(*this, patchi) + forAll(*this, patchi) + { + operator[](patchi).calcGeometry(pBufs); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) { - operator[](patchi).calcGeometry(); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initGeometry(pBufs); + } + else + { + operator[](patchi).calcGeometry(pBufs); + } + } } } @@ -563,7 +598,7 @@ bool Foam::polyBoundaryMesh::checkDefinition(const bool report) const } else { - Info << " Boundary definition OK." << endl; + Info<< " Boundary definition OK." << endl; } } @@ -573,16 +608,46 @@ bool Foam::polyBoundaryMesh::checkDefinition(const bool report) const void Foam::polyBoundaryMesh::movePoints(const pointField& p) { - polyPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initMovePoints(p); - } + forAll(*this, patchi) + { + operator[](patchi).initMovePoints(pBufs, p); + } - forAll(patches, patchi) + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).movePoints(pBufs, p); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].movePoints(p); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initMovePoints(pBufs, p); + } + else + { + operator[](patchi).movePoints(pBufs, p); + } + } } } @@ -591,16 +656,46 @@ void Foam::polyBoundaryMesh::updateMesh() { deleteDemandDrivenData(neighbourEdgesPtr_); - polyPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initUpdateMesh(); - } + forAll(*this, patchi) + { + operator[](patchi).initUpdateMesh(pBufs); + } - forAll(patches, patchi) + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).updateMesh(pBufs); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].updateMesh(); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initUpdateMesh(pBufs); + } + else + { + operator[](patchi).updateMesh(pBufs); + } + } } } diff --git a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H index e3277defccab5da29e15d1835df1a281de7d76d1..fdea473ed3abd8b438604cce9b59ca36e15edb82 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H +++ b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H @@ -50,8 +50,6 @@ class polyMesh; // Forward declaration of friend functions and operators -class polyBoundaryMesh; - Ostream& operator<<(Ostream&, const polyBoundaryMesh&); diff --git a/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C b/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C index f1cc51cb9ec05fd5f3261584f6b92391eda8316b..1a86588c7457762200a9f5a6be7510da8c6e38b6 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C +++ b/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C @@ -614,7 +614,7 @@ Foam::polyMesh::polyMesh { if (checkMesh()) { - Info << "Mesh OK" << endl; + Info<< "Mesh OK" << endl; } } } diff --git a/src/OpenFOAM/meshes/polyMesh/polyMeshIO.C b/src/OpenFOAM/meshes/polyMesh/polyMeshIO.C index b8b133ed0115b19a32545ae24c098e93b4b6c2f9..f1bbabc460e1089748d401b13a2cd1f4b54b345b 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyMeshIO.C +++ b/src/OpenFOAM/meshes/polyMesh/polyMeshIO.C @@ -89,7 +89,7 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate() // Topological change if (debug) { - Info << "Topological change" << endl; + Info<< "Topological change" << endl; } clearOut(); @@ -403,7 +403,7 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate() // Points moved if (debug) { - Info << "Point motion" << endl; + Info<< "Point motion" << endl; } clearGeom(); @@ -430,14 +430,14 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate() // Rotation can cause direction vector to change geometricD_ = Vector<label>::zero; solutionD_ = Vector<label>::zero; - + return polyMesh::POINTS_MOVED; } else { if (debug) { - Info << "No change" << endl; + Info<< "No change" << endl; } return polyMesh::UNCHANGED; diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H index f823148d3a48b020a9d98a57e22fa3f5a4d5c853..e1afad60a812a2aa6fe09267fe4e0b830e091645 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H @@ -90,22 +90,22 @@ protected: ) const; //- Initialise the calculation of the patch geometry - virtual void initGeometry() = 0; + virtual void initGeometry(PstreamBuffers&) = 0; //- Calculate the patch geometry - virtual void calcGeometry() = 0; + virtual void calcGeometry(PstreamBuffers&) = 0; //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) = 0; + virtual void initMovePoints(PstreamBuffers&, const pointField&) = 0; //- Correct patches after moving points - virtual void movePoints(const pointField&) = 0; + virtual void movePoints(PstreamBuffers&, const pointField&) = 0; //- Initialise the update of the patch topology - virtual void initUpdateMesh() = 0; + virtual void initUpdateMesh(PstreamBuffers&) = 0; //- Update of the patch topology - virtual void updateMesh() = 0; + virtual void updateMesh(PstreamBuffers&) = 0; //- Write point in OBJ format @@ -283,7 +283,11 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const = 0; + virtual void initOrder + ( + PstreamBuffers&, + const primitivePatch& + ) const = 0; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -292,6 +296,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C index 8c6b20207913c5eac723b45455257560e4c62b92..fef6c98ec0c075dd66177f9107d84c143e1c2f4c 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C @@ -516,7 +516,8 @@ void Foam::cyclicPolyPatch::getCentresAndAnchors // if (debug) // { // Pout<< "cyclicPolyPatch::getCentresAndAnchors :" - // << "Specified translation : " << separationVector_ << endl; + // << "Specified translation : " << separationVector_ + // << endl; // } // // half0Ctrs += separationVector_; @@ -858,36 +859,44 @@ Foam::cyclicPolyPatch::~cyclicPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::cyclicPolyPatch::initGeometry() +void Foam::cyclicPolyPatch::initGeometry(PstreamBuffers& pBufs) { - polyPatch::initGeometry(); + polyPatch::initGeometry(pBufs); } -void Foam::cyclicPolyPatch::calcGeometry() +void Foam::cyclicPolyPatch::calcGeometry(PstreamBuffers& pBufs) { - polyPatch::calcGeometry(); + polyPatch::calcGeometry(pBufs); calcTransforms(); } -void Foam::cyclicPolyPatch::initMovePoints(const pointField& p) +void Foam::cyclicPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::initMovePoints(p); + polyPatch::initMovePoints(pBufs, p); } -void Foam::cyclicPolyPatch::movePoints(const pointField& p) +void Foam::cyclicPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::movePoints(p); + polyPatch::movePoints(pBufs, p); calcTransforms(); } -void Foam::cyclicPolyPatch::initUpdateMesh() +void Foam::cyclicPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - polyPatch::initUpdateMesh(); + polyPatch::initUpdateMesh(pBufs); } -void Foam::cyclicPolyPatch::updateMesh() +void Foam::cyclicPolyPatch::updateMesh(PstreamBuffers& pBufs) { - polyPatch::updateMesh(); + polyPatch::updateMesh(pBufs); deleteDemandDrivenData(coupledPointsPtr_); deleteDemandDrivenData(coupledEdgesPtr_); } @@ -1105,7 +1114,11 @@ const Foam::edgeList& Foam::cyclicPolyPatch::coupledEdges() const } -void Foam::cyclicPolyPatch::initOrder(const primitivePatch& pp) const +void Foam::cyclicPolyPatch::initOrder +( + PstreamBuffers&, + const primitivePatch& pp +) const {} @@ -1115,6 +1128,7 @@ void Foam::cyclicPolyPatch::initOrder(const primitivePatch& pp) const // is identity, rotation is 0) bool Foam::cyclicPolyPatch::order ( + PstreamBuffers& pBufs, const primitivePatch& pp, labelList& faceMap, labelList& rotation @@ -1300,7 +1314,8 @@ bool Foam::cyclicPolyPatch::order << endl; // Recalculate untransformed face centres - //pointField rawHalf0Ctrs = calcFaceCentres(half0Faces, pp.points()); + //pointField rawHalf0Ctrs = + // calcFaceCentres(half0Faces, pp.points()); label vertI = 0; forAll(half1Ctrs, i) @@ -1413,7 +1428,8 @@ bool Foam::cyclicPolyPatch::order << endl; // Recalculate untransformed face centres - //pointField rawHalf0Ctrs = calcFaceCentres(half0Faces, pp.points()); + //pointField rawHalf0Ctrs = + // calcFaceCentres(half0Faces, pp.points()); label vertI = 0; forAll(half1Ctrs, i) @@ -1499,7 +1515,8 @@ bool Foam::cyclicPolyPatch::order << endl; // Recalculate untransformed face centres - //pointField rawHalf0Ctrs = calcFaceCentres(half0Faces, pp.points()); + //pointField rawHalf0Ctrs = + // calcFaceCentres(half0Faces, pp.points()); label vertI = 0; forAll(half1Ctrs, i) diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H index ea67348891994a77bc356d3621e4d28a4216efeb..4f81975e60557bc21b9c440a9a1a1273baaa13b3 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H @@ -176,22 +176,22 @@ protected: // Protected Member functions //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: @@ -391,7 +391,7 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const; + virtual void initOrder(PstreamBuffers&, const primitivePatch&) const; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -400,6 +400,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C index 6e4df9f4e5cb5b6f63c780aa83d209e2986e7ad1..05969ee593305e064d256a8fa36f1d75571fd3c6 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C @@ -34,6 +34,7 @@ License #include "polyMesh.H" #include "Time.H" #include "transformList.H" +#include "PstreamBuffers.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -155,16 +156,11 @@ Foam::processorPolyPatch::~processorPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::processorPolyPatch::initGeometry() +void Foam::processorPolyPatch::initGeometry(PstreamBuffers& pBufs) { if (Pstream::parRun()) { - OPstream toNeighbProc - ( - Pstream::blocking, - neighbProcNo(), - 3*(sizeof(label) + size()*sizeof(vector) + sizeof(scalar)) - ); + UOPstream toNeighbProc(neighbProcNo(), pBufs); toNeighbProc << faceCentres() @@ -174,17 +170,13 @@ void Foam::processorPolyPatch::initGeometry() } -void Foam::processorPolyPatch::calcGeometry() +void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs) { if (Pstream::parRun()) { { - IPstream fromNeighbProc - ( - Pstream::blocking, - neighbProcNo(), - 3*(sizeof(label) + size()*sizeof(vector) + sizeof(scalar)) - ); + UIPstream fromNeighbProc(neighbProcNo(), pBufs); + fromNeighbProc >> neighbFaceCentres_ >> neighbFaceAreas_ @@ -251,22 +243,30 @@ void Foam::processorPolyPatch::calcGeometry() } -void Foam::processorPolyPatch::initMovePoints(const pointField& p) +void Foam::processorPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::movePoints(p); - processorPolyPatch::initGeometry(); + polyPatch::movePoints(pBufs, p); + processorPolyPatch::initGeometry(pBufs); } -void Foam::processorPolyPatch::movePoints(const pointField&) +void Foam::processorPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& +) { - processorPolyPatch::calcGeometry(); + processorPolyPatch::calcGeometry(pBufs); } -void Foam::processorPolyPatch::initUpdateMesh() +void Foam::processorPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - polyPatch::initUpdateMesh(); + polyPatch::initUpdateMesh(pBufs); deleteDemandDrivenData(neighbPointsPtr_); deleteDemandDrivenData(neighbEdgesPtr_); @@ -303,14 +303,7 @@ void Foam::processorPolyPatch::initUpdateMesh() edgeIndex[patchEdgeI] = findIndex(fEdges, patchEdgeI); } - OPstream toNeighbProc - ( - Pstream::blocking, - neighbProcNo(), - 8*sizeof(label) // four headers of labelList - + 2*nPoints()*sizeof(label) // two point-based labellists - + 2*nEdges()*sizeof(label) // two edge-based labelLists - ); + UOPstream toNeighbProc(neighbProcNo(), pBufs); toNeighbProc << pointFace @@ -321,10 +314,10 @@ void Foam::processorPolyPatch::initUpdateMesh() } -void Foam::processorPolyPatch::updateMesh() +void Foam::processorPolyPatch::updateMesh(PstreamBuffers& pBufs) { // For completeness - polyPatch::updateMesh(); + polyPatch::updateMesh(pBufs); if (Pstream::parRun()) { @@ -336,7 +329,7 @@ void Foam::processorPolyPatch::updateMesh() { // Note cannot predict exact size since opposite nPoints might // be different from one over here. - IPstream fromNeighbProc(Pstream::blocking, neighbProcNo()); + UIPstream fromNeighbProc(neighbProcNo(), pBufs); fromNeighbProc >> nbrPointFace @@ -446,7 +439,11 @@ const Foam::labelList& Foam::processorPolyPatch::neighbEdges() const } -void Foam::processorPolyPatch::initOrder(const primitivePatch& pp) const +void Foam::processorPolyPatch::initOrder +( + PstreamBuffers& pBufs, + const primitivePatch& pp +) const { if (!Pstream::parRun()) { @@ -491,7 +488,7 @@ void Foam::processorPolyPatch::initOrder(const primitivePatch& pp) const pointField anchors(getAnchorPoints(pp, pp.points())); // Now send all info over to the neighbour - OPstream toNeighbour(Pstream::blocking, neighbProcNo()); + UOPstream toNeighbour(neighbProcNo(), pBufs); toNeighbour << ctrs << anchors; } } @@ -503,6 +500,7 @@ void Foam::processorPolyPatch::initOrder(const primitivePatch& pp) const // is identity, rotation is 0) bool Foam::processorPolyPatch::order ( + PstreamBuffers& pBufs, const primitivePatch& pp, labelList& faceMap, labelList& rotation @@ -539,7 +537,7 @@ bool Foam::processorPolyPatch::order // Receive data from neighbour { - IPstream fromNeighbour(Pstream::blocking, neighbProcNo()); + UIPstream fromNeighbour(neighbProcNo(), pBufs); fromNeighbour >> masterCtrs >> masterAnchors; } diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H index a8948fee4376804ce4322973d00499160b94c6d1..807ea19825dd51eec6a38d145ec56c06f559a2fa 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H @@ -28,15 +28,12 @@ Class Description Neighbour processor patch. - Note: morph patch face ordering comes geometric or topological. - Geometric: no cyclics allowed (assumes faces coincident) - Topological: needs unmodified faces on both sides to correspond. Also - needs at least one per connected patch area (so all patch faces can be - visited from an unmodified face) + Note: morph patch face ordering tries to do a geometric ordering. + (assumes faces coincident) Hence will have problems when cyclics + are present. SourceFiles processorPolyPatch.C - processorPolyPatchMorph.C \*---------------------------------------------------------------------------*/ @@ -97,22 +94,22 @@ protected: // Protected Member functions //- Initialise the calculation of the patch geometry - void initGeometry(); + void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - void calcGeometry(); + void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - void initMovePoints(const pointField&); + void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - void movePoints(const pointField&); + void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: @@ -283,7 +280,7 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const; + virtual void initOrder(PstreamBuffers&, const primitivePatch&) const; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -292,6 +289,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C index be0aa378a67e00fffba1b354cd2e65b885d072a1..0a6bde6b4f86d89482eb5206886f0abdeb6a8fa5 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C @@ -55,12 +55,12 @@ namespace Foam // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void Foam::polyPatch::movePoints(const pointField& p) +void Foam::polyPatch::movePoints(PstreamBuffers&, const pointField& p) { primitivePatch::movePoints(p); } -void Foam::polyPatch::updateMesh() +void Foam::polyPatch::updateMesh(PstreamBuffers&) { clearAddressing(); } @@ -334,12 +334,13 @@ void Foam::polyPatch::write(Ostream& os) const } -void Foam::polyPatch::initOrder(const primitivePatch&) const +void Foam::polyPatch::initOrder(PstreamBuffers&, const primitivePatch&) const {} bool Foam::polyPatch::order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H index f8c8fa72e72f511f4cdd29d0ead265c3ba66905b..5694e538234a50341d1c9ae1d23c2a0050acaa60 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H @@ -56,6 +56,7 @@ namespace Foam class polyBoundaryMesh; class polyPatch; +class PstreamBuffers; Ostream& operator<<(Ostream&, const polyPatch&); @@ -101,26 +102,26 @@ protected: friend class polyBoundaryMesh; //- Initialise the calculation of the patch geometry - virtual void initGeometry() + virtual void initGeometry(PstreamBuffers&) {} //- Calculate the patch geometry - virtual void calcGeometry() + virtual void calcGeometry(PstreamBuffers&) {} //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) + virtual void initMovePoints(PstreamBuffers&, const pointField&) {} //- Correct patches after moving points - virtual void movePoints(const pointField& p); + virtual void movePoints(PstreamBuffers&, const pointField& p); //- Initialise the update of the patch topology - virtual void initUpdateMesh() + virtual void initUpdateMesh(PstreamBuffers&) {} //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: @@ -358,7 +359,7 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const; + virtual void initOrder(PstreamBuffers&, const primitivePatch&) const; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -367,6 +368,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C index bf4ce6725503c42165164fe17fa2ceccea5d9b1a..e3e15e8574b056f8f04757dbcbebb23dd585e7fd 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C @@ -156,8 +156,8 @@ void Foam::faceZone::calcCellLayers() const sc[faceI] = neiCellI; } } - //Info << "masterCells: " << mc << endl; - //Info << "slaveCells: " << sc << endl; + //Info<< "masterCells: " << mc << endl; + //Info<< "slaveCells: " << sc << endl; } } diff --git a/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C b/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C index 3def20788466e12d27ee361d361324d7cfb2a130..0c73d3e46a8dd56313250c9e4dff181cf44dc8b5 100644 --- a/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C +++ b/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C @@ -74,7 +74,7 @@ void Foam::preservePatchTypes { if (patchDictionary.found(patchNames[patchi])) { - const dictionary& patchDict = + const dictionary& patchDict = patchDictionary.subDict(patchNames[patchi]); patchDict.lookup("type") >> patchTypes[patchi]; @@ -90,14 +90,14 @@ void Foam::preservePatchTypes if (patchDictionary.found(defaultFacesName)) { - const dictionary& patchDict = + const dictionary& patchDict = patchDictionary.subDict(defaultFacesName); patchDict.readIfPresent("geometricType", defaultFacesType); } } - Info << nl << "Default patch type set to " << defaultFacesType << endl; + Info<< nl << "Default patch type set to " << defaultFacesType << endl; } diff --git a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsCheck.C b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsCheck.C index a644cd1934901290b85d83305034cb6f2bdf3d9d..1d74afb48ab435342d4136dac8095641df0432d3 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsCheck.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsCheck.C @@ -95,7 +95,7 @@ Foam::PatchTools::checkOrientation const Face& f = p[faceI]; const point& p0 = p.points()[f[0]]; const point& p1 = p.points()[f[1]]; - const point& p2 = p.points()[f[f.size()-1]]; + const point& p2 = p.points()[f.last()]; const vector pointNormal((p1 - p0) ^ (p2 - p0)); if ((pointNormal & p.faceNormals()[faceI]) < 0) diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C index 6be9ef348b5071e61874fffacc991a7f83505a68..a86dd36010a9c7207c3f7a1b3551807866f265b5 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.C @@ -28,7 +28,6 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components template < class Face, @@ -36,7 +35,6 @@ template class PointField, class PointType > - Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: PrimitivePatch ( @@ -60,12 +58,12 @@ PrimitivePatch edgeLoopsPtr_(NULL), localPointsPtr_(NULL), localPointOrderPtr_(NULL), + faceCentresPtr_(NULL), faceNormalsPtr_(NULL), pointNormalsPtr_(NULL) {} -// Construct from components template < class Face, @@ -73,7 +71,6 @@ template class PointField, class PointType > - Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: PrimitivePatch ( @@ -98,12 +95,12 @@ PrimitivePatch edgeLoopsPtr_(NULL), localPointsPtr_(NULL), localPointOrderPtr_(NULL), + faceCentresPtr_(NULL), faceNormalsPtr_(NULL), pointNormalsPtr_(NULL) {} -// Construct as copy template < class Face, @@ -111,7 +108,6 @@ template class PointField, class PointType > - Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: PrimitivePatch ( @@ -135,6 +131,7 @@ PrimitivePatch edgeLoopsPtr_(NULL), localPointsPtr_(NULL), localPointOrderPtr_(NULL), + faceCentresPtr_(NULL), faceNormalsPtr_(NULL), pointNormalsPtr_(NULL) {} @@ -149,8 +146,8 @@ template class PointField, class PointType > - -Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::~PrimitivePatch() +Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: +~PrimitivePatch() { clearOut(); } @@ -158,7 +155,6 @@ Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::~PrimitivePatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -// Correct patch after moving points template < class Face, @@ -166,7 +162,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: movePoints @@ -193,7 +188,6 @@ template class PointField, class PointType > - const Foam::edgeList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: edges() const @@ -214,7 +208,6 @@ template class PointField, class PointType > - Foam::label Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: nInternalEdges() const @@ -235,7 +228,6 @@ template class PointField, class PointType > - const Foam::labelList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: boundaryPoints() const @@ -256,7 +248,6 @@ template class PointField, class PointType > - const Foam::labelListList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: faceFaces() const @@ -277,7 +268,6 @@ template class PointField, class PointType > - const Foam::labelListList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: edgeFaces() const @@ -298,7 +288,6 @@ template class PointField, class PointType > - const Foam::labelListList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: faceEdges() const @@ -319,7 +308,6 @@ template class PointField, class PointType > - const Foam::labelListList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: pointEdges() const @@ -340,7 +328,6 @@ template class PointField, class PointType > - const Foam::labelListList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: pointFaces() const @@ -361,7 +348,6 @@ template class PointField, class PointType > - const Foam::List<Face>& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: localFaces() const @@ -382,7 +368,6 @@ template class PointField, class PointType > - const Foam::labelList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: meshPoints() const @@ -403,7 +388,6 @@ template class PointField, class PointType > - const Foam::Map<Foam::label>& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: meshPointMap() const @@ -424,7 +408,6 @@ template class PointField, class PointType > - const Foam::Field<PointType>& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: localPoints() const @@ -445,7 +428,6 @@ template class PointField, class PointType > - const Foam::labelList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: localPointOrder() const @@ -466,7 +448,6 @@ template class PointField, class PointType > - Foam::label Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: whichPoint @@ -495,7 +476,26 @@ template class PointField, class PointType > +const Foam::Field<PointType>& +Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: +faceCentres() const +{ + if (!faceCentresPtr_) + { + calcFaceCentres(); + } + + return *faceCentresPtr_; +} + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> const Foam::Field<PointType>& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: faceNormals() const @@ -516,7 +516,6 @@ template class PointField, class PointType > - const Foam::Field<PointType>& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: pointNormals() const @@ -539,7 +538,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: operator= @@ -552,6 +550,7 @@ operator= FaceList<Face>::operator=(pp); } + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "PrimitivePatchAddressing.C" diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H index c741b0839ec91863cb47c5071a1c3d08c03c2a33..dbd8a9ffb582a877bd37e868c4f88759c4e9cabc 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H @@ -166,6 +166,9 @@ private: //- Local point order for most efficient search mutable labelList* localPointOrderPtr_; + //- Face centres + mutable Field<PointType>* faceCentresPtr_; + //- Face unit normals mutable Field<PointType>* faceNormalsPtr_; @@ -205,6 +208,9 @@ private: //- Calculate local point order void calcLocalPointOrder() const; + //- Calculate face centres + void calcFaceCentres() const; + //- Calculate unit face normals void calcFaceNormals() const; @@ -370,6 +376,9 @@ public: const labelListList& pointEdges ) const; + //- Return face centres for patch + const Field<PointType>& faceCentres() const; + //- Return face normals for patch const Field<PointType>& faceNormals() const; diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchAddressing.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchAddressing.C index 14d91344d13c90a374e80393886132311ddbd0d6..5deecba26c4f20dcf301270cbf1ec012d675fa71 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchAddressing.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchAddressing.C @@ -48,7 +48,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcAddressing() const diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchBdryPoints.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchBdryPoints.C index fbd309d2cf4bb7e8df4b012ec6184d513fcb61df..379445b1c47ecf8e56207750b8ec80daa7685b79 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchBdryPoints.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchBdryPoints.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "PrimitivePatch.H" @@ -39,7 +37,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcBdryPoints() const diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchCheck.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchCheck.C index 172bc9db7e217c6ffa4bd81d7d29ef62604bcd4b..11fe2235ba50843272587b2a40d45de3380f84d5 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchCheck.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchCheck.C @@ -41,7 +41,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: visitPointRegion @@ -120,7 +119,6 @@ template class PointField, class PointType > - typename Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::surfaceTopo Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: surfaceType() const @@ -174,7 +172,6 @@ template class PointField, class PointType > - bool Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: checkTopology @@ -245,7 +242,6 @@ template class PointField, class PointType > - bool Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: checkPointManifold diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C index 160bf5546fb78f4266b4b5aadfbc4a39bf2f3178..c85cf14789c88f8dc4b1136952ff65489d0fcfe7 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchClear.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "PrimitivePatch.H" @@ -39,7 +37,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: clearGeom() @@ -52,6 +49,7 @@ clearGeom() } deleteDemandDrivenData(localPointsPtr_); + deleteDemandDrivenData(faceCentresPtr_); deleteDemandDrivenData(faceNormalsPtr_); deleteDemandDrivenData(pointNormalsPtr_); } @@ -64,7 +62,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: clearTopology() @@ -106,7 +103,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: clearPatchMeshAddr() @@ -132,7 +128,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: clearOut() diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchEdgeLoops.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchEdgeLoops.C index 3b7d87df90cbbda1cba465ad1223ebf050ff27e4..80e36f166dba6209014e79ab20c1ed67daf1a25c 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchEdgeLoops.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchEdgeLoops.C @@ -31,7 +31,6 @@ Description #include "PrimitivePatch.H" - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template @@ -41,7 +40,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcEdgeLoops() const @@ -174,7 +172,6 @@ template class PointField, class PointType > - const Foam::labelListList& Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: edgeLoops() const diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchLocalPointOrder.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchLocalPointOrder.C index b4359d83ebc06e02a356685bc545833b3987a599..7a20d8a81b942fb49059f9d884c38cab476e2258 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchLocalPointOrder.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchLocalPointOrder.C @@ -39,14 +39,13 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcLocalPointOrder() const { // Note: Cannot use bandCompressing as point-point addressing does // not exist and is not considered generally useful. - // + // if (debug) { @@ -137,4 +136,5 @@ calcLocalPointOrder() const } } + // ************************************************************************* // diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C index 30cffb6310a0e3b74fa5641b8d9ed1641cb6dd15..cd05f3f0e1fea2a63e4e9d83d01b6c1025535e25 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshData.C @@ -27,8 +27,6 @@ License #include "PrimitivePatch.H" #include "Map.H" - - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template @@ -38,7 +36,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcMeshData() const @@ -76,13 +73,13 @@ calcMeshData() const ////- 1.5 code: //// if the point is used, set the mark to 1 - //forAll (*this, faceI) + //forAll(*this, facei) //{ - // const Face& curPoints = this->operator[](faceI); + // const Face& curPoints = this->operator[](facei); // - // forAll (curPoints, pointI) + // forAll(curPoints, pointi) // { - // markedPoints.insert(curPoints[pointI], -1); + // markedPoints.insert(curPoints[pointi], -1); // } //} // @@ -95,22 +92,22 @@ calcMeshData() const //sort(pointPatch); // //// For every point in map give it its label in mesh points - //forAll (pointPatch, pointI) + //forAll(pointPatch, pointi) //{ - // markedPoints.find(pointPatch[pointI])() = pointI; + // markedPoints.find(pointPatch[pointi])() = pointi; //} //- Unsorted version: DynamicList<label> meshPoints(2*this->size()); - forAll (*this, faceI) + forAll(*this, facei) { - const Face& curPoints = this->operator[](faceI); + const Face& curPoints = this->operator[](facei); - forAll (curPoints, pointI) + forAll(curPoints, pointi) { - if (markedPoints.insert(curPoints[pointI], meshPoints.size())) + if (markedPoints.insert(curPoints[pointi], meshPoints.size())) { - meshPoints.append(curPoints[pointI]); + meshPoints.append(curPoints[pointi]); } } } @@ -124,14 +121,14 @@ calcMeshData() const localFacesPtr_ = new List<Face>(*this); List<Face>& lf = *localFacesPtr_; - forAll (*this, faceI) + forAll(*this, facei) { - const Face& curFace = this->operator[](faceI); - lf[faceI].setSize(curFace.size()); + const Face& curFace = this->operator[](facei); + lf[facei].setSize(curFace.size()); - forAll (curFace, labelI) + forAll(curFace, labelI) { - lf[faceI][labelI] = markedPoints.find(curFace[labelI])(); + lf[facei][labelI] = markedPoints.find(curFace[labelI])(); } } @@ -152,7 +149,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcMeshPointMap() const @@ -182,7 +178,7 @@ calcMeshPointMap() const meshPointMapPtr_ = new Map<label>(2*mp.size()); Map<label>& mpMap = *meshPointMapPtr_; - forAll (mp, i) + forAll(mp, i) { mpMap.insert(mp[i], i); } @@ -204,7 +200,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcLocalPoints() const @@ -235,9 +230,9 @@ calcLocalPoints() const Field<PointType>& locPts = *localPointsPtr_; - forAll (meshPts, pointI) + forAll(meshPts, pointi) { - locPts[pointI] = points_[meshPts[pointI]]; + locPts[pointi] = points_[meshPts[pointi]]; } if (debug) @@ -257,7 +252,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcPointNormals() const @@ -294,15 +288,15 @@ calcPointNormals() const Field<PointType>& n = *pointNormalsPtr_; - forAll (pf, pointI) + forAll(pf, pointi) { - PointType& curNormal = n[pointI]; + PointType& curNormal = n[pointi]; - const labelList& curFaces = pf[pointI]; + const labelList& curFaces = pf[pointi]; - forAll (curFaces, faceI) + forAll(curFaces, facei) { - curNormal += faceUnitNormals[curFaces[faceI]]; + curNormal += faceUnitNormals[curFaces[facei]]; } curNormal /= mag(curNormal) + VSMALL; @@ -325,7 +319,56 @@ template class PointField, class PointType > +void +Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: +calcFaceCentres() const +{ + if (debug) + { + Pout<< "PrimitivePatch<Face, FaceList, PointField, PointType>::" + "calcFaceCentres() : " + "calculating faceCentres in PrimitivePatch" + << endl; + } + + // It is considered an error to attempt to recalculate faceCentres + // if they have already been calculated. + if (faceCentresPtr_) + { + FatalErrorIn + ( + "PrimitivePatch<Face, FaceList, PointField, PointType>::" + "calcFaceCentres()" + ) << "faceCentresPtr_already allocated" + << abort(FatalError); + } + + faceCentresPtr_ = new Field<PointType>(this->size()); + + Field<PointType>& c = *faceCentresPtr_; + + forAll(c, facei) + { + c[facei] = this->operator[](facei).centre(points_); + } + if (debug) + { + Pout<< "PrimitivePatch<Face, FaceList, PointField, PointType>::" + "calcFaceCentres() : " + "finished calculating faceCentres in PrimitivePatch" + << endl; + } +} + + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcFaceNormals() const @@ -354,10 +397,10 @@ calcFaceNormals() const Field<PointType>& n = *faceNormalsPtr_; - forAll (n, faceI) + forAll(n, facei) { - n[faceI] = this->operator[](faceI).normal(points_); - n[faceI] /= mag(n[faceI]) + VSMALL; + n[facei] = this->operator[](facei).normal(points_); + n[facei] /= mag(n[facei]) + VSMALL; } if (debug) diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C index 79bac6f1c09db49c4dea705edd79e17c045b47b6..fe65b515ecf517232cfdf4ba8cd179d1fd45a255 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "PrimitivePatch.H" @@ -38,7 +36,6 @@ template class PointField, class PointType > - Foam::labelList Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: meshEdges @@ -116,7 +113,6 @@ template class PointField, class PointType > - Foam::labelList Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: meshEdges @@ -174,7 +170,6 @@ template class PointField, class PointType > - Foam::label Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: whichEdge diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchPointAddressing.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchPointAddressing.C index 7ac3612286753872aabb2ae35b9f41180a7cea65..e28cfc4d2383cf83288ee2ce3fa1d781478e3de8 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchPointAddressing.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchPointAddressing.C @@ -40,7 +40,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcPointEdges() const @@ -112,7 +111,6 @@ template class PointField, class PointType > - void Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: calcPointFaces() const diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchProjectPoints.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchProjectPoints.C index d79caa9da4f493771f07059f2359d7fe204ac0d9..55e97b3681589376b3412f6de1bd288bb97a76ac 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchProjectPoints.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchProjectPoints.C @@ -42,7 +42,6 @@ template class PointField, class PointType > - template <class ToPatch> Foam::List<Foam::objectHit> Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: @@ -263,7 +262,7 @@ projectPoints if (debug) { - Info << result[curLocalPointLabel] << nl; + Info<< result[curLocalPointLabel] << nl; } } else @@ -290,7 +289,6 @@ template class PointField, class PointType > - template <class ToPatch> Foam::List<Foam::objectHit> Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: @@ -507,7 +505,7 @@ projectFaceCentres if (debug) { - Info << result[curLocalFaceLabel] << nl; + Info<< result[curLocalFaceLabel] << nl; } } else diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C index 5dda9f504d68d0a1fbf342e46bea069585dfc19d..36d6b1a28f34da1748e22ef35fe5fe0f04e907c4 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C @@ -175,7 +175,7 @@ bool Foam::primitiveMesh::checkClosedCells { scalar maxOpenness = 0; - for(direction cmpt=0; cmpt<vector::nComponents; cmpt++) + for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) { maxOpenness = max ( @@ -654,7 +654,7 @@ bool Foam::primitiveMesh::checkFaceSkewness nWarnSkew++; } - if(skewness > maxSkew) + if (skewness > maxSkew) { maxSkew = skewness; } @@ -702,7 +702,7 @@ bool Foam::primitiveMesh::checkFaceSkewness nWarnSkew++; } - if(skewness > maxSkew) + if (skewness > maxSkew) { maxSkew = skewness; } @@ -856,7 +856,7 @@ bool Foam::primitiveMesh::checkFaceAngles const face& f = fcs[faceI]; // Get edge from f[0] to f[size-1]; - vector ePrev(p[f[0]] - p[f[f.size()-1]]); + vector ePrev(p[f.first()] - p[f.last()]); scalar magEPrev = mag(ePrev); ePrev /= magEPrev + VSMALL; @@ -1836,19 +1836,21 @@ bool Foam::primitiveMesh::checkFaceFaces if (nErrorDuplicate > 0 || nErrorOrder > 0) { + // These are actually warnings, not errors. if (nErrorDuplicate > 0) { - Info<< " ***Number of duplicate (not baffle) faces found: " - << nErrorDuplicate << endl; + Info<< " <<Number of duplicate (not baffle) faces found: " + << nErrorDuplicate + << ". This might indicate a problem." << endl; } if (nErrorOrder > 0) { - Info<< " ***Number of faces with non-consecutive shared points: " - << nErrorOrder << endl; + Info<< " <<Number of faces with non-consecutive shared points: " + << nErrorOrder << ". This might indicate a problem." << endl; } - return true; + return false; //return true; } else { diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshEdges.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshEdges.C index b7278ecf4900e0b871d667041dcf3fe18b2938cc..38f8597985e2c03b43d736180e1a7f07a9674795 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshEdges.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshEdges.C @@ -468,7 +468,7 @@ Foam::label Foam::primitiveMesh::findFirstCommonElementFromSortedLists while (iter1 != list1.end() && iter2 != list2.end()) { - if( *iter1 < *iter2) + if (*iter1 < *iter2) { ++iter1; } diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitivePatch/patchZones.C b/src/OpenFOAM/meshes/primitiveMesh/primitivePatch/patchZones.C index ef48f93ba0e26528c578980a691907ac7e9e68c7..1fb91286e1003fa5dd5b507f6ccfaae3b2f485a9 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitivePatch/patchZones.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitivePatch/patchZones.C @@ -114,7 +114,7 @@ void Foam::patchZones::markZone(label faceI) // Zones on all edges. labelList edgeZone(pp_.nEdges(), -1); - while(1) + while (true) { changedEdges = faceToEdge(changedFaces, edgeZone); diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H index 3bc3ea38a809c1850057de2d25cc73d0cdc2413b..ae24678c4a550ca41f96f41f1b39af8f1aa0179b 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H @@ -38,6 +38,7 @@ SourceFiles #include "intersection.H" #include "vector.H" +#include "tensor.H" #include "pointHit.H" @@ -100,7 +101,7 @@ public: //- Return types for classify enum proxType { - NONE, + NONE, POINT, // Close to point EDGE // Close to edge }; @@ -152,6 +153,14 @@ public: //- Return swept-volume inline scalar sweptVol(const triangle& t) const; + //- Return the inertia tensor, with optional reference + // point and density specification + inline tensor inertia + ( + PointRef refPt = vector::zero, + scalar density = 1.0 + ) const; + //- Return point intersection with a ray. // For a hit, the distance is signed. Positive number // represents the point in front of triangle. diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H index 40fa909b16633aa89fcc629a672a2197ced9a27f..be4c3d95d0be335821cd1873113a18f97b3f1645 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H @@ -331,6 +331,42 @@ inline scalar triangle<Point, PointRef>::sweptVol(const triangle& t) const } +template<class Point, class PointRef> +inline tensor triangle<Point, PointRef>::inertia +( + PointRef refPt, + scalar density +) const +{ + Point aRel = a_ - refPt; + Point bRel = b_ - refPt; + Point cRel = c_ - refPt; + + tensor V + ( + aRel.x(), aRel.y(), aRel.z(), + bRel.x(), bRel.y(), bRel.z(), + cRel.x(), cRel.y(), cRel.z() + ); + + scalar a = Foam::mag((b_ - a_)^(c_ - a_)); + + tensor S = 1/24.0*(tensor::one + I); + + return + ( + a*I/24.0* + ( + (aRel & aRel) + + (bRel & bRel) + + (cRel & cRel) + + ((aRel + bRel + cRel) & (aRel + bRel + cRel)) + ) + - a*(V.T() & S & V) + ) + *density; +} + template<class Point, class PointRef> inline pointHit triangle<Point, PointRef>::ray ( diff --git a/src/OpenFOAM/primitives/Tensor2D/Tensor2D.H b/src/OpenFOAM/primitives/Tensor2D/Tensor2D.H index f3c5d30e64447e31f588dd1aca56a008e4e96524..42fa25f07fb8ee1d26427c5a4a4fb26b004df342 100644 --- a/src/OpenFOAM/primitives/Tensor2D/Tensor2D.H +++ b/src/OpenFOAM/primitives/Tensor2D/Tensor2D.H @@ -130,7 +130,7 @@ public: // Member Operators - //- Construct given SphericalTensor2D + //- Copy SphericalTensor2D inline void operator=(const SphericalTensor2D<Cmpt>&); }; diff --git a/src/OpenFOAM/primitives/Tensor2D/Tensor2DI.H b/src/OpenFOAM/primitives/Tensor2D/Tensor2DI.H index 752be90d85f169c0df3fbb734864ae1aa32b2c04..385d53c16c55081ca66b8dda0b8ff2f38066532e 100644 --- a/src/OpenFOAM/primitives/Tensor2D/Tensor2DI.H +++ b/src/OpenFOAM/primitives/Tensor2D/Tensor2DI.H @@ -474,6 +474,14 @@ public: }; +template<class Cmpt> +class innerProduct<Tensor2D<Cmpt>, Tensor2D<Cmpt> > +{ +public: + + typedef Tensor2D<Cmpt> type; +}; + template<class Cmpt> class innerProduct<SphericalTensor2D<Cmpt>, Tensor2D<Cmpt> > { @@ -490,6 +498,23 @@ public: typedef Tensor2D<Cmpt> type; }; +template<class Cmpt> +class innerProduct<Tensor2D<Cmpt>, Vector2D<Cmpt> > +{ +public: + + typedef Vector2D<Cmpt> type; +}; + +template<class Cmpt> +class innerProduct<Vector2D<Cmpt>, Tensor2D<Cmpt> > +{ +public: + + typedef Vector2D<Cmpt> type; +}; + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/hashes/SHA1/SHA1.C b/src/OpenFOAM/primitives/hashes/SHA1/SHA1.C index 7bf07845e2f87f1200bfb6c3b8380f03e945a2ef..14fac1ba8cfea72447f90fd8882b6e973a3e5619 100644 --- a/src/OpenFOAM/primitives/hashes/SHA1/SHA1.C +++ b/src/OpenFOAM/primitives/hashes/SHA1/SHA1.C @@ -129,28 +129,29 @@ void Foam::SHA1::processBytes(const void *data, size_t len) } // Process available complete blocks - if (len >= 64) - { -#if !_STRING_ARCH_unaligned -# define alignof(type) offsetof (struct { char c; type x; }, x) -# define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) - if (UNALIGNED_P (data)) - { - while (len > 64) +// if (len >= 64) +// { +//#if !_STRING_ARCH_unaligned +//# define alignof(type) offsetof (struct { char c; type x; }, x) +//# define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) +// if (UNALIGNED_P (data)) +// { +// while (len > 64) + while (len >= 64) { processBlock(memcpy (buffer_, data, 64), 64); data = reinterpret_cast<const unsigned char*>(data) + 64; len -= 64; } - } - else -#endif - { - processBlock(data, len & ~63); - data = reinterpret_cast<const unsigned char*>(data) + (len & ~63); - len &= 63; - } - } +// } +// else +//#endif +// { +// processBlock(data, len & ~63); +// data = reinterpret_cast<const unsigned char*>(data) + (len & ~63); +// len &= 63; +// } +// } // Move remaining bytes in internal buffer. if (len > 0) @@ -223,7 +224,7 @@ Foam::SHA1::processBlock(const void *data, size_t len) { \ E += rol_uint32(A, 5) + F(B, C, D) + K + M; \ B = rol_uint32(B, 30); \ - } while(0) + } while (0) while (words < endp) { diff --git a/src/Pstream/mpi/UIPread.C b/src/Pstream/mpi/UIPread.C index 14360e0cc095039aa49c2cc8c76a0f6454f40c92..fb6a9ec7d7b45930a594280a75bc0707194654e4 100644 --- a/src/Pstream/mpi/UIPread.C +++ b/src/Pstream/mpi/UIPread.C @@ -66,6 +66,14 @@ Foam::UIPstream::UIPstream label wantedSize = externalBuf_.capacity(); + if (debug) + { + Pout<< "UIPstream::UIPstream : read from:" << fromProcNo + << " tag:" << tag << " wanted size:" << wantedSize + << Foam::endl; + } + + // If the buffer size is not specified, probe the incomming message // and set it if (!wantedSize) @@ -75,6 +83,12 @@ Foam::UIPstream::UIPstream externalBuf_.setCapacity(messageSize_); wantedSize = messageSize_; + + if (debug) + { + Pout<< "UIPstream::UIPstream : probed size:" << wantedSize + << Foam::endl; + } } messageSize_ = UIPstream::read @@ -127,6 +141,7 @@ Foam::UIPstream::UIPstream(const int fromProcNo, PstreamBuffers& buffers) if (commsType() == UPstream::nonBlocking) { // Message is already received into externalBuf + messageSize_ = buffers.recvBuf_[fromProcNo].size(); } else { @@ -134,6 +149,14 @@ Foam::UIPstream::UIPstream(const int fromProcNo, PstreamBuffers& buffers) label wantedSize = externalBuf_.capacity(); + if (debug) + { + Pout<< "UIPstream::UIPstream PstreamBuffers :" + << " read from:" << fromProcNo + << " tag:" << tag_ << " wanted size:" << wantedSize + << Foam::endl; + } + // If the buffer size is not specified, probe the incomming message // and set it if (!wantedSize) @@ -143,6 +166,12 @@ Foam::UIPstream::UIPstream(const int fromProcNo, PstreamBuffers& buffers) externalBuf_.setCapacity(messageSize_); wantedSize = messageSize_; + + if (debug) + { + Pout<< "UIPstream::UIPstream PstreamBuffers : probed size:" + << wantedSize << Foam::endl; + } } messageSize_ = UIPstream::read @@ -180,6 +209,14 @@ Foam::label Foam::UIPstream::read const int tag ) { + if (debug) + { + Pout<< "UIPstream::read : starting read from:" << fromProcNo + << " tag:" << tag << " wanted size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << Foam::endl; + } + if (commsType == blocking || commsType == scheduled) { MPI_Status status; @@ -214,6 +251,14 @@ Foam::label Foam::UIPstream::read label messageSize; MPI_Get_count(&status, MPI_BYTE, &messageSize); + if (debug) + { + Pout<< "UIPstream::read : finished read from:" << fromProcNo + << " tag:" << tag << " read size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << Foam::endl; + } + if (messageSize > bufSize) { FatalErrorIn @@ -256,6 +301,15 @@ Foam::label Foam::UIPstream::read return 0; } + if (debug) + { + Pout<< "UIPstream::read : started read from:" << fromProcNo + << " tag:" << tag << " read size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << " request:" << PstreamGlobals::outstandingRequests_.size() + << Foam::endl; + } + PstreamGlobals::outstandingRequests_.append(request); // Assume the message is completely received. @@ -267,7 +321,8 @@ Foam::label Foam::UIPstream::read ( "UIPstream::read" "(const int fromProcNo, char* buf, std::streamsize bufSize)" - ) << "Unsupported communications type " << commsType + ) << "Unsupported communications type " + << commsType << Foam::abort(FatalError); return 0; diff --git a/src/Pstream/mpi/UOPwrite.C b/src/Pstream/mpi/UOPwrite.C index f8439ba517ed43d09fb82896e429b6e5d065d1ac..9f8726d9a036d2e4af275f51bd4a20140bc7521d 100644 --- a/src/Pstream/mpi/UOPwrite.C +++ b/src/Pstream/mpi/UOPwrite.C @@ -43,6 +43,14 @@ bool Foam::UOPstream::write const int tag ) { + if (debug) + { + Pout<< "UIPstream::write : starting write to:" << toProcNo + << " tag:" << tag << " size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << Foam::endl; + } + bool transferFailed = true; if (commsType == blocking) @@ -56,6 +64,14 @@ bool Foam::UOPstream::write tag, MPI_COMM_WORLD ); + + if (debug) + { + Pout<< "UIPstream::write : finished write to:" << toProcNo + << " tag:" << tag << " size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << Foam::endl; + } } else if (commsType == scheduled) { @@ -68,6 +84,14 @@ bool Foam::UOPstream::write tag, MPI_COMM_WORLD ); + + if (debug) + { + Pout<< "UIPstream::write : finished write to:" << toProcNo + << " tag:" << tag << " size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << Foam::endl; + } } else if (commsType == nonBlocking) { @@ -84,6 +108,15 @@ bool Foam::UOPstream::write &request ); + if (debug) + { + Pout<< "UIPstream::write : started write to:" << toProcNo + << " tag:" << tag << " size:" << label(bufSize) + << " commsType:" << UPstream::commsTypeNames[commsType] + << " request:" << PstreamGlobals::outstandingRequests_.size() + << Foam::endl; + } + PstreamGlobals::outstandingRequests_.append(request); } else @@ -93,7 +126,8 @@ bool Foam::UOPstream::write "UOPstream::write" "(const int fromProcNo, char* buf, std::streamsize bufSize" ", const int)" - ) << "Unsupported communications type " << commsType + ) << "Unsupported communications type " + << UPstream::commsTypeNames[commsType] << Foam::abort(FatalError); } diff --git a/src/Pstream/mpi/UPstream.C b/src/Pstream/mpi/UPstream.C index b5a76e36e9ee26b8155728d624e6c5c46d877904..d05fe2ad9a7f4b72a8ca47d9fb9b96c986e1ed07 100644 --- a/src/Pstream/mpi/UPstream.C +++ b/src/Pstream/mpi/UPstream.C @@ -70,6 +70,12 @@ bool Foam::UPstream::init(int& argc, char**& argv) MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myProcNo_); + if (debug) + { + Pout<< "UPstream::init : initialised with numProcs:" << numprocs + << " myProcNo:" << myProcNo_ << endl; + } + if (numprocs <= 1) { FatalErrorIn("UPstream::init(int& argc, char**& argv)") @@ -124,6 +130,11 @@ bool Foam::UPstream::init(int& argc, char**& argv) void Foam::UPstream::exit(int errnum) { + if (debug) + { + Pout<< "UPstream::exit." << endl; + } + # ifndef SGIMPI int size; char* buff; @@ -164,6 +175,11 @@ void Foam::UPstream::abort() void Foam::reduce(scalar& Value, const sumOp<scalar>& bop) { + if (Pstream::debug) + { + Pout<< "Foam::reduce : value:" << Value << endl; + } + if (!UPstream::parRun()) { return; @@ -433,11 +449,23 @@ void Foam::reduce(scalar& Value, const sumOp<scalar>& bop) } */ } + + if (Pstream::debug) + { + Pout<< "Foam::reduce : reduced value:" << Value << endl; + } } void Foam::UPstream::waitRequests() { + if (debug) + { + Pout<< "UPstream::waitRequests : starting wait for " + << PstreamGlobals::outstandingRequests_.size() + << " outstanding requests." << endl; + } + if (PstreamGlobals::outstandingRequests_.size()) { if @@ -458,11 +486,22 @@ void Foam::UPstream::waitRequests() PstreamGlobals::outstandingRequests_.clear(); } + + if (debug) + { + Pout<< "UPstream::waitRequests : finished wait." << endl; + } } bool Foam::UPstream::finishedRequest(const label i) { + if (debug) + { + Pout<< "UPstream::waitRequests : starting wait for request:" << i + << endl; + } + if (i >= PstreamGlobals::outstandingRequests_.size()) { FatalErrorIn @@ -483,6 +522,12 @@ bool Foam::UPstream::finishedRequest(const label i) MPI_STATUS_IGNORE ); + if (debug) + { + Pout<< "UPstream::waitRequests : finished wait for request:" << i + << endl; + } + return flag != 0; } diff --git a/src/conversion/meshReader/meshReaderAux.C b/src/conversion/meshReader/meshReaderAux.C index 856d704857cdabb3a6ffbdfcc9660041ee42ec9b..9b1c9f2bdfa48334050a744dfa7ff64e0b547a35 100644 --- a/src/conversion/meshReader/meshReaderAux.C +++ b/src/conversion/meshReader/meshReaderAux.C @@ -58,15 +58,15 @@ void Foam::meshReader::warnDuplicates // warn about duplicate names if (duplicates) { - Info << nl << "WARNING: " << context << " with identical names:"; + Info<< nl << "WARNING: " << context << " with identical names:"; forAllConstIter(HashTable<label>, hashed, iter) { if (*iter > 1) { - Info << " " << iter.key(); + Info<< " " << iter.key(); } } - Info << nl << endl; + Info<< nl << endl; } } diff --git a/src/conversion/meshWriter/starcd/STARCDMeshWriter.C b/src/conversion/meshWriter/starcd/STARCDMeshWriter.C index 15d681898ee24c907d8bb8cb19647bf6d4ccae1d..0bb4632cce7ee5aae608df2b543da2d30e47dfb2 100644 --- a/src/conversion/meshWriter/starcd/STARCDMeshWriter.C +++ b/src/conversion/meshWriter/starcd/STARCDMeshWriter.C @@ -554,7 +554,7 @@ bool Foam::meshWriters::STARCD::writeSurface OFstream celFile(baseName + ".cel"); writeHeader(celFile, "CELL"); - Info << "Writing " << celFile.name() << endl; + Info<< "Writing " << celFile.name() << endl; // mesh and patch info const pointField& points = mesh_.points(); @@ -693,7 +693,7 @@ bool Foam::meshWriters::STARCD::writeSurface vrtFile.precision(10); vrtFile.setf(std::ios::showpoint); // force decimal point for Fortran - Info << "Writing " << vrtFile.name() << endl; + Info<< "Writing " << vrtFile.name() << endl; // build sorted table of contents SortableList<label> toc(pointHash.size()); diff --git a/src/conversion/polyDualMesh/polyDualMesh.C b/src/conversion/polyDualMesh/polyDualMesh.C index 1332d90fd4bdab5cb3168c854f777a9d01ea5b49..1d04252b1e726a74d14a8b0d8688c1c22378a08e 100644 --- a/src/conversion/polyDualMesh/polyDualMesh.C +++ b/src/conversion/polyDualMesh/polyDualMesh.C @@ -1015,7 +1015,7 @@ void Foam::polyDualMesh::calcDual { // Check orientation. - const face& f = dynDualFaces[dynDualFaces.size()-1]; + const face& f = dynDualFaces.last(); vector n = f.normal(dualPoints); if (((mesh.points()[owner] - dualPoints[f[0]]) & n) > 0) { @@ -1130,7 +1130,7 @@ void Foam::polyDualMesh::calcDual { // Check orientation. - const face& f = dynDualFaces[dynDualFaces.size()-1]; + const face& f = dynDualFaces.last(); vector n = f.normal(dualPoints); if (((mesh.points()[owner] - dualPoints[f[0]]) & n) > 0) { diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C index c58fa9852e12b2a54976a86e5abf61451c49c01b..9660994749f9aae5d5c5f2f5dff43eb3d6e1a9c2 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C +++ b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C @@ -88,14 +88,14 @@ Foam::solidBodyMotionFunctions::tabulated6DoFMotion::transformation() const << exit(FatalError); } - if (t > times_[times_.size()-1]) + if (t > times_.last()) { FatalErrorIn ( "solidBodyMotionFunctions::tabulated6DoFMotion::transformation()" ) << "current time (" << t << ") is greater than the maximum in the data table (" - << times_[times_.size()-1] << ')' + << times_.last() << ')' << exit(FatalError); } diff --git a/src/dynamicMesh/Make/files b/src/dynamicMesh/Make/files index e59bbe3800345945a7865a6087c0514655e056bc..8201b7236de30acc08aa38d751cb6d1c04cf47cf 100644 --- a/src/dynamicMesh/Make/files +++ b/src/dynamicMesh/Make/files @@ -49,7 +49,6 @@ perfectInterface/perfectInterface.C boundaryMesh/boundaryMesh.C boundaryPatch/boundaryPatch.C -boundaryMesh/octreeDataFaceList.C setUpdater/setUpdater.C meshModifiers = meshCut/meshModifiers diff --git a/src/dynamicMesh/boundaryMesh/boundaryMesh.C b/src/dynamicMesh/boundaryMesh/boundaryMesh.C index 494cda92951aaad1b4962d781ddb6f0d6a57353b..2ca4973e7c13c29cc25d85f077608f5f5f5739e5 100644 --- a/src/dynamicMesh/boundaryMesh/boundaryMesh.C +++ b/src/dynamicMesh/boundaryMesh/boundaryMesh.C @@ -29,11 +29,12 @@ License #include "polyMesh.H" #include "repatchPolyTopoChanger.H" #include "faceList.H" -#include "octree.H" -#include "octreeDataFaceList.H" +#include "indexedOctree.H" +#include "treeDataPrimitivePatch.H" #include "triSurface.H" #include "SortableList.H" #include "OFstream.H" +#include "uindirectPrimitivePatch.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -389,7 +390,7 @@ void Foam::boundaryMesh::markZone // Zones on all edges. labelList edgeZone(mesh().nEdges(), -1); - while(1) + while (true) { changedEdges = faceToEdge ( @@ -892,6 +893,17 @@ Foam::labelList Foam::boundaryMesh::getNearest << endl; } + uindirectPrimitivePatch leftPatch + ( + UIndirectList<face>(mesh(), leftFaces), + mesh().points() + ); + uindirectPrimitivePatch rightPatch + ( + UIndirectList<face>(mesh(), rightFaces), + mesh().points() + ); + // Overall bb treeBoundBox overallBb(mesh().localPoints()); @@ -911,29 +923,35 @@ Foam::labelList Foam::boundaryMesh::getNearest bbMax.z() += 2*tol; // Create the octrees - octree<octreeDataFaceList> leftTree + indexedOctree + < + treeDataPrimitivePatch<face, UIndirectList, const pointField&> + > leftTree ( - overallBb, - octreeDataFaceList + treeDataPrimitivePatch<face, UIndirectList, const pointField&> ( - mesh(), - leftFaces + false, // cacheBb + leftPatch ), - 1, - 20, - 10 + overallBb, + 10, // maxLevel + 10, // leafSize + 3.0 // duplicity ); - octree<octreeDataFaceList> rightTree + indexedOctree + < + treeDataPrimitivePatch<face, UIndirectList, const pointField&> + > rightTree ( - overallBb, - octreeDataFaceList + treeDataPrimitivePatch<face, UIndirectList, const pointField&> ( - mesh(), - rightFaces + false, // cacheBb + rightPatch ), - 1, - 20, - 10 + overallBb, + 10, // maxLevel + 10, // leafSize + 3.0 // duplicity ); if (debug) @@ -953,7 +971,7 @@ Foam::labelList Foam::boundaryMesh::getNearest treeBoundBox tightest; - const scalar searchDim = mag(searchSpan); + const scalar searchDimSqr = magSqr(searchSpan); forAll(nearestBFaceI, patchFaceI) { @@ -982,50 +1000,25 @@ Foam::labelList Foam::boundaryMesh::getNearest } // Search right tree - tightest.min() = ctr - searchSpan; - tightest.max() = ctr + searchSpan; - scalar rightDist = searchDim; - label rightI = rightTree.findNearest(ctr, tightest, rightDist); - + pointIndexHit rightInfo = rightTree.findNearest(ctr, searchDimSqr); // Search left tree. Note: could start from rightDist bounding box // instead of starting from top. - tightest.min() = ctr - searchSpan; - tightest.max() = ctr + searchSpan; - scalar leftDist = searchDim; - label leftI = leftTree.findNearest(ctr, tightest, leftDist); + pointIndexHit leftInfo = leftTree.findNearest(ctr, searchDimSqr); - - if (rightI == -1) - { - // No face found in right tree. - - if (leftI == -1) - { - // No face found in left tree. - nearestBFaceI[patchFaceI] = -1; - } - else - { - // Found in left but not in right. Choose left regardless if - // correct sign. Note: do we want this? - nearestBFaceI[patchFaceI] = leftFaces[leftI]; - } - } - else + if (rightInfo.hit()) { - if (leftI == -1) - { - // Found in right but not in left. Choose right regardless if - // correct sign. Note: do we want this? - nearestBFaceI[patchFaceI] = rightFaces[rightI]; - } - else + if (leftInfo.hit()) { // Found in both trees. Compare normals. + label rightFaceI = rightFaces[rightInfo.index()]; + label leftFaceI = leftFaces[leftInfo.index()]; + + label rightDist = mag(rightInfo.hitPoint()-ctr); + label leftDist = mag(leftInfo.hitPoint()-ctr); - scalar rightSign = n & ns[rightFaces[rightI]]; - scalar leftSign = n & ns[leftFaces[leftI]]; + scalar rightSign = n & ns[rightFaceI]; + scalar leftSign = n & ns[leftFaceI]; if ( @@ -1036,11 +1029,11 @@ Foam::labelList Foam::boundaryMesh::getNearest // Both same sign. Choose nearest. if (rightDist < leftDist) { - nearestBFaceI[patchFaceI] = rightFaces[rightI]; + nearestBFaceI[patchFaceI] = rightFaceI; } else { - nearestBFaceI[patchFaceI] = leftFaces[leftI]; + nearestBFaceI[patchFaceI] = leftFaceI; } } else @@ -1059,11 +1052,11 @@ Foam::labelList Foam::boundaryMesh::getNearest // Different sign and nearby. Choosing matching normal if (rightSign > 0) { - nearestBFaceI[patchFaceI] = rightFaces[rightI]; + nearestBFaceI[patchFaceI] = rightFaceI; } else { - nearestBFaceI[patchFaceI] = leftFaces[leftI]; + nearestBFaceI[patchFaceI] = leftFaceI; } } else @@ -1071,15 +1064,38 @@ Foam::labelList Foam::boundaryMesh::getNearest // Different sign but faraway. Choosing nearest. if (rightDist < leftDist) { - nearestBFaceI[patchFaceI] = rightFaces[rightI]; + nearestBFaceI[patchFaceI] = rightFaceI; } else { - nearestBFaceI[patchFaceI] = leftFaces[leftI]; + nearestBFaceI[patchFaceI] = leftFaceI; } } } } + else + { + // Found in right but not in left. Choose right regardless if + // correct sign. Note: do we want this? + label rightFaceI = rightFaces[rightInfo.index()]; + nearestBFaceI[patchFaceI] = rightFaceI; + } + } + else + { + // No face found in right tree. + + if (leftInfo.hit()) + { + // Found in left but not in right. Choose left regardless if + // correct sign. Note: do we want this? + nearestBFaceI[patchFaceI] = leftFaces[leftInfo.index()]; + } + else + { + // No face found in left tree. + nearestBFaceI[patchFaceI] = -1; + } } } diff --git a/src/dynamicMesh/boundaryMesh/octreeDataFaceList.C b/src/dynamicMesh/boundaryMesh/octreeDataFaceList.C deleted file mode 100644 index c44c455c74f1cdc7a2fe56d6660cb60c5842cd7e..0000000000000000000000000000000000000000 --- a/src/dynamicMesh/boundaryMesh/octreeDataFaceList.C +++ /dev/null @@ -1,573 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - -\*---------------------------------------------------------------------------*/ - -#include "octreeDataFaceList.H" -#include "octree.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(Foam::octreeDataFaceList, 0); - -Foam::scalar Foam::octreeDataFaceList::tol = 1E-6; - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Foam::octreeDataFaceList::calcBb() -{ - allBb_.setSize(faceLabels_.size()); - allBb_ = treeBoundBox - ( - vector(GREAT, GREAT, GREAT), - vector(-GREAT, -GREAT, -GREAT) - ); - - forAll (faceLabels_, faceLabelI) - { - label faceI = faceLabels_[faceLabelI]; - - // Update bb of face - treeBoundBox& myBb = allBb_[faceLabelI]; - - const face& f = mesh_.localFaces()[faceI]; - - forAll(f, fp) - { - const point& coord = mesh_.localPoints()[f[fp]]; - - myBb.min() = min(myBb.min(), coord); - myBb.max() = max(myBb.max(), coord); - } - } -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct from all faces in bMesh -Foam::octreeDataFaceList::octreeDataFaceList(const bMesh& mesh) -: - mesh_(mesh), - faceLabels_(mesh_.size()), - allBb_(mesh_.size()) -{ - forAll(faceLabels_, faceI) - { - faceLabels_[faceI] = faceI; - } - - // Generate tight fitting bounding box - calcBb(); -} - - -// Construct from selected faces in bMesh -Foam::octreeDataFaceList::octreeDataFaceList -( - const bMesh& mesh, - const labelList& faceLabels -) -: - mesh_(mesh), - faceLabels_(faceLabels), - allBb_(faceLabels.size()) -{ - // Generate tight fitting bounding box - calcBb(); -} - - - -// Construct as copy -Foam::octreeDataFaceList::octreeDataFaceList(const octreeDataFaceList& shapes) -: - mesh_(shapes.mesh()), - faceLabels_(shapes.faceLabels()), - allBb_(shapes.allBb()) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::octreeDataFaceList::~octreeDataFaceList() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - -Foam::label Foam::octreeDataFaceList::getSampleType -( - const octree<octreeDataFaceList>& oc, - const point& sample -) const -{ - // Need to determine whether sample is 'inside' or 'outside' - // Done by finding nearest face. This gives back a face which is - // guaranteed to contain nearest point. This point can be - // - in interior of face: compare to face normal - // - on edge of face: compare to edge normal - // - on point of face: compare to point normal - // Unfortunately the octree does not give us back the intersection point - // or where on the face it has hit so we have to recreate all that - // information. - - - // Find nearest face to sample - treeBoundBox tightest(treeBoundBox::greatBox); - - scalar tightestDist = GREAT; - - label index = oc.findNearest(sample, tightest, tightestDist); - - if (index == -1) - { - FatalErrorIn - ( - "octreeDataFaceList::getSampleType" - "(octree<octreeDataFaceList>&, const point&)" - ) << "Could not find " << sample << " in octree." - << abort(FatalError); - } - - label faceI = faceLabels_[index]; - - // Get actual intersection point on face - - if (debug & 2) - { - Pout<< "getSampleType : sample:" << sample - << " nearest face:" << faceI; - } - - const face& f = mesh_.localFaces()[faceI]; - - const pointField& points = mesh_.localPoints(); - - pointHit curHit = f.nearestPoint(sample, points); - - // - // 1] Check whether sample is above face - // - - if (curHit.hit()) - { - // Simple case. Compare to face normal. - - if (debug & 2) - { - Pout<< " -> face hit:" << curHit.hitPoint() - << " comparing to face normal " << mesh_.faceNormals()[faceI] - << endl; - } - return octree<octreeDataFaceList>::getVolType - ( - mesh_.faceNormals()[faceI], - sample - curHit.hitPoint() - ); - } - - if (debug & 2) - { - Pout<< " -> face miss:" << curHit.missPoint(); - } - - // - // 2] Check whether intersection is on one of the face vertices or - // face centre - // - - // typical dimension as sqrt of face area. - scalar typDim = sqrt(mag(f.normal(points))) + VSMALL; - - forAll(f, fp) - { - if ((mag(points[f[fp]] - curHit.missPoint())/typDim) < tol) - { - // Face intersection point equals face vertex fp - - if (debug & 2) - { - Pout<< " -> face point hit :" << points[f[fp]] - << " point normal:" << mesh_.pointNormals()[f[fp]] - << " distance:" - << mag(points[f[fp]] - curHit.missPoint())/typDim - << endl; - } - return octree<octreeDataFaceList>::getVolType - ( - mesh_.pointNormals()[f[fp]], - sample - curHit.missPoint() - ); - } - } - - // Get face centre - point ctr(f.centre(points)); - - if ((mag(ctr - curHit.missPoint())/typDim) < tol) - { - // Face intersection point equals face centre. Normal at face centre - // is already average of face normals - - if (debug & 2) - { - Pout<< " -> centre hit:" << ctr - << " distance:" - << mag(ctr - curHit.missPoint())/typDim - << endl; - } - - return octree<octreeDataFaceList>::getVolType - ( - mesh_.faceNormals()[faceI], - sample - curHit.missPoint() - ); - } - - - // - // 3] Get the 'real' edge the face intersection is on - // - - const labelList& myEdges = mesh_.faceEdges()[faceI]; - - forAll(myEdges, myEdgeI) - { - const edge& e = mesh_.edges()[myEdges[myEdgeI]]; - - pointHit edgeHit = - line<point, const point&> - ( - points[e.start()], - points[e.end()] - ).nearestDist(sample); - - point edgePoint; - if (edgeHit.hit()) - { - edgePoint = edgeHit.hitPoint(); - } - else - { - edgePoint = edgeHit.missPoint(); - } - - - if ((mag(edgePoint - curHit.missPoint())/typDim) < tol) - { - // Face intersection point lies on edge e - - // Calculate edge normal (wrong: uses face normals instead of - // triangle normals) - const labelList& myFaces = mesh_.edgeFaces()[myEdges[myEdgeI]]; - - vector edgeNormal(vector::zero); - - forAll(myFaces, myFaceI) - { - edgeNormal += mesh_.faceNormals()[myFaces[myFaceI]]; - } - - if (debug & 2) - { - Pout<< " -> real edge hit point:" << edgePoint - << " comparing to edge normal:" << edgeNormal - << endl; - } - - // Found face intersection point on this edge. Compare to edge - // normal - return octree<octreeDataFaceList>::getVolType - ( - edgeNormal, - sample - curHit.missPoint() - ); - } - } - - - // - // 4] Get the internal edge (vertex - faceCentre) the face intersection - // is on - // - - forAll(f, fp) - { - pointHit edgeHit = - line<point, const point&> - ( - points[f[fp]], - ctr - ).nearestDist(sample); - - point edgePoint; - if (edgeHit.hit()) - { - edgePoint = edgeHit.hitPoint(); - } - else - { - edgePoint = edgeHit.missPoint(); - } - - if ((mag(edgePoint - curHit.missPoint())/typDim) < tol) - { - // Face intersection point lies on edge between two face triangles - - // Calculate edge normal as average of the two triangle normals - label fpPrev = f.rcIndex(fp); - label fpNext = f.fcIndex(fp); - - vector e = points[f[fp]] - ctr; - vector ePrev = points[f[fpPrev]] - ctr; - vector eNext = points[f[fpNext]] - ctr; - - vector nLeft = ePrev ^ e; - nLeft /= mag(nLeft) + VSMALL; - - vector nRight = e ^ eNext; - nRight /= mag(nRight) + VSMALL; - - if (debug & 2) - { - Pout<< " -> internal edge hit point:" << edgePoint - << " comparing to edge normal " - << 0.5*(nLeft + nRight) - << endl; - } - - // Found face intersection point on this edge. Compare to edge - // normal - return octree<octreeDataFaceList>::getVolType - ( - 0.5*(nLeft + nRight), - sample - curHit.missPoint() - ); - } - } - - if (debug & 2) - { - Pout<< "Did not find sample " << sample - << " anywhere related to nearest face " << faceI << endl - << "Face:"; - - forAll(f, fp) - { - Pout<< " vertex:" << f[fp] << " coord:" << points[f[fp]] - << endl; - } - } - - // Can't determine status of sample with respect to nearest face. - // Either - // - tolerances are wrong. (if e.g. face has zero area) - // - or (more likely) surface is not closed. - - return octree<octreeDataFaceList>::UNKNOWN; -} - - -bool Foam::octreeDataFaceList::overlaps -( - const label index, - const treeBoundBox& sampleBb -) const -{ - return sampleBb.overlaps(allBb_[index]); -} - - -bool Foam::octreeDataFaceList::contains -( - const label, - const point& -) const -{ - notImplemented - ( - "octreeDataFaceList::contains(const label, const point&)" - ); - return false; -} - - -bool Foam::octreeDataFaceList::intersects -( - const label index, - const point& start, - const point& end, - point& intersectionPoint -) const -{ - label faceI = faceLabels_[index]; - - const face& f = mesh_.localFaces()[faceI]; - - const vector dir(end - start); - - // Disable picking up intersections behind us. - scalar oldTol = intersection::setPlanarTol(0.0); - - pointHit inter = - f.ray - ( - start, - dir, - mesh_.localPoints(), - intersection::HALF_RAY, - intersection::VECTOR - ); - - intersection::setPlanarTol(oldTol); - - if (inter.hit() && inter.distance() <= mag(dir)) - { - intersectionPoint = inter.hitPoint(); - - return true; - } - else - { - return false; - } -} - - -bool Foam::octreeDataFaceList::findTightest -( - const label index, - const point& sample, - treeBoundBox& tightest -) const -{ - // Get nearest and furthest away vertex - point myNear, myFar; - allBb_[index].calcExtremities(sample, myNear, myFar); - - const point dist = myFar - sample; - scalar myFarDist = mag(dist); - - point tightestNear, tightestFar; - tightest.calcExtremities(sample, tightestNear, tightestFar); - - scalar tightestFarDist = mag(tightestFar - sample); - - if (tightestFarDist < myFarDist) - { - // Keep current tightest. - return false; - } - else - { - // Construct bb around sample and myFar - const point dist2(fabs(dist.x()), fabs(dist.y()), fabs(dist.z())); - - tightest.min() = sample - dist2; - tightest.max() = sample + dist2; - - return true; - } -} - - -// Determine numerical value of sign of sample compared to shape at index -Foam::scalar Foam::octreeDataFaceList::calcSign -( - const label index, - const point& sample, - vector& -) const -{ - label faceI = faceLabels_[index]; - - const face& f = mesh_.localFaces()[faceI]; - - point ctr = f.centre(mesh_.localPoints()); - - vector vec = sample - ctr; - - vec /= mag(vec) + VSMALL; - - return mesh_.faceNormals()[faceI] & vec; -} - - -// Calculate nearest point on/in shapei -Foam::scalar Foam::octreeDataFaceList::calcNearest -( - const label index, - const point& sample, - point& nearest -) const -{ - label faceI = faceLabels_[index]; - - const face& f = mesh_.localFaces()[faceI]; - - pointHit nearHit = f.nearestPoint(sample, mesh_.localPoints()); - - if (nearHit.hit()) - { - nearest = nearHit.hitPoint(); - } - else - { - nearest = nearHit.missPoint(); - } - - if (debug & 1) - { - point ctr = f.centre(mesh_.localPoints()); - - scalar sign = mesh_.faceNormals()[faceI] & (sample - nearest); - - Pout<< "octreeDataFaceList::calcNearest : " - << "sample:" << sample - << " faceI:" << faceI - << " ctr:" << ctr - << " sign:" << sign - << " nearest point:" << nearest - << " distance to face:" << nearHit.distance() - << endl; - } - return nearHit.distance(); -} - - -void Foam::octreeDataFaceList::write -( - Ostream& os, - const label index -) const -{ - os << faceLabels_[index] << " " << allBb_[index]; -} - - -// ************************************************************************* // diff --git a/src/dynamicMesh/boundaryMesh/octreeDataFaceList.H b/src/dynamicMesh/boundaryMesh/octreeDataFaceList.H deleted file mode 100644 index addd71d79be9948d3ce20ed89ec9c26ea014cbc3..0000000000000000000000000000000000000000 --- a/src/dynamicMesh/boundaryMesh/octreeDataFaceList.H +++ /dev/null @@ -1,220 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - Foam::octreeDataFaceList - -Description - Holds data for octree to work on list of faces on a bMesh - (= PrimitivePatch which holds faces, not references them) - Same as octreeDataFace except for that. - -SourceFiles - octreeDataFaceList.C - -\*---------------------------------------------------------------------------*/ - -#ifndef octreeDataFaceList_H -#define octreeDataFaceList_H - -#include "treeBoundBoxList.H" -#include "faceList.H" -#include "point.H" -#include "className.H" -#include "bMesh.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Forward declaration of classes -template<class Type> class octree; - -/*---------------------------------------------------------------------------*\ - Class octreeDataFaceList Declaration -\*---------------------------------------------------------------------------*/ - -class octreeDataFaceList -{ - // Static data - - //- tolerance on linear dimensions - static scalar tol; - - - // Static function - - static inline label nexti(label max, label i) - { - return (i + 1) % max; - } - - - // Private data - - //- the mesh - const bMesh& mesh_; - - //- labels (in mesh indexing) of faces - labelList faceLabels_; - - //- bbs for all above faces - treeBoundBoxList allBb_; - - - // Private Member Functions - - //- Set allBb to tight fitting bounding box - void calcBb(); - -public: - - // Declare name of the class and its debug switch - ClassName("octreeDataFaceList"); - - // Constructors - - //- Construct from all faces in bMesh. - octreeDataFaceList(const bMesh& mesh); - - //- Construct from selected faces in bMesh. - octreeDataFaceList(const bMesh& mesh, const labelList& faceLabels); - - //- Construct as copy - octreeDataFaceList(const octreeDataFaceList&); - - - // Destructor - - ~octreeDataFaceList(); - - - // Member Functions - - // Access - - const bMesh& mesh() const - { - return mesh_; - } - - const labelList& faceLabels() const - { - return faceLabels_; - } - - const treeBoundBoxList& allBb() const - { - return allBb_; - } - - label size() const - { - return allBb_.size(); - } - - // Search - - //- Get type of sample - label getSampleType - ( - const octree<octreeDataFaceList>&, - const point& - ) const; - - //- Does (bb of) shape at index overlap bb - bool overlaps - ( - const label index, - const treeBoundBox& sampleBb - ) const; - - //- Does shape at index contain sample - bool contains - ( - const label index, - const point& sample - ) const; - - //- Segment (from start to end) intersection with shape - // at index. If intersects returns true and sets intersectionPoint - bool intersects - ( - const label index, - const point& start, - const point& end, - point& intersectionPoint - ) const; - - //- Sets newTightest to bounding box (and returns true) if - // nearer to sample than tightest bounding box. Otherwise - // returns false. - bool findTightest - ( - const label index, - const point& sample, - treeBoundBox& tightest - ) const; - - //- Given index get unit normal and calculate (numerical) sign - // of sample. - // Used to determine accuracy of calcNearest or inside/outside. - scalar calcSign - ( - const label index, - const point& sample, - vector& n - ) const; - - //- Calculates nearest (to sample) point in shape. - // Returns point and mag(nearest - sample). Returns GREAT if - // sample does not project onto (triangle decomposition) of face. - scalar calcNearest - ( - const label index, - const point& sample, - point& nearest - ) const; - - - // Edit - - // Write - - //- Write shape at index - void write(Ostream& os, const label index) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - -#endif - -// ************************************************************************* // diff --git a/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C b/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C index 3df03c8c703deed05e60c22a6541b5fa680b96f9..37562abc35b505f9e2a63615ed940d2242a367af 100644 --- a/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C +++ b/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C @@ -330,8 +330,6 @@ void Foam::fvMeshAdder::MapVolFields if (fieldsToAdd.found(fld.name())) { - Pout<< "Mapping field " << fld.name() << endl; - const GeometricField<Type, fvPatchField, volMesh>& fldToAdd = *fieldsToAdd[fld.name()]; @@ -339,7 +337,7 @@ void Foam::fvMeshAdder::MapVolFields } else { - WarningIn("fvMeshAdder::MapVolFields") + WarningIn("fvMeshAdder::MapVolFields(..)") << "Not mapping field " << fld.name() << " since not present on mesh to add" << endl; @@ -642,15 +640,13 @@ void Foam::fvMeshAdder::MapSurfaceFields if (fieldsToAdd.found(fld.name())) { - Pout<< "Mapping field " << fld.name() << endl; - const fldType& fldToAdd = *fieldsToAdd[fld.name()]; MapSurfaceField<Type>(meshMap, fld, fldToAdd); } else { - WarningIn("fvMeshAdder::MapSurfaceFields") + WarningIn("fvMeshAdder::MapSurfaceFields(..)") << "Not mapping field " << fld.name() << " since not present on mesh to add" << endl; diff --git a/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C b/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C index fea10f410bd96768a11c839a17ccd406fd28672b..5d4144a32ce45c1ec947da8df29b8302026924da 100644 --- a/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C +++ b/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C @@ -25,8 +25,6 @@ License \*----------------------------------------------------------------------------*/ #include "fvMeshDistribute.H" -#include "ProcessorTopology.H" -#include "commSchedule.H" #include "PstreamCombineReduceOps.H" #include "fvMeshAdder.H" #include "faceCoupleInfo.H" @@ -39,6 +37,8 @@ License #include "mergePoints.H" #include "mapDistributePolyMesh.H" #include "surfaceFields.H" +#include "syncTools.H" +#include "CompactListList.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -47,71 +47,6 @@ defineTypeNameAndDebug(Foam::fvMeshDistribute, 0); // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -//Foam::List<Foam::labelPair> Foam::fvMeshDistribute::getSchedule -//( -// const labelList& distribution -//) -//{ -// labelList nCellsPerProc(countCells(distribution)); -// -// if (debug) -// { -// Pout<< "getSchedule : Wanted distribution:" << nCellsPerProc << endl; -// } -// -// // Processors I need to send data to -// labelListList mySendProcs(Pstream::nProcs()); -// -// // Count -// label nSendProcs = 0; -// forAll(nCellsPerProc, sendProcI) -// { -// if (sendProcI != Pstream::myProcNo() && nCellsPerProc[sendProcI] > 0) -// { -// nSendProcs++; -// } -// } -// -// // Fill -// mySendProcs[Pstream::myProcNo()].setSize(nSendProcs); -// nSendProcs = 0; -// forAll(nCellsPerProc, sendProcI) -// { -// if (sendProcI != Pstream::myProcNo() && nCellsPerProc[sendProcI] > 0) -// { -// mySendProcs[Pstream::myProcNo()][nSendProcs++] = sendProcI; -// } -// } -// -// // Synchronise -// Pstream::gatherList(mySendProcs); -// Pstream::scatterList(mySendProcs); -// -// // Combine into list (same on all procs) giving sending and receiving -// // processor -// label nComms = 0; -// forAll(mySendProcs, procI) -// { -// nComms += mySendProcs[procI].size(); -// } -// -// List<labelPair> schedule(nComms); -// nComms = 0; -// -// forAll(mySendProcs, procI) -// { -// const labelList& sendProcs = mySendProcs[procI]; -// -// forAll(sendProcs, i) -// { -// schedule[nComms++] = labelPair(procI, sendProcs[i]); -// } -// } -// -// return schedule; -//} - - Foam::labelList Foam::fvMeshDistribute::select ( const bool selectEqual, @@ -144,14 +79,29 @@ Foam::labelList Foam::fvMeshDistribute::select // Check all procs have same names and in exactly same order. -void Foam::fvMeshDistribute::checkEqualWordList(const wordList& lst) +void Foam::fvMeshDistribute::checkEqualWordList +( + const string& msg, + const wordList& lst +) { - wordList myObjects(lst); + List<wordList> allNames(Pstream::nProcs()); + allNames[Pstream::myProcNo()] = lst; + Pstream::gatherList(allNames); + Pstream::scatterList(allNames); - // Check that all meshes have same objects - Pstream::listCombineGather(myObjects, checkEqualType()); - // Below scatter only needed to balance sends and receives. - Pstream::listCombineScatter(myObjects); + for (label procI = 1; procI < Pstream::nProcs(); procI++) + { + if (allNames[procI] != allNames[0]) + { + FatalErrorIn("fvMeshDistribute::checkEqualWordList(..)") + << "When checking for equal " << msg.c_str() << " :" << endl + << "processor0 has:" << allNames[0] << endl + << "processor" << procI << " has:" << allNames[procI] << endl + << msg.c_str() << " need to be synchronised on all processors." + << exit(FatalError); + } + } } @@ -664,21 +614,6 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::fvMeshDistribute::mergeSharedPoints << " newPointI:" << newPointI << abort(FatalError); } } - //- old: use pointToMaster map. - //forAll(constructMap, i) - //{ - // label oldPointI = constructMap[i]; - // - // // See if merged into other point - // Map<label>::const_iterator iter = pointToMaster.find(oldPointI); - // - // if (iter != pointToMaster.end()) - // { - // oldPointI = iter(); - // } - // - // constructMap[i] = map().reversePointMap()[oldPointI]; - //} } return map; } @@ -693,46 +628,49 @@ void Foam::fvMeshDistribute::getNeighbourData labelList& sourceNewProc ) const { - sourceFace.setSize(mesh_.nFaces() - mesh_.nInternalFaces()); - sourceProc.setSize(sourceFace.size()); - sourceNewProc.setSize(sourceFace.size()); + label nBnd = mesh_.nFaces() - mesh_.nInternalFaces(); + sourceFace.setSize(nBnd); + sourceProc.setSize(nBnd); + sourceNewProc.setSize(nBnd); const polyBoundaryMesh& patches = mesh_.boundaryMesh(); - // Send meshFace labels of processor patches and destination processor. + // Get neighbouring meshFace labels and new processor of coupled boundaries. + labelList nbrFaces(nBnd, -1); + labelList nbrNewProc(nBnd, -1); + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; if (isA<processorPolyPatch>(pp)) { - const processorPolyPatch& procPatch = - refCast<const processorPolyPatch>(pp); + label offset = pp.start() - mesh_.nInternalFaces(); - // Labels of faces on this side - labelList meshFaceLabels(pp.size()); - forAll(meshFaceLabels, i) + // Mesh labels of faces on this side + forAll(pp, i) { - meshFaceLabels[i] = pp.start()+i; + label bndI = offset + i; + nbrFaces[bndI] = pp.start()+i; } // Which processor they will end up on - const labelList newProc + SubList<label>(nbrNewProc, pp.size(), offset).assign ( - UIndirectList<label>(distribution, pp.faceCells()) + UIndirectList<label>(distribution, pp.faceCells())() ); - - OPstream toNeighbour(Pstream::blocking, procPatch.neighbProcNo()); - - toNeighbour << meshFaceLabels << newProc; } } - // Receive meshFace labels and destination processors of processor faces. + + // Exchange the boundary data + syncTools::swapBoundaryFaceList(mesh_, nbrFaces, false); + syncTools::swapBoundaryFaceList(mesh_, nbrNewProc, false); + + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; - label offset = pp.start() - mesh_.nInternalFaces(); if (isA<processorPolyPatch>(pp)) @@ -740,11 +678,6 @@ void Foam::fvMeshDistribute::getNeighbourData const processorPolyPatch& procPatch = refCast<const processorPolyPatch>(pp); - // Receive the data - IPstream fromNeighbour(Pstream::blocking, procPatch.neighbProcNo()); - labelList nbrFaces(fromNeighbour); - labelList nbrNewProc(fromNeighbour); - // Check which of the two faces we store. if (Pstream::myProcNo() < procPatch.neighbProcNo()) @@ -752,9 +685,10 @@ void Foam::fvMeshDistribute::getNeighbourData // Use my local face labels forAll(pp, i) { - sourceFace[offset + i] = pp.start()+i; - sourceProc[offset + i] = Pstream::myProcNo(); - sourceNewProc[offset + i] = nbrNewProc[i]; + label bndI = offset + i; + sourceFace[bndI] = pp.start()+i; + sourceProc[bndI] = Pstream::myProcNo(); + sourceNewProc[bndI] = nbrNewProc[bndI]; } } else @@ -762,9 +696,10 @@ void Foam::fvMeshDistribute::getNeighbourData // Use my neighbours face labels forAll(pp, i) { - sourceFace[offset + i] = nbrFaces[i]; - sourceProc[offset + i] = procPatch.neighbProcNo(); - sourceNewProc[offset + i] = nbrNewProc[i]; + label bndI = offset + i; + sourceFace[bndI] = nbrFaces[bndI]; + sourceProc[bndI] = procPatch.neighbProcNo(); + sourceNewProc[bndI] = nbrNewProc[bndI]; } } } @@ -773,9 +708,10 @@ void Foam::fvMeshDistribute::getNeighbourData // Normal (physical) boundary forAll(pp, i) { - sourceFace[offset + i] = patchI; - sourceProc[offset + i] = -1; - sourceNewProc[offset + i] = -1; + label bndI = offset + i; + sourceFace[bndI] = patchI; + sourceProc[bndI] = -1; + sourceNewProc[bndI] = -1; } } } @@ -1120,7 +1056,8 @@ void Foam::fvMeshDistribute::sendMesh const labelList& sourceFace, const labelList& sourceProc, - const labelList& sourceNewProc + const labelList& sourceNewProc, + UOPstream& toDomain ) { if (debug) @@ -1133,52 +1070,95 @@ void Foam::fvMeshDistribute::sendMesh << endl; } - // Assume sparse point zones. Get contents in merged-zone indices. - labelListList zonePoints(pointZoneNames.size()); + // Assume sparse, possibly overlapping point zones. Get contents + // in merged-zone indices. + CompactListList<label> zonePoints; { const pointZoneMesh& pointZones = mesh.pointZones(); + labelList rowSizes(pointZoneNames.size(), 0); + + forAll(pointZoneNames, nameI) + { + label myZoneID = pointZones.findZoneID(pointZoneNames[nameI]); + + if (myZoneID != -1) + { + rowSizes[nameI] = pointZones[myZoneID].size(); + } + } + zonePoints.setSize(rowSizes); + forAll(pointZoneNames, nameI) { label myZoneID = pointZones.findZoneID(pointZoneNames[nameI]); if (myZoneID != -1) { - zonePoints[nameI] = pointZones[myZoneID]; + zonePoints[nameI].assign(pointZones[myZoneID]); } } } - // Assume sparse face zones - labelListList zoneFaces(faceZoneNames.size()); - boolListList zoneFaceFlip(faceZoneNames.size()); + // Assume sparse, possibly overlapping face zones + CompactListList<label> zoneFaces; + CompactListList<bool> zoneFaceFlip; { const faceZoneMesh& faceZones = mesh.faceZones(); + labelList rowSizes(faceZoneNames.size(), 0); + forAll(faceZoneNames, nameI) { label myZoneID = faceZones.findZoneID(faceZoneNames[nameI]); if (myZoneID != -1) { - zoneFaces[nameI] = faceZones[myZoneID]; - zoneFaceFlip[nameI] = faceZones[myZoneID].flipMap(); + rowSizes[nameI] = faceZones[myZoneID].size(); + } + } + + zoneFaces.setSize(rowSizes); + zoneFaceFlip.setSize(rowSizes); + + forAll(faceZoneNames, nameI) + { + label myZoneID = faceZones.findZoneID(faceZoneNames[nameI]); + + if (myZoneID != -1) + { + zoneFaces[nameI].assign(faceZones[myZoneID]); + zoneFaceFlip[nameI].assign(faceZones[myZoneID].flipMap()); } } } - // Assume sparse cell zones - labelListList zoneCells(cellZoneNames.size()); + // Assume sparse, possibly overlapping cell zones + CompactListList<label> zoneCells; { const cellZoneMesh& cellZones = mesh.cellZones(); + labelList rowSizes(pointZoneNames.size(), 0); + + forAll(cellZoneNames, nameI) + { + label myZoneID = cellZones.findZoneID(cellZoneNames[nameI]); + + if (myZoneID != -1) + { + rowSizes[nameI] = cellZones[myZoneID].size(); + } + } + + zoneCells.setSize(rowSizes); + forAll(cellZoneNames, nameI) { label myZoneID = cellZones.findZoneID(cellZoneNames[nameI]); if (myZoneID != -1) { - zoneCells[nameI] = cellZones[myZoneID]; + zoneCells[nameI].assign(cellZones[myZoneID]); } } } @@ -1198,10 +1178,9 @@ void Foam::fvMeshDistribute::sendMesh //} // Send - OPstream toDomain(Pstream::blocking, domain); toDomain << mesh.points() - << mesh.faces() + << CompactListList<label, face>(mesh.faces()) << mesh.faceOwner() << mesh.faceNeighbour() << mesh.boundaryMesh() @@ -1214,6 +1193,13 @@ void Foam::fvMeshDistribute::sendMesh << sourceFace << sourceProc << sourceNewProc; + + + if (debug) + { + Pout<< "Started sending mesh to domain " << domain + << endl; + } } @@ -1227,21 +1213,20 @@ Foam::autoPtr<Foam::fvMesh> Foam::fvMeshDistribute::receiveMesh const Time& runTime, labelList& domainSourceFace, labelList& domainSourceProc, - labelList& domainSourceNewProc + labelList& domainSourceNewProc, + UIPstream& fromNbr ) { - IPstream fromNbr(Pstream::blocking, domain); - pointField domainPoints(fromNbr); - faceList domainFaces(fromNbr); + faceList domainFaces = CompactListList<label, face>(fromNbr)(); labelList domainAllOwner(fromNbr); labelList domainAllNeighbour(fromNbr); PtrList<entry> patchEntries(fromNbr); - labelListList zonePoints(fromNbr); - labelListList zoneFaces(fromNbr); - boolListList zoneFaceFlip(fromNbr); - labelListList zoneCells(fromNbr); + CompactListList<label> zonePoints(fromNbr); + CompactListList<label> zoneFaces(fromNbr); + CompactListList<bool> zoneFaceFlip(fromNbr); + CompactListList<label> zoneCells(fromNbr); fromNbr >> domainSourceFace @@ -1442,6 +1427,7 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute const wordList cellZoneNames(mergeWordList(mesh_.cellZones().names())); + // Local environment of all boundary faces // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1481,36 +1467,39 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute mesh_.clearOut(); mesh_.resetMotion(); + // Get data to send. Make sure is synchronised const wordList volScalars(mesh_.names(volScalarField::typeName)); - checkEqualWordList(volScalars); + checkEqualWordList("volScalarFields", volScalars); const wordList volVectors(mesh_.names(volVectorField::typeName)); - checkEqualWordList(volVectors); + checkEqualWordList("volVectorFields", volVectors); const wordList volSphereTensors ( mesh_.names(volSphericalTensorField::typeName) ); - checkEqualWordList(volSphereTensors); + checkEqualWordList("volSphericalTensorFields", volSphereTensors); const wordList volSymmTensors(mesh_.names(volSymmTensorField::typeName)); - checkEqualWordList(volSymmTensors); + checkEqualWordList("volSymmTensorFields", volSymmTensors); const wordList volTensors(mesh_.names(volTensorField::typeName)); - checkEqualWordList(volTensors); + checkEqualWordList("volTensorField", volTensors); const wordList surfScalars(mesh_.names(surfaceScalarField::typeName)); - checkEqualWordList(surfScalars); + checkEqualWordList("surfaceScalarFields", surfScalars); const wordList surfVectors(mesh_.names(surfaceVectorField::typeName)); - checkEqualWordList(surfVectors); + checkEqualWordList("surfaceVectorFields", surfVectors); const wordList surfSphereTensors ( mesh_.names(surfaceSphericalTensorField::typeName) ); - checkEqualWordList(surfSphereTensors); + checkEqualWordList("surfaceSphericalTensorFields", surfSphereTensors); const wordList surfSymmTensors ( mesh_.names(surfaceSymmTensorField::typeName) ); - checkEqualWordList(surfSymmTensors); + checkEqualWordList("surfaceSymmTensorFields", surfSymmTensors); const wordList surfTensors(mesh_.names(surfaceTensorField::typeName)); - checkEqualWordList(surfTensors); + checkEqualWordList("surfaceTensorFields", surfTensors); + + // Find patch to temporarily put exposed and processor faces into. @@ -1589,6 +1578,9 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute Pstream::scatterList(nSendCells); + // Allocate buffers + PstreamBuffers pBufs(Pstream::nonBlocking); + // What to send to neighbouring domains // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1612,6 +1604,10 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute << nl << endl; } + // Pstream for sending mesh and fields + //OPstream str(Pstream::blocking, recvProc); + UOPstream str(recvProc, pBufs); + // Mesh subsetting engine fvMeshSubset subsetter(mesh_); @@ -1659,6 +1655,8 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute procSourceNewProc ); + + // Send to neighbour sendMesh ( @@ -1671,43 +1669,69 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute procSourceFace, procSourceProc, - procSourceNewProc + procSourceNewProc, + str ); - sendFields<volScalarField>(recvProc, volScalars, subsetter); - sendFields<volVectorField>(recvProc, volVectors, subsetter); + sendFields<volScalarField>(recvProc, volScalars, subsetter, str); + sendFields<volVectorField>(recvProc, volVectors, subsetter, str); sendFields<volSphericalTensorField> ( recvProc, volSphereTensors, - subsetter + subsetter, + str ); sendFields<volSymmTensorField> ( recvProc, volSymmTensors, - subsetter + subsetter, + str ); - sendFields<volTensorField>(recvProc, volTensors, subsetter); + sendFields<volTensorField>(recvProc, volTensors, subsetter, str); - sendFields<surfaceScalarField>(recvProc, surfScalars, subsetter); - sendFields<surfaceVectorField>(recvProc, surfVectors, subsetter); + sendFields<surfaceScalarField> + ( + recvProc, + surfScalars, + subsetter, + str + ); + sendFields<surfaceVectorField> + ( + recvProc, + surfVectors, + subsetter, + str + ); sendFields<surfaceSphericalTensorField> ( recvProc, surfSphereTensors, - subsetter + subsetter, + str ); sendFields<surfaceSymmTensorField> ( recvProc, surfSymmTensors, - subsetter + subsetter, + str + ); + sendFields<surfaceTensorField> + ( + recvProc, + surfTensors, + subsetter, + str ); - sendFields<surfaceTensorField>(recvProc, surfTensors, subsetter); } } + // Start sending&receiving from buffers + pBufs.finishedSends(); + // Subset the part that stays // ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1817,109 +1841,132 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute << nl << endl; } + + // Pstream for receiving mesh and fields + UIPstream str(sendProc, pBufs); + + // Receive from sendProc labelList domainSourceFace; labelList domainSourceProc; labelList domainSourceNewProc; - // Opposite of sendMesh - autoPtr<fvMesh> domainMeshPtr = receiveMesh - ( - sendProc, - pointZoneNames, - faceZoneNames, - cellZoneNames, - - const_cast<Time&>(mesh_.time()), - domainSourceFace, - domainSourceProc, - domainSourceNewProc - ); - fvMesh& domainMesh = domainMeshPtr(); - - // Receive fields + autoPtr<fvMesh> domainMeshPtr; PtrList<volScalarField> vsf; - receiveFields<volScalarField> - ( - sendProc, - volScalars, - domainMesh, - vsf - ); - PtrList<volVectorField> vvf; - receiveFields<volVectorField> - ( - sendProc, - volVectors, - domainMesh, - vvf - ); PtrList<volSphericalTensorField> vsptf; - receiveFields<volSphericalTensorField> - ( - sendProc, - volSphereTensors, - domainMesh, - vsptf - ); PtrList<volSymmTensorField> vsytf; - receiveFields<volSymmTensorField> - ( - sendProc, - volSymmTensors, - domainMesh, - vsytf - ); PtrList<volTensorField> vtf; - receiveFields<volTensorField> - ( - sendProc, - volTensors, - domainMesh, - vtf - ); - PtrList<surfaceScalarField> ssf; - receiveFields<surfaceScalarField> - ( - sendProc, - surfScalars, - domainMesh, - ssf - ); PtrList<surfaceVectorField> svf; - receiveFields<surfaceVectorField> - ( - sendProc, - surfVectors, - domainMesh, - svf - ); PtrList<surfaceSphericalTensorField> ssptf; - receiveFields<surfaceSphericalTensorField> - ( - sendProc, - surfSphereTensors, - domainMesh, - ssptf - ); PtrList<surfaceSymmTensorField> ssytf; - receiveFields<surfaceSymmTensorField> - ( - sendProc, - surfSymmTensors, - domainMesh, - ssytf - ); PtrList<surfaceTensorField> stf; - receiveFields<surfaceTensorField> - ( - sendProc, - surfTensors, - domainMesh, - stf - ); + + // Opposite of sendMesh + { + domainMeshPtr = receiveMesh + ( + sendProc, + pointZoneNames, + faceZoneNames, + cellZoneNames, + + const_cast<Time&>(mesh_.time()), + domainSourceFace, + domainSourceProc, + domainSourceNewProc, + str + ); + fvMesh& domainMesh = domainMeshPtr(); + + // Receive fields. Read as single dictionary because + // of problems reading consecutive fields from single stream. + dictionary fieldDicts(str); + + receiveFields<volScalarField> + ( + sendProc, + volScalars, + domainMesh, + vsf, + fieldDicts.subDict(volScalarField::typeName) + ); + receiveFields<volVectorField> + ( + sendProc, + volVectors, + domainMesh, + vvf, + fieldDicts.subDict(volVectorField::typeName) + ); + receiveFields<volSphericalTensorField> + ( + sendProc, + volSphereTensors, + domainMesh, + vsptf, + fieldDicts.subDict(volSphericalTensorField::typeName) + ); + receiveFields<volSymmTensorField> + ( + sendProc, + volSymmTensors, + domainMesh, + vsytf, + fieldDicts.subDict(volSymmTensorField::typeName) + ); + receiveFields<volTensorField> + ( + sendProc, + volTensors, + domainMesh, + vtf, + fieldDicts.subDict(volTensorField::typeName) + ); + + receiveFields<surfaceScalarField> + ( + sendProc, + surfScalars, + domainMesh, + ssf, + fieldDicts.subDict(surfaceScalarField::typeName) + ); + receiveFields<surfaceVectorField> + ( + sendProc, + surfVectors, + domainMesh, + svf, + fieldDicts.subDict(surfaceVectorField::typeName) + ); + receiveFields<surfaceSphericalTensorField> + ( + sendProc, + surfSphereTensors, + domainMesh, + ssptf, + fieldDicts.subDict(surfaceSphericalTensorField::typeName) + ); + receiveFields<surfaceSymmTensorField> + ( + sendProc, + surfSymmTensors, + domainMesh, + ssytf, + fieldDicts.subDict(surfaceSymmTensorField::typeName) + ); + receiveFields<surfaceTensorField> + ( + sendProc, + surfTensors, + domainMesh, + stf, + fieldDicts.subDict(surfaceTensorField::typeName) + ); + } + const fvMesh& domainMesh = domainMeshPtr(); constructCellMap[sendProc] = identity(domainMesh.nCells()); diff --git a/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.H b/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.H index ae3584672072b8c73db4cc6674be2443d15a4b82..0be663b7330be3a6ae7176948ea0bb58a0b7260f 100644 --- a/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.H +++ b/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.H @@ -82,38 +82,8 @@ class fvMeshDistribute const scalar mergeTol_; - // Private classes - - //- Check words are the same. Used in patch type checking of similarly - // named patches. - class checkEqualType - { - public: - - void operator()(word& x, const word& y) const - { - if (x != y) - { - FatalErrorIn("checkEqualType()(word&, const word&) const") - << "Patch type " << x << " possibly on processor " - << Pstream::myProcNo() - << " does not equal patch type " << y - << " on some other processor." << nl - << "Please check similarly named patches for" - << " having exactly the same type." - << abort(FatalError); - } - } - }; - - // Private Member Functions - //- Given distribution work out a communication schedule. Is list - // of pairs. First element of pair is send processor, second is - // receive processor. - //static List<labelPair> getSchedule(const labelList&); - //- Find indices with value static labelList select ( @@ -123,7 +93,7 @@ class fvMeshDistribute ); //- Check all procs have same names and in exactly same order. - static void checkEqualWordList(const wordList&); + static void checkEqualWordList(const string&, const wordList&); //- Merge wordlists over all processors static wordList mergeWordList(const wordList&); @@ -288,7 +258,8 @@ class fvMeshDistribute const wordList& cellZoneNames, const labelList& sourceFace, const labelList& sourceProc, - const labelList& sourceNewProc + const labelList& sourceNewProc, + UOPstream& toDomain ); //- Send subset of fields template<class GeoField> @@ -296,7 +267,8 @@ class fvMeshDistribute ( const label domain, const wordList& fieldNames, - const fvMeshSubset& + const fvMeshSubset&, + UOPstream& toNbr ); //- Receive mesh. Opposite of sendMesh @@ -309,7 +281,8 @@ class fvMeshDistribute const Time& runTime, labelList& domainSourceFace, labelList& domainSourceProc, - labelList& domainSourceNewProc + labelList& domainSourceNewProc, + UIPstream& fromNbr ); //- Receive fields. Opposite of sendFields @@ -319,7 +292,8 @@ class fvMeshDistribute const label domain, const wordList& fieldNames, fvMesh&, - PtrList<GeoField>& + PtrList<GeoField>&, + const dictionary& fieldDicts ); //- Disallow default bitwise copy construct diff --git a/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C b/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C index 79972ca3fb792c023a8de2b847fc17b8db55a123..06123db004fd1f7ca040f2ec043a711d21236eb0 100644 --- a/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C +++ b/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C @@ -184,7 +184,7 @@ void Foam::fvMeshDistribute::mapBoundaryFields if (flds.size() != oldBflds.size()) { - FatalErrorIn("fvMeshDistribute::mapBoundaryFields") << "problem" + FatalErrorIn("fvMeshDistribute::mapBoundaryFields(..)") << "problem" << abort(FatalError); } @@ -273,19 +273,40 @@ void Foam::fvMeshDistribute::initPatchFields // Send fields. Note order supplied so we can receive in exactly the same order. +// Note that field gets written as entry in dictionary so we +// can construct from subdictionary. +// (since otherwise the reading as-a-dictionary mixes up entries from +// consecutive fields) +// The dictionary constructed is: +// volScalarField +// { +// p {internalField ..; boundaryField ..;} +// k {internalField ..; boundaryField ..;} +// } +// volVectorField +// { +// U {internalField ... } +// } + +// volVectorField {U {internalField ..; boundaryField ..;}} +// template<class GeoField> void Foam::fvMeshDistribute::sendFields ( const label domain, const wordList& fieldNames, - const fvMeshSubset& subsetter + const fvMeshSubset& subsetter, + UOPstream& toNbr ) { + toNbr << GeoField::typeName << token::NL << token::BEGIN_BLOCK << token::NL; forAll(fieldNames, i) { - //Pout<< "Subsetting field " << fieldNames[i] - // << " for domain:" << domain - // << endl; + if (debug) + { + Pout<< "Subsetting field " << fieldNames[i] + << " for domain:" << domain << endl; + } // Send all fieldNames. This has to be exactly the same set as is // being received! @@ -294,10 +315,12 @@ void Foam::fvMeshDistribute::sendFields tmp<GeoField> tsubfld = subsetter.interpolate(fld); - // Send - OPstream toNbr(Pstream::blocking, domain); - toNbr << tsubfld(); + toNbr + << fieldNames[i] << token::NL << token::BEGIN_BLOCK + << tsubfld + << token::NL << token::END_BLOCK << token::NL; } + toNbr << token::END_BLOCK << token::NL; } @@ -308,18 +331,25 @@ void Foam::fvMeshDistribute::receiveFields const label domain, const wordList& fieldNames, fvMesh& mesh, - PtrList<GeoField>& fields + PtrList<GeoField>& fields, + const dictionary& fieldDicts ) { + if (debug) + { + Pout<< "Receiving fields " << fieldNames + << " from domain:" << domain << endl; + } + fields.setSize(fieldNames.size()); forAll(fieldNames, i) { - //Pout<< "Receiving field " << fieldNames[i] - // << " from domain:" << domain - // << endl; - - IPstream fromNbr(Pstream::blocking, domain); + if (debug) + { + Pout<< "Constructing field " << fieldNames[i] + << " from domain:" << domain << endl; + } fields.set ( @@ -335,7 +365,7 @@ void Foam::fvMeshDistribute::receiveFields IOobject::AUTO_WRITE ), mesh, - fromNbr + fieldDicts.subDict(fieldNames[i]) ) ); } diff --git a/src/dynamicMesh/motionSmoother/motionSmoother.C b/src/dynamicMesh/motionSmoother/motionSmoother.C index d780ec79dde3dc9d33c007b0a3ddc73271d72b69..b4288c200734e7e635f74c9b96949e37154c1b30 100644 --- a/src/dynamicMesh/motionSmoother/motionSmoother.C +++ b/src/dynamicMesh/motionSmoother/motionSmoother.C @@ -65,7 +65,7 @@ void Foam::motionSmoother::makePatchPatchAddressing() forAll(bm, patchi) { - if(!isA<emptyPolyPatch>(bm[patchi])) + if (!isA<emptyPolyPatch>(bm[patchi])) { nPatchPatchPoints += bm[patchi].boundaryPoints().size(); } @@ -83,7 +83,7 @@ void Foam::motionSmoother::makePatchPatchAddressing() forAll(bm, patchi) { - if(!isA<emptyPolyPatch>(bm[patchi])) + if (!isA<emptyPolyPatch>(bm[patchi])) { const labelList& bp = bm[patchi].boundaryPoints(); const labelList& meshPoints = bm[patchi].meshPoints(); diff --git a/src/dynamicMesh/motionSmoother/motionSmootherTemplates.C b/src/dynamicMesh/motionSmoother/motionSmootherTemplates.C index 232c19d6b5bcdcf8db5c2f9575835ef9cb2b0b69..4ea2fa926067f395da7be27f6e7f68dcca4283eb 100644 --- a/src/dynamicMesh/motionSmoother/motionSmootherTemplates.C +++ b/src/dynamicMesh/motionSmoother/motionSmootherTemplates.C @@ -51,7 +51,7 @@ void Foam::motionSmoother::checkConstraints forAll(bm, patchi) { - if(!isA<emptyPolyPatch>(bm[patchi])) + if (!isA<emptyPolyPatch>(bm[patchi])) { nPatchPatchPoints += bm[patchi].boundaryPoints().size(); } @@ -81,7 +81,7 @@ void Foam::motionSmoother::checkConstraints forAll(bm, patchi) { - if(!isA<emptyPolyPatch>(bm[patchi])) + if (!isA<emptyPolyPatch>(bm[patchi])) { const labelList& bp = bm[patchi].boundaryPoints(); const labelList& meshPoints = bm[patchi].meshPoints(); @@ -93,7 +93,7 @@ void Foam::motionSmoother::checkConstraints } } } - + // Forward evaluation @@ -106,7 +106,7 @@ void Foam::motionSmoother::checkConstraints forAll(bm, patchi) { - if(!isA<emptyPolyPatch>(bm[patchi])) + if (!isA<emptyPolyPatch>(bm[patchi])) { const labelList& bp = bm[patchi].boundaryPoints(); const labelList& meshPoints = bm[patchi].meshPoints(); @@ -246,7 +246,7 @@ Foam::tmp<Foam::GeometricField<Type, Foam::pointPatchField, Foam::pointMesh> > else { res[pointI] /= sumWeight[pointI]; - } + } } res.correctBoundaryConditions(); diff --git a/src/dynamicMesh/motionSmoother/polyMeshGeometry/polyMeshGeometry.C b/src/dynamicMesh/motionSmoother/polyMeshGeometry/polyMeshGeometry.C index 9c4030ed81d95d295f21aad87fd26fa559c73df6..f42f2a4ef4130059d8aad52c65824d7e0e8b3a79 100644 --- a/src/dynamicMesh/motionSmoother/polyMeshGeometry/polyMeshGeometry.C +++ b/src/dynamicMesh/motionSmoother/polyMeshGeometry/polyMeshGeometry.C @@ -1276,7 +1276,7 @@ bool Foam::polyMeshGeometry::checkFaceAngles faceNormal /= mag(faceNormal) + VSMALL; // Get edge from f[0] to f[size-1]; - vector ePrev(p[f[0]] - p[f[f.size()-1]]); + vector ePrev(p[f.first()] - p[f.last()]); scalar magEPrev = mag(ePrev); ePrev /= magEPrev + VSMALL; diff --git a/src/dynamicMesh/motionSolver/motionSolver.C b/src/dynamicMesh/motionSolver/motionSolver.C index 5966679feb719ce88d16dcc0c7115f76e849db25..a8c28ea8752469f5e443e5cf724a477f271ba14c 100644 --- a/src/dynamicMesh/motionSolver/motionSolver.C +++ b/src/dynamicMesh/motionSolver/motionSolver.C @@ -78,7 +78,7 @@ Foam::autoPtr<Foam::motionSolver> Foam::motionSolver::New(const polyMesh& mesh) word solverTypeName(msData); - Info << "Selecting motion solver: " << solverTypeName << endl; + Info<< "Selecting motion solver: " << solverTypeName << endl; dlLibraryTable::open ( diff --git a/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C b/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C index bfa9b2ca0c1df82ad0ec9a854c5293bc365e34ab..8261941be2b84101bb0d76a12e247f3449c5600c 100644 --- a/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C +++ b/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C @@ -1790,7 +1790,7 @@ void Foam::faceCoupleInfo::subDivisionMatch cutPointI = cutEdges[cutEdgeI].otherVertex(cutPointI); - } while(cutPointI != cutPoint1); + } while (cutPointI != cutPoint1); } if (debug) diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C index 41ba56aedba532d58a11226e2a264598cf558e1a..5574abcb86d8022b6e0c102f0a3e31884bb8ea83 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/addPatchCellLayer.C @@ -262,7 +262,7 @@ Foam::labelPair Foam::addPatchCellLayer::getEdgeString // - which hasn't been handled yet // - with same neighbour // - that needs extrusion - while(true) + while (true) { label prevFp = fEdges.rcIndex(startFp); @@ -286,7 +286,7 @@ Foam::labelPair Foam::addPatchCellLayer::getEdgeString // Search forward for end of string endFp = startFp; - while(true) + while (true) { label nextFp = fEdges.fcIndex(endFp); @@ -1278,7 +1278,7 @@ void Foam::addPatchCellLayer::setRefinement doneEdge[fEdges[fp]] = true; fp = f.fcIndex(fp); } - stringedVerts[stringedVerts.size()-1] = f[fp]; + stringedVerts.last() = f[fp]; // Now stringedVerts contains the vertices in order of face f. @@ -1296,7 +1296,7 @@ void Foam::addPatchCellLayer::setRefinement for (label i = 0; i < numEdgeSideFaces; i++) { - label vEnd = stringedVerts[stringedVerts.size()-1]; + label vEnd = stringedVerts.last(); label vStart = stringedVerts[0]; // calculate number of points making up a face diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C index 51c92b035cecb17744c91f7d59f24cc5fabdffda..bb07db3eb8950c1abd8d44124b7551ca62e27f6f 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/combineFaces.C @@ -62,7 +62,7 @@ bool Foam::combineFaces::convexFace n /= mag(n); // Get edge from f[0] to f[size-1]; - vector ePrev(points[f[0]] - points[f[f.size()-1]]); + vector ePrev(points[f.first()] - points[f.last()]); scalar magEPrev = mag(ePrev); ePrev /= magEPrev + VSMALL; diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C index 7727e04c87fbf8f39e15600802388cbf1bdda76e..25a0414f830d370da14292f43d61b9723c985172 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C @@ -456,7 +456,7 @@ bool Foam::edgeCollapser::setRefinement(polyTopoChange& meshMod) { break; } - } while(true); + } while (true); // Keep track of faces that have been done already. diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C index a47f8a06f11547ebd222a722a9b13c69af147a09..6c7d321533aac5fbc1a68cca27e3db0d9f6242b9 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C @@ -2222,7 +2222,7 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement faceCount ) ); - allFaceInfo[faceI] = seedFacesInfo[seedFacesInfo.size()-1]; + allFaceInfo[faceI] = seedFacesInfo.last(); } else { @@ -2238,7 +2238,7 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement faceCount ) ); - allFaceInfo[faceI] = seedFacesInfo[seedFacesInfo.size()-1]; + allFaceInfo[faceI] = seedFacesInfo.last(); } } @@ -2319,7 +2319,7 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement allCellInfo ); - while(true) + while (true) { if (debug) { diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C index fc405b2d0e2b3e56523aa642ed5eba03f15127e0..d3f1cfe797f0b216771d6feece2ca3d41db0a1a7 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C @@ -1844,6 +1844,8 @@ void Foam::polyTopoChange::reorderCoupledFaces // Rotation on new faces. labelList rotation(faces_.size(), 0); + PstreamBuffers pBufs(Pstream::nonBlocking); + // Send ordering forAll(boundary, patchI) { @@ -1851,6 +1853,7 @@ void Foam::polyTopoChange::reorderCoupledFaces { boundary[patchI].initOrder ( + pBufs, primitivePatch ( SubList<face> @@ -1865,6 +1868,8 @@ void Foam::polyTopoChange::reorderCoupledFaces } } + pBufs.finishedSends(); + // Receive and calculate ordering bool anyChanged = false; @@ -1878,6 +1883,7 @@ void Foam::polyTopoChange::reorderCoupledFaces bool changed = boundary[patchI].order ( + pBufs, primitivePatch ( SubList<face> diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C index 86be16d7a072c1febfce44b63b28066e6c3b41ae..3239c6a8e0efbf2118bf80a66eba35bb1e287ec2 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C @@ -745,7 +745,7 @@ Pout<< "refinementHistory::distribute :" newSplitCells.append(splitCells_[index]); Pout<< "Added oldCell " << index - << " info " << newSplitCells[newSplitCells.size()-1] + << " info " << newSplitCells.last() << " at position " << newSplitCells.size()-1 << endl; } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChanger/polyTopoChanger.C b/src/dynamicMesh/polyTopoChange/polyTopoChanger/polyTopoChanger.C index c89388e3199023bc705b730902b8f2ea6f7f0b10..6519c0e86de4baa056728e54e1627b7730d2f315 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChanger/polyTopoChanger.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChanger/polyTopoChanger.C @@ -174,14 +174,14 @@ bool Foam::polyTopoChanger::changeTopology() const { Info<< "Modifier " << morphI << " named " << topoChanges[morphI].name(); - + if (curTriggerChange) { - Info << " morphing" << endl; + Info<< " morphing" << endl; } else { - Info << " unchanged" << endl; + Info<< " unchanged" << endl; } } @@ -195,7 +195,7 @@ bool Foam::polyTopoChanger::changeTopology() const << topoChanges[morphI].name() << " inactive" << endl; } } - + } return triggerChange; @@ -252,7 +252,7 @@ void Foam::polyTopoChanger::update(const mapPolyMesh& m) // Force the mesh modifiers to auto-write. This allows us to // preserve the current state of modifiers corresponding with - // the mesh. + // the mesh. writeOpt() = IOobject::AUTO_WRITE; instance() = mesh_.time().timeName(); } diff --git a/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatchFaces.C b/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatchFaces.C index bad4dd118e535aab507f8122f7ce12203bdd8883..1030fcc374ae03fd78bc5a4b08d5401d864ead95 100644 --- a/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatchFaces.C +++ b/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatchFaces.C @@ -91,7 +91,7 @@ void Foam::enrichedPatch::calcEnrichedFaces { const face oldFace = slavePatch_[faceI]; const face oldLocalFace = slaveLocalFaces[faceI]; -// Info << "old slave face " << faceI << ": " << oldFace << endl; +// Info<< "old slave face " << faceI << ": " << oldFace << endl; const labelList& curEdges = slaveFaceEdges[faceI]; DynamicList<label> newFace(oldFace.size()*enrichedFaceRatio_); @@ -133,7 +133,7 @@ void Foam::enrichedPatch::calcEnrichedFaces const labelList& slavePointsOnEdge = pointsIntoSlaveEdges[curEdges[i]]; -// Info << "slavePointsOnEdge for " << curEdges[i] << ": " << slavePointsOnEdge << endl; +// Info<< "slavePointsOnEdge for " << curEdges[i] << ": " << slavePointsOnEdge << endl; // If there are no points on the edge, skip everything // If there is only one point, no need for sorting if (slavePointsOnEdge.size()) @@ -246,7 +246,7 @@ void Foam::enrichedPatch::calcEnrichedFaces { const face& oldFace = masterPatch_[faceI]; const face& oldLocalFace = masterLocalFaces[faceI]; -// Info << "old master face: " << oldFace << endl; +// Info<< "old master face: " << oldFace << endl; const labelList& curEdges = masterFaceEdges[faceI]; DynamicList<label> newFace(oldFace.size()*enrichedFaceRatio_); diff --git a/src/dynamicMesh/slidingInterface/slidingInterface.C b/src/dynamicMesh/slidingInterface/slidingInterface.C index 316dd389b6f7843a5edaddc6a8eafac253acfa89..12d99e8083eb25efd90c9b1b42d34b005b4434b7 100644 --- a/src/dynamicMesh/slidingInterface/slidingInterface.C +++ b/src/dynamicMesh/slidingInterface/slidingInterface.C @@ -420,7 +420,7 @@ void Foam::slidingInterface::setRefinement(polyTopoChange& ref) const } coupleInterface(ref); - + trigger_ = false; } } @@ -430,7 +430,7 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const { if (debug) { - Pout<< "void slidingInterface::modifyMotionPoints(" + Pout<< "void slidingInterface::modifyMotionPoints(" << "pointField& motionPoints) const for object " << name() << " : " << "Adjusting motion points." << endl; } @@ -485,7 +485,7 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const else { // A cut point is not a projected slave point. Therefore, it - // must be an edge-to-edge intersection. + // must be an edge-to-edge intersection. Map<Pair<edge> >::const_iterator cpepmIter = cpepm.find(cutPoints[pointI]); @@ -499,7 +499,7 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const // slidingInterface::coupleInterface. This is done for // efficiency reasons and avoids multiple creation of // cutting planes. Please update both simultaneously. - // + // const edge& globalMasterEdge = cpepmIter().first(); const label curMasterEdgeIndex = @@ -582,7 +582,7 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const if (slaveCut.hit()) { // Strict checking of slave cut to avoid capturing - // end points. + // end points. scalar cutOnSlave = ( ( @@ -615,7 +615,7 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const << cme.line(masterLocalPoints) << " slave edge: " << curSlaveLine << " point: " << masterCutPoint - << " weight: " << + << " weight: " << ( ( slaveCut.missPoint() @@ -657,7 +657,7 @@ void Foam::slidingInterface::updateMesh(const mapPolyMesh& m) { if (debug) { - Pout<< "void slidingInterface::updateMesh(const mapPolyMesh& m)" + Pout<< "void slidingInterface::updateMesh(const mapPolyMesh& m)" << " const for object " << name() << " : " << "Updating topology." << endl; } @@ -771,7 +771,7 @@ void Foam::slidingInterface::write(Ostream& os) const // To write out all those tolerances #define WRITE_NON_DEFAULT(name) \ - if( name ## _ != name ## Default_ )\ + if ( name ## _ != name ## Default_ )\ { \ os << " " #name " " << name ## _ << token::END_STATEMENT << nl; \ } diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 5fe44b935751f8c95bdc23e7e561c1b40ac7b359..94c83312d35b49b48f4019411eab97c1ba1dfcee 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -122,6 +122,7 @@ $(derivedFvPatchFields)/inletOutletTotalTemperature/inletOutletTotalTemperatureF $(derivedFvPatchFields)/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.C $(derivedFvPatchFields)/movingWallVelocity/movingWallVelocityFvPatchVectorField.C $(derivedFvPatchFields)/rotatingWallVelocity/rotatingWallVelocityFvPatchVectorField.C +$(derivedFvPatchFields)/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.C $(derivedFvPatchFields)/oscillatingFixedValue/oscillatingFixedValueFvPatchFields.C $(derivedFvPatchFields)/outletInlet/outletInletFvPatchFields.C $(derivedFvPatchFields)/partialSlip/partialSlipFvPatchFields.C diff --git a/src/finiteVolume/cfdTools/general/adjustPhi/adjustPhi.C b/src/finiteVolume/cfdTools/general/adjustPhi/adjustPhi.C index dfaef4308e6c98824612a3b60a1e4e79a58ebc51..439d83e1786003f7b7686859521429ebf5918fcf 100644 --- a/src/finiteVolume/cfdTools/general/adjustPhi/adjustPhi.C +++ b/src/finiteVolume/cfdTools/general/adjustPhi/adjustPhi.C @@ -107,7 +107,7 @@ bool Foam::adjustPhi { massCorr = (massIn - fixedMassOut)/adjustableMassOut; } - else if(mag(fixedMassOut - massIn)/totalFlux > 1e-10) + else if (mag(fixedMassOut - massIn)/totalFlux > 1e-10) { FatalErrorIn ( diff --git a/src/finiteVolume/cfdTools/general/include/readGravitationalAcceleration.H b/src/finiteVolume/cfdTools/general/include/readGravitationalAcceleration.H index 2389d0bd2b72d87f0fe4d599aaeb0463e8bfc51d..1be4dc52f53623de32758c6587bb3d4713a56aa1 100644 --- a/src/finiteVolume/cfdTools/general/include/readGravitationalAcceleration.H +++ b/src/finiteVolume/cfdTools/general/include/readGravitationalAcceleration.H @@ -1,4 +1,4 @@ - Info << "\nReading g" << endl; + Info<< "\nReading g" << endl; uniformDimensionedVectorField g ( IOobject diff --git a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H index 9a3eb151f969e4034f0c7607f2999c82ec4a9783..edfbad5efb825e61bd06d785ace0db64e3650a21 100644 --- a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H +++ b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.H @@ -42,7 +42,7 @@ Description Darcy-Forchheimer (@e d and @e f parameters) @f[ - S = - (\mu \, d \, U + \frac{\rho |U|}{2} \, f) U + S = - (\mu \, d + \frac{\rho |U|}{2} \, f) U @f] diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C index 4f4ec60dd039528795e5e13496cdead1db6c9fd6..dcd3440e3662cf9d6264302e1b295831116c6ade 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C @@ -154,7 +154,7 @@ void jumpCyclicFvPatchField<Type>::updateInterfaceMatrix label sizeby2 = this->size()/2; const unallocLabelList& faceCells = this->cyclicPatch().faceCells(); - if (long(&psiInternal) == long(&this->internalField())) + if (&psiInternal == &this->internalField()) { tmp<Field<scalar> > tjf = jump(); const Field<scalar>& jf = tjf(); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C index ce005c5683eb2cf802aaf663bb2543162157f9c4..2ae16afc957fd0d17719289b5876c0ce96642897 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C @@ -74,7 +74,7 @@ void Foam::fanFvPatchField<Foam::scalar>::updateCoeffs() ); } - for(label i=1; i<f_.size(); i++) + for (label i=1; i<f_.size(); i++) { jump_ += f_[i]*pow(Un, i); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.C new file mode 100644 index 0000000000000000000000000000000000000000..ef3fb96aa148e0697c536e71ce49178248a6865a --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.C @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "translatingWallVelocityFvPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" +#include "volFields.H" +#include "surfaceFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +translatingWallVelocityFvPatchVectorField:: +translatingWallVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF +) +: + fixedValueFvPatchField<vector>(p, iF), + U_(vector::zero) +{} + + +translatingWallVelocityFvPatchVectorField:: +translatingWallVelocityFvPatchVectorField +( + const translatingWallVelocityFvPatchVectorField& ptf, + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchField<vector>(ptf, p, iF, mapper), + U_(ptf.U_) +{} + + +translatingWallVelocityFvPatchVectorField:: +translatingWallVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const dictionary& dict +) +: + fixedValueFvPatchField<vector>(p, iF), + U_(dict.lookup("U")) +{ + // Evaluate the wall velocity + updateCoeffs(); +} + + +translatingWallVelocityFvPatchVectorField:: +translatingWallVelocityFvPatchVectorField +( + const translatingWallVelocityFvPatchVectorField& twvpvf +) +: + fixedValueFvPatchField<vector>(twvpvf), + U_(twvpvf.U_) +{} + + +translatingWallVelocityFvPatchVectorField:: +translatingWallVelocityFvPatchVectorField +( + const translatingWallVelocityFvPatchVectorField& twvpvf, + const DimensionedField<vector, volMesh>& iF +) +: + fixedValueFvPatchField<vector>(twvpvf, iF), + U_(twvpvf.U_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void translatingWallVelocityFvPatchVectorField::updateCoeffs() +{ + if (updated()) + { + return; + } + + // Remove the component of U normal to the wall in case the wall is not flat + vectorField n = patch().nf(); + vectorField::operator=(U_ - n*(n & U_)); + + fixedValueFvPatchVectorField::updateCoeffs(); +} + + +void translatingWallVelocityFvPatchVectorField::write(Ostream& os) const +{ + fvPatchVectorField::write(os); + os.writeKeyword("U") << U_ << token::END_STATEMENT << nl; + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePatchTypeField +( + fvPatchVectorField, + translatingWallVelocityFvPatchVectorField +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.H new file mode 100644 index 0000000000000000000000000000000000000000..68345ae537f5e5597732012a0f82cc1b23798dec --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/translatingWallVelocity/translatingWallVelocityFvPatchVectorField.H @@ -0,0 +1,155 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::translatingWallVelocityFvPatchVectorField + +Description + Foam::translatingWallVelocityFvPatchVectorField + +SourceFiles + translatingWallVelocityFvPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef translatingWallVelocityFvPatchVectorField_H +#define translatingWallVelocityFvPatchVectorField_H + +#include "fixedValueFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class translatingWallVelocityFvPatchField Declaration +\*---------------------------------------------------------------------------*/ + +class translatingWallVelocityFvPatchVectorField +: + public fixedValueFvPatchVectorField +{ + // Private data + + //- Origin of the rotation + vector U_; + + +public: + + //- Runtime type information + TypeName("translatingWallVelocity"); + + + // Constructors + + //- Construct from patch and internal field + translatingWallVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + translatingWallVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given a + // translatingWallVelocityFvPatchVectorField onto a new patch + translatingWallVelocityFvPatchVectorField + ( + const translatingWallVelocityFvPatchVectorField&, + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + translatingWallVelocityFvPatchVectorField + ( + const translatingWallVelocityFvPatchVectorField& + ); + + //- Construct and return a clone + virtual tmp<fvPatchVectorField> clone() const + { + return tmp<fvPatchVectorField> + ( + new translatingWallVelocityFvPatchVectorField(*this) + ); + } + + //- Construct as copy setting internal field reference + translatingWallVelocityFvPatchVectorField + ( + const translatingWallVelocityFvPatchVectorField&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchVectorField> clone + ( + const DimensionedField<vector, volMesh>& iF + ) const + { + return tmp<fvPatchVectorField> + ( + new translatingWallVelocityFvPatchVectorField(*this, iF) + ); + } + + + + // Member functions + + // Access functions + + //- Return the velocity + const vector& U() const + { + return U_; + } + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellLimitedGrad/cellLimitedGrad.H b/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellLimitedGrad/cellLimitedGrad.H index 22083de571e94fcbe637c269bd91206e5c0d4715..5c4d711ab30be538e0701e9ab2552a1bcfce1625 100644 --- a/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellLimitedGrad/cellLimitedGrad.H +++ b/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellLimitedGrad/cellLimitedGrad.H @@ -162,7 +162,7 @@ inline void cellLimitedGrad<Type>::limitFace const Type& extrapolate ) { - for(direction cmpt=0; cmpt<Type::nComponents; cmpt++) + for (direction cmpt=0; cmpt<Type::nComponents; cmpt++) { cellLimitedGrad<scalar>::limitFace ( diff --git a/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellMDLimitedGrad/cellMDLimitedGrad.H b/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellMDLimitedGrad/cellMDLimitedGrad.H index d9b389d0f54147eb4fdd01d1821bd4ef58fe4ac3..f48ed450d9a2290b573115d1c61a9d2124deb845 100644 --- a/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellMDLimitedGrad/cellMDLimitedGrad.H +++ b/src/finiteVolume/finiteVolume/gradSchemes/limitedGradSchemes/cellMDLimitedGrad/cellMDLimitedGrad.H @@ -164,7 +164,7 @@ inline void cellMDLimitedGrad<Type>::limitFace const vector& dcf ) { - for(direction cmpt=0; cmpt<Type::nComponents; cmpt++) + for (direction cmpt=0; cmpt<Type::nComponents; cmpt++) { vector gi(g[cmpt], g[cmpt+3], g[cmpt+6]); cellMDLimitedGrad<scalar>::limitFace diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.C b/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.C index 1d13f0d915196802308277fd973e137ddde16b65..bd65a3fd375320e32b670145b8eb01cd949bcd38 100644 --- a/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.C +++ b/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.C @@ -64,7 +64,7 @@ Foam::quadraticFitSnGradData::quadraticFitSnGradData { if (debug) { - Info << "Contructing quadraticFitSnGradData" << endl; + Info<< "Contructing quadraticFitSnGradData" << endl; } // check input @@ -108,7 +108,7 @@ Foam::quadraticFitSnGradData::quadraticFitSnGradData // find the fit coefficients for every face in the mesh - for(label faci = 0; faci < mesh.nInternalFaces(); faci++) + for (label faci = 0; faci < mesh.nInternalFaces(); faci++) { snGradPolySize[faci] = calcFit(stencilPoints[faci], faci); } @@ -206,7 +206,7 @@ Foam::label Foam::quadraticFitSnGradData::calcFit // calculate the matrix of the polynomial components scalarRectangularMatrix B(C.size(), minSize_, scalar(0)); - for(label ip = 0; ip < C.size(); ip++) + for (label ip = 0; ip < C.size(); ip++) { const point& p = C[ip]; @@ -254,7 +254,7 @@ Foam::label Foam::quadraticFitSnGradData::calcFit const scalar deltaCoeff = mesh().deltaCoeffs()[faci]; bool goodFit = false; - for(int iIt = 0; iIt < 10 && !goodFit; iIt++) + for (int iIt = 0; iIt < 10 && !goodFit; iIt++) { SVD svd(B, SMALL); @@ -270,7 +270,7 @@ Foam::label Foam::quadraticFitSnGradData::calcFit { fit_[faci][0] = fit0; fit_[faci][1] = fit1; - for(label i = 2; i < stencilSize; i++) + for (label i = 2; i < stencilSize; i++) { fit_[faci][i] = wts[0]*wts[i]*svd.VSinvUt()[1][i]/scale; } @@ -282,13 +282,13 @@ Foam::label Foam::quadraticFitSnGradData::calcFit wts[0] *= 10; wts[1] *= 10; - for(label i = 0; i < B.n(); i++) + for (label i = 0; i < B.n(); i++) { B[i][0] *= 10; B[i][1] *= 10; } - for(label j = 0; j < B.m(); j++) + for (label j = 0; j < B.m(); j++) { B[0][j] *= 10; B[1][j] *= 10; diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 5e85f505922c3118fb411fa2949f5e72e5a7ac6d..9ce8d888c4bfdedad90d8216809664424428d19f 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -725,7 +725,7 @@ Foam::fvMatrix<Type>::H() const ) ); - for(direction cmpt=0; cmpt<Type::nComponents; cmpt++) + for (direction cmpt=0; cmpt<Type::nComponents; cmpt++) { if (validComponents[cmpt] == -1) { diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C index c56899bd62ea89da15aacae44c743e069135f452..a78d6be6cf28250d44475857594f8e0b46acb239 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C @@ -90,7 +90,7 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve ) ); - for(direction cmpt=0; cmpt<Type::nComponents; cmpt++) + for (direction cmpt=0; cmpt<Type::nComponents; cmpt++) { if (validComponents[cmpt] == -1) continue; diff --git a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C index 151de78a1ef28a735d488ba94c290a29e6c1a479..f938c2cf9f930871677be7b49b23d78f470b30f5 100644 --- a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C +++ b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C @@ -142,8 +142,7 @@ void Foam::MULES::implicitSolve { const fvMesh& mesh = psi.mesh(); - const dictionary& MULEScontrols = - mesh.solverDict(psi.name()).subDict("MULESImplicit"); + const dictionary& MULEScontrols = mesh.solverDict(psi.name()); label maxIter ( @@ -255,7 +254,7 @@ void Foam::MULES::implicitSolve solve ( psiConvectionDiffusion + fvc::div(lambda*phiCorr), - MULEScontrols.lookup("solver") + MULEScontrols ); scalar maxPsiM1 = gMax(psi.internalField()) - 1.0; @@ -478,7 +477,7 @@ void Foam::MULES::limiter scalarField sumlPhip(psiIf.size()); scalarField mSumlPhim(psiIf.size()); - for(int j=0; j<nLimiterIter; j++) + for (int j=0; j<nLimiterIter; j++) { sumlPhip = 0.0; mSumlPhim = 0.0; diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H index 640c2aa4f4746aa0a63e0805870b6d7b67b6f00a..666c4b1b5d93eae77d50c324a93a91010c92b815 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H @@ -51,15 +51,6 @@ class CECCellToFaceStencil : public cellToFaceStencil { - // Private Member Functions - - //- Disallow default bitwise copy construct - CECCellToFaceStencil(const CECCellToFaceStencil&); - - //- Disallow default bitwise assignment - void operator=(const CECCellToFaceStencil&); - - public: // Constructors diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H index a05b1b7aa6dfcaf2425d27c68bbfa57983239347..6b8dbcaedff0f007fa93df3b5d67dc28ce77c0bb 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H @@ -51,14 +51,6 @@ class CFCCellToFaceStencil : public cellToFaceStencil { - // Private Member Functions - - //- Disallow default bitwise copy construct - CFCCellToFaceStencil(const CFCCellToFaceStencil&); - - //- Disallow default bitwise assignment - void operator=(const CFCCellToFaceStencil&); - public: // Constructors diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H index a82886e11145aca2883ac6846d822dca268eb0bd..f3e996332de4f013434955a553d3b1d7bcec1f0a 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H @@ -51,15 +51,6 @@ class CPCCellToFaceStencil : public cellToFaceStencil { - // Private Member Functions - - //- Disallow default bitwise copy construct - CPCCellToFaceStencil(const CPCCellToFaceStencil&); - - //- Disallow default bitwise assignment - void operator=(const CPCCellToFaceStencil&); - - public: // Constructors diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H index 6a00f702ea92cc9d19d655ad0ee19ff70e846510..d08afb8bebca125a40d6cadbdfac93daf90d0c36 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H @@ -65,13 +65,6 @@ class FECCellToFaceStencil void calcFaceStencil(labelListList& faceStencil) const; - //- Disallow default bitwise copy construct - FECCellToFaceStencil(const FECCellToFaceStencil&); - - //- Disallow default bitwise assignment - void operator=(const FECCellToFaceStencil&); - - public: // Constructors diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H index 2bbf9376f438047e47ece65c6e1a9c6f5a091173..80086262e16b8e965d199a661fb7c48f7bb817cc 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H @@ -56,11 +56,6 @@ class CFCFaceToCellStencil void calcCellStencil(labelListList& globalCellFaces) const; - //- Disallow default bitwise copy construct - CFCFaceToCellStencil(const CFCFaceToCellStencil&); - - //- Disallow default bitwise assignment - void operator=(const CFCFaceToCellStencil&); public: diff --git a/src/finiteVolume/fvMesh/fvMesh.C b/src/finiteVolume/fvMesh/fvMesh.C index 28f0a8d23ee6946b34de5885160a603d2f2bd9e2..95002fd960c47a60b00b23493c5870ebeab0952b 100644 --- a/src/finiteVolume/fvMesh/fvMesh.C +++ b/src/finiteVolume/fvMesh/fvMesh.C @@ -356,7 +356,7 @@ Foam::polyMesh::readUpdateState Foam::fvMesh::readUpdate() { if (debug) { - Info << "Boundary and topological update" << endl; + Info<< "Boundary and topological update" << endl; } boundary_.readUpdate(boundaryMesh()); @@ -368,7 +368,7 @@ Foam::polyMesh::readUpdateState Foam::fvMesh::readUpdate() { if (debug) { - Info << "Topological update" << endl; + Info<< "Topological update" << endl; } clearOut(); @@ -377,7 +377,7 @@ Foam::polyMesh::readUpdateState Foam::fvMesh::readUpdate() { if (debug) { - Info << "Point motion update" << endl; + Info<< "Point motion update" << endl; } clearGeom(); @@ -386,7 +386,7 @@ Foam::polyMesh::readUpdateState Foam::fvMesh::readUpdate() { if (debug) { - Info << "No update" << endl; + Info<< "No update" << endl; } } diff --git a/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubset.C b/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubset.C index 3ecbd0a19720075ef77ec93f6faa8b800d82e993..dc2aec8960d320fdf0ee8ed33cfe664fedb398ec 100644 --- a/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubset.C +++ b/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubset.C @@ -1341,7 +1341,7 @@ void Foam::fvMeshSubset::setLargeCellSubset { labelList region(baseMesh().nCells(), 0); - forAllConstIter (labelHashSet, globalCellMap, iter) + forAllConstIter(labelHashSet, globalCellMap, iter) { region[iter.key()] = 1; } diff --git a/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMesh.C b/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMesh.C index 65965f15d94612cdee4cee766e017666dc73a4df..7e38d098316366e3b98fdbcb5ae7bafe6223d14f 100644 --- a/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMesh.C +++ b/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMesh.C @@ -146,6 +146,10 @@ void Foam::singleCellFvMesh::agglomerateMesh // From new patch face back to agglomeration patchFaceMap_.setSize(oldPatches.size()); + // From fine face to coarse face (or -1) + reverseFaceMap_.setSize(mesh.nFaces()); + reverseFaceMap_.labelList::operator=(-1); + // Face counter coarseI = 0; diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/findCellPointFaceTriangle.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/findCellPointFaceTriangle.H index dc9e2baa00f9f97ebb92ba2339612828e2f7e032..490b20f182c398e30900ec63b0df0c19590b1b56 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/findCellPointFaceTriangle.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/findCellPointFaceTriangle.H @@ -45,7 +45,7 @@ bool interpolationCellPointFace<Type>::findTriangle // calculate triangle edge vectors and triangle face normal // the 'i':th edge is opposite node i vector edge[3], normal[3]; - for(label i=0; i<3; i++) + for (label i=0; i<3; i++) { label ip0 = (i+1) % 3; label ipp = (i+2) % 3; @@ -55,7 +55,7 @@ bool interpolationCellPointFace<Type>::findTriangle vector triangleFaceNormal = edge[1] ^ edge[2]; // calculate edge normal (pointing inwards) - for(label i=0; i<3; i++) + for (label i=0; i<3; i++) { normal[i] = triangleFaceNormal ^ edge[i]; normal[i] /= mag(normal[i]) + VSMALL; @@ -63,7 +63,7 @@ bool interpolationCellPointFace<Type>::findTriangle // check if position is inside triangle bool inside = true; - for(label i=0; i<3; i++) + for (label i=0; i<3; i++) { label ip = (i+1) % 3; inside = inside && (((newPos - tetPoints[ip]) & edge[i]) >= 0); @@ -74,7 +74,7 @@ bool interpolationCellPointFace<Type>::findTriangle foundTriangle = true; // calculate phi-values - for(label i=0; i<3; i++) + for (label i=0; i<3; i++) { label ip = (i+1) % 3; scalar phiMax = max(VSMALL, normal[i] & edge[ip]); diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C index fb9611e9c8aa06f8f70c56ccd847232b34b72ef5..4870127e51d3de130a78967e72e5b60f1fe62172 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C @@ -86,7 +86,7 @@ void Foam::CentredFitData<Polynomial>::calcFit() const surfaceScalarField& w = mesh.surfaceInterpolation::weights(); - for(label facei = 0; facei < mesh.nInternalFaces(); facei++) + for (label facei = 0; facei < mesh.nInternalFaces(); facei++) { FitData < diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C index dcea0902668d1444f3d93af5c37550f45a8245bf..62d464dcd6718f7d1c3658af521bdff886e32a4e 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C @@ -153,7 +153,7 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // Reference point point p0 = this->mesh().faceCentres()[facei]; - // Info << "Face " << facei << " at " << p0 << " stencil points at:\n" + // Info<< "Face " << facei << " at " << p0 << " stencil points at:\n" // << C - p0 << endl; // p0 -> p vector in the face-local coordinate system @@ -165,7 +165,7 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // Matrix of the polynomial components scalarRectangularMatrix B(C.size(), minSize_, scalar(0)); - for(label ip = 0; ip < C.size(); ip++) + for (label ip = 0; ip < C.size(); ip++) { const point& p = C[ip]; @@ -195,7 +195,7 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit } // Additional weighting for constant and linear terms - for(label i = 0; i < B.n(); i++) + for (label i = 0; i < B.n(); i++) { B[i][0] *= wts[0]; B[i][1] *= wts[0]; @@ -206,14 +206,14 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit coeffsi.setSize(stencilSize); bool goodFit = false; - for(int iIt = 0; iIt < 8 && !goodFit; iIt++) + for (int iIt = 0; iIt < 8 && !goodFit; iIt++) { SVD svd(B, SMALL); scalar maxCoeff = 0; label maxCoeffi = 0; - for(label i=0; i<stencilSize; i++) + for (label i=0; i<stencilSize; i++) { coeffsi[i] = wts[0]*wts[i]*svd.VSinvUt()[0][i]; if (mag(coeffsi[i]) > maxCoeff) @@ -240,7 +240,7 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // if (goodFit && iIt > 0) // { - // Info << "FitData<Polynomial>::calcFit" + // Info<< "FitData<Polynomial>::calcFit" // << "(const List<point>& C, const label facei" << nl // << "Can now fit face " << facei << " iteration " << iIt // << " with sum of weights " << sum(coeffsi) << nl @@ -271,13 +271,13 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit wts[1] *= 10; } - for(label j = 0; j < B.m(); j++) + for (label j = 0; j < B.m(); j++) { B[0][j] *= 10; B[1][j] *= 10; } - for(label i = 0; i < B.n(); i++) + for (label i = 0; i < B.n(); i++) { B[i][0] *= 10; B[i][1] *= 10; diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C index cd7a206ba50048779468aaf50a9b350e0c4a910a..0841fe7d72a8a4f7eb356a80324e51570ce0fecf 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C @@ -97,7 +97,7 @@ void Foam::UpwindFitData<Polynomial>::calcFit() // find the fit coefficients for every owner //Pout<< "-- Owner --" << endl; - for(label facei = 0; facei < mesh.nInternalFaces(); facei++) + for (label facei = 0; facei < mesh.nInternalFaces(); facei++) { FitData < @@ -156,7 +156,7 @@ void Foam::UpwindFitData<Polynomial>::calcFit() // find the fit coefficients for every neighbour //Pout<< "-- Neighbour --" << endl; - for(label facei = 0; facei < mesh.nInternalFaces(); facei++) + for (label facei = 0; facei < mesh.nInternalFaces(); facei++) { FitData < diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/surfaceInterpolation/surfaceInterpolate.H b/src/finiteVolume/interpolation/surfaceInterpolation/surfaceInterpolation/surfaceInterpolate.H index c22174451b9f6c3c8bd83afceabc3fa76ee79710..115aedc9fe8ebad921190151c0c3fffbe1503ea5 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/surfaceInterpolation/surfaceInterpolate.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/surfaceInterpolation/surfaceInterpolate.H @@ -157,14 +157,14 @@ namespace fvc ); - //- Interpolate tmp field onto faces using central differencing + //- Interpolate tmp field onto faces using 'interpolate(<name>)' template<class Type> static tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > interpolate ( const tmp<GeometricField<Type, fvPatchField, volMesh> >& tvf ); - //- Interpolate field onto faces using central differencing + //- Interpolate tmp field onto faces using 'interpolate(<name>)' template<class Type> static tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > interpolate ( diff --git a/src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolation.C b/src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolation.C index 16cd028f726392e5723ec62abf75f2903f18ce50..6cebe3369bd95024213b75f113292a0dc5b9e5c2 100644 --- a/src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolation.C +++ b/src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolation.C @@ -63,7 +63,7 @@ void pointPatchInterpolation::makePatchPatchAddressing() forAll(bm, patchi) { - if(!isA<emptyFvPatch>(bm[patchi]) && !bm[patchi].coupled()) + if (!isA<emptyFvPatch>(bm[patchi]) && !bm[patchi].coupled()) { nPatchPatchPoints += bm[patchi].patch().boundaryPoints().size(); } @@ -81,7 +81,7 @@ void pointPatchInterpolation::makePatchPatchAddressing() forAll(bm, patchi) { - if(!isA<emptyFvPatch>(bm[patchi]) && !bm[patchi].coupled()) + if (!isA<emptyFvPatch>(bm[patchi]) && !bm[patchi].coupled()) { const labelList& bp = bm[patchi].patch().boundaryPoints(); const labelList& meshPoints = bm[patchi].patch().meshPoints(); @@ -129,10 +129,10 @@ void pointPatchInterpolation::makePatchPatchAddressing() { if (patchPatchPointConstraints[i].first() != 0) { - patchPatchPointConstraintPoints_[nConstraints] = + patchPatchPointConstraintPoints_[nConstraints] = patchPatchPoints_[i]; - patchPatchPointConstraintTensors_[nConstraints] = + patchPatchPointConstraintTensors_[nConstraints] = patchPatchPointConstraints[i].constraintTransformation(); nConstraints++; diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C index cdd5a999ec1290068d5fb02c141830c419a28c53..80fc0d9bc4ac61ce1b4f07796117c8e12ff91e23 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C @@ -179,7 +179,7 @@ displacementInterpolationFvMotionSolver // Slightly tweak min and max face zone so points sort within zoneCoordinates[0] -= SMALL; - zoneCoordinates[zoneCoordinates.size()-1] += SMALL; + zoneCoordinates.last() += SMALL; // Check if we have static min and max mesh bounds const scalarField meshCoords = points0().component(dir); @@ -237,7 +237,7 @@ displacementInterpolationFvMotionSolver } rangeI++; } - if (maxCoord > zoneCoordinates[zoneCoordinates.size()-1]) + if (maxCoord > zoneCoordinates.last()) { label sz = rangeToCoord.size(); rangeToCoord.setSize(sz+1); diff --git a/src/fvMotionSolver/motionDiffusivity/motionDiffusivity/motionDiffusivity.C b/src/fvMotionSolver/motionDiffusivity/motionDiffusivity/motionDiffusivity.C index 50936f456a903eb935cf8ec23f0cedc185fe496f..159a363b4a114298e4072684fa58fc2cc6561405 100644 --- a/src/fvMotionSolver/motionDiffusivity/motionDiffusivity/motionDiffusivity.C +++ b/src/fvMotionSolver/motionDiffusivity/motionDiffusivity/motionDiffusivity.C @@ -54,7 +54,7 @@ Foam::autoPtr<Foam::motionDiffusivity> Foam::motionDiffusivity::New { word diffTypeName(mdData); - Info << "Selecting motion diffusion: " << diffTypeName << endl; + Info<< "Selecting motion diffusion: " << diffTypeName << endl; IstreamConstructorTable::iterator cstrIter = IstreamConstructorTablePtr_->find(diffTypeName); diff --git a/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C index e7014038ee6c8e939b965c11fa78afbc3b1b1548..1b6a9e6d5a00120d5c46c68bca65a192d8e29b2c 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C @@ -100,7 +100,7 @@ angularOscillatingDisplacementPointPatchVectorField angle0_(ptf.angle0_), amplitude_(ptf.amplitude_), omega_(ptf.omega_), - p0_(ptf.p0_) + p0_(ptf.p0_, mapper) {} diff --git a/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C index dbd769c557734c21ac695a7ca89276f8ef88a400..412c9561a20fd0f85dd35d6e68db9c0ea456074b 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C @@ -91,7 +91,7 @@ oscillatingVelocityPointPatchVectorField fixedValuePointPatchField<vector>(ptf, p, iF, mapper), amplitude_(ptf.amplitude_), omega_(ptf.omega_), - p0_(ptf.p0_) + p0_(ptf.p0_, mapper) {} diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C index db0ff59bfe3985378b63a31664c801b409ccc5bd..8fb0408e6704ae06657d96efddbc6d0e3cc77e00 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C @@ -93,7 +93,7 @@ sixDoFRigidBodyDisplacementPointPatchVectorField : fixedValuePointPatchField<vector>(ptf, p, iF, mapper), motion_(ptf.motion_), - p0_(ptf.p0_), + p0_(ptf.p0_, mapper), rhoInf_(ptf.rhoInf_) {} diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C index 72d0541e7e5d3ba253ec086d9e3865268ce9d86b..f6d91a9edc635a360307bb3c56d841c0449fccda 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C @@ -329,7 +329,7 @@ surfaceDisplacementPointPatchVectorField surfacesDict_(dict.subDict("geometry")), projectMode_(projectModeNames_.read(dict.lookup("projectMode"))), projectDir_(dict.lookup("projectDirection")), - wedgePlane_(dict.lookupOrDefault(dict.lookup("wedgePlane"), -1)), + wedgePlane_(dict.lookupOrDefault("wedgePlane", -1)), frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null)) { if (velocity_.x() < 0 || velocity_.y() < 0 || velocity_.z() < 0) diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index 6098e1b8ab882573856e0adbdf863711b3c47fe1..3979d04158a5a3333eecf37a16dfe57a2a166d24 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -313,20 +313,15 @@ void Foam::Cloud<ParticleType>::move(TrackingData& td) const globalMeshData& pData = polyMesh_.globalData(); const labelList& processorPatches = pData.processorPatches(); const labelList& processorPatchIndices = pData.processorPatchIndices(); - const labelList& processorPatchNeighbours = - pData.processorPatchNeighbours(); - // Initialise the setpFraction moved for the particles + // Initialise the stepFraction moved for the particles forAllIter(typename Cloud<ParticleType>, *this, pIter) { pIter().stepFraction() = 0; } - // Assume there will be particles to transfer - bool transfered = true; - // While there are particles to transfer - while (transfered) + while (true) { // List of lists of particles to be transfered for all the processor // patches @@ -366,105 +361,94 @@ void Foam::Cloud<ParticleType>::move(TrackingData& td) } } - if (Pstream::parRun()) + if (!Pstream::parRun()) { - // List of the numbers of particles to be transfered across the - // processor patches - labelList nsTransPs(transferList.size()); - - forAll(transferList, i) - { - nsTransPs[i] = transferList[i].size(); - } + break; + } - // List of the numbers of particles to be transfered across the - // processor patches for all the processors - labelListList allNTrans(Pstream::nProcs()); - allNTrans[Pstream::myProcNo()] = nsTransPs; - combineReduce(allNTrans, UPstream::listEq()); - transfered = false; + // Allocate transfer buffers + PstreamBuffers pBufs(Pstream::nonBlocking); - forAll(allNTrans, i) + // Stream into send buffers + forAll(transferList, i) + { + if (transferList[i].size()) { - forAll(allNTrans[i], j) - { - if (allNTrans[i][j]) - { - transfered = true; - break; - } - } - } + UOPstream particleStream + ( + refCast<const processorPolyPatch> + ( + pMesh().boundaryMesh()[processorPatches[i]] + ).neighbProcNo(), + pBufs + ); - if (!transfered) - { - break; + particleStream << transferList[i]; } + } + + // Set up transfers when in non-blocking mode. Returns sizes (in bytes) + // to be sent/received. + labelListList allNTrans(Pstream::nProcs()); + pBufs.finishedSends(allNTrans); - forAll(transferList, i) + bool transfered = false; + + forAll(allNTrans, i) + { + forAll(allNTrans[i], j) { - if (transferList[i].size()) + if (allNTrans[i][j]) { - OPstream particleStream - ( - Pstream::blocking, - refCast<const processorPolyPatch> - ( - pMesh().boundaryMesh()[processorPatches[i]] - ).neighbProcNo() - ); - - particleStream << transferList[i]; + transfered = true; + break; } } + } - forAll(processorPatches, i) - { - label patchi = processorPatches[i]; + if (!transfered) + { + break; + } - const processorPolyPatch& procPatch = - refCast<const processorPolyPatch> - (pMesh().boundaryMesh()[patchi]); - label neighbProci = - procPatch.neighbProcNo() - Pstream::masterNo(); + // Retrieve from receive buffers + forAll(processorPatches, i) + { + label patchi = processorPatches[i]; - label neighbProcPatchi = processorPatchNeighbours[patchi]; + const processorPolyPatch& procPatch = + refCast<const processorPolyPatch> + (pMesh().boundaryMesh()[patchi]); - label nRecPs = allNTrans[neighbProci][neighbProcPatchi]; + label neighbProci = procPatch.neighbProcNo(); - if (nRecPs) - { - IPstream particleStream - ( - Pstream::blocking, - procPatch.neighbProcNo() - ); - IDLList<ParticleType> newParticles - ( - particleStream, - typename ParticleType::iNew(*this) - ); + label nRecPs = allNTrans[neighbProci][Pstream::myProcNo()]; - forAllIter - ( - typename Cloud<ParticleType>, - newParticles, - newpIter - ) - { - ParticleType& newp = newpIter(); - newp.correctAfterParallelTransfer(patchi, td); - addParticle(newParticles.remove(&newp)); - } + if (nRecPs) + { + UIPstream particleStream(neighbProci, pBufs); + + IDLList<ParticleType> newParticles + ( + particleStream, + typename ParticleType::iNew(*this) + ); + + forAllIter + ( + typename Cloud<ParticleType>, + newParticles, + newpIter + ) + { + ParticleType& newp = newpIter(); + newp.correctAfterParallelTransfer(patchi, td); + addParticle(newParticles.remove(&newp)); } } } - else - { - transfered = false; - } } } diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index b3210647fa13ab54f8da1b532d0eaeb643db0bf0..dabbf03cf769adaa229363c21c2ea3789305f1a1 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -698,7 +698,7 @@ Foam::label Foam::Particle<ParticleType>::track facei_ = -1; // Tracks to endPosition or stop on boundary - while(!onBoundary() && stepFraction_ < 1.0 - SMALL) + while (!onBoundary() && stepFraction_ < 1.0 - SMALL) { stepFraction_ += trackToFace(endPosition, td)*(1.0 - stepFraction_); } diff --git a/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C b/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C index 72acb4167969fbb2899b004c33ad4d80f1d73863..6d5201111c39e3f4a267b65bdfaf2b78fb8ad034 100644 --- a/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C +++ b/src/lagrangian/dieselSpray/injector/commonRailInjector/commonRailInjector.C @@ -104,8 +104,8 @@ Foam::commonRailInjector::commonRailInjector if ( - mag(injectionPressureProfile_[injectionPressureProfile_.size()-1][0] - - massFlowRateProfile_[massFlowRateProfile_.size()-1][0]) + mag(injectionPressureProfile_.last()[0] + - massFlowRateProfile_.last()[0]) > SMALL ) { @@ -163,7 +163,7 @@ Foam::commonRailInjector::commonRailInjector } } - Info << "end constructor. in commonRail" << endl; + Info<< "end constructor. in commonRail" << endl; } @@ -330,13 +330,13 @@ Foam::scalar Foam::commonRailInjector::T(const scalar time) const Foam::scalar Foam::commonRailInjector::tsoi() const { - return massFlowRateProfile_[0][0]; + return massFlowRateProfile_.first()[0]; } Foam::scalar Foam::commonRailInjector::teoi() const { - return massFlowRateProfile_[massFlowRateProfile_.size()-1][0]; + return massFlowRateProfile_.last()[0]; } diff --git a/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C b/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C index 4cd8780535accd344672733b51379515086e9dce..76c9e4ea5df4d8bbac8c708e52e8e7df40d72bad 100644 --- a/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C +++ b/src/lagrangian/dieselSpray/injector/definedInjector/definedInjector.C @@ -99,8 +99,7 @@ Foam::definedInjector::definedInjector if ( - mag(massFlowRateProfile_[massFlowRateProfile_.size()-1][0] - - velocityProfile_[velocityProfile_.size()-1][0]) + mag(massFlowRateProfile_.last()[0] - velocityProfile_.last()[0]) > SMALL ) { @@ -331,13 +330,13 @@ Foam::scalar Foam::definedInjector::T(const scalar time) const Foam::scalar Foam::definedInjector::tsoi() const { - return massFlowRateProfile_[0][0]; + return massFlowRateProfile_.first()[0]; } Foam::scalar Foam::definedInjector::teoi() const { - return massFlowRateProfile_[massFlowRateProfile_.size()-1][0]; + return massFlowRateProfile_.last()[0]; } diff --git a/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C b/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C index 4b2367c41a8dc6f2147ba0d435872239d2fe4b8d..ea7cd833230643d3ceaa8ad18f1646579a9afe38 100644 --- a/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C +++ b/src/lagrangian/dieselSpray/injector/multiHoleInjector/multiHoleInjector.C @@ -91,8 +91,7 @@ Foam::multiHoleInjector::multiHoleInjector if ( - mag(massFlowRateProfile_[massFlowRateProfile_.size()-1][0] - - TProfile_[TProfile_.size()-1][0]) + mag(massFlowRateProfile_.last()[0] - TProfile_.last()[0]) > SMALL ) { @@ -178,9 +177,9 @@ void Foam::multiHoleInjector::setTangentialVectors() } vector yp = zp^xp; -// Info << "xp = " << xp << endl; -// Info << "yp = " << yp << endl; -// Info << "zp = " << zp << endl; +// Info<< "xp = " << xp << endl; +// Info<< "yp = " << yp << endl; +// Info<< "zp = " << zp << endl; scalar angle = 0.0; scalar u = degToRad(umbrellaAngle_/2.0); @@ -351,13 +350,13 @@ Foam::scalar Foam::multiHoleInjector::T(const scalar time) const Foam::scalar Foam::multiHoleInjector::tsoi() const { - return massFlowRateProfile_[0][0]; + return massFlowRateProfile_.first()[0]; } Foam::scalar Foam::multiHoleInjector::teoi() const { - return massFlowRateProfile_[massFlowRateProfile_.size()-1][0]; + return massFlowRateProfile_.last()[0]; } diff --git a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C index 7d05a29a5c2526006631e75d5567f92e68ee3a2b..e1e0fe26f408f78d4baa00b79bce7b4aa564742f 100644 --- a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C +++ b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C @@ -384,13 +384,13 @@ Foam::scalar Foam::swirlInjector::T(const scalar time) const Foam::scalar Foam::swirlInjector::tsoi() const { - return massFlowRateProfile_[0][0]; + return massFlowRateProfile_.first()[0]; } Foam::scalar Foam::swirlInjector::teoi() const { - return massFlowRateProfile_[massFlowRateProfile_.size()-1][0]; + return massFlowRateProfile_.last()[0]; } diff --git a/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C b/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C index a3a1093eb624a12d152b7c6bee958ba5fe03ce2f..1e054f2d41fe3c1f506305be567c32b054002f6f 100644 --- a/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C +++ b/src/lagrangian/dieselSpray/injector/unitInjector/unitInjector.C @@ -83,8 +83,8 @@ Foam::unitInjector::unitInjector if ( - mag(massFlowRateProfile_[massFlowRateProfile_.size()-1][0] - - TProfile_[TProfile_.size()-1][0]) + mag(massFlowRateProfile_.last()[0] + - TProfile_.last()[0]) > SMALL ) { @@ -306,13 +306,13 @@ Foam::scalar Foam::unitInjector::T(const scalar time) const Foam::scalar Foam::unitInjector::tsoi() const { - return massFlowRateProfile_[0][0]; + return massFlowRateProfile_.first()[0]; } Foam::scalar Foam::unitInjector::teoi() const { - return massFlowRateProfile_[massFlowRateProfile_.size()-1][0]; + return massFlowRateProfile_.last()[0]; } diff --git a/src/lagrangian/dieselSpray/parcel/parcel.C b/src/lagrangian/dieselSpray/parcel/parcel.C index dc45f4dec40a4410123793910f20f604376450bb..c0913258454b21767a30404b33b1176fefd756ee 100644 --- a/src/lagrangian/dieselSpray/parcel/parcel.C +++ b/src/lagrangian/dieselSpray/parcel/parcel.C @@ -114,7 +114,7 @@ bool Foam::parcel::move(spray& sDB) scalarField Yfg(Nf, 0.0); scalar cpMixture = 0.0; - for(label i=0; i<Ns; i++) + for (label i=0; i<Ns; i++) { const volScalarField& Yi = sDB.composition().Y()[i]; if (sDB.isLiquidFuel()[i]) @@ -341,7 +341,7 @@ void Foam::parcel::updateParcelProperties // calculate mean molecular weight scalar W = 0.0; - for(label i=0; i<Ns; i++) + for (label i=0; i<Ns; i++) { W += sDB.composition().Y()[i][celli]/sDB.gasProperties()[i].W(); @@ -357,7 +357,7 @@ void Foam::parcel::updateParcelProperties // correct the gaseous temperature for evaporated fuel scalar cpMix = 0.0; - for(label i=0; i<Ns; i++) + for (label i=0; i<Ns; i++) { cpMix += sDB.composition().Y()[i][celli] *sDB.gasProperties()[i].Cp(T()); @@ -475,7 +475,7 @@ void Foam::parcel::updateParcelProperties newMass = m(); newhg = 0.0; scalarField Ynew(fuels.Y(X())); - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { label j = sDB.liquidToGasIndex()[i]; newhg += Ynew[i]*sDB.gasProperties()[j].H(Tnew); @@ -523,7 +523,7 @@ void Foam::parcel::updateParcelProperties scalar liquidcL = sDB.fuels().cp(pg, TDroplet, X()); cpMix = 0.0; - for(label i=0; i<Ns; i++) + for (label i=0; i<Ns; i++) { if (sDB.isLiquidFuel()[i]) { @@ -541,7 +541,7 @@ void Foam::parcel::updateParcelProperties scalar z = 0.0; scalar tauEvap = 0.0; - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { tauEvap += X()[i]*fuels.properties()[i].W()/tauEvaporation[i]; } @@ -616,7 +616,7 @@ void Foam::parcel::updateParcelProperties { if (n>100) { - Info << "n = " << n << ", T = " << Td << ", pv = " << pAtSurface << endl; + Info<< "n = " << n << ", T = " << Td << ", pv = " << pAtSurface << endl; } } } @@ -628,7 +628,7 @@ void Foam::parcel::updateParcelProperties // if the droplet is NOT boiling use implicit scheme. if (sDB.evaporation().evaporation()) { - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { // immediately evaporate mass that has reached critical // condition diff --git a/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C b/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C index 131e9f885f9877a9ba771d4650ffec322aaed6e5..94cc2df8f8a3832ec567a7468fdc3ab90c4449d5 100644 --- a/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C +++ b/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C @@ -74,7 +74,7 @@ void parcel::setRelaxationTimes scalar cpMixture = 0.0; scalar muf = 0.0; - for(label i=0; i<Ns; i++) + for (label i=0; i<Ns; i++) { scalar Y = sDB.composition().Y()[i][celli]; W += Y/sDB.gasProperties()[i].W(); @@ -90,7 +90,7 @@ void parcel::setRelaxationTimes scalarField psat(Nf, 0.0); scalarField msat(Nf, 0.0); - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { label j = sDB.liquidToGasIndex()[i]; scalar Y = sDB.composition().Y()[j][celli]; @@ -121,14 +121,14 @@ void parcel::setRelaxationTimes scalarField Ys(Nf, 0.0); scalar Wliq = 0.0; - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { label j = sDB.liquidToGasIndex()[i]; scalar Wi = sDB.gasProperties()[j].W(); Wliq += Xs[i]*Wi; } - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { label j = sDB.liquidToGasIndex()[i]; scalar Wi = sDB.gasProperties()[j].W(); @@ -140,9 +140,9 @@ void parcel::setRelaxationTimes // calculate the characteritic times - if(liquidCore_> 0.5) + if (liquidCore_> 0.5) { -// no drag for parcels in the liquid core.. + // no drag for parcels in the liquid core. tauMomentum = GREAT; } else @@ -177,7 +177,7 @@ void parcel::setRelaxationTimes // this is mainly to put a limit on the evaporation time, // since tauEvaporation is very very small close to the boiling point. - for(label i=0; i<Nf; i++) + for (label i=0; i<Nf; i++) { scalar Td = min(T(), 0.999*fuels.properties()[i].Tc()); bool boiling = fuels.properties()[i].pv(pressure, Td) >= 0.999*pressure; @@ -187,7 +187,7 @@ void parcel::setRelaxationTimes scalar partialPressure = Xf[i]*pressure; // saturated vapour - if(partialPressure > psat[i]) + if (partialPressure > psat[i]) { tauEvaporation[i] = GREAT; } @@ -259,7 +259,7 @@ void parcel::setRelaxationTimes scalar vapourSurfaceEnthalpy = 0.0; scalar vapourFarEnthalpy = 0.0; - for(label k = 0; k < sDB.gasProperties().size(); k++) + for (label k = 0; k < sDB.gasProperties().size(); k++) { vapourSurfaceEnthalpy += sDB.composition().Y()[k][celli]*sDB.gasProperties()[k].H(tBoilingSurface); vapourFarEnthalpy += sDB.composition().Y()[k][celli]*sDB.gasProperties()[k].H(temperature); diff --git a/src/lagrangian/dieselSpray/spray/spray.C b/src/lagrangian/dieselSpray/spray/spray.C index e7725acd2cea59687ec8a45150b456f322075efa..1e556d7a763af4cad9d4fae42dbab8de72fde01e 100644 --- a/src/lagrangian/dieselSpray/spray/spray.C +++ b/src/lagrangian/dieselSpray/spray/spray.C @@ -331,11 +331,11 @@ Foam::spray::spray } if (liquidToGasIndex_[i] == -1) { - Info << "In composition:" << endl; + Info<< "In composition:" << endl; for (label k=0; k<Ns; k++) { word specieName(composition_.Y()[k].name()); - Info << specieName << endl; + Info<< specieName << endl; } FatalError<< diff --git a/src/lagrangian/dieselSpray/spray/sprayFunctions.C b/src/lagrangian/dieselSpray/spray/sprayFunctions.C index fb3e9541b15d0eb6f50acefa228ff1ecb2cee026..632d47411ad88223d2ac1812eafc40ff1118cbdf 100644 --- a/src/lagrangian/dieselSpray/spray/sprayFunctions.C +++ b/src/lagrangian/dieselSpray/spray/sprayFunctions.C @@ -77,7 +77,7 @@ scalar spray::injectedEnthalpy scalar Wl = fuels_->W(X); scalar hg = 0.0; - for(label j=0; j<Nf; j++) + for (label j=0; j<Nf; j++) { label k = liquidToGasIndex_[j]; hg += gasProperties()[k].H(T)*gasProperties()[k].W()*X[j]/Wl; @@ -133,7 +133,7 @@ scalar spray::liquidEnthalpy() const scalar hg = 0.0; scalar Wl = fuels().W(elmnt().X()); - for(label j=0; j<Nf; j++) + for (label j=0; j<Nf; j++) { label k = liquidToGasIndex_[j]; @@ -177,7 +177,7 @@ scalar spray::liquidTotalEnthalpy() const scalar hg = 0.0; scalar Wl = fuels().W(elmnt().X()); - for(label j=0; j<Nf; j++) + for (label j=0; j<Nf; j++) { label k = liquidToGasIndex_[j]; hg += @@ -251,7 +251,7 @@ scalar spray::liquidPenetration vector ip(vector::zero); if (nHoles > 1) { - for(label i=0;i<nHoles;i++) + for (label i=0;i<nHoles;i++) { ip += injectors_[nozzlei].properties()->position(i); } @@ -308,7 +308,7 @@ scalar spray::liquidPenetration if (de < dist[i]) { found = true; - for(label j=n; j>i; j--) + for (label j=n; j>i; j--) { m[j] = m[j-1]; dist[j] = dist[j-1]; diff --git a/src/lagrangian/dieselSpray/spray/sprayInject.C b/src/lagrangian/dieselSpray/spray/sprayInject.C index b0aea70def1878bccdd0eba33d70276936704ce2..f53ad1748363d13d6aa9358cb6f8b68aab2b989c 100644 --- a/src/lagrangian/dieselSpray/spray/sprayInject.C +++ b/src/lagrangian/dieselSpray/spray/sprayInject.C @@ -79,12 +79,12 @@ void spray::inject() ) ); - for(label j=0; j<Np; j++) + for (label j=0; j<Np; j++) { // calculate the time of injection for parcel 'j' scalar toi = time0 + constT + deltaT*j/scalar(Np); - for(label n=0; n<nHoles; n++) + for (label n=0; n<nHoles; n++) { // calculate the velocity of the injected parcel @@ -164,8 +164,8 @@ void spray::inject() delete pPtr; } } // if (injectorCell.... - } // for(label n=0... - } // for(label j=0.... + } // for (label n=0... + } // for (label j=0.... } // if (mass>0)... } // forAll(injectors)... diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C index 2478061ab1416b29378f6088a8039e5fb5261d9e..01525723f9b0a6236a46c7395553739a40b2e6ca 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C +++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C @@ -183,7 +183,7 @@ void LISA::atomizeParcel scalar kOld = 0.0; - for(label i=0; i<40; i++) + for (label i=0; i<40; i++) { k = kPos diff --git a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C index d381e9516f52ce9d5b96a0d05cc11b805dee2ac7..1db72fe0088d0e1b8cf2b965f007b3a9304d744d 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C +++ b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/gradientDispersionRAS/gradientDispersionRAS.C @@ -109,7 +109,7 @@ void gradientDispersionRAS::disperseParcels() const scalar x1 = 0.0; scalar x2 = 0.0; scalar rsq = 10.0; - while((rsq > 1.0) || (rsq == 0.0)) + while ((rsq > 1.0) || (rsq == 0.0)) { x1 = 2.0*spray_.rndGen().scalar01() - 1.0; x2 = 2.0*spray_.rndGen().scalar01() - 1.0; diff --git a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C index 36cf7b05885da131ed7937077c2944c6554d3734..5c8d8732f8b1164f18d5217bb832ab628e16b80e 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C +++ b/src/lagrangian/dieselSpray/spraySubModels/dispersionModel/stochasticDispersionRAS/stochasticDispersionRAS.C @@ -111,7 +111,7 @@ void stochasticDispersionRAS::disperseParcels() const // numerical recipes... Ch. 7. Random Numbers... scalar x1,x2; scalar rsq = 10.0; - while((rsq > 1.0) || (rsq == 0.0)) + while ((rsq > 1.0) || (rsq == 0.0)) { x1 = 2.0*spray_.rndGen().scalar01() - 1.0; x2 = 2.0*spray_.rndGen().scalar01() - 1.0; diff --git a/src/lagrangian/dieselSpray/spraySubModels/evaporationModel/RutlandFlashBoil/RutlandFlashBoil.C b/src/lagrangian/dieselSpray/spraySubModels/evaporationModel/RutlandFlashBoil/RutlandFlashBoil.C index 7ba41141ba35b3840a8a49aad639506e370db833..afb24110d8d9b9329a50c4ad4910b9b760622653 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/evaporationModel/RutlandFlashBoil/RutlandFlashBoil.C +++ b/src/lagrangian/dieselSpray/spraySubModels/evaporationModel/RutlandFlashBoil/RutlandFlashBoil.C @@ -160,7 +160,7 @@ scalar RutlandFlashBoil::relaxationTime scalar logXratio = log(1.0 + Xratio); scalar Fb = 1.0; - if(logXratio > SMALL) + if (logXratio > SMALL) { Fb = pow((1.0 + Xratio), FbExp)*log(1.0 + Xratio)/Xratio; } @@ -286,7 +286,7 @@ scalar RutlandFlashBoil::boilingTime Gneg = Gneg/10.0; Gneg = max(Gneg, VSMALL); FgNeg = Gneg + Gf - B*log(1.0 + (1.0 + Gf/Gneg)*A); - if(FgNeg < 0.0) + if (FgNeg < 0.0) { break; } @@ -303,7 +303,7 @@ scalar RutlandFlashBoil::boilingTime if (FgNeg > 0.0) { - Info << "no convergence" << endl; + Info<< "no convergence" << endl; } @@ -333,7 +333,7 @@ scalar RutlandFlashBoil::boilingTime if (k >= Niter - 1) { - Info << " No convergence for G " << endl; + Info<< " No convergence for G " << endl; } } else diff --git a/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C b/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C index aa56562f009838cfbcbf64a078d8fa51b81e3f22..9d631553e57f7cd5379e4033cfceee05dc1949f1 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C +++ b/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C @@ -159,7 +159,7 @@ bool reflectParcel::wallTreatment /* if (mag(Ub-v) > SMALL) { - Info << "reflectParcel:: v = " << v + Info<< "reflectParcel:: v = " << v << ", Ub = " << Ub << ", facei = " << facei << ", patchi = " << patchi diff --git a/src/lagrangian/dsmc/Make/files b/src/lagrangian/dsmc/Make/files index 9f6d33d209edf23f3a65deb06139746c0bb873ae..983de123ab3dd948fc347e2321285f87154ecb4e 100644 --- a/src/lagrangian/dsmc/Make/files +++ b/src/lagrangian/dsmc/Make/files @@ -4,9 +4,6 @@ parcels/derived/dsmcParcel/dsmcParcel.C /* Cloud base classes */ clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.C -/* Clouds */ -clouds/derived/dsmcCloud/dsmcCloud.C - /* submodels */ parcels/derived/dsmcParcel/defineDsmcParcel.C parcels/derived/dsmcParcel/makeDsmcParcelBinaryCollisionModels.C diff --git a/src/lagrangian/dsmc/Make/options b/src/lagrangian/dsmc/Make/options index 15874b7b55afc2cfae55d9550fd48451604ee3d4..55865dfabcd9146aa4fe204e71d664b62e535b95 100644 --- a/src/lagrangian/dsmc/Make/options +++ b/src/lagrangian/dsmc/Make/options @@ -1,7 +1,9 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/lagrangian/basic/lnInclude + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude LIB_LIBS = \ -llagrangian \ - -lfiniteVolume + -lfiniteVolume \ + -lmeshTools diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C index b5958bad10606af61c6a7e99c237b152336e5832..5c7819c709a141acbd42b5f77d77a2c1c4d8bb5c 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C @@ -297,7 +297,7 @@ void Foam::DsmcCloud<ParcelType>::collisions() // Temporary storage for subCells List<DynamicList<label> > subCells(8); - scalar deltaT = cachedDeltaT(); + scalar deltaT = mesh().time().deltaTValue(); label collisionCandidates = 0; @@ -380,7 +380,7 @@ void Foam::DsmcCloud<ParcelType>::collisions() { candidateQ = subCellPs[rndGen_.integer(0, nSC - 1)]; - } while(candidateP == candidateQ); + } while (candidateP == candidateQ); } else { @@ -392,7 +392,7 @@ void Foam::DsmcCloud<ParcelType>::collisions() { candidateQ = rndGen_.integer(0, nC - 1); - } while(candidateP == candidateQ); + } while (candidateP == candidateQ); } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -405,7 +405,7 @@ void Foam::DsmcCloud<ParcelType>::collisions() // label candidateQ = rndGen_.integer(0, nC-1); // // If the same candidate is chosen, choose again - // while(candidateP == candidateQ) + // while (candidateP == candidateQ) // { // candidateQ = rndGen_.integer(0, nC-1); // } @@ -1042,9 +1042,6 @@ Foam::DsmcCloud<ParcelType>::~DsmcCloud() template<class ParcelType> void Foam::DsmcCloud<ParcelType>::evolve() { - // cache the value of deltaT for this timestep - storeDeltaT(); - typename ParcelType::trackData td(*this); // Reset the data collection fields diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H index bc6da12c234af94f9af8da3300083696157517df..5b2f382eb62f4b2699ec3a48caae5d1b71579385 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H @@ -137,10 +137,6 @@ class DsmcCloud //- Random number generator Random rndGen_; - //- In-cloud cache of deltaT, lookup in submodels and parcel is - // expensive - scalar cachedDeltaT_; - // boundary value fields @@ -267,12 +263,6 @@ public: //- Return refernce to the random object inline Random& rndGen(); - //- Store (cache) the current value of deltaT - inline void storeDeltaT(); - - //- Return the cached value of deltaT - inline scalar cachedDeltaT() const; - // References to the boundary fields for surface data collection diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H index f0f93498b19c60a2cd57b0badb4f9098d64ce2de..beaacb2276683d7251396dec9a49806e33e0ef79 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H @@ -125,20 +125,6 @@ inline Foam::Random& Foam::DsmcCloud<ParcelType>::rndGen() } -template<class ParcelType> -inline void Foam::DsmcCloud<ParcelType>::storeDeltaT() -{ - cachedDeltaT_ = mesh().time().deltaTValue(); -} - - -template<class ParcelType> -inline Foam::scalar Foam::DsmcCloud<ParcelType>::cachedDeltaT() const -{ - return cachedDeltaT_; -} - - template<class ParcelType> inline Foam::volScalarField::GeometricBoundaryField& Foam::DsmcCloud<ParcelType>::qBF() diff --git a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H b/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H index 861244652fbbe6799882a26a021aa1eeaca87550..c0c17336e6b2488ba4b349503ff742d450cdc3c1 100644 --- a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H +++ b/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H @@ -43,55 +43,8 @@ SourceFiles namespace Foam { - -/*---------------------------------------------------------------------------*\ - Class dsmcCloud Declaration -\*---------------------------------------------------------------------------*/ - -class dsmcCloud -: - public DsmcCloud<dsmcParcel> -{ - // Private member functions - - //- Disallow default bitwise copy construct - dsmcCloud(const dsmcCloud&); - - //- Disallow default bitwise assignment - void operator=(const dsmcCloud&); - - -public: - - //- Runtime type information - TypeName("dsmcCloud"); - - - // Constructors - - //- Construct given name and mesh, will read Parcels and fields from - // file - dsmcCloud - ( - const word& cloudName, - const fvMesh& mesh - ); - - //- Construct given name, mesh and initialisation dictionary. - dsmcCloud - ( - const word& cloudName, - const fvMesh& mesh, - const IOdictionary& dsmcInitialiseDict - ); - - //- Destructor - ~dsmcCloud(); -}; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam + typedef DsmcCloud<dsmcParcel> dsmcCloud; +} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C index ffd7c67d4284e2373ec371522485b858a5076596..3d752aa98dcb97b7b2a4e2be465e13c11a4e99e3 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C @@ -25,6 +25,7 @@ License \*---------------------------------------------------------------------------*/ #include "DsmcParcel.H" +#include "meshTools.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -43,16 +44,31 @@ bool Foam::DsmcParcel<ParcelType>::move const polyMesh& mesh = td.cloud().pMesh(); const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); - const scalar deltaT = td.cloud().cachedDeltaT(); + const scalar deltaT = mesh.time().deltaTValue(); scalar tEnd = (1.0 - p.stepFraction())*deltaT; const scalar dtMax = tEnd; + // For reduced-D cases, the velocity used to track needs to be + // constrained, but the actual U_ of the parcel must not be + // altered or used, as it is altered by patch interactions an + // needs to retain its 3D value for collision purposes. + vector Utracking = U_; + while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) { + // Apply correction to position for reduced-D cases + meshTools::constrainToMeshCentre(mesh, p.position()); + + Utracking = U_; + + // Apply correction to velocity to constrain tracking for + // reduced-D cases + meshTools::constrainDirection(mesh, mesh.solutionD(), Utracking); + // Set the Lagrangian time-step scalar dt = min(dtMax, tEnd); - dt *= p.trackToFace(p.position() + dt*U_, td); + dt *= p.trackToFace(p.position() + dt*Utracking, td); tEnd -= dt; @@ -119,7 +135,7 @@ void Foam::DsmcParcel<ParcelType>::hitWallPatch const scalar fA = mag(wpp.faceAreas()[wppLocalFace]); - const scalar deltaT = td.cloud().cachedDeltaT(); + const scalar deltaT = td.cloud().pMesh().time().deltaTValue(); const constantProperties& constProps(td.cloud().constProps(typeId_)); @@ -256,4 +272,3 @@ void Foam::DsmcParcel<ParcelType>::transformProperties #include "DsmcParcelIO.C" // ************************************************************************* // - diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C index 4df1f6e44a67242627942cc5e971f1b026710fd5..1df22c68d5a34f04bdcd01bbdd9fe06b402536ad 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C @@ -129,7 +129,7 @@ void Foam::FreeStream<CloudType>::inflow() const polyMesh& mesh(cloud.mesh()); - const scalar deltaT = cloud.cachedDeltaT(); + const scalar deltaT = mesh.time().deltaTValue(); Random& rndGen(cloud.rndGen()); diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C index 98abaf6e67e533db1dfe4d19b0656ba548d9d333..ed009f8f3347eb6d97e4c82349711131836b41b2 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C @@ -64,7 +64,7 @@ template<class Type> Type Foam::Table<Type>::value(const scalar x) const { // Return zero if out of bounds - if ((x > table_[table_.size()-1].first()) || (x < table_[0].first())) + if (x < table_[0].first() || x > table_.last().first()) { return pTraits<Type>::zero; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C index 873d5fb34611db8528ceb57e5af007c9fc711ccb..b300ea55251b59341110b9df77a102211edf1360 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C @@ -67,6 +67,10 @@ Foam::word Foam::PatchInteractionModel<CloudType>::interactionTypeToWord return "other"; } } +#ifdef __ICC + // Prevent Icc complaining about missing return statement. + return word::null; +#endif } diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C index c9e975e296afc9a6730cbc43ffe929594b0d3cf9..2dd3e9bf3fa45ecdf1c260edcda0053dc1628069 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C @@ -185,7 +185,7 @@ void Foam::correlationFunction<Type>::calculateCorrelationFunction const Type& currentValue ) { - if( measurandFieldSize() != 1) + if (measurandFieldSize() != 1) { FatalErrorIn("correlationFunction<Type>::calculateCorrelationFunction") << "Trying to supply a single value to calculate the correlation " diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C index 7cc9e70c0ef6413a086dc1f33c8aefdaaa242840..a714a36924dda00814b6c0529535c823f4c1b3ab 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C @@ -256,7 +256,7 @@ void Foam::distribution::insertMissingKeys() if (keys.size()) { - for (label k = keys[0]; k < keys[keys.size()-1]; k++) + for (label k = keys[0]; k < keys.last(); k++) { iter = find(k); diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C index f1036eaa0e937bd2121f80187ef61199cd3d75e4..1a587f3022b5e44b0605661ea7a759b421045888 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C @@ -667,7 +667,7 @@ const Foam::labelList Foam::interactionLists::referredCellsInRangeOfSegment ) ) { - if(findIndex(referredCellsFoundInRange, rIL) == -1) + if (findIndex(referredCellsFoundInRange, rIL) == -1) { referredCellsFoundInRange.append(rIL); } diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C index 225ad5902a01ca024526ef4e8b43326f90e4f677..0059fad4b9431843f987c0287684b099e1b5255c 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C @@ -277,7 +277,7 @@ referredCell::referredCell // Allow sourceCell = -1 to create a dummy referredCell // to obtain the transformation - if(sourceCell >= 0) + if (sourceCell >= 0) { setConstructionData(mesh, sourceCell); } diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C index acccb66b31d933a193016cc607b5a137b77ffbd4..583f7382beed512136c0a41fc7a964bb60695dc3 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C @@ -40,7 +40,7 @@ void Foam::referredCellList::buildReferredCellList bool pointPointListBuild ) { - Info << nl << "Building list of referred interaction neighbours" << endl; + Info<< nl << "Building list of referred interaction neighbours" << endl; const polyMesh& mesh(il_.mesh()); diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H b/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H index 9781c9d70f415b8c92d90d29d3b05ec015bcebcc..4e93070479e69dfaf71c485acf929e7ac8faab0a 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H @@ -152,7 +152,7 @@ if (runTime.outputTime()) forAll(totalTemperature.internalField(), tT) { - if(totalN_sum[tT] > 0) + if (totalN_sum[tT] > 0) { totalTemperature.internalField()[tT] = totalTemperatureVTerms_sum[tT] @@ -181,7 +181,7 @@ if (runTime.outputTime()) forAll(singleSpeciesMeanKE, sSMKE) { - if(allSpeciesN_RU[mKE][sSMKE]) + if (allSpeciesN_RU[mKE][sSMKE]) { singleSpeciesMeanKE[sSMKE] = allSpeciesM_RU[mKE][sSMKE] @@ -208,7 +208,7 @@ if (runTime.outputTime()) forAll(totalMeanKE.internalField(), tMKE) { - if(totalN_sum[tMKE] > 0) + if (totalN_sum[tMKE] > 0) { totalMeanKE.internalField()[tMKE] = totalKE_sum[tMKE] diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/createMDFields.H b/src/lagrangian/molecularDynamics/molecule/mdTools/createMDFields.H index 730db2d0a8c7e2f701ff63615ca4d58bd331116e..50e82df48ab0ab945297c8c521db9a5be9bac366 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/createMDFields.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/createMDFields.H @@ -39,7 +39,7 @@ PtrList<volScalarField> allSpeciesRhoN forAll (allSpeciesRhoN, rN) { - Info << " Creating number density field for " + Info<< " Creating number density field for " << molecules.potential().idList()[rN] << endl; allSpeciesRhoN.set @@ -94,7 +94,7 @@ PtrList<volScalarField> allSpeciesRhoM forAll (allSpeciesRhoM, rM) { - Info << " Creating mass density field for " + Info<< " Creating mass density field for " << molecules.potential().idList()[rM] << endl; allSpeciesRhoM.set @@ -149,7 +149,7 @@ PtrList<volVectorField> allSpeciesVelocity forAll (allSpeciesVelocity, v) { - Info << " Creating velocity field for " + Info<< " Creating velocity field for " << molecules.potential().idList()[v] << endl; allSpeciesVelocity.set @@ -223,7 +223,7 @@ PtrList<volScalarField> allSpeciesTemperature forAll (allSpeciesTemperature, t) { - Info << " Creating temperature field for " + Info<< " Creating temperature field for " << molecules.potential().idList()[t] << endl; allSpeciesTemperature.set @@ -279,7 +279,7 @@ PtrList<volScalarField> allSpeciesMeanKE forAll (allSpeciesMeanKE, mKE) { - Info << " Creating mean kinetic energy field for " + Info<< " Creating mean kinetic energy field for " << molecules.potential().idList()[mKE] << endl; allSpeciesMeanKE.set diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/createRefUnits.H b/src/lagrangian/molecularDynamics/molecule/mdTools/createRefUnits.H index bbd6c6daf7bc378e10c1cec250febb9184dc9769..c1e558b2213748d246588a244958642a6d972215 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/createRefUnits.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/createRefUnits.H @@ -11,7 +11,7 @@ IOobject reducedUnitsDictIOobject if (reducedUnitsDictIOobject.headerOk()) { - Info << nl + Info<< nl << "Reading reference quantities from reducedUnitsDict file." << endl; IOdictionary reducedUnitsDict(reducedUnitsDictIOobject); diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H b/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H index fb5118bb5a484f0ce77bb3dd7a88b0e88aa2fd14..446e58da05f6ba861cf026383238b088096a85da 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H @@ -73,7 +73,7 @@ label singleStepDOFs = 0; //singleStepCentreOfMass += mol().position()*molMass; } - // if(singleStepNMols) + // if (singleStepNMols) // { // singleStepCentreOfMass /= singleStepTotalMass; // } @@ -104,7 +104,7 @@ label singleStepDOFs = 0; singleStepTotalAngularMomentum += molPiGlobal; //+((mol().position() - singleStepCentreOfMass) ^ (molV * molMass)); - if(mag(molV) > singleStepMaxVelocityMag) + if (mag(molV) > singleStepMaxVelocityMag) { singleStepMaxVelocityMag = mag(molV); } @@ -176,7 +176,7 @@ if (singleStepNMols) /singleStepNMols << endl; - // Info << singleStepNMols << " " + // Info<< singleStepNMols << " " // << singleStepTotalMomentum/singleStepTotalMass << " " // << singleStepMaxVelocityMag << " " // << singleStepTotalKE/singleStepNMols << " " diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H index 34dd65156a90d7cc61c1f212a33f5518c37703d1..e95addc7bd374577358f504ad2ce7024f8c310bf 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H @@ -53,7 +53,7 @@ if (runTime.outputTime()) { if (accumulatedNMols) { - Info << "calculating averages" << endl; + Info<< "calculating averages" << endl; averageTemperature = ( @@ -77,7 +77,7 @@ if (runTime.outputTime()) meshVolume ); - Info << "----------------------------------------" << nl + Info<< "----------------------------------------" << nl << "Averaged properties" << nl << "Average |velocity| = " << mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass << nl diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H index 447a04e4ea3e047f045ac56cf55af05aa2849cac..b13f5ea6a0219fdc36595f087a072fd531a575c4 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H +++ b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H @@ -77,7 +77,7 @@ inline Foam::molecule::constantProperties::constantProperties siteReferencePositions_ -= centreOfMass; - if(siteIds_.size() == 1) + if (siteIds_.size() == 1) { // Single site molecule - no rotational motion. @@ -85,7 +85,7 @@ inline Foam::molecule::constantProperties::constantProperties momentOfInertia_ = diagTensor(-1, -1, -1); } - else if(linearMoleculeTest()) + else if (linearMoleculeTest()) { // Linear molecule. diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C index f341267b846c696c5703118c70d57bd1916f8be5..a50159ee9333c15644fcc7b3262188b798fbfb06 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C @@ -509,7 +509,7 @@ void Foam::moleculeCloud::initialiseMolecules zoneDict.lookup("latticePositions") ); - if(latticeIds.size() != latticePositions.size()) + if (latticeIds.size() != latticePositions.size()) { FatalErrorIn("Foam::moleculeCloud::initialiseMolecules") << "latticeIds and latticePositions must be the same " diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H index fee67cfced40f59f4820a7ae232844502aad8d83..2a92af07cfe63b27bb2dcd2b4e8a99677792fcbc 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H @@ -75,7 +75,7 @@ inline void Foam::moleculeCloud::evaluatePair scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) + if (pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) { scalar rsIsJMag = mag(rsIsJ); @@ -118,7 +118,7 @@ inline void Foam::moleculeCloud::evaluatePair scalar rsIsJMagSq = magSqr(rsIsJ); - if(rsIsJMagSq <= electrostatic.rCutSqr()) + if (rsIsJMagSq <= electrostatic.rCutSqr()) { scalar rsIsJMag = mag(rsIsJ); diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C index 2d77c4ce59505c320590182f5eae168637f48cc4..26b99d7e3b88863d3ec71147e3bc2188aa04747a 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C @@ -158,7 +158,7 @@ void Foam::pairPotentialList::readPairPotentialDict { OFstream ppTabFile(mesh.time().path()/"electrostatic"); - if(!electrostaticPotential_->writeEnergyAndForceTables(ppTabFile)) + if (!electrostaticPotential_->writeEnergyAndForceTables(ppTabFile)) { FatalErrorIn("pairPotentialList::readPairPotentialDict") << "Failed writing to " diff --git a/src/lagrangian/molecularDynamics/potential/potential/potential.C b/src/lagrangian/molecularDynamics/potential/potential/potential.C index 5532c2f105c0751eeb4bf966918e91fb12c09c10..2fc95108dd5054ac394da6f8ecc8be88aa2ad2e6 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potential.C +++ b/src/lagrangian/molecularDynamics/potential/potential/potential.C @@ -53,7 +53,7 @@ void Foam::potential::setSiteIdList(const IOdictionary& moleculePropertiesDict) { const word& siteId = siteIdNames[sI]; - if(findIndex(siteIdList, siteId) == -1) + if (findIndex(siteIdList, siteId) == -1) { siteIdList.append(siteId); } @@ -65,14 +65,14 @@ void Foam::potential::setSiteIdList(const IOdictionary& moleculePropertiesDict) { const word& siteId = pairPotSiteIds[sI]; - if(findIndex(siteIdNames, siteId) == -1) + if (findIndex(siteIdNames, siteId) == -1) { FatalErrorIn("potential.C") << nl << siteId << " in pairPotentialSiteIds is not in siteIds: " << siteIdNames << nl << abort(FatalError); } - if(findIndex(pairPotentialSiteIdList, siteId) == -1) + if (findIndex(pairPotentialSiteIdList, siteId) == -1) { pairPotentialSiteIdList.append(siteId); } @@ -85,7 +85,7 @@ void Foam::potential::setSiteIdList(const IOdictionary& moleculePropertiesDict) { const word& siteId = siteIdList[aSIN]; - if(findIndex(pairPotentialSiteIdList, siteId) == -1) + if (findIndex(pairPotentialSiteIdList, siteId) == -1) { pairPotentialSiteIdList.append(siteId); } @@ -231,7 +231,7 @@ void Foam::potential::potential::readPotentialDict() if (potentialDict.found("external")) { - Info << nl << "Reading external forces:" << endl; + Info<< nl << "Reading external forces:" << endl; const dictionary& externalDict = potentialDict.subDict("external"); @@ -244,7 +244,7 @@ void Foam::potential::potential::readPotentialDict() } } - Info << nl << tab << "gravity = " << gravity_ << endl; + Info<< nl << tab << "gravity = " << gravity_ << endl; } @@ -287,7 +287,7 @@ void Foam::potential::potential::readMdInitialiseDict { const word& id = latticeIds[i]; - if(!moleculePropertiesDict.found(id)) + if (!moleculePropertiesDict.found(id)) { FatalErrorIn("potential.C") << nl << "Molecule type " diff --git a/src/mesh/autoMesh/Make/options b/src/mesh/autoMesh/Make/options index f1687b7eb1ecf3b19e60d8363cc3703b17a80e72..573d0007c1d9445f4cee37c8f74341922bbc4940 100644 --- a/src/mesh/autoMesh/Make/options +++ b/src/mesh/autoMesh/Make/options @@ -1,5 +1,5 @@ EXE_INC = \ - -I$(LIB_SRC)/decompositionMethods/decompositionMethods/lnInclude \ + -I$(LIB_SRC)/parallel/decompositionMethods/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C index 8f47f9de8cec7d1cbc0f99b3228abc2084ff41fb..bc2dcabf58ecfb269deec9b407cc2bfa0d2f25f6 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C @@ -468,7 +468,7 @@ void Foam::autoLayerDriver::findIsolatedRegions // Keep count of number of points unextruded label nPointCounter = 0; - while(true) + while (true) { // Stop layer growth where mesh wraps around edge with a // large feature angle @@ -835,7 +835,7 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo vector::zero // passive data ) ); - pointMedialDist[pointI] = maxInfo[maxInfo.size()-1]; + pointMedialDist[pointI] = maxInfo.last(); } } } @@ -879,7 +879,7 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo vector::zero // passive data ) ); - pointMedialDist[pointI] = maxInfo[maxInfo.size()-1]; + pointMedialDist[pointI] = maxInfo.last(); } } } diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C index bd5729a1b38545a655df070b5a44cd88709379b5..bda334cc511141fdc6e0cc1a7a0b305c49ada2e2 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C @@ -1858,7 +1858,7 @@ void Foam::meshRefinement::distribute(const mapDistributePolyMesh& map) // Get local mesh bounding box. Single box for now. List<treeBoundBox> meshBb(1); treeBoundBox& bb = meshBb[0]; - bb = boundBox(mesh_.points(), false); + bb = treeBoundBox(mesh_.points()); bb = bb.extend(rndGen, 1E-4); // Distribute all geometry (so refinementSurfaces and shellSurfaces) diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C index 88f806b5dd1c948ca165439529c4467e19c57f2f..307cb743f813550e026b34293703e5fbbe19b413 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C @@ -2411,6 +2411,9 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify } syncTools::swapBoundaryFaceList(mesh_, neiCellZone, false); + // Get per face whether is it master (of a coupled set of faces) + PackedBoolList isMasterFace(syncTools::getMasterFaces(mesh_)); + // Set owner as no-flip forAll(patches, patchI) { @@ -2428,14 +2431,27 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify label neiZone = neiCellZone[faceI-mesh_.nInternalFaces()]; bool flip; - if (ownZone == max(ownZone, neiZone)) + + label maxZone = max(ownZone, neiZone); + + if (maxZone == -1) { flip = false; } - else + else if (ownZone == neiZone) + { + // Can only happen for coupled boundaries. Keep master + // face unflipped. + flip = !isMasterFace[faceI]; + } + else if (neiZone == maxZone) { flip = true; } + else + { + flip = false; + } meshMod.setAction ( diff --git a/src/mesh/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C b/src/mesh/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C index 237e35276c33e528be26b13430bc078ea66baab4..0bda7cd1cc4dafb8c1c887ae09e72d400593cd61 100644 --- a/src/mesh/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C +++ b/src/mesh/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C @@ -39,7 +39,7 @@ Foam::label Foam::ExactParticle<ParticleType>::track this->facei_ = -1; // Tracks to endPosition or stop on boundary - while(!this->onBoundary() && this->stepFraction_ < 1.0 - SMALL) + while (!this->onBoundary() && this->stepFraction_ < 1.0 - SMALL) { this->stepFraction_ += trackToFace(endPosition, td) diff --git a/src/mesh/blockMesh/Make/files b/src/mesh/blockMesh/Make/files index cc7a1c1bb5fe8b9db96e92037ca0dced0fe89b86..d68caa1c244ba6544143a427c877a1e885649894 100644 --- a/src/mesh/blockMesh/Make/files +++ b/src/mesh/blockMesh/Make/files @@ -1,13 +1,17 @@ +curvedEdges/CatmullRomSpline.C +curvedEdges/polyLine.C + +curvedEdges/arcEdge.C curvedEdges/curvedEdge.C curvedEdges/lineEdge.C -curvedEdges/polyLine.C curvedEdges/polyLineEdge.C -curvedEdges/arcEdge.C -curvedEdges/spline.C -curvedEdges/BSpline.C -curvedEdges/simpleSplineEdge.C -curvedEdges/polySplineEdge.C curvedEdges/lineDivide.C +curvedEdges/splineEdge.C + +curvedEdges/legacy/spline.C +curvedEdges/legacy/BSpline.C +curvedEdges/legacy/simpleSplineEdge.C +curvedEdges/legacy/polySplineEdge.C blockDescriptor/blockDescriptor.C blockDescriptor/blockDescriptorEdges.C diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C index 599a108c3cbffaf4ef996f89b8afc20e8711e45f..335fc824b85200d5c89c9d153e95a08be1fa625c 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptor.C @@ -89,7 +89,7 @@ Foam::blockDescriptor::blockDescriptor { zoneName_ = t.wordToken(); - // Get the next token + // Examine next token is >> t; } is.putBack(t); @@ -129,7 +129,12 @@ Foam::blockDescriptor::blockDescriptor scalarList expRatios(is); - if (expRatios.size() == 3) + if (expRatios.size() == 1) + { + // identical in x/y/z-directions + expand_ = expRatios[0]; + } + else if (expRatios.size() == 3) { // x-direction expand_[0] = expRatios[0]; diff --git a/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C b/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C index 5fcf31f4218935aa34f52339ddc21214022f737b..afc8fcd078bc53e21897b36a25c4f56d6e6cd006 100644 --- a/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C +++ b/src/mesh/blockMesh/blockDescriptor/blockDescriptorEdges.C @@ -120,8 +120,8 @@ void Foam::blockDescriptor::setEdge // divide the line lineDivide divEdge(cedge, dim, 1.0/(gExp+SMALL)); - pointField p = divEdge.points(); - scalarList d = divEdge.lambdaDivisions(); + const pointField& p = divEdge.points(); + const scalarList& d = divEdge.lambdaDivisions(); edgePoints_[edgeI].setSize(p.size()); edgeWeights_[edgeI].setSize(d.size()); diff --git a/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.C b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.C new file mode 100644 index 0000000000000000000000000000000000000000..d1647de07f7b3bf926a5f5a7fe9a417f73fc90ec --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.C @@ -0,0 +1,131 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "error.H" +#include "CatmullRomSpline.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CatmullRomSpline::CatmullRomSpline +( + const pointField& Knots, + const vector&, + const vector& +) +: + polyLine(Knots) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::point Foam::CatmullRomSpline::position(const scalar mu) const +{ + // endpoints + if (mu < SMALL) + { + return points().first(); + } + else if (mu > 1 - SMALL) + { + return points().last(); + } + + scalar lambda = mu; + label segment = localParameter(lambda); + return position(segment, lambda); +} + + +Foam::point Foam::CatmullRomSpline::position +( + const label segment, + const scalar mu +) const +{ + const point& p0 = points()[segment]; + const point& p1 = points()[segment+1]; + + // special cases - no calculation needed + if (segment < 0 || mu < 0.0) + { + return p0; + } + else if (segment > nSegments() || mu >= 1.0) + { + return p1; + } + + // determine the end points + point e0; + point e1; + + if (segment == 0) + { + // end: simple reflection + e0 = 2.0 * p0 - p1; + } + else + { + e0 = points()[segment-1]; + } + + if (segment+1 == nSegments()) + { + // end: simple reflection + e1 = 2.0 * p1 - p0; + } + else + { + e1 = points()[segment+2]; + } + + + return 0.5 * + ( + ( 2 * p0 ) + + mu * + ( + ( -e0 + p1 ) + + mu * + ( + ( 2*e0 - 5*p0 + 4*p1 - e1 ) + + mu * + ( -e0 + 3*p0 - 3*p1 + e1 ) + ) + ) + ); +} + + +Foam::scalar Foam::CatmullRomSpline::length() const +{ + notImplemented("CatmullRomSpline::length() const"); + return 1.0; +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.H b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.H new file mode 100644 index 0000000000000000000000000000000000000000..6f1851a7a65821af8c7986c38c0a17d7504429e0 --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/CatmullRomSpline.H @@ -0,0 +1,128 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::CatmullRomSpline + +Description + An implementation of Catmull-Rom splines (sometime as known as + Overhauser splines). + + In this implementation, the end tangents are created + automatically by reflection. + + In matrix form, the @e local interpolation on the interval t=[0..1] is + described as follows: + @verbatim + P(t) = 0.5 * [ t^3 t^2 t 1 ] * [ -1 3 -3 1 ] * [ P-1 ] + [ 2 -5 4 -1 ] [ P0 ] + [ -1 0 1 0 ] [ P1 ] + [ 0 2 0 0 ] [ P2 ] + @endverbatim + + Where P-1 and P2 represent the neighbouring points or the + extrapolated end points. Simple reflection is used to + automatically create the end points. + + The spline is discretized based on the chord length of the + individual segments. In rare cases (sections with very high + curvatures), the resulting distribution may be sub-optimal. + +SeeAlso + http://www.algorithmist.net/catmullrom.html provides a nice + introduction + +ToDo + A future implementation could also handle closed splines - either + when the start/end points are identically or when specified. + +SourceFiles + CatmullRomSpline.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CatmullRomSpline_H +#define CatmullRomSpline_H + +#include "polyLine.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CatmullRomSpline Declaration +\*---------------------------------------------------------------------------*/ + +class CatmullRomSpline +: + public polyLine +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + CatmullRomSpline(const CatmullRomSpline&); + + //- Disallow default bitwise assignment + void operator=(const CatmullRomSpline&); + + +public: + + // Constructors + + //- Construct from components + CatmullRomSpline + ( + const pointField& knots, + const vector& begTangentNotImplemented = vector::zero, + const vector& endTangentNotImplemented = vector::zero + ); + + + // Member Functions + + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar lambda) const; + + //- Return the point position corresponding to the local parameter + // 0 <= lambda <= 1 on the given segment + point position(const label segment, const scalar lambda) const; + + //- Return the length of the curve + scalar length() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/arcEdge.C b/src/mesh/blockMesh/curvedEdges/arcEdge.C index afb62a8f8b437daaf7ba5fa734d6b07b653ba1f2..21143ac43a5bcd6e39a4e09a79c247aff0e8e935 100644 --- a/src/mesh/blockMesh/curvedEdges/arcEdge.C +++ b/src/mesh/blockMesh/curvedEdges/arcEdge.C @@ -61,7 +61,7 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle() scalar fact = 0.5*(bsqr - adotb)/denom; - vector centre = 0.5*a + fact*((a ^ b) ^ a); + point centre = 0.5*a + fact*((a ^ b) ^ a); centre += p1_; @@ -71,11 +71,10 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle() vector r3(p3_ - centre); // find angles - scalar tmp = (r3&r1)/(mag(r3)*mag(r1)); - angle_ = radToDeg(acos(tmp)); + angle_ = radToDeg(acos((r3 & r1)/(mag(r3) * mag(r1)))); // check if the vectors define an exterior or an interior arcEdge - if (((r1 ^ r2)&(r1 ^ r3)) < 0.0) + if (((r1 ^ r2) & (r1 ^ r3)) < 0.0) { angle_ = 360.0 - angle_; } @@ -99,7 +98,7 @@ Foam::cylindricalCS Foam::arcEdge::calcAngle() radius_ = mag(r3); // set up and return the local coordinate system - return cylindricalCS("tmpCS", centre, tempAxis, r1); + return cylindricalCS("arcEdgeCS", centre, tempAxis, r1); } @@ -133,7 +132,7 @@ Foam::arcEdge::arcEdge(const pointField& points, Istream& is) // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::arcEdge::position(const scalar lambda) const +Foam::point Foam::arcEdge::position(const scalar lambda) const { if (lambda < 0 || lambda > 1) { @@ -146,7 +145,7 @@ Foam::vector Foam::arcEdge::position(const scalar lambda) const { return p1_; } - else if (lambda > 1-SMALL) + else if (lambda > 1 - SMALL) { return p3_; } diff --git a/src/mesh/blockMesh/curvedEdges/arcEdge.H b/src/mesh/blockMesh/curvedEdges/arcEdge.H index da96d150fc0803f0b6fecb6c50d31b072ff17a35..194e5c634bb39d147081af5e25624b2fe9f91de6 100644 --- a/src/mesh/blockMesh/curvedEdges/arcEdge.H +++ b/src/mesh/blockMesh/curvedEdges/arcEdge.H @@ -54,15 +54,16 @@ class arcEdge { // Private data - vector p1_, p2_, p3_; + point p1_, p2_, p3_; + cylindricalCS cs_; scalar angle_; scalar radius_; - cylindricalCS cs_; - - cylindricalCS calcAngle(); // Private Member Functions + //- Calculate the coordinate system, angle and radius + cylindricalCS calcAngle(); + //- Disallow default bitwise copy construct arcEdge(const arcEdge&); @@ -96,9 +97,9 @@ public: // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/curvedEdge.C b/src/mesh/blockMesh/curvedEdges/curvedEdge.C index 4b80a221ddd16c78fead7a889344db6d4454b189..35e58b7692b96e1573f900e6554cd664d90bb799 100644 --- a/src/mesh/blockMesh/curvedEdges/curvedEdge.C +++ b/src/mesh/blockMesh/curvedEdges/curvedEdge.C @@ -108,27 +108,27 @@ Foam::autoPtr<Foam::curvedEdge> Foam::curvedEdge::New // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::pointField Foam::curvedEdge::knotlist +Foam::pointField Foam::curvedEdge::appendEndPoints ( const pointField& points, const label start, const label end, - const pointField& otherknots + const pointField& otherKnots ) { - pointField newPoints(otherknots.size() + 2); + pointField allKnots(otherKnots.size() + 2); // start/end knots - newPoints[0] = points[start]; - newPoints[otherknots.size() + 1] = points[end]; + allKnots[0] = points[start]; + allKnots[otherKnots.size() + 1] = points[end]; // intermediate knots - forAll(otherknots, knotI) + forAll(otherKnots, knotI) { - newPoints[knotI+1] = otherknots[knotI]; + allKnots[knotI+1] = otherKnots[knotI]; } - return newPoints; + return allKnots; } diff --git a/src/mesh/blockMesh/curvedEdges/curvedEdge.H b/src/mesh/blockMesh/curvedEdges/curvedEdge.H index 49ad047e45a759603d41141e38ee6b010ccf9979..bd1ad3246ada4444ef88cd3dabdfd914d695c329 100644 --- a/src/mesh/blockMesh/curvedEdges/curvedEdge.H +++ b/src/mesh/blockMesh/curvedEdges/curvedEdge.H @@ -26,8 +26,8 @@ Class Foam::curvedEdge Description - Define a curved edge in space that is parameterised for - 0<lambda<1 from the beginning to the end point. + Define a curved edge that is parameterized for 0<lambda<1 + between the start and end point. SourceFiles curvedEdge.C @@ -62,6 +62,19 @@ protected: const label start_; const label end_; + // Protected Member Functions + + //- Return a complete point field by appending the start/end points + // to the given list + static pointField appendEndPoints + ( + const pointField&, + const label start, + const label end, + const pointField& otherKnots + ); + + public: //- Runtime type information @@ -136,23 +149,13 @@ public: // - -1: same edge, but different orientation inline int compare(const label start, const label end) const; - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - virtual vector position(const scalar) const = 0; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + virtual point position(const scalar) const = 0; //- Return the length of the curve virtual scalar length() const = 0; - //- Return a complete knotList by adding the start/end points - // to the given list - static pointField knotlist - ( - const pointField&, - const label start, - const label end, - const pointField& otherknots - ); - // Member operators diff --git a/src/mesh/blockMesh/curvedEdges/curvedEdgeI.H b/src/mesh/blockMesh/curvedEdges/curvedEdgeI.H index 6d3de4e554009922cc29918ad31a41d5369a3e62..ade7db175bfe2e0ada926c04f0fa38b65ac25921 100644 --- a/src/mesh/blockMesh/curvedEdges/curvedEdgeI.H +++ b/src/mesh/blockMesh/curvedEdges/curvedEdgeI.H @@ -67,7 +67,4 @@ inline int Foam::curvedEdge::compare(const edge& e) const } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/BSpline.C b/src/mesh/blockMesh/curvedEdges/legacy/BSpline.C similarity index 96% rename from src/mesh/blockMesh/curvedEdges/BSpline.C rename to src/mesh/blockMesh/curvedEdges/legacy/BSpline.C index 3e166f25cb9650f17a5271df613e47cad7db686e..cd7ee90ca1e195e9270034943ac06a819038816d 100644 --- a/src/mesh/blockMesh/curvedEdges/BSpline.C +++ b/src/mesh/blockMesh/curvedEdges/legacy/BSpline.C @@ -115,13 +115,13 @@ Foam::BSpline::BSpline // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::BSpline::realPosition(const scalar mu) const +Foam::point Foam::BSpline::realPosition(const scalar mu) const { return spline::position(mu); } -Foam::vector Foam::BSpline::position(const scalar mu) const +Foam::point Foam::BSpline::position(const scalar mu) const { return spline::position((1.0/(nKnots() - 1))*(1.0 + mu*(nKnots() - 3))); } diff --git a/src/mesh/blockMesh/curvedEdges/BSpline.H b/src/mesh/blockMesh/curvedEdges/legacy/BSpline.H similarity index 89% rename from src/mesh/blockMesh/curvedEdges/BSpline.H rename to src/mesh/blockMesh/curvedEdges/legacy/BSpline.H index ace98b4e21097bd7e0f90be743683601810a9974..5ba6423ea12d4a6cdee287e9dd1803d6b13166c7 100644 --- a/src/mesh/blockMesh/curvedEdges/BSpline.H +++ b/src/mesh/blockMesh/curvedEdges/legacy/BSpline.H @@ -82,13 +82,13 @@ public: // Member Functions - //- Return the real position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector realPosition(const scalar lambda) const; + //- Return the real point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point realPosition(const scalar lambda) const; - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar lambda) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar lambda) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/polySplineEdge.C b/src/mesh/blockMesh/curvedEdges/legacy/polySplineEdge.C similarity index 92% rename from src/mesh/blockMesh/curvedEdges/polySplineEdge.C rename to src/mesh/blockMesh/curvedEdges/legacy/polySplineEdge.C index 8e4f0f90b3c324888d95bb7c0de7de2f44879664..bf370cd7d3fe0fee5ebb1f554fd430a032b836a3 100644 --- a/src/mesh/blockMesh/curvedEdges/polySplineEdge.C +++ b/src/mesh/blockMesh/curvedEdges/legacy/polySplineEdge.C @@ -56,7 +56,7 @@ Foam::pointField Foam::polySplineEdge::intervening { BSpline spl ( - knotlist(points_, start_, end_, otherknots), + appendEndPoints(curvedEdge::points_, start_, end_, otherknots), fstend, sndend ); @@ -73,7 +73,7 @@ Foam::pointField Foam::polySplineEdge::intervening interval /= nBetweenKnots + 1; pointField ans(nSize); - ans[0] = points_[start_]; + ans[0] = curvedEdge::points_[start_]; register scalar index(init); for (register label i=1; i<nSize-1; i++) @@ -82,7 +82,7 @@ Foam::pointField Foam::polySplineEdge::intervening ans[i] = spl.realPosition(index); } - ans[nSize-1] = points_[end_]; + ans[nSize-1] = curvedEdge::points_[end_]; return ans; } @@ -128,14 +128,14 @@ Foam::polySplineEdge::polySplineEdge vector fstend(is); vector sndend(is); - controlPoints_ = intervening(otherKnots_, nInterKnots, fstend, sndend); - calcDistances(); + polyLine::points_ = intervening(otherKnots_, nInterKnots, fstend, sndend); + calcParam(); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::polySplineEdge::position(const scalar mu) const +Foam::point Foam::polySplineEdge::position(const scalar mu) const { return polyLine::position(mu); } diff --git a/src/mesh/blockMesh/curvedEdges/polySplineEdge.H b/src/mesh/blockMesh/curvedEdges/legacy/polySplineEdge.H similarity index 91% rename from src/mesh/blockMesh/curvedEdges/polySplineEdge.H rename to src/mesh/blockMesh/curvedEdges/legacy/polySplineEdge.H index b133b9e45dd15de1f261e118593993bb8b2ca02c..dcb5fc2dfe97da62bbbf423196dc84a7839b86cb 100644 --- a/src/mesh/blockMesh/curvedEdges/polySplineEdge.H +++ b/src/mesh/blockMesh/curvedEdges/legacy/polySplineEdge.H @@ -26,7 +26,7 @@ Class Foam::polySplineEdge Description - A spline representation via a polyLine + A curvedEdge interface for B-splines. SourceFiles polySplineEdge.C @@ -90,16 +90,16 @@ public: polySplineEdge(const pointField&, Istream&); - // Destructor - - virtual ~polySplineEdge(){} + //- Destructor + virtual ~polySplineEdge() + {} // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar mu) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar mu) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/simpleSplineEdge.C b/src/mesh/blockMesh/curvedEdges/legacy/simpleSplineEdge.C similarity index 90% rename from src/mesh/blockMesh/curvedEdges/simpleSplineEdge.C rename to src/mesh/blockMesh/curvedEdges/legacy/simpleSplineEdge.C index 3132a1f7eaff97f24178dc84aef9d1f774ab12e9..c5dc9e6d9c866015c02c0914640413a5b72f3bc0 100644 --- a/src/mesh/blockMesh/curvedEdges/simpleSplineEdge.C +++ b/src/mesh/blockMesh/curvedEdges/legacy/simpleSplineEdge.C @@ -48,7 +48,7 @@ Foam::simpleSplineEdge::simpleSplineEdge ) : curvedEdge(points, start, end), - BSpline(knotlist(points, start, end, otherknots)) + BSpline(appendEndPoints(points, start, end, otherknots)) {} @@ -63,20 +63,20 @@ Foam::simpleSplineEdge::simpleSplineEdge ) : curvedEdge(points, start, end), - BSpline(knotlist(points, start, end, otherknots), fstend, sndend) + BSpline(appendEndPoints(points, start, end, otherknots), fstend, sndend) {} Foam::simpleSplineEdge::simpleSplineEdge(const pointField& points, Istream& is) : curvedEdge(points, is), - BSpline(knotlist(points, start_, end_, pointField(is))) + BSpline(appendEndPoints(points, start_, end_, pointField(is))) {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::simpleSplineEdge::position(const scalar mu) const +Foam::point Foam::simpleSplineEdge::position(const scalar mu) const { return BSpline::position(mu); } diff --git a/src/mesh/blockMesh/curvedEdges/simpleSplineEdge.H b/src/mesh/blockMesh/curvedEdges/legacy/simpleSplineEdge.H similarity index 93% rename from src/mesh/blockMesh/curvedEdges/simpleSplineEdge.H rename to src/mesh/blockMesh/curvedEdges/legacy/simpleSplineEdge.H index 4c6df2a5095a3893f0a609cb8f4c4134b204b4b8..91acf6fdee535928dd7589b8c50b3bcc017bba73 100644 --- a/src/mesh/blockMesh/curvedEdges/simpleSplineEdge.H +++ b/src/mesh/blockMesh/curvedEdges/legacy/simpleSplineEdge.H @@ -26,7 +26,7 @@ Class Foam::simpleSplineEdge Description - The actual access class for Bspline + A curvedEdge interface for B-splines. SourceFiles simpleSplineEdge.C @@ -102,9 +102,9 @@ public: // Member Functions - //- Return the position of a point on the simple spline curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar mu) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the simple spline curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/spline.C b/src/mesh/blockMesh/curvedEdges/legacy/spline.C similarity index 96% rename from src/mesh/blockMesh/curvedEdges/spline.C rename to src/mesh/blockMesh/curvedEdges/legacy/spline.C index cddf6fa8edaad6653612d396760d69ad009820d5..4f7ab8e195e33f12144a2ba90bc264fb5e13bb67 100644 --- a/src/mesh/blockMesh/curvedEdges/spline.C +++ b/src/mesh/blockMesh/curvedEdges/legacy/spline.C @@ -72,9 +72,9 @@ Foam::spline::spline(const pointField& knotPoints) // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::spline::position(const scalar mu) const +Foam::point Foam::spline::position(const scalar mu) const { - vector loc(vector::zero); + point loc(point::zero); for (register label i=0; i < knots_.size(); i++) { diff --git a/src/mesh/blockMesh/curvedEdges/spline.H b/src/mesh/blockMesh/curvedEdges/legacy/spline.H similarity index 90% rename from src/mesh/blockMesh/curvedEdges/spline.H rename to src/mesh/blockMesh/curvedEdges/legacy/spline.H index 74e73afdc652c00efe762d0d72b75cbb23ca7800..1055690933919980b3b5fa9e1959210dba04d165 100644 --- a/src/mesh/blockMesh/curvedEdges/spline.H +++ b/src/mesh/blockMesh/curvedEdges/legacy/spline.H @@ -81,6 +81,13 @@ public: // Access + //- Return the knot points in the spline + const pointField& knotPoints() const + { + return knots_; + } + + //- Return the number of knots in the spline label nKnots() const { @@ -88,9 +95,9 @@ public: } - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the spline curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/lineDivide.H b/src/mesh/blockMesh/curvedEdges/lineDivide.H index 37f1d9ba5c3670ea55ecb7295bf11acc8db9f129..1b3f33e69da6184b76f2b8adb699d360a749184f 100644 --- a/src/mesh/blockMesh/curvedEdges/lineDivide.H +++ b/src/mesh/blockMesh/curvedEdges/lineDivide.H @@ -55,14 +55,14 @@ class lineDivide // Private data pointField points_; + scalarList divisions_; public: // Constructors - //- Construct from components - // discretization and expansion ration + //- Construct from components with discretization and expansion ratio lineDivide ( const curvedEdge&, diff --git a/src/mesh/blockMesh/curvedEdges/lineEdge.C b/src/mesh/blockMesh/curvedEdges/lineEdge.C index 72e173ea2ce3e6b88d953b1006de372cc78a9b80..586d495d491d8e0a556a0d96f81e630fe308a35b 100644 --- a/src/mesh/blockMesh/curvedEdges/lineEdge.C +++ b/src/mesh/blockMesh/curvedEdges/lineEdge.C @@ -46,23 +46,23 @@ Foam::lineEdge::lineEdge const label end ) : - curvedEdge(points, start, end), - startPoint_(points_[start_]), - direction_(points_[end_] - points_[start_]) + curvedEdge(points, start, end) {} Foam::lineEdge::lineEdge(const pointField& points, Istream& is) : - curvedEdge(points, is), - startPoint_(points_[start_]), - direction_(points_[end_] - points_[start_]) + curvedEdge(points, is) {} +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * * // + +Foam::lineEdge::~lineEdge() +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::lineEdge::position(const scalar lambda) const +Foam::point Foam::lineEdge::position(const scalar lambda) const { if (lambda < 0 || lambda > 1) { @@ -71,13 +71,13 @@ Foam::vector Foam::lineEdge::position(const scalar lambda) const << abort(FatalError); } - return startPoint_ + lambda*direction_; + return points_[start_] + lambda * (points_[end_] - points_[start_]); } Foam::scalar Foam::lineEdge::length() const { - return mag(direction_); + return mag(points_[end_] - points_[start_]); } diff --git a/src/mesh/blockMesh/curvedEdges/lineEdge.H b/src/mesh/blockMesh/curvedEdges/lineEdge.H index a601830f7f70e6449110a5949ef44cf41a734855..3d295912325ae204df275b720707defdb416a62a 100644 --- a/src/mesh/blockMesh/curvedEdges/lineEdge.H +++ b/src/mesh/blockMesh/curvedEdges/lineEdge.H @@ -26,7 +26,7 @@ Class Foam::lineEdge Description - Defines a straight line between the start point and the end point. + A straight edge between the start point and the end point. SourceFiles lineEdge.C @@ -52,14 +52,6 @@ class lineEdge : public curvedEdge { - // Private data - - //- Avoid repetitive calculation of the start point - const vector startPoint_; - - //- Avoid repetitive calculation of the direction (end - start) - const vector direction_; - // Private Member Functions //- Disallow default bitwise copy construct @@ -68,7 +60,6 @@ class lineEdge //- Disallow default bitwise assignment void operator=(const lineEdge&); - public: //- Runtime type information @@ -79,20 +70,19 @@ public: //- Construct from components lineEdge(const pointField&, const label start, const label end); - //- Construct from Istream setting pointsList + //- Construct from Istream with a pointField lineEdge(const pointField&, Istream&); - // Destructor - - virtual ~lineEdge(){} + //- Destructor + virtual ~lineEdge(); // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/polyLine.C b/src/mesh/blockMesh/curvedEdges/polyLine.C index e8872de6a2b983bddc0fb2c99e9a6cc0ba9f60c7..08083041f2d5c7c82bb8b0fb86af14f3120d1468 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLine.C +++ b/src/mesh/blockMesh/curvedEdges/polyLine.C @@ -29,29 +29,26 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// calcDistances generates the distances_ lookup table (cumulative -// distance along the line) from the individual vectors to the points - -void Foam::polyLine::calcDistances() +void Foam::polyLine::calcParam() { - distances_.setSize(controlPoints_.size()); + param_.setSize(points_.size()); - if (distances_.size()) + if (param_.size()) { - distances_[0] = 0.0; + param_[0] = 0.0; - for (label i=1; i<distances_.size(); i++) + for (label i=1; i < param_.size(); i++) { - distances_[i] = distances_[i-1] + - mag(controlPoints_[i] - controlPoints_[i-1]); + param_[i] = param_[i-1] + mag(points_[i] - points_[i-1]); } - // normalize - lineLength_ = distances_[distances_.size()-1]; - for (label i=1; i<distances_.size(); i++) + // normalize on the interval 0-1 + lineLength_ = param_.last(); + for (label i=1; i < param_.size() - 1; i++) { - distances_[i] /= lineLength_; + param_[i] /= lineLength_; } + param_.last() = 1.0; } else { @@ -65,20 +62,75 @@ void Foam::polyLine::calcDistances() Foam::polyLine::polyLine(const pointField& ps) : - controlPoints_(ps), - distances_(0), - lineLength_(0.0) + points_(ps), + lineLength_(0.0), + param_(0) { - calcDistances(); + calcParam(); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::polyLine::position(const scalar lambda) const +const Foam::pointField& Foam::polyLine::points() const +{ + return points_; +} + + +Foam::label Foam::polyLine::nSegments() const +{ + return points_.size()-1; +} + + +Foam::label Foam::polyLine::localParameter(scalar& lambda) const { // check range of lambda + if (lambda < 0 || lambda > 1) + { + FatalErrorIn("polyLine::localParameter(scalar&)") + << "Parameter out-of-range, " + << "lambda = " << lambda + << abort(FatalError); + } + // check endpoints + if (lambda < SMALL) + { + lambda = 0; + return 0; + } + else if (lambda > 1 - SMALL) + { + lambda = 1; + return nSegments(); + } + + // search table of cumulative distances to find which line-segment + // we are on. Check the upper bound. + + label segmentI = 1; + while (param_[segmentI] < lambda) + { + segmentI++; + } + segmentI--; // we want the corresponding lower bound + + // the local parameter [0-1] on this line segment + lambda = + ( + ( lambda - param_[segmentI] ) + / ( param_[segmentI+1] - param_[segmentI] ) + ); + + return segmentI; +} + + +Foam::point Foam::polyLine::position(const scalar lambda) const +{ + // check range of lambda if (lambda < 0 || lambda > 1) { FatalErrorIn("polyLine::position(const scalar)") @@ -87,37 +139,36 @@ Foam::vector Foam::polyLine::position(const scalar lambda) const << abort(FatalError); } - // Quick calc of endpoints - + // check endpoints if (lambda < SMALL) { - return controlPoints_[0]; + return points_[0]; } else if (lambda > 1 - SMALL) { - return controlPoints_[controlPoints_.size()-1]; + return points_.last(); } - // search table of cumulative distance to find which linesegment we - // are on + // search table of cumulative distances to find which line-segment + // we are on. Check the upper bound. - label i(0); - do + label segmentI = 1; + while (param_[segmentI] < lambda) { - i++; - } while (distances_[i] < lambda); - - i--; // we overshot! - - // construct position vector - scalar offsetDist = - (lambda - distances_[i]) - /(distances_[i+1] - distances_[i]); + ++segmentI; + } + --segmentI; // we now want the lower bound - vector offsetV = controlPoints_[i+1] - controlPoints_[i]; - return controlPoints_[i] + offsetDist*offsetV; + // linear interpolation + return + ( + points_[segmentI] + + ( points_[segmentI+1] - points_[segmentI] ) + * ( lambda - param_[segmentI] ) + / ( param_[segmentI+1] - param_[segmentI] ) + ); } diff --git a/src/mesh/blockMesh/curvedEdges/polyLine.H b/src/mesh/blockMesh/curvedEdges/polyLine.H index 4ef97f30525b6368e3f9a0f7ddb6a4ef5107bd5b..ea8c59e389bf08cfa5a6d28c1cd5d1503342e107 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLine.H +++ b/src/mesh/blockMesh/curvedEdges/polyLine.H @@ -26,10 +26,8 @@ Class Foam::polyLine Description - Defines a curvedEdge in terms of a series of straight line segments. - - This is the basic polyLine class which implements just the line - (no topology - it is not derived from curvedEdge) + A series of straight line segments, which can also be interpreted as + a series of control points for splines, etc. SourceFiles polyLine.C @@ -66,15 +64,26 @@ protected: // Protected data - pointField controlPoints_; - scalarList distances_; + //- The control points or ends of each segments + pointField points_; + + //- The real line length scalar lineLength_; + //- The rational (0-1) cumulative parameter value for each point + scalarList param_; + // Protected member functions - void calcDistances(); + //- Precalculate the rational cumulative parameter value + // and the line-length + void calcParam(); + //- Return the line segment and the local parameter [0..1] + // corresponding to the global lambda [0..1] + label localParameter(scalar& lambda) const; + public: // Constructors @@ -85,9 +94,15 @@ public: // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar) const; + //- Return const-access to the control-points + const pointField& points() const; + + //- Return the number of line segments + label nSegments() const; + + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/polyLineEdge.C b/src/mesh/blockMesh/curvedEdges/polyLineEdge.C index 89029d1af97726cf6895650b32e8baaa8e1bf971..1f038a78a85af3e3812bb3b0b0bf93eaa2e5c7cc 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLineEdge.C +++ b/src/mesh/blockMesh/curvedEdges/polyLineEdge.C @@ -44,24 +44,30 @@ Foam::polyLineEdge::polyLineEdge const pointField& ps, const label start, const label end, - const pointField& otherpoints + const pointField& otherPoints ) : curvedEdge(ps, start, end), - polyLine(knotlist(ps, start, end, otherpoints)) + polyLine(appendEndPoints(ps, start_, end_, otherPoints)) {} Foam::polyLineEdge::polyLineEdge(const pointField& ps, Istream& is) : curvedEdge(ps, is), - polyLine(knotlist(ps, start_, end_, pointField(is))) + polyLine(appendEndPoints(ps, start_, end_, pointField(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::polyLineEdge::~polyLineEdge() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::vector Foam::polyLineEdge::position(const scalar lambda) const +Foam::point Foam::polyLineEdge::position(const scalar lambda) const { return polyLine::position(lambda); } diff --git a/src/mesh/blockMesh/curvedEdges/polyLineEdge.H b/src/mesh/blockMesh/curvedEdges/polyLineEdge.H index 532a91ad5d50c265ca3b42c76033a0d04fc4725c..e941bba716183daf3c111ae92bcb1925a781c2bf 100644 --- a/src/mesh/blockMesh/curvedEdges/polyLineEdge.H +++ b/src/mesh/blockMesh/curvedEdges/polyLineEdge.H @@ -26,8 +26,7 @@ Class Foam::polyLineEdge Description - Defines a curvedEdge in terms of a series of straight line segments. - This is the public face of polyLine + A curvedEdge defined in terms of a series of straight line segments. SourceFiles polyLineEdge.C @@ -84,16 +83,15 @@ public: polyLineEdge(const pointField&, Istream&); - // Destructor - - virtual ~polyLineEdge(){} + //- Destructor + virtual ~polyLineEdge(); // Member Functions - //- Return the position of a point on the curve given by - // the parameter 0 <= lambda <= 1 - vector position(const scalar lambda) const; + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + point position(const scalar lambda) const; //- Return the length of the curve scalar length() const; diff --git a/src/mesh/blockMesh/curvedEdges/splineEdge.C b/src/mesh/blockMesh/curvedEdges/splineEdge.C new file mode 100644 index 0000000000000000000000000000000000000000..810cd7dc9b87c912bc092c3ab5921e48505f1fde --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/splineEdge.C @@ -0,0 +1,86 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "splineEdge.H" +#include "addToRunTimeSelectionTable.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(splineEdge, 0); + addToRunTimeSelectionTable(curvedEdge, splineEdge, Istream); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::splineEdge::splineEdge +( + const pointField& points, + const label start, + const label end, + const pointField& otherknots +) +: + curvedEdge(points, start, end), + CatmullRomSpline(appendEndPoints(points, start, end, otherknots)) +{} + + +Foam::splineEdge::splineEdge(const pointField& points, Istream& is) +: + curvedEdge(points, is), + CatmullRomSpline(appendEndPoints(points, start_, end_, pointField(is))) +{ + token t(is); + is.putBack(t); + + // might have start/end tangents that we currently ignore + if (t == token::BEGIN_LIST) + { + vector fstend(is); + vector sndend(is); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::point Foam::splineEdge::position(const scalar mu) const +{ + return CatmullRomSpline::position(mu); +} + + +Foam::scalar Foam::splineEdge::length() const +{ + return CatmullRomSpline::length(); +} + + +// ************************************************************************* // diff --git a/src/mesh/blockMesh/curvedEdges/splineEdge.H b/src/mesh/blockMesh/curvedEdges/splineEdge.H new file mode 100644 index 0000000000000000000000000000000000000000..ba9501c20447b13857f7295724f8f18490f59e18 --- /dev/null +++ b/src/mesh/blockMesh/curvedEdges/splineEdge.H @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::splineEdge + +Description + A curvedEdge interface for Catmull-Rom splines. + +SourceFiles + splineEdge.C + +\*---------------------------------------------------------------------------*/ + +#ifndef splineEdge_H +#define splineEdge_H + +#include "curvedEdge.H" +#include "CatmullRomSpline.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class splineEdge Declaration +\*---------------------------------------------------------------------------*/ + +class splineEdge +: + public curvedEdge, + public CatmullRomSpline +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + splineEdge(const splineEdge&); + + //- Disallow default bitwise assignment + void operator=(const splineEdge&); + + +public: + + //- Runtime type information + TypeName("spline"); + + + // Constructors + + //- Construct from components + splineEdge + ( + const pointField&, + const label start, + const label end, + const pointField& otherKnots + ); + + //- Construct from Istream setting pointsList + splineEdge(const pointField&, Istream&); + + + // Destructor + + virtual ~splineEdge() + {} + + + // Member Functions + + //- Return the point position corresponding to the curve parameter + // 0 <= lambda <= 1 + virtual point position(const scalar) const; + + //- Return the length of the simple spline curve + virtual scalar length() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files index 272f3e067c27f459aaa1cdab2288d7c320fb16a8..ada844b5a5d274f209d64431dfc32e888cb92434 100644 --- a/src/meshTools/Make/files +++ b/src/meshTools/Make/files @@ -50,6 +50,7 @@ indexedOctree/treeDataCell.C indexedOctree/treeDataEdge.C indexedOctree/treeDataFace.C indexedOctree/treeDataPoint.C +indexedOctree/treeDataPrimitivePatchName.C indexedOctree/treeDataTriSurface.C searchableSurface = searchableSurface diff --git a/src/meshTools/Make/options b/src/meshTools/Make/options index 1d1560eb5a4b73f7c97f6644a30f146534b5bb5e..0ff22029260fd949e08c06a762e8352bcadf6d7c 100644 --- a/src/meshTools/Make/options +++ b/src/meshTools/Make/options @@ -1,6 +1,6 @@ EXE_INC = \ -I$(LIB_SRC)/triSurface/lnInclude \ - -I$(LIB_SRC)/decompositionMethods/decompositionMethods/lnInclude \ + -I$(LIB_SRC)/parallel/decompositionMethods/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude LIB_LIBS = \ diff --git a/src/meshTools/PointEdgeWave/PointEdgeWave.C b/src/meshTools/PointEdgeWave/PointEdgeWave.C index 81309490d5f31745c55629bd4dbf250c05a86f79..7dcaea3f85077b7b5237cbe304709414454d068c 100644 --- a/src/meshTools/PointEdgeWave/PointEdgeWave.C +++ b/src/meshTools/PointEdgeWave/PointEdgeWave.C @@ -994,7 +994,7 @@ Foam::label Foam::PointEdgeWave<Type>::iterate(const label maxIter) label iter = 0; - while(iter < maxIter) + while (iter < maxIter) { if (debug) { diff --git a/src/meshTools/cellClassification/cellClassification.C b/src/meshTools/cellClassification/cellClassification.C index 518fd5ae4a03e171ff1b85ab39a2bc935dabf7bd..58c1cfeb4670a2c0be316e365e103bb93134e2c5 100644 --- a/src/meshTools/cellClassification/cellClassification.C +++ b/src/meshTools/cellClassification/cellClassification.C @@ -683,7 +683,7 @@ Foam::label Foam::cellClassification::fillHangingCells { label nTotChanged = 0; - for(label iter = 0; iter < maxIter; iter++) + for (label iter = 0; iter < maxIter; iter++) { label nChanged = 0; @@ -740,7 +740,7 @@ Foam::label Foam::cellClassification::fillRegionEdges { label nTotChanged = 0; - for(label iter = 0; iter < maxIter; iter++) + for (label iter = 0; iter < maxIter; iter++) { // Get interface between meshType cells and non-meshType cells as a list // of faces and for each face the cell which is the meshType. @@ -809,7 +809,7 @@ Foam::label Foam::cellClassification::fillRegionPoints { label nTotChanged = 0; - for(label iter = 0; iter < maxIter; iter++) + for (label iter = 0; iter < maxIter; iter++) { // Get interface between meshType cells and non-meshType cells as a list // of faces and for each face the cell which is the meshType. diff --git a/src/meshTools/cellDist/cellDistFuncs.C b/src/meshTools/cellDist/cellDistFuncs.C index bca2841273c45d8782658aa9ef4526ac95dffbd8..76ec6eee355a5644a866ae445f173c9538de9a99 100644 --- a/src/meshTools/cellDist/cellDistFuncs.C +++ b/src/meshTools/cellDist/cellDistFuncs.C @@ -121,7 +121,7 @@ Foam::scalar Foam::cellDistFuncs::smallestDist scalar minDist = GREAT; minFaceI = -1; - for(label wallFaceI = 0; wallFaceI < nWallFaces; wallFaceI++) + for (label wallFaceI = 0; wallFaceI < nWallFaces; wallFaceI++) { label patchFaceI = wallFaces[wallFaceI]; diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C index e16b8204f7c4ac72211ed3783173bb4c9312e385..0da60686813aa8a54acdeed7eb12a11553562ad8 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C @@ -145,44 +145,49 @@ Foam::directMappedPolyPatch::~directMappedPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // //- Initialise the calculation of the patch geometry -void Foam::directMappedPolyPatch::initGeometry() +void Foam::directMappedPolyPatch::initGeometry(PstreamBuffers& pBufs) { - polyPatch::initGeometry(); - directMappedPatchBase::clearOut(); + polyPatch::initGeometry(pBufs); } //- Calculate the patch geometry -void Foam::directMappedPolyPatch::calcGeometry() +void Foam::directMappedPolyPatch::calcGeometry(PstreamBuffers& pBufs) { - polyPatch::calcGeometry(); + polyPatch::calcGeometry(pBufs); directMappedPatchBase::clearOut(); } //- Initialise the patches for moving points -void Foam::directMappedPolyPatch::initMovePoints(const pointField& p) +void Foam::directMappedPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::initMovePoints(p); - directMappedPatchBase::clearOut(); + polyPatch::initMovePoints(pBufs, p); } //- Correct patches after moving points -void Foam::directMappedPolyPatch::movePoints(const pointField& p) +void Foam::directMappedPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::movePoints(p); + polyPatch::movePoints(pBufs, p); directMappedPatchBase::clearOut(); } //- Initialise the update of the patch topology -void Foam::directMappedPolyPatch::initUpdateMesh() +void Foam::directMappedPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - polyPatch::initUpdateMesh(); - directMappedPatchBase::clearOut(); + polyPatch::initUpdateMesh(pBufs); } //- Update of the patch topology -void Foam::directMappedPolyPatch::updateMesh() +void Foam::directMappedPolyPatch::updateMesh(PstreamBuffers& pBufs) { - polyPatch::updateMesh(); + polyPatch::updateMesh(pBufs); directMappedPatchBase::clearOut(); } diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H index 8cb5907c9514da934a6e05e6409bf31e9fece070..654c3470a481d97343027883a86333ea509898b3 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H @@ -65,22 +65,22 @@ class directMappedPolyPatch protected: //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C index 6d6038430d21ad7189b8b901e1dd4309ef37f735..c4295a31a433550ddb49796cc4af29172073ddcc 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C @@ -150,44 +150,49 @@ Foam::directMappedWallPolyPatch::~directMappedWallPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // //- Initialise the calculation of the patch geometry -void Foam::directMappedWallPolyPatch::initGeometry() +void Foam::directMappedWallPolyPatch::initGeometry(PstreamBuffers& pBufs) { - wallPolyPatch::initGeometry(); - directMappedPatchBase::clearOut(); + wallPolyPatch::initGeometry(pBufs); } //- Calculate the patch geometry -void Foam::directMappedWallPolyPatch::calcGeometry() +void Foam::directMappedWallPolyPatch::calcGeometry(PstreamBuffers& pBufs) { - wallPolyPatch::calcGeometry(); + wallPolyPatch::calcGeometry(pBufs); directMappedPatchBase::clearOut(); } //- Initialise the patches for moving points -void Foam::directMappedWallPolyPatch::initMovePoints(const pointField& p) +void Foam::directMappedWallPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - wallPolyPatch::initMovePoints(p); - directMappedPatchBase::clearOut(); + wallPolyPatch::initMovePoints(pBufs, p); } //- Correct patches after moving points -void Foam::directMappedWallPolyPatch::movePoints(const pointField& p) +void Foam::directMappedWallPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - wallPolyPatch::movePoints(p); + wallPolyPatch::movePoints(pBufs, p); directMappedPatchBase::clearOut(); } //- Initialise the update of the patch topology -void Foam::directMappedWallPolyPatch::initUpdateMesh() +void Foam::directMappedWallPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - wallPolyPatch::initUpdateMesh(); - directMappedPatchBase::clearOut(); + wallPolyPatch::initUpdateMesh(pBufs); } //- Update of the patch topology -void Foam::directMappedWallPolyPatch::updateMesh() +void Foam::directMappedWallPolyPatch::updateMesh(PstreamBuffers& pBufs) { - wallPolyPatch::updateMesh(); + wallPolyPatch::updateMesh(pBufs); directMappedPatchBase::clearOut(); } diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H index 0a2f5bdfd37f2536ed6feae5161df29d8d755614..b0657164da9304bc6db68d48c05dd74c63253745 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H @@ -65,22 +65,22 @@ class directMappedWallPolyPatch protected: //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: diff --git a/src/meshTools/indexedOctree/treeDataPrimitivePatch.C b/src/meshTools/indexedOctree/treeDataPrimitivePatch.C new file mode 100644 index 0000000000000000000000000000000000000000..97b7821b1e7022c18698aaaab012e4fea25dcf9d --- /dev/null +++ b/src/meshTools/indexedOctree/treeDataPrimitivePatch.C @@ -0,0 +1,567 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "treeDataPrimitivePatch.H" +#include "indexedOctree.H" +#include "triangleFuncs.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +Foam::scalar +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +tolSqr = sqr(1E-6); + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +Foam::treeBoundBox +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +calcBb +( + const pointField& points, + const face& f +) +{ + treeBoundBox bb(points[f[0]], points[f[0]]); + + for (label fp = 1; fp < f.size(); fp++) + { + const point& p = points[f[fp]]; + + bb.min() = min(bb.min(), p); + bb.max() = max(bb.max(), p); + } + return bb; +} + + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +void Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +update() +{ + if (cacheBb_) + { + bbs_.setSize(patch_.size()); + + forAll(patch_, i) + { + bbs_[i] = calcBb(patch_.points(), patch_[i]); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +treeDataPrimitivePatch +( + const bool cacheBb, + const PrimitivePatch<Face, FaceList, PointField, PointType>& patch +) +: + patch_(patch), + cacheBb_(cacheBb) +{ + update(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +Foam::pointField +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +points() const +{ + pointField cc(patch_.size()); + + forAll(patch_, i) + { + cc[i] = patch_[i].centre(patch_.points()); + } + + return cc; +} + + +//- Get type (inside,outside,mixed,unknown) of point w.r.t. surface. +// Only makes sense for closed surfaces. +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +Foam::label +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +getVolumeType +( + const indexedOctree + < + treeDataPrimitivePatch + < + Face, + FaceList, + PointField, + PointType + > + >& oc, + const point& sample +) const +{ + // Need to determine whether sample is 'inside' or 'outside' + // Done by finding nearest face. This gives back a face which is + // guaranteed to contain nearest point. This point can be + // - in interior of face: compare to face normal + // - on edge of face: compare to edge normal + // - on point of face: compare to point normal + // Unfortunately the octree does not give us back the intersection point + // or where on the face it has hit so we have to recreate all that + // information. + + + // Find nearest face to sample + pointIndexHit info = oc.findNearest(sample, sqr(GREAT)); + + if (info.index() == -1) + { + FatalErrorIn + ( + "treeDataPrimitivePatch::getSampleType" + "(indexedOctree<treeDataPrimitivePatch>&, const point&)" + ) << "Could not find " << sample << " in octree." + << abort(FatalError); + } + + + // Get actual intersection point on face + label faceI = info.index(); + + if (debug & 2) + { + Pout<< "getSampleType : sample:" << sample + << " nearest face:" << faceI; + } + + const pointField& points = patch_.localPoints(); + const face& f = patch_.localFaces()[faceI]; + + // Retest to classify where on face info is. Note: could be improved. We + // already have point. + + pointHit curHit = f.nearestPoint(sample, points); + const vector area = f.normal(points); + const point& curPt = curHit.rawPoint(); + + // + // 1] Check whether sample is above face + // + + if (curHit.hit()) + { + // Nearest point inside face. Compare to face normal. + + if (debug & 2) + { + Pout<< " -> face hit:" << curPt + << " comparing to face normal " << area << endl; + } + return indexedOctree<treeDataPrimitivePatch>::getSide + ( + area, + sample - curPt + ); + } + + if (debug & 2) + { + Pout<< " -> face miss:" << curPt; + } + + // + // 2] Check whether intersection is on one of the face vertices or + // face centre + // + + const scalar typDimSqr = mag(area) + VSMALL; + + forAll(f, fp) + { + if ((magSqr(points[f[fp]] - curPt)/typDimSqr) < tolSqr) + { + // Face intersection point equals face vertex fp + + // Calculate point normal (wrong: uses face normals instead of + // triangle normals) + + return indexedOctree<treeDataPrimitivePatch>::getSide + ( + patch_.pointNormals()[f[fp]], + sample - curPt + ); + } + } + + const point fc(f.centre(points)); + + if ((magSqr(fc - curPt)/typDimSqr) < tolSqr) + { + // Face intersection point equals face centre. Normal at face centre + // is already average of face normals + + if (debug & 2) + { + Pout<< " -> centre hit:" << fc + << " distance:" << magSqr(fc - curPt)/typDimSqr << endl; + } + + return indexedOctree<treeDataPrimitivePatch>::getSide + ( + area, + sample - curPt + ); + } + + + + // + // 3] Get the 'real' edge the face intersection is on + // + + const labelList& fEdges = patch_.faceEdges()[faceI]; + + forAll(fEdges, fEdgeI) + { + label edgeI = fEdges[fEdgeI]; + const edge& e = patch_.edges()[edgeI]; + + pointHit edgeHit = e.line(points).nearestDist(sample); + + if ((magSqr(edgeHit.rawPoint() - curPt)/typDimSqr) < tolSqr) + { + // Face intersection point lies on edge e + + // Calculate edge normal (wrong: uses face normals instead of + // triangle normals) + const labelList& eFaces = patch_.edgeFaces()[edgeI]; + + vector edgeNormal(vector::zero); + + forAll(eFaces, i) + { + edgeNormal += patch_.faceNormal()[eFaces[i]]; + } + + if (debug & 2) + { + Pout<< " -> real edge hit point:" << edgeHit.rawPoint() + << " comparing to edge normal:" << edgeNormal + << endl; + } + + // Found face intersection point on this edge. Compare to edge + // normal + return indexedOctree<treeDataPrimitivePatch>::getSide + ( + edgeNormal, + sample - curPt + ); + } + } + + + // + // 4] Get the internal edge the face intersection is on + // + + forAll(f, fp) + { + pointHit edgeHit = linePointRef + ( + points[f[fp]], + fc + ).nearestDist(sample); + + if ((magSqr(edgeHit.rawPoint() - curPt)/typDimSqr) < tolSqr) + { + // Face intersection point lies on edge between two face triangles + + // Calculate edge normal as average of the two triangle normals + vector e = points[f[fp]] - fc; + vector ePrev = points[f[f.rcIndex(fp)]] - fc; + vector eNext = points[f[f.fcIndex(fp)]] - fc; + + vector nLeft = ePrev ^ e; + nLeft /= mag(nLeft) + VSMALL; + + vector nRight = e ^ eNext; + nRight /= mag(nRight) + VSMALL; + + if (debug & 2) + { + Pout<< " -> internal edge hit point:" << edgeHit.rawPoint() + << " comparing to edge normal " + << 0.5*(nLeft + nRight) + << endl; + } + + // Found face intersection point on this edge. Compare to edge + // normal + return indexedOctree<treeDataPrimitivePatch>::getSide + ( + 0.5*(nLeft + nRight), + sample - curPt + ); + } + } + + if (debug & 2) + { + Pout<< "Did not find sample " << sample + << " anywhere related to nearest face " << faceI << endl + << "Face:"; + + forAll(f, fp) + { + Pout<< " vertex:" << f[fp] << " coord:" << points[f[fp]] + << endl; + } + } + + // Can't determine status of sample with respect to nearest face. + // Either + // - tolerances are wrong. (if e.g. face has zero area) + // - or (more likely) surface is not closed. + + return indexedOctree<treeDataPrimitivePatch>::UNKNOWN; +} + + +// Check if any point on shape is inside cubeBb. +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +bool +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +overlaps +( + const label index, + const treeBoundBox& cubeBb +) const +{ + // 1. Quick rejection: bb does not intersect face bb at all + if (cacheBb_) + { + if (!cubeBb.overlaps(bbs_[index])) + { + return false; + } + } + else + { + if (!cubeBb.overlaps(calcBb(patch_.points(), patch_[index]))) + { + return false; + } + } + + + // 2. Check if one or more face points inside + + const pointField& points = patch_.points(); + const face& f = patch_[index]; + + forAll(f, fp) + { + if (cubeBb.contains(points[f[fp]])) + { + return true; + } + } + + // 3. Difficult case: all points are outside but connecting edges might + // go through cube. Use triangle-bounding box intersection. + const point fc = f.centre(points); + + forAll(f, fp) + { + bool triIntersects = triangleFuncs::intersectBb + ( + points[f[fp]], + points[f[f.fcIndex(fp)]], + fc, + cubeBb + ); + + if (triIntersects) + { + return true; + } + } + return false; +} + + +// Calculate nearest point to sample. Updates (if any) nearestDistSqr, minIndex, +// nearestPoint. +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +void +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +findNearest +( + const labelList& indices, + const point& sample, + + scalar& nearestDistSqr, + label& minIndex, + point& nearestPoint +) const +{ + const pointField& points = patch_.points(); + + forAll(indices, i) + { + label index = indices[i]; + + const face& f = patch_[index]; + + pointHit nearHit = f.nearestPoint(sample, points); + scalar distSqr = sqr(nearHit.distance()); + + if (distSqr < nearestDistSqr) + { + nearestDistSqr = distSqr; + minIndex = index; + nearestPoint = nearHit.rawPoint(); + } + } +} + + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> +bool +Foam::treeDataPrimitivePatch<Face, FaceList, PointField, PointType>:: +intersects +( + const label index, + const point& start, + const point& end, + point& intersectionPoint +) const +{ + // Do quick rejection test + if (cacheBb_) + { + const treeBoundBox& faceBb = bbs_[index]; + + if ((faceBb.posBits(start) & faceBb.posBits(end)) != 0) + { + // start and end in same block outside of faceBb. + return false; + } + } + + const pointField& points = patch_.points(); + const face& f = patch_[index]; + const point fc = f.centre(points); + const vector dir(end - start); + + pointHit inter = patch_[index].intersection + ( + start, + dir, + fc, + points, + intersection::HALF_RAY + ); + + if (inter.hit() && inter.distance() <= 1) + { + // Note: no extra test on whether intersection is in front of us + // since using half_ray + intersectionPoint = inter.hitPoint(); + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/indexedOctree/treeDataPrimitivePatch.H b/src/meshTools/indexedOctree/treeDataPrimitivePatch.H new file mode 100644 index 0000000000000000000000000000000000000000..9fd4da2fd5a61021afe2e18e2ed9183108dc62dc --- /dev/null +++ b/src/meshTools/indexedOctree/treeDataPrimitivePatch.H @@ -0,0 +1,210 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::treeDataPrimitivePatch + +Description + Encapsulation of data needed to search on PrimitivePatches + +SourceFiles + treeDataPrimitivePatch.C + +\*---------------------------------------------------------------------------*/ + +#ifndef treeDataPrimitivePatch_H +#define treeDataPrimitivePatch_H + +#include "PrimitivePatch.H" +//#include "indexedOctree.H" +#include "treeBoundBoxList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +template<class Type> class indexedOctree; + + +/*---------------------------------------------------------------------------*\ + Class treeDataPrimitivePatchName Declaration +\*---------------------------------------------------------------------------*/ + +TemplateName(treeDataPrimitivePatch); + + +/*---------------------------------------------------------------------------*\ + Class treeDataPrimitivePatch Declaration +\*---------------------------------------------------------------------------*/ + +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType=point +> +class treeDataPrimitivePatch +: + public treeDataPrimitivePatchName +{ + // Static data + + //- tolerance on linear dimensions + static scalar tolSqr; + + // Private data + + //- Underlying geometry + const PrimitivePatch<Face, FaceList, PointField, PointType>& patch_; + + //- Whether to precalculate and store face bounding box + const bool cacheBb_; + + //- face bounding boxes (valid only if cacheBb_) + treeBoundBoxList bbs_; + + + // Private Member Functions + + //- Calculate face bounding box + static treeBoundBox calcBb(const pointField&, const face&); + + //- Initialise all member data + void update(); + +public: + + // Constructors + + //- Construct from patch. + treeDataPrimitivePatch + ( + const bool cacheBb, + const PrimitivePatch<Face, FaceList, PointField, PointType>& + ); + + + // Member Functions + + // Access + + label size() const + { + return patch_.size(); + } + + //- Get representative point cloud for all shapes inside + // (one point per shape) + pointField points() const; + + + // Search + + //- Get type (inside,outside,mixed,unknown) of point w.r.t. surface. + // Only makes sense for closed surfaces. + label getVolumeType + ( + const indexedOctree + < + treeDataPrimitivePatch + < + Face, + FaceList, + PointField, + PointType + > + >&, + const point& + ) const; + + //- Does (bb of) shape at index overlap bb + bool overlaps + ( + const label index, + const treeBoundBox& sampleBb + ) const; + + //- Calculates nearest (to sample) point in shape. + // Returns actual point and distance (squared) + void findNearest + ( + const labelList& indices, + const point& sample, + + scalar& nearestDistSqr, + label& nearestIndex, + point& nearestPoint + ) const; + + //- Calculates nearest (to line) point in shape. + // Returns point and distance (squared) + void findNearest + ( + const labelList& indices, + const linePointRef& ln, + + treeBoundBox& tightest, + label& minIndex, + point& linePoint, + point& nearestPoint + ) const + { + notImplemented + ( + "treeDataPrimitivePatch::findNearest" + "(const labelList&, const linePointRef&, ..)" + ); + } + + //- Calculate intersection of shape with ray. Sets result + // accordingly + bool intersects + ( + const label index, + const point& start, + const point& end, + point& result + ) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "treeDataPrimitivePatch.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamData.cxx b/src/meshTools/indexedOctree/treeDataPrimitivePatchName.C similarity index 77% rename from applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamData.cxx rename to src/meshTools/indexedOctree/treeDataPrimitivePatchName.C index 4f89b6e25d0fddc5a8e1aff6f77b8023522ce9d6..59cf44b8a68c89d92546437631f65ddebfd947fb 100644 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamData.cxx +++ b/src/meshTools/indexedOctree/treeDataPrimitivePatchName.C @@ -22,28 +22,12 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ -#include <ctype.h> - -#include "vtkFoamData.h" -#include "vtkObjectFactory.h" - -vtkCxxRevisionMacro(vtkFoamData, "$Revision: 1.20 $"); -vtkStandardNewMacro(vtkFoamData); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -vtkFoamData::vtkFoamData() -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // +#include "treeDataPrimitivePatch.H" -vtkFoamData::~vtkFoamData() -{} +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +defineTypeNameAndDebug(Foam::treeDataPrimitivePatchName, 0); // ************************************************************************* // diff --git a/src/meshTools/indexedOctree/treeDataTriSurface.C b/src/meshTools/indexedOctree/treeDataTriSurface.C index ea519291e3a275351622082b35d45413ddab825d..b4ec2af89f05acb6d148542eea4a69c728dfb06a 100644 --- a/src/meshTools/indexedOctree/treeDataTriSurface.C +++ b/src/meshTools/indexedOctree/treeDataTriSurface.C @@ -276,7 +276,7 @@ bool Foam::treeDataTriSurface::overlaps const point& p1 = points[f[1]]; const point& p2 = points[f[2]]; - boundBox triBb(p0, p0); + treeBoundBox triBb(p0, p0); triBb.min() = min(triBb.min(), p1); triBb.min() = min(triBb.min(), p2); diff --git a/src/meshTools/meshSearch/meshSearch.C b/src/meshTools/meshSearch/meshSearch.C index 9b822b11516ad57114fa7b786b564afd93ac47a9..7448c7faa3df702b6abcab1495f15f2c8665da92 100644 --- a/src/meshTools/meshSearch/meshSearch.C +++ b/src/meshTools/meshSearch/meshSearch.C @@ -791,7 +791,7 @@ Foam::label Foam::meshSearch::findCell + offset(curHit.hitPoint(), curHit.index(), edgeVec); } } - while(true); + while (true); } else { @@ -928,7 +928,7 @@ Foam::List<Foam::pointIndexHit> Foam::meshSearch::intersections + offset(bHit.hitPoint(), bHit.index(), edgeVec); } - } while(bHit.hit()); + } while (bHit.hit()); hits.shrink(); diff --git a/src/meshTools/octree/octreeDataPoint.H b/src/meshTools/octree/octreeDataPoint.H index 32e47097345141f2883cbbb34756b178e8969e1b..8435b598862a4212658bea447557573b4a487f65 100644 --- a/src/meshTools/octree/octreeDataPoint.H +++ b/src/meshTools/octree/octreeDataPoint.H @@ -69,7 +69,7 @@ public: // Constructors //- Construct from components. Holds reference to points! - octreeDataPoint(const pointField&); + explicit octreeDataPoint(const pointField&); // Member Functions diff --git a/src/meshTools/octree/treeBoundBox.H b/src/meshTools/octree/treeBoundBox.H index 01660d618d33e5eb05d6e9a101519dc51d6f4858..a0fa8a1f51ad3adc029493fc5c519eb936ade7ba 100644 --- a/src/meshTools/octree/treeBoundBox.H +++ b/src/meshTools/octree/treeBoundBox.H @@ -170,11 +170,11 @@ public: inline treeBoundBox(const point& min, const point& max); //- Construct from components - inline treeBoundBox(const boundBox& bb); + explicit inline treeBoundBox(const boundBox& bb); //- Construct as the bounding box of the given pointField. // Local processor domain only (no reduce as in boundBox) - treeBoundBox(const UList<point>&); + explicit treeBoundBox(const UList<point>&); //- Construct as subset of points // Local processor domain only (no reduce as in boundBox) diff --git a/src/meshTools/polyMeshZipUpCells/polyMeshZipUpCells.C b/src/meshTools/polyMeshZipUpCells/polyMeshZipUpCells.C index 0d4ec63faa85b81bb425257a43825df670026ef1..17a598626047230d32f8190bc3c719a5c79036ce 100644 --- a/src/meshTools/polyMeshZipUpCells/polyMeshZipUpCells.C +++ b/src/meshTools/polyMeshZipUpCells/polyMeshZipUpCells.C @@ -154,7 +154,7 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) singleEdges.setSize(nSingleEdges); # ifdef DEBUG_ZIPUP - Info << "Cell " << cellI << endl; + Info<< "Cell " << cellI << endl; forAll (curFaces, faceI) { @@ -274,18 +274,18 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) if (pointUsage[pointI] > 2) { # ifdef DEBUG_CHAIN - Info << "start head blocked" << endl; + Info<< "start head blocked" << endl; # endif blockHead = true; } } - else if(cellPoints[pointI] == newEdgeEnd) + else if (cellPoints[pointI] == newEdgeEnd) { if (pointUsage[pointI] > 2) { # ifdef DEBUG_CHAIN - Info << "start tail blocked" << endl; + Info<< "start tail blocked" << endl; # endif blockTail = true; @@ -369,18 +369,18 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) if (pointUsage[pointI] > 2) { # ifdef DEBUG_CHAIN - Info << "head blocked" << endl; + Info<< "head blocked" << endl; # endif blockHead = true; } } - else if(cellPoints[pointI] == curEdgeEnd) + else if (cellPoints[pointI] == curEdgeEnd) { if (pointUsage[pointI] > 2) { # ifdef DEBUG_CHAIN - Info << "tail blocked" << endl; + Info<< "tail blocked" << endl; # endif blockTail = true; @@ -392,7 +392,7 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) if (curEdgeStart == curEdgeEnd) { # ifdef DEBUG_CHAIN - Info << "closed loop" << endl; + Info<< "closed loop" << endl; # endif pointChain.removeHead(); @@ -415,7 +415,7 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) } # ifdef DEBUG_CHAIN - Info << "completed patch chain: " << pointChain << endl; + Info<< "completed patch chain: " << pointChain << endl; # endif if (pointChain.size() > 2) @@ -428,7 +428,7 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) edgesToInsert.setSize(nEdgesToInsert); # ifdef DEBUG_ZIPUP - Info << "edgesToInsert: " << edgesToInsert << endl; + Info<< "edgesToInsert: " << edgesToInsert << endl; # endif // Insert the edges into a list of faces @@ -588,7 +588,7 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) # ifdef DEBUG_ZIPUP if (allPointsPresent) { - Info << "All points present" << endl; + Info<< "All points present" << endl; } # endif @@ -605,7 +605,7 @@ bool Foam::polyMeshZipUpCells(polyMesh& mesh) edgeList newFaceEdges = newFace.edges(); # ifdef DEBUG_ZIPUP - Info << "Not all points present." << endl; + Info<< "Not all points present." << endl; # endif label nNewFacePoints = 0; diff --git a/src/meshTools/primitiveMeshGeometry/primitiveMeshGeometry.C b/src/meshTools/primitiveMeshGeometry/primitiveMeshGeometry.C index 91afa7c23ee6fa7ce92f36ab3d01a107f4480bad..e20a0dddb607f418839d867cd686c10416098113 100644 --- a/src/meshTools/primitiveMeshGeometry/primitiveMeshGeometry.C +++ b/src/meshTools/primitiveMeshGeometry/primitiveMeshGeometry.C @@ -796,7 +796,7 @@ bool Foam::primitiveMeshGeometry::checkFaceAngles faceNormal /= mag(faceNormal) + VSMALL; // Get edge from f[0] to f[size-1]; - vector ePrev(p[f[0]] - p[f[f.size()-1]]); + vector ePrev(p[f.first()] - p[f.last()]); scalar magEPrev = mag(ePrev); ePrev /= magEPrev + VSMALL; diff --git a/src/meshTools/regionSplit/regionSplit.C b/src/meshTools/regionSplit/regionSplit.C index 667a2ddc5d102bfe7d8d8b1906d416f48f58f515..b415d66f02e0375de8d18604c900307919bd1280 100644 --- a/src/meshTools/regionSplit/regionSplit.C +++ b/src/meshTools/regionSplit/regionSplit.C @@ -342,7 +342,7 @@ Foam::label Foam::regionSplit::calcRegionSplit nRegions++; unsetCellI++; } - while(true); + while (true); if (debug) diff --git a/src/meshTools/searchableSurface/distributedTriSurfaceMesh.C b/src/meshTools/searchableSurface/distributedTriSurfaceMesh.C index 033d6a0a8655fcbcdddfbaff9612df01099675f8..c7ef4d5d9461c0487743fd047b42e87c8ff19ab4 100644 --- a/src/meshTools/searchableSurface/distributedTriSurfaceMesh.C +++ b/src/meshTools/searchableSurface/distributedTriSurfaceMesh.C @@ -957,7 +957,7 @@ bool Foam::distributedTriSurfaceMesh::overlaps { const treeBoundBox& bb = bbs[bbI]; - boundBox triBb(p0, p0); + treeBoundBox triBb(p0, p0); triBb.min() = min(triBb.min(), p1); triBb.min() = min(triBb.min(), p2); diff --git a/src/meshTools/searchableSurface/searchableBox.C b/src/meshTools/searchableSurface/searchableBox.C index 8b4c0f5c76c5c8abfd0b0ab5f432e268766769a8..a4cc593562a6460ac80f4998d7dc570c4651da71 100644 --- a/src/meshTools/searchableSurface/searchableBox.C +++ b/src/meshTools/searchableSurface/searchableBox.C @@ -496,7 +496,7 @@ void Foam::searchableBox::findLineAll if ( !inter.hit() - || (inter.index() == hits[hits.size()-1].index()) + || (inter.index() == hits.last().index()) ) { break; diff --git a/src/meshTools/searchableSurface/searchableSurfacesQueries.C b/src/meshTools/searchableSurface/searchableSurfacesQueries.C index b0d6322a740b3fe42012a114fa4687a24d89aac8..6b8c2841f32ce074702f903120821675caaed8f0 100644 --- a/src/meshTools/searchableSurface/searchableSurfacesQueries.C +++ b/src/meshTools/searchableSurface/searchableSurfacesQueries.C @@ -730,7 +730,7 @@ Foam::pointIndexHit Foam::searchableSurfacesQueries::facesIntersection } } - nearest[nearest.size()-1] = sumNearest / surfacesToTest.size(); + nearest.last() = sumNearest / surfacesToTest.size(); // Get the sum of distances (initial evaluation) diff --git a/src/meshTools/searchableSurface/triSurfaceMesh.C b/src/meshTools/searchableSurface/triSurfaceMesh.C index 950cd13285334a4849f187b61f678f0dc21b309d..5f9a846ace2144d0b2da506417959b5bdba0e067 100644 --- a/src/meshTools/searchableSurface/triSurfaceMesh.C +++ b/src/meshTools/searchableSurface/triSurfaceMesh.C @@ -632,7 +632,7 @@ void Foam::triSurfaceMesh::findLineAll if ( !inter.hit() - || (inter.index() == hits[hits.size()-1].index()) + || (inter.index() == hits.last().index()) ) { break; diff --git a/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.C b/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.C index 11e2eadd483d9db9bc7c9a6bcc38fd7c32e5c2f9..7f822733b8a5c96c0326e0e37f9e4556828dd0d6 100644 --- a/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.C +++ b/src/meshTools/sets/faceZoneSources/setsToFaceZone/setsToFaceZone.C @@ -35,13 +35,9 @@ License namespace Foam { - -defineTypeNameAndDebug(setsToFaceZone, 0); - -addToRunTimeSelectionTable(topoSetSource, setsToFaceZone, word); - -addToRunTimeSelectionTable(topoSetSource, setsToFaceZone, istream); - + defineTypeNameAndDebug(setsToFaceZone, 0); + addToRunTimeSelectionTable(topoSetSource, setsToFaceZone, word); + addToRunTimeSelectionTable(topoSetSource, setsToFaceZone, istream); } @@ -155,7 +151,7 @@ void Foam::setsToFaceZone::applyToSet { flip = false; } - else if(!ownFound && neiFound) + else if (!ownFound && neiFound) { flip = true; } diff --git a/src/meshTools/triSurface/booleanOps/intersectedSurface/edgeSurface.C b/src/meshTools/triSurface/booleanOps/intersectedSurface/edgeSurface.C index 5caa377e0549a686d9388865c9bc7bf88e2ff04a..4721cb48ab489c1d53432fd1549487938c1ac14d 100644 --- a/src/meshTools/triSurface/booleanOps/intersectedSurface/edgeSurface.C +++ b/src/meshTools/triSurface/booleanOps/intersectedSurface/edgeSurface.C @@ -213,7 +213,7 @@ Foam::edgeSurface::edgeSurface ( edge ( - extraVerts[extraVerts.size()-1] + nSurfacePoints_, + extraVerts.last() + nSurfacePoints_, e.end() ) ); @@ -330,7 +330,7 @@ Foam::edgeSurface::edgeSurface labelList edgeLabels(edges_.size() - nSurfaceEdges_); label i = 0; - for(label edgeI = nSurfaceEdges_; edgeI < edges_.size(); edgeI++) + for (label edgeI = nSurfaceEdges_; edgeI < edges_.size(); edgeI++) { edgeLabels[i++] = edgeI; } diff --git a/src/meshTools/triSurface/booleanOps/intersectedSurface/intersectedSurface.C b/src/meshTools/triSurface/booleanOps/intersectedSurface/intersectedSurface.C index be758c07fdf0c6b4d9677b57629c066ee4d2fda1..201593990b21dfec7d12524bb0999fa43aeba247 100644 --- a/src/meshTools/triSurface/booleanOps/intersectedSurface/intersectedSurface.C +++ b/src/meshTools/triSurface/booleanOps/intersectedSurface/intersectedSurface.C @@ -597,7 +597,7 @@ Foam::face Foam::intersectedSurface::walkFace label vertI = startVertI; label edgeI = startEdgeI; - while(true) + while (true) { const edge& e = edges[edgeI]; diff --git a/src/meshTools/triSurface/booleanOps/surfaceIntersection/edgeIntersections.C b/src/meshTools/triSurface/booleanOps/surfaceIntersection/edgeIntersections.C index 47c31f04bf049800c62eb0fd2fe4e1f740e9246c..86e97a49d385f90b9780eac412c707cd341c4346 100644 --- a/src/meshTools/triSurface/booleanOps/surfaceIntersection/edgeIntersections.C +++ b/src/meshTools/triSurface/booleanOps/surfaceIntersection/edgeIntersections.C @@ -258,12 +258,12 @@ bool Foam::edgeIntersections::inlinePerturb bool perturbEnd = false; // Check first intersection. - if (edgeEnds[0] == 0) + if (edgeEnds.first() == 0) { perturbStart = true; } - if (edgeEnds[edgeEnds.size()-1] == 1) + if (edgeEnds.last() == 1) { perturbEnd = true; } diff --git a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C index 33940989b8228a358caa1c19ebfda82404a94344..a25664a130db244aa91809279003702222d5c36c 100644 --- a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C +++ b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C @@ -242,8 +242,7 @@ void Foam::surfaceIntersection::storeIntersection // Check whether perhaps degenerate const point& prevHit = allCutPoints[*iter]; - - const point& thisHit = allCutPoints[allCutPoints.size()-1]; + const point& thisHit = allCutPoints.last(); if (mag(prevHit - thisHit) < SMALL) { @@ -706,7 +705,7 @@ void Foam::surfaceIntersection::doCutEdges doTrack = false; } } - while(doTrack); + while (doTrack); } intersection::setPlanarTol(oldTol); } diff --git a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C index b2a5eec086885c647d557aef1b4969bf236429f3..a710c98d44c560bfbda01f9f7ee039165e164ade 100644 --- a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C +++ b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C @@ -155,12 +155,12 @@ void Foam::surfaceIntersection::removeDuplicates // Insert first elems[elemI++] = map[oldElems[0]]; - for(label vertI = 1; vertI < oldElems.size(); vertI++) + for (label vertI = 1; vertI < oldElems.size(); vertI++) { // Insert others only if they differ from one before label newVertI = map[oldElems[vertI]]; - if (newVertI != elems[elems.size()-1]) + if (newVertI != elems.last()) { elems[elemI++] = newVertI; } @@ -294,13 +294,13 @@ void Foam::surfaceIntersection::writeIntersectedEdges os << "l " << e.start()+1 << ' ' << extraVerts[0] + surf.nPoints() + 1 << endl; - for(label i = 1; i < extraVerts.size(); i++) + for (label i = 1; i < extraVerts.size(); i++) { os << "l " << extraVerts[i-1] + surf.nPoints() + 1 << ' ' << extraVerts[i] + surf.nPoints() + 1 << endl; } - os << "l " << extraVerts[extraVerts.size()-1] + surf.nPoints() + 1 + os << "l " << extraVerts.last() + surf.nPoints() + 1 << ' ' << e.end()+1 << endl; } } diff --git a/src/meshTools/triSurface/orientedSurface/orientedSurface.C b/src/meshTools/triSurface/orientedSurface/orientedSurface.C index 34a230744754b257802e9a2a47c39320ac5e75fb..045693caa8434dc9ebb76d22b373f8573dd91e69 100644 --- a/src/meshTools/triSurface/orientedSurface/orientedSurface.C +++ b/src/meshTools/triSurface/orientedSurface/orientedSurface.C @@ -185,7 +185,7 @@ void Foam::orientedSurface::walkSurface // List of edges that were changed in the last iteration. labelList changedEdges; - while(true) + while (true) { changedEdges = faceToEdge(s, changedFaces); diff --git a/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C b/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C index 1a1f2baf1d7c016dc040ef653a34f888f45b7966..6f5bf0eac266b5545c65b4bdf8f2f4a01d8c0943 100644 --- a/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C +++ b/src/meshTools/triSurface/surfaceFeatures/surfaceFeatures.C @@ -757,9 +757,13 @@ Foam::Map<Foam::label> Foam::surfaceFeatures::nearestSamples ) const { // Build tree out of all samples. + + //Note: cannot be done one the fly - gcc4.4 compiler bug. + treeBoundBox bb(samples); + octree<octreeDataPoint> ppTree ( - treeBoundBox(samples), // overall search domain + bb, // overall search domain octreeDataPoint(samples), // all information needed to do checks 1, // min levels 20.0, // maximum ratio of cubes v.s. cells @@ -857,10 +861,12 @@ Foam::Map<Foam::label> Foam::surfaceFeatures::nearestSamples scalar maxSearch = max(maxDist); vector span(maxSearch, maxSearch, maxSearch); - // octree.shapes holds reference! + //Note: cannot be done one the fly - gcc4.4 compiler bug. + treeBoundBox bb(samples); + octree<octreeDataPoint> ppTree ( - treeBoundBox(samples), // overall search domain + bb, // overall search domain octreeDataPoint(samples), // all information needed to do checks 1, // min levels 20.0, // maximum ratio of cubes v.s. cells diff --git a/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C b/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C index 0e97a6331659fc31ba6bd78977e6e40a6cc66911..773c423419002942d5d7c29bd2d146d028b57eb3 100644 --- a/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C +++ b/src/meshTools/triSurface/triSurfaceTools/triSurfaceTools.C @@ -2702,7 +2702,7 @@ void Foam::triSurfaceTools::calcInterpolationWeights // calculate edge normal (pointing inwards) FixedList<vector, 3> normal; - for(label i=0; i<3; i++) + for (label i=0; i<3; i++) { normal[i] = triangleFaceNormal ^ edge[i]; normal[i] /= mag(normal[i]) + VSMALL; diff --git a/src/decompositionMethods/Allwmake b/src/parallel/Allwmake similarity index 70% rename from src/decompositionMethods/Allwmake rename to src/parallel/Allwmake index f71ea71b867935edc49b4529681def9fe7cfde95..34d323251aadcde80683ac1b8609faba82fc936d 100755 --- a/src/decompositionMethods/Allwmake +++ b/src/parallel/Allwmake @@ -3,10 +3,11 @@ cd ${0%/*} || exit 1 # run from this directory set -x wmake libso decompositionMethods +wmake libso reconstruct if [ -d "$FOAM_MPI_LIBBIN" ] then - (WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB; wmake libso parMetisDecomp) + ( WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB; wmake libso parMetisDecomp ) fi # ----------------------------------------------------------------- end-of-file diff --git a/src/decompositionMethods/decompositionMethods/Make/files b/src/parallel/decompositionMethods/Make/files similarity index 100% rename from src/decompositionMethods/decompositionMethods/Make/files rename to src/parallel/decompositionMethods/Make/files diff --git a/src/decompositionMethods/decompositionMethods/Make/options b/src/parallel/decompositionMethods/Make/options similarity index 100% rename from src/decompositionMethods/decompositionMethods/Make/options rename to src/parallel/decompositionMethods/Make/options diff --git a/src/decompositionMethods/decompositionMethods/decompositionMethod/decompositionMethod.C b/src/parallel/decompositionMethods/decompositionMethod/decompositionMethod.C similarity index 100% rename from src/decompositionMethods/decompositionMethods/decompositionMethod/decompositionMethod.C rename to src/parallel/decompositionMethods/decompositionMethod/decompositionMethod.C diff --git a/src/decompositionMethods/decompositionMethods/decompositionMethod/decompositionMethod.H b/src/parallel/decompositionMethods/decompositionMethod/decompositionMethod.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/decompositionMethod/decompositionMethod.H rename to src/parallel/decompositionMethods/decompositionMethod/decompositionMethod.H diff --git a/src/decompositionMethods/decompositionMethods/geomDecomp/geomDecomp.C b/src/parallel/decompositionMethods/geomDecomp/geomDecomp.C similarity index 100% rename from src/decompositionMethods/decompositionMethods/geomDecomp/geomDecomp.C rename to src/parallel/decompositionMethods/geomDecomp/geomDecomp.C diff --git a/src/decompositionMethods/decompositionMethods/geomDecomp/geomDecomp.H b/src/parallel/decompositionMethods/geomDecomp/geomDecomp.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/geomDecomp/geomDecomp.H rename to src/parallel/decompositionMethods/geomDecomp/geomDecomp.H diff --git a/src/decompositionMethods/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C b/src/parallel/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C similarity index 98% rename from src/decompositionMethods/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C rename to src/parallel/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C index 4ee04a7cdfca385dbcb6f154d2096d9112bd6f10..5fa638649d42825ceb0b861cfff432e22778890d 100644 --- a/src/decompositionMethods/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C +++ b/src/parallel/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C @@ -165,7 +165,7 @@ void Foam::hierarchGeomDecomp::calculateSortedWeightedSizes // Non-dimensionalise and multiply by size. scalar globalCurrentLength = returnReduce ( - sortedWeightedSizes[current.size()], + sortedWeightedSizes[current.size()], sumOp<scalar>() ); // Normalise weights by global sum of weights and multiply through @@ -238,7 +238,7 @@ void Foam::hierarchGeomDecomp::findBinary if (returnReduce(hasNotChanged, andOp<bool>())) { WarningIn("hierarchGeomDecomp::findBinary(..)") - << "unable to find desired deomposition split, making do!" + << "unable to find desired deomposition split, making do!" << endl; break; } @@ -288,7 +288,7 @@ void Foam::hierarchGeomDecomp::findBinary Pout<< " low:" << low << " lowValue:" << lowValue << " high:" << high << " highValue:" << highValue << " mid:" << mid << " midValue:" << midValue << endl - << " globalSize:" << weightedSize + << " globalSize:" << weightedSize << " wantedSize:" << wantedSize << " sizeTol:" << sizeTol << endl; } @@ -318,7 +318,7 @@ void Foam::hierarchGeomDecomp::findBinary if (returnReduce(hasNotChanged, andOp<bool>())) { WarningIn("hierarchGeomDecomp::findBinary(..)") - << "unable to find desired deomposition split, making do!" + << "unable to find desired deomposition split, making do!" << endl; break; } @@ -375,7 +375,7 @@ void Foam::hierarchGeomDecomp::sortComponent ( ( sortedCoord.size() - ? sortedCoord[sortedCoord.size()-1] + ? sortedCoord.last() : -GREAT ), maxOp<scalar>() @@ -562,14 +562,14 @@ void Foam::hierarchGeomDecomp::sortComponent ( ( sortedCoord.size() - ? sortedCoord[sortedCoord.size()-1] + ? sortedCoord.last() : -GREAT ), maxOp<scalar>() ); if (debug) - { + { Pout<< "sortComponent : minCoord:" << minCoord << " maxCoord:" << maxCoord << endl; } @@ -592,7 +592,7 @@ void Foam::hierarchGeomDecomp::sortComponent // Value at right of bin (leftIndex+localSize-1) scalar rightCoord = -GREAT; - + if (bin == n_[compI]-1) { // Last bin. Copy all. @@ -602,7 +602,7 @@ void Foam::hierarchGeomDecomp::sortComponent else { // For the current bin (starting at leftCoord) we want a rightCoord - // such that the sum of all weighted sizes are + // such that the sum of all weighted sizes are // globalCurrentLength/n_[compI]. // We have to iterate to obtain this. diff --git a/src/decompositionMethods/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.H b/src/parallel/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.H rename to src/parallel/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.H diff --git a/src/decompositionMethods/decompositionMethods/manualDecomp/manualDecomp.C b/src/parallel/decompositionMethods/manualDecomp/manualDecomp.C similarity index 100% rename from src/decompositionMethods/decompositionMethods/manualDecomp/manualDecomp.C rename to src/parallel/decompositionMethods/manualDecomp/manualDecomp.C diff --git a/src/decompositionMethods/decompositionMethods/manualDecomp/manualDecomp.H b/src/parallel/decompositionMethods/manualDecomp/manualDecomp.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/manualDecomp/manualDecomp.H rename to src/parallel/decompositionMethods/manualDecomp/manualDecomp.H diff --git a/src/decompositionMethods/decompositionMethods/metisDecomp/metisDecomp.C b/src/parallel/decompositionMethods/metisDecomp/metisDecomp.C similarity index 100% rename from src/decompositionMethods/decompositionMethods/metisDecomp/metisDecomp.C rename to src/parallel/decompositionMethods/metisDecomp/metisDecomp.C diff --git a/src/decompositionMethods/decompositionMethods/metisDecomp/metisDecomp.H b/src/parallel/decompositionMethods/metisDecomp/metisDecomp.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/metisDecomp/metisDecomp.H rename to src/parallel/decompositionMethods/metisDecomp/metisDecomp.H diff --git a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C b/src/parallel/decompositionMethods/scotchDecomp/scotchDecomp.C similarity index 100% rename from src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C rename to src/parallel/decompositionMethods/scotchDecomp/scotchDecomp.C diff --git a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.H b/src/parallel/decompositionMethods/scotchDecomp/scotchDecomp.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.H rename to src/parallel/decompositionMethods/scotchDecomp/scotchDecomp.H diff --git a/src/decompositionMethods/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.C b/src/parallel/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.C similarity index 100% rename from src/decompositionMethods/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.C rename to src/parallel/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.C diff --git a/src/decompositionMethods/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.H b/src/parallel/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.H similarity index 100% rename from src/decompositionMethods/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.H rename to src/parallel/decompositionMethods/simpleGeomDecomp/simpleGeomDecomp.H diff --git a/src/decompositionMethods/parMetisDecomp/Make/files b/src/parallel/parMetisDecomp/Make/files similarity index 100% rename from src/decompositionMethods/parMetisDecomp/Make/files rename to src/parallel/parMetisDecomp/Make/files diff --git a/src/decompositionMethods/parMetisDecomp/Make/options b/src/parallel/parMetisDecomp/Make/options similarity index 100% rename from src/decompositionMethods/parMetisDecomp/Make/options rename to src/parallel/parMetisDecomp/Make/options diff --git a/src/decompositionMethods/parMetisDecomp/parMetisDecomp.C b/src/parallel/parMetisDecomp/parMetisDecomp.C similarity index 100% rename from src/decompositionMethods/parMetisDecomp/parMetisDecomp.C rename to src/parallel/parMetisDecomp/parMetisDecomp.C diff --git a/src/decompositionMethods/parMetisDecomp/parMetisDecomp.H b/src/parallel/parMetisDecomp/parMetisDecomp.H similarity index 100% rename from src/decompositionMethods/parMetisDecomp/parMetisDecomp.H rename to src/parallel/parMetisDecomp/parMetisDecomp.H diff --git a/src/decompositionMethods/parMetisDecomp/parMetisDecompTemplates.C b/src/parallel/parMetisDecomp/parMetisDecompTemplates.C similarity index 100% rename from src/decompositionMethods/parMetisDecomp/parMetisDecompTemplates.C rename to src/parallel/parMetisDecomp/parMetisDecompTemplates.C diff --git a/src/parallel/reconstruct/Make/files b/src/parallel/reconstruct/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..64023e9573ba96525acca6a464dc0000b858361c --- /dev/null +++ b/src/parallel/reconstruct/Make/files @@ -0,0 +1,6 @@ +processorMeshes.C +fvFieldReconstructor.C +pointFieldReconstructor.C +reconstructLagrangianPositions.C + +LIB = $(FOAM_LIBBIN)/libreconstruct diff --git a/src/parallel/reconstruct/Make/options b/src/parallel/reconstruct/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..71546225cf549de3ffb95105271396bf163a8dfc --- /dev/null +++ b/src/parallel/reconstruct/Make/options @@ -0,0 +1,7 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude + +LIB_LIBS = \ + -lfiniteVolume \ + -llagrangian diff --git a/applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructor.C b/src/parallel/reconstruct/fvFieldReconstructor.C similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructor.C rename to src/parallel/reconstruct/fvFieldReconstructor.C diff --git a/applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructor.H b/src/parallel/reconstruct/fvFieldReconstructor.H similarity index 97% rename from applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructor.H rename to src/parallel/reconstruct/fvFieldReconstructor.H index b9f2fb4bf6af487877b31361acf66b74edd4268b..0e3758cafc8885f6f258288f90fe9675d21ce427 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructor.H +++ b/src/parallel/reconstruct/fvFieldReconstructor.H @@ -26,7 +26,7 @@ Class Foam::fvFieldReconstructor Description - FV volume and surface field reconstructor. + Finite volume reconstructor for volume and surface fields. SourceFiles fvFieldReconstructor.C @@ -50,7 +50,7 @@ namespace Foam /*---------------------------------------------------------------------------*\ - Class fvFieldReconstructor Declaration + Class fvFieldReconstructor Declaration \*---------------------------------------------------------------------------*/ class fvFieldReconstructor diff --git a/applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructorReconstructFields.C b/src/parallel/reconstruct/fvFieldReconstructorReconstructFields.C similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/fvFieldReconstructorReconstructFields.C rename to src/parallel/reconstruct/fvFieldReconstructorReconstructFields.C diff --git a/applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructor.C b/src/parallel/reconstruct/pointFieldReconstructor.C similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructor.C rename to src/parallel/reconstruct/pointFieldReconstructor.C diff --git a/applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructor.H b/src/parallel/reconstruct/pointFieldReconstructor.H similarity index 96% rename from applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructor.H rename to src/parallel/reconstruct/pointFieldReconstructor.H index 34b458913c43cb73e94c369c373ef71d80e9caf6..7ab04c3d41d69cafc49df1016a397cda2019e0cb 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructor.H +++ b/src/parallel/reconstruct/pointFieldReconstructor.H @@ -47,7 +47,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class pointFieldReconstructor Declaration + Class pointFieldReconstructor Declaration \*---------------------------------------------------------------------------*/ class pointFieldReconstructor @@ -73,10 +73,7 @@ class pointFieldReconstructor // Private Member Functions //- Disallow default bitwise copy construct - pointFieldReconstructor - ( - const pointFieldReconstructor& - ); + pointFieldReconstructor(const pointFieldReconstructor&); //- Disallow default bitwise assignment void operator=(const pointFieldReconstructor&); diff --git a/applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructorReconstructFields.C b/src/parallel/reconstruct/pointFieldReconstructorReconstructFields.C similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/pointFieldReconstructorReconstructFields.C rename to src/parallel/reconstruct/pointFieldReconstructorReconstructFields.C diff --git a/applications/utilities/parallelProcessing/reconstructPar/processorMeshes.C b/src/parallel/reconstruct/processorMeshes.C similarity index 91% rename from applications/utilities/parallelProcessing/reconstructPar/processorMeshes.C rename to src/parallel/reconstruct/processorMeshes.C index 8c77b9f85562f15912fc72d340206ab92643834c..fb6ccbed5eb438f60ba2bd80e75527e3e18a5fa4 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/processorMeshes.C +++ b/src/parallel/reconstruct/processorMeshes.C @@ -127,8 +127,8 @@ Foam::processorMeshes::processorMeshes const word& meshName ) : - databases_(databases), meshName_(meshName), + databases_(databases), meshes_(databases.size()), pointProcAddressing_(databases.size()), faceProcAddressing_(databases.size()), @@ -165,20 +165,17 @@ Foam::fvMesh::readUpdateState Foam::processorMeshes::readUpdate() { stat = procStat; } - else + else if (stat != procStat) { - if (stat != procStat) - { - FatalErrorIn("processorMeshes::readUpdate()") - << "Processor " << procI - << " has a different polyMesh at time " - << databases_[procI].timeName() - << " compared to any previous processors." << nl - << "Please check time " << databases_[procI].timeName() - << " directories on all processors for consistent" - << " mesh files." - << exit(FatalError); - } + FatalErrorIn("processorMeshes::readUpdate()") + << "Processor " << procI + << " has a different polyMesh at time " + << databases_[procI].timeName() + << " compared to any previous processors." << nl + << "Please check time " << databases_[procI].timeName() + << " directories on all processors for consistent" + << " mesh files." + << exit(FatalError); } } diff --git a/applications/utilities/parallelProcessing/reconstructPar/processorMeshes.H b/src/parallel/reconstruct/processorMeshes.H similarity index 96% rename from applications/utilities/parallelProcessing/reconstructPar/processorMeshes.H rename to src/parallel/reconstruct/processorMeshes.H index d83c3d6216c1824a11da1d66ac330bf2649ce5e0..ab39bc7a3ce0b8e1df27713891b5b5688096143d 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/processorMeshes.H +++ b/src/parallel/reconstruct/processorMeshes.H @@ -55,11 +55,11 @@ class processorMeshes { // Private data + const word meshName_; + //- Processor databases PtrList<Time>& databases_; - const word meshName_; - //- List of processor meshes PtrList<fvMesh> meshes_; @@ -98,29 +98,32 @@ public: // Member Functions - //- Update the meshes based on the mesh files saved in - // time directories + //- Update the meshes based on the mesh files saved in time directories fvMesh::readUpdateState readUpdate(); //- Reconstruct point position after motion in parallel - void reconstructPoints(fvMesh& mesh); + void reconstructPoints(fvMesh&); PtrList<fvMesh>& meshes() { return meshes_; } + const PtrList<labelIOList>& pointProcAddressing() const { return pointProcAddressing_; } + PtrList<labelIOList>& faceProcAddressing() { return faceProcAddressing_; } + const PtrList<labelIOList>& cellProcAddressing() const { return cellProcAddressing_; } + const PtrList<labelIOList>& boundaryProcAddressing() const { return boundaryProcAddressing_; diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructLagrangian.H b/src/parallel/reconstruct/reconstructLagrangian.H similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/reconstructLagrangian.H rename to src/parallel/reconstruct/reconstructLagrangian.H diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructLagrangianFields.C b/src/parallel/reconstruct/reconstructLagrangianFields.C similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/reconstructLagrangianFields.C rename to src/parallel/reconstruct/reconstructLagrangianFields.C diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructLagrangianPositions.C b/src/parallel/reconstruct/reconstructLagrangianPositions.C similarity index 100% rename from applications/utilities/parallelProcessing/reconstructPar/reconstructLagrangianPositions.C rename to src/parallel/reconstruct/reconstructLagrangianPositions.C diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H index 284aa6c17a77ad26a05c9af0c06d6117f6520fe4..6581cc6e5bf0704dd6f7f8caee421478173a63c8 100644 --- a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H +++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around writeRegisteredObject to allow them to be - created via the functions list within controlDict. + created via the functions entry within controlDict. SourceFiles writeRegisteredObjectFunctionObject.C diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H index 743768ffce8a2c485b4a55516216c2319bbac58f..61cff6515b76bd26bfaee0c53e93403857ad9d3b 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverageFunctionObject/fieldAverageFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around fieldAverage to allow them to be created - via the functions list within controlDict. + via the functions entry within controlDict. SourceFiles fieldAverageFunctionObject.C diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H index a5af27af513d1a0de44cd25052b0aae687ece873..a619fb94da6d6ded7e2524d467859d798f9f92de 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H +++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around fieldMinMax to allow them to be created via - the functions list within controlDict. + the functions entry within controlDict. SourceFiles fieldMinMaxFunctionObject.C diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C index 5e63d1287a557a1e74a2644bcd503981f83b1f43..b94b687ba13ca8bad30ccfcd924eb404ee5b67ba 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C @@ -117,45 +117,6 @@ void Foam::fieldValues::cellSource::initialise() } -void Foam::fieldValues::cellSource::makeFile() -{ - // Create the forces file if not already created - if (outputFilePtr_.empty()) - { - if (debug) - { - Info<< "Creating output file." << endl; - } - - // File update - if (Pstream::master()) - { - fileName outputDir; - if (Pstream::parRun()) - { - // Put in undecomposed case (Note: gives problems for - // distributed data running) - outputDir = - obr_.time().path()/".."/name_/obr_.time().timeName(); - } - else - { - outputDir = obr_.time().path()/name_/obr_.time().timeName(); - } - - // Create directory if does not exist - mkDir(outputDir); - - // Open new file at start up - outputFilePtr_.reset(new OFstream(outputDir/(type() + ".dat"))); - - // Add headers to output data - writeFileHeader(); - } - } -} - - void Foam::fieldValues::cellSource::writeFileHeader() { if (outputFilePtr_.valid()) @@ -190,16 +151,9 @@ Foam::fieldValues::cellSource::cellSource fieldValue(name, obr, dict, loadFromFiles), source_(sourceTypeNames_.read(dict.lookup("source"))), operation_(operationTypeNames_.read(dict.lookup("operation"))), - cellId_(), - outputFilePtr_(NULL) + cellId_() { - initialise(); - - if (active_) - { - // Create the output file if not already created - makeFile(); - } + read(dict); } @@ -213,9 +167,11 @@ Foam::fieldValues::cellSource::~cellSource() void Foam::fieldValues::cellSource::read(const dictionary& dict) { + fieldValue::read(dict); + if (active_) { - fieldValue::read(dict); + // no additional info to read initialise(); } } @@ -223,13 +179,10 @@ void Foam::fieldValues::cellSource::read(const dictionary& dict) void Foam::fieldValues::cellSource::write() { + fieldValue::write(); + if (active_) { - if (log_) - { - Info<< type() << " " << name_ << " output:" << nl; - } - outputFilePtr_() << obr_.time().value() << tab << sum(filterField(mesh().V())); diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H index d1d08cdbd998ca59fca7a525ec3bbd62ab134554..89cc9ad0103807883d0d8ab396f19c2c81b4fc79 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H @@ -58,7 +58,6 @@ SourceFiles #include "NamedEnum.H" #include "fieldValue.H" #include "labelList.H" -#include "OFstream.H" #include "volFieldsFwd.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -114,9 +113,6 @@ private: //- Set cells to evaluate based on a patch void setPatchCells(); - //- Create the output file if not already created - void makeFile(); - protected: @@ -131,9 +127,6 @@ protected: //- Local list of cell IDs labelList cellId_; - //- Output file pointer - autoPtr<OFstream> outputFilePtr_; - // Protected member functions diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H index eca172a58d4e23b30ff4275835c2edabd4c7980f..e37938663b5fa7aad3dfaf60e349a9751f321d64 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around cellSource to allow it to be - created via the functions list within controlDict. + created via the functions entry within controlDict. SourceFiles cellSourceFunctionObject.C diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C index 710e346ed5dc236baba9ab65fb11a6df968bd94e..b609f4310ab9c711d44b19dbf48bb67419146e0e 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C @@ -258,45 +258,6 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict) } -void Foam::fieldValues::faceSource::makeFile() -{ - // Create the forces file if not already created - if (outputFilePtr_.empty()) - { - if (debug) - { - Info<< "Creating output file." << endl; - } - - // File update - if (Pstream::master()) - { - fileName outputDir; - if (Pstream::parRun()) - { - // Put in undecomposed case (Note: gives problems for - // distributed data running) - outputDir = - obr_.time().path()/".."/name_/obr_.time().timeName(); - } - else - { - outputDir = obr_.time().path()/name_/obr_.time().timeName(); - } - - // Create directory if does not exist - mkDir(outputDir); - - // Open new file at start up - outputFilePtr_.reset(new OFstream(outputDir/(type() + ".dat"))); - - // Add headers to output data - writeFileHeader(); - } - } -} - - void Foam::fieldValues::faceSource::writeFileHeader() { if (outputFilePtr_.valid()) @@ -334,16 +295,9 @@ Foam::fieldValues::faceSource::faceSource faceId_(), facePatchId_(), flipMap_(), - outputFilePtr_(NULL), weightFieldName_("undefinedWeightedFieldName") { - if (active_) - { - initialise(dict); - - // Create the output file if not already created - makeFile(); - } + read(dict); } @@ -357,9 +311,10 @@ Foam::fieldValues::faceSource::~faceSource() void Foam::fieldValues::faceSource::read(const dictionary& dict) { + fieldValue::read(dict); + if (active_) { - fieldValue::read(dict); initialise(dict); } } @@ -367,13 +322,10 @@ void Foam::fieldValues::faceSource::read(const dictionary& dict) void Foam::fieldValues::faceSource::write() { + fieldValue::write(); + if (active_) { - if (log_) - { - Info<< type() << " " << name_ << " output:" << nl; - } - outputFilePtr_() << obr_.time().value() << tab << sum(filterField(mesh().magSf())); diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H index 3509d733cd0f61388dfb649f0c5de68735fc32c4..e8e2634b12855625003e8d27454aa16ccd0a836d 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H @@ -66,7 +66,6 @@ SourceFiles #include "NamedEnum.H" #include "fieldValue.H" #include "labelList.H" -#include "OFstream.H" #include "surfaceFieldsFwd.H" #include "volFieldsFwd.H" @@ -125,9 +124,6 @@ private: //- Set faces to evaluate based on a patch void setPatchFaces(); - //- Create the output file if not already created - void makeFile(); - protected: @@ -148,9 +144,6 @@ protected: //- List of +1/-1 representing face flip map labelList flipMap_; - //- Output file pointer - autoPtr<OFstream> outputFilePtr_; - //- Weight field name - only used for opWeightedAverage mode word weightFieldName_; diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H index 54d717f870f1f6332e2f5e4ec0ab9ec09e916145..4810469b3c1ce011b7e55215de36aeea771c8100 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around faceSource to allow it to be - created via the functions list within controlDict. + created via the functions entry within controlDict. SourceFiles faceSourceFunctionObject.C diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C index 36b88d5e811ed12c58358ac405ebf222c3a440a3..325f14f3aa77dda87c820369d5fd42df99872deb 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C @@ -26,6 +26,7 @@ License #include "fieldValue.H" #include "fvMesh.H" +#include "Time.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -54,6 +55,73 @@ void Foam::fieldValue::movePoints(const Field<point>&) } +void Foam::fieldValue::makeFile() +{ + // Create the forces file if not already created + if (outputFilePtr_.empty()) + { + if (debug) + { + Info<< "Creating output file." << endl; + } + + // File update + if (Pstream::master()) + { + fileName outputDir; + word startTimeName = + obr_.time().timeName(obr_.time().startTime().value()); + + if (Pstream::parRun()) + { + // Put in undecomposed case (Note: gives problems for + // distributed data running) + outputDir = + obr_.time().path()/".."/name_/startTimeName; + } + else + { + outputDir = obr_.time().path()/name_/startTimeName; + } + + // Create directory if does not exist + mkDir(outputDir); + + // Open new file at start up + outputFilePtr_.reset(new OFstream(outputDir/(type() + ".dat"))); + + // Add headers to output data + writeFileHeader(); + } + } +} + + +void Foam::fieldValue::read(const dictionary& dict) +{ + if (active_) + { + log_ = dict.lookupOrDefault<Switch>("log", false); + dict.lookup("fields") >> fields_; + dict.lookup("valueOutput") >> valueOutput_; + } +} + + +void Foam::fieldValue::write() +{ + if (active_) + { + if (log_) + { + Info<< type() << " " << name_ << " output:" << nl; + } + + makeFile(); + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::fieldValue::fieldValue @@ -70,7 +138,8 @@ Foam::fieldValue::fieldValue log_(false), sourceName_(dict.lookup("sourceName")), fields_(dict.lookup("fields")), - valueOutput_(dict.lookup("valueOutput")) + valueOutput_(dict.lookup("valueOutput")), + outputFilePtr_(NULL) { // Only active if obr is an fvMesh if (isA<fvMesh>(obr_)) @@ -103,65 +172,6 @@ Foam::fieldValue::~fieldValue() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -const Foam::word& Foam::fieldValue::name() const -{ - return name_; -} - - -const Foam::objectRegistry& Foam::fieldValue::obr() const -{ - return obr_; -} - - -bool Foam::fieldValue::active() const -{ - return active_; -} - - -const Foam::Switch& Foam::fieldValue::log() const -{ - return log_; -} - - -const Foam::word& Foam::fieldValue::sourceName() const -{ - return sourceName_; -} - - -const Foam::wordList& Foam::fieldValue::fields() const -{ - return fields_; -} - - -const Foam::Switch& Foam::fieldValue::valueOutput() const -{ - return valueOutput_; -} - - -const Foam::fvMesh& Foam::fieldValue::mesh() const -{ - return refCast<const fvMesh>(obr_); -} - - -void Foam::fieldValue::read(const dictionary& dict) -{ - if (active_) - { - log_ = dict.lookupOrDefault<Switch>("log", false); - dict.lookup("fields") >> fields_; - dict.lookup("valueOutput") >> valueOutput_; - } -} - - void Foam::fieldValue::execute() { // Do nothing diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H index 3d862b1f6be9303ec7ba21fb5d524943ad93ba04..1b96bb8e41c6171c50ab7b6ee60f093e6e98b9f7 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H @@ -38,6 +38,7 @@ SourceFiles #include "Switch.H" #include "pointFieldFwd.H" +#include "OFstream.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -82,9 +83,18 @@ protected: //- Output field values flag Switch valueOutput_; + //- Output file pointer + autoPtr<OFstream> outputFilePtr_; + // Functions to be over-ridden from IOoutputFilter class + //- Make the output file + virtual void makeFile(); + + //- Write the output file header + virtual void writeFileHeader() = 0; + //- Update mesh virtual void updateMesh(const mapPolyMesh&); @@ -117,28 +127,28 @@ public: // Access //- Return the name of the geometric source - const word& name() const; + inline const word& name() const; //- Return the reference to the object registry - const objectRegistry& obr() const; + inline const objectRegistry& obr() const; //- Return the active flag - bool active() const; + inline bool active() const; //- Return the switch to send output to Info as well as to file - const Switch& log() const; + inline const Switch& log() const; //- Return the source name - const word& sourceName() const; + inline const word& sourceName() const; //- Return the list of field names - const wordList& fields() const; + inline const wordList& fields() const; //- Return the output field values flag - const Switch& valueOutput() const; + inline const Switch& valueOutput() const; //- Helper function to return the reference to the mesh - const fvMesh& mesh() const; + inline const fvMesh& mesh() const; // Function object functions @@ -146,6 +156,9 @@ public: //- Read from dictionary virtual void read(const dictionary& dict); + //- Write to screen/file + virtual void write(); + //- Execute virtual void execute(); @@ -160,6 +173,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "fieldValueI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H new file mode 100644 index 0000000000000000000000000000000000000000..b5aed9ffdf362c4c15e21e4b787dcb618121c58a --- /dev/null +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "fieldValue.H" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +inline const Foam::word& Foam::fieldValue::name() const +{ + return name_; +} + + +inline const Foam::objectRegistry& Foam::fieldValue::obr() const +{ + return obr_; +} + + +inline bool Foam::fieldValue::active() const +{ + return active_; +} + + +inline const Foam::Switch& Foam::fieldValue::log() const +{ + return log_; +} + + +inline const Foam::word& Foam::fieldValue::sourceName() const +{ + return sourceName_; +} + + +inline const Foam::wordList& Foam::fieldValue::fields() const +{ + return fields_; +} + + +inline const Foam::Switch& Foam::fieldValue::valueOutput() const +{ + return valueOutput_; +} + + +inline const Foam::fvMesh& Foam::fieldValue::mesh() const +{ + return refCast<const fvMesh>(obr_); +} + + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H b/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H index 051299d8755a55384f2b6e575d5172cee05e1002..6905aa0c570b3d61483820e1373f1f4440382abe 100644 --- a/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H +++ b/src/postProcessing/functionObjects/field/streamLine/streamLineFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around streamLines to allow them to be created via - the functions list within controlDict. + the functions entry within controlDict. SourceFiles streamLineFunctionObject.C diff --git a/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C b/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C index f344fa870f151adba1bf62357491b574815b3dc8..c39b6188871026ece1c9cf16b83da7a5d934210b 100644 --- a/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C +++ b/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C @@ -84,7 +84,7 @@ Foam::vector Foam::streamLineParticle::interpolateFields const DynamicList<vector>& U = sampledVectors_[td.UIndex_]; - return U[U.size()-1]; + return U.last(); } @@ -226,21 +226,21 @@ bool Foam::streamLineParticle::move(streamLineParticle::trackData& td) // Transfer particle data into trackData. //td.allPositions_.append(sampledPositions_); td.allPositions_.append(vectorList()); - vectorList& top = td.allPositions_[td.allPositions_.size()-1]; + vectorList& top = td.allPositions_.last(); top.transfer(sampledPositions_); forAll(sampledScalars_, i) { //td.allScalars_[i].append(sampledScalars_[i]); td.allScalars_[i].append(scalarList()); - scalarList& top = td.allScalars_[i][td.allScalars_[i].size()-1]; + scalarList& top = td.allScalars_[i].last(); top.transfer(sampledScalars_[i]); } forAll(sampledVectors_, i) { //td.allVectors_[i].append(sampledVectors_[i]); td.allVectors_[i].append(vectorList()); - vectorList& top = td.allVectors_[i][td.allVectors_[i].size()-1]; + vectorList& top = td.allVectors_[i].last(); top.transfer(sampledVectors_[i]); } } diff --git a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffsFunctionObject.H b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffsFunctionObject.H index 155e1b4537031efd0087273e9e441b39423c1cd8..5d0370a09b6a387924500d051ed3e3f509fecade 100644 --- a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffsFunctionObject.H +++ b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffsFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around forceCoeffs to allow them to be created via - the functions list within controlDict. + the functions entry within controlDict. SourceFiles forceCoeffsFunctionObject.C diff --git a/src/postProcessing/functionObjects/forces/forces/forces.H b/src/postProcessing/functionObjects/forces/forces/forces.H index 42bb67c23bb699b3a38bdef018e5b9e206ff8214..e3f7cf03fbbbd153bbb2ad1d3eb3411d87387699 100644 --- a/src/postProcessing/functionObjects/forces/forces/forces.H +++ b/src/postProcessing/functionObjects/forces/forces/forces.H @@ -160,6 +160,9 @@ protected: //- If the forces file has not been created create it void makeFile(); + //- Output file header information + virtual void writeFileHeader(); + //- Return the effective viscous stress (laminar + turbulent). tmp<volSymmTensorField> devRhoReff() const; @@ -176,9 +179,6 @@ protected: //- Disallow default bitwise assignment void operator=(const forces&); - //- Output file header information - virtual void writeFileHeader(); - public: diff --git a/src/postProcessing/functionObjects/forces/forces/forcesFunctionObject.H b/src/postProcessing/functionObjects/forces/forces/forcesFunctionObject.H index 6cf8bb9a37222c9d009f3f0d05f8e80ba23056ab..5afaf46bed3014a1406d130258524d88d11856d9 100644 --- a/src/postProcessing/functionObjects/forces/forces/forcesFunctionObject.H +++ b/src/postProcessing/functionObjects/forces/forces/forcesFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around forces to allow them to be created via the - functions list within controlDict. + functions entry within controlDict. SourceFiles forcesFunctionObject.C diff --git a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H index ad4f429cabd8feb81cfca8de8748e99b04dd2fd6..2b8feb0f52af8b6e49d4f5c1cb12d332e9bfc824 100644 --- a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H +++ b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around systemCall to allow them to be created via - the functions list within controlDict. + the functions entry within controlDict. SourceFiles systemCallFunctionObject.C diff --git a/src/postProcessing/functionObjects/utilities/Make/files b/src/postProcessing/functionObjects/utilities/Make/files index 40a33c238ddd3983b7817bd096632f1920e2ba60..1812a0b448a534162e144935be7751103339c772 100644 --- a/src/postProcessing/functionObjects/utilities/Make/files +++ b/src/postProcessing/functionObjects/utilities/Make/files @@ -1,7 +1,13 @@ +abortCalculation/abortCalculation.C +abortCalculation/abortCalculationFunctionObject.C + staticPressure/staticPressure.C staticPressure/staticPressureFunctionObject.C dsmcFields/dsmcFields.C dsmcFields/dsmcFieldsFunctionObject.C +timeActivatedFileUpdate/timeActivatedFileUpdate.C +timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.C + LIB = $(FOAM_LIBBIN)/libutilityFunctionObjects diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamInsertNextPoint.H b/src/postProcessing/functionObjects/utilities/abortCalculation/IOabortCalculation.H similarity index 79% rename from applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamInsertNextPoint.H rename to src/postProcessing/functionObjects/utilities/abortCalculation/IOabortCalculation.H index 70f18986845348aeb011c3731ced173bcfc6ddbc..5e4fe444e734f8ed7a17a7734743a4c125ed725e 100644 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamInsertNextPoint.H +++ b/src/postProcessing/functionObjects/utilities/abortCalculation/IOabortCalculation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,26 +22,27 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -InClass - Foam::vtkFoam +Typedef + Foam::IOabortCalculation + +Description + Instance of the generic IOOutputFilter for abortCalculation. \*---------------------------------------------------------------------------*/ -#ifndef vtkFoamInsertNextPoint_H -#define vtkFoamInsertNextPoint_H +#ifndef IOabortCalculation_H +#define IOabortCalculation_H + +#include "abortCalculation.H" +#include "IOOutputFilter.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -inline void vtkFoamInsertNextPoint -( - vtkPoints *points, - const Foam::point& p -) +namespace Foam { - points->InsertNextPoint(p.x(), p.y(), p.z()); + typedef IOOutputFilter<abortCalculation> IOabortCalculation; } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculation.C b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculation.C new file mode 100644 index 0000000000000000000000000000000000000000..980c41e02f34faa8505a3840ee947eb583ea6e8b --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculation.C @@ -0,0 +1,159 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "abortCalculation.H" +#include "dictionary.H" +#include "error.H" +#include "Time.H" +#include "OSspecific.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(abortCalculation, 0); +} + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* Foam::NamedEnum<Foam::abortCalculation::actionType, 3>::names[] = +{ + "noWriteNow", + "writeNow", + "nextWrite" +}; + +const Foam::NamedEnum<Foam::abortCalculation::actionType, 3> + Foam::abortCalculation::actionTypeNames_; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::abortCalculation::removeFile() const +{ + if (isFile(abortFile_)) + { + rm(abortFile_); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::abortCalculation::abortCalculation +( + const word& name, + const objectRegistry& obr, + const dictionary& dict, + const bool loadFromFiles +) +: + name_(name), + obr_(obr), + abortFile_("$FOAM_CASE/" + name), + action_(nextWrite) +{ + abortFile_.expand(); + read(dict); + + // remove any old files from previous runs + removeFile(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::abortCalculation::~abortCalculation() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::abortCalculation::read(const dictionary& dict) +{ + word actionName; + + if (dict.found("action")) + { + action_ = actionTypeNames_.read + ( + dict.lookup("action") + ); + } + else + { + action_ = nextWrite; + } + + if (dict.readIfPresent("fileName", abortFile_)) + { + abortFile_.expand(); + } +} + + +void Foam::abortCalculation::execute() +{ + if (isFile(abortFile_)) + { + switch (action_) + { + case noWriteNow : + obr_.time().stopAt(Time::saNoWriteNow); + Info<< "user requested abort - " + "stop immediately without writing data" << endl; + break; + + case writeNow : + obr_.time().stopAt(Time::saWriteNow); + Info<< "user requested abort - " + "stop immediately with writing data" << endl; + break; + + case nextWrite : + obr_.time().stopAt(Time::saNextWrite); + Info<< "user requested abort - " + "stop after next data write" << endl; + break; + } + } +} + + +void Foam::abortCalculation::end() +{ + removeFile(); +} + + +void Foam::abortCalculation::write() +{ + execute(); +} + + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculation.H b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculation.H new file mode 100644 index 0000000000000000000000000000000000000000..0bec3530d7343d1caad2226f6c0aa0ccf175d73e --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculation.H @@ -0,0 +1,168 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::abortCalculation + +Description + Watches for presence of the named file in the $FOAM_CASE directory + and aborts the calculation if it is present. + + Currently the following action types are supported: + - noWriteNow + - writeNow + - nextWrite + +SourceFiles + abortCalculation.C + IOabortCalculation.H + +\*---------------------------------------------------------------------------*/ + +#ifndef abortCalculation_H +#define abortCalculation_H + +#include "pointFieldFwd.H" +#include "NamedEnum.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class objectRegistry; +class dictionary; +class mapPolyMesh; + +/*---------------------------------------------------------------------------*\ + Class abortCalculation Declaration +\*---------------------------------------------------------------------------*/ + +class abortCalculation +{ +public: + + // Public data + + //- Enumeration defining the type of action + enum actionType + { + noWriteNow, /*!< stop immediately without writing data */ + writeNow, /*!< write data and stop immediately */ + nextWrite /*!< stop the next time data are written */ + }; + +private: + + // Private data + + //- Name of the abort file unless otherwise specified + word name_; + + const objectRegistry& obr_; + + //- The fully-qualified name of the abort file + fileName abortFile_; + + //- Action type names + static const NamedEnum<actionType, 3> actionTypeNames_; + + //- The type of action + actionType action_; + + + // Private Member Functions + + //- Remove abort file. + void removeFile() const; + + //- Disallow default bitwise copy construct + abortCalculation(const abortCalculation&); + + //- Disallow default bitwise assignment + void operator=(const abortCalculation&); + + +public: + + //- Runtime type information + TypeName("abort"); + + + // Constructors + + //- Construct for given objectRegistry and dictionary. + abortCalculation + ( + const word& name, + const objectRegistry&, + const dictionary&, + const bool loadFromFilesUnused = false + ); + + + //- Destructor + virtual ~abortCalculation(); + + + // Member Functions + + //- Return name of the abort file + virtual const word& name() const + { + return name_; + } + + //- Read the dictionary settings + virtual void read(const dictionary&); + + //- Execute, check existence of abort file and take action + virtual void execute(); + + //- Execute at the final time-loop, used for cleanup + virtual void end(); + + //- Execute, check existence of abort file and take action + virtual void write(); + + //- Update for changes of mesh - does nothing + virtual void updateMesh(const mapPolyMesh&) + {} + + //- Update for changes of mesh - does nothing + virtual void movePoints(const pointField&) + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculationFunctionObject.C similarity index 69% rename from src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C rename to src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculationFunctionObject.C index 2f819e826bac49ca1cdf1a7cd803608b4d77435e..e67d1f97fb8effd2dd4f4c75d9d7a1a50666ae6c 100644 --- a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C +++ b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculationFunctionObject.C @@ -24,45 +24,20 @@ License \*---------------------------------------------------------------------------*/ -#include "dsmcCloud.H" +#include "abortCalculationFunctionObject.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(dsmcCloud, 0); -}; - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::dsmcCloud::dsmcCloud -( - const word& cloudName, - const fvMesh& mesh -) -: - DsmcCloud<dsmcParcel>(cloudName, mesh) -{ - dsmcParcel::readFields(*this); + defineNamedTemplateTypeNameAndDebug(abortCalculationFunctionObject, 0); + + addToRunTimeSelectionTable + ( + functionObject, + abortCalculationFunctionObject, + dictionary + ); } - -Foam::dsmcCloud::dsmcCloud -( - const word& cloudName, - const fvMesh& mesh, - const IOdictionary& dsmcInitialiseDict -) -: - DsmcCloud<dsmcParcel>(cloudName, mesh, dsmcInitialiseDict) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::dsmcCloud::~dsmcCloud() -{} - - // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamData.h b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculationFunctionObject.H similarity index 66% rename from applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamData.h rename to src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculationFunctionObject.H index ebb0a7ad810dd03a74ecbbfde812ebad3eafdeff..eadedcc29656c9f113445d75b10aafc3f3b8d480 100644 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/PVFoamReader/vtkFoamData.h +++ b/src/postProcessing/functionObjects/utilities/abortCalculation/abortCalculationFunctionObject.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,46 +22,31 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Class - vtkFoamData +Typedef + Foam::abortCalculationFunctionObject Description + FunctionObject wrapper around abortCalculation to allow it to be created via + the functions entry within controlDict. SourceFiles - vtkFoamData.cxx + abortCalculationFunctionObject.C \*---------------------------------------------------------------------------*/ -#ifndef vtkFoamData_h -#define vtkFoamData_h +#ifndef abortCalculationFunctionObject_H +#define abortCalculationFunctionObject_H -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "vtkDataSetSource.h" +#include "abortCalculation.H" +#include "OutputFilterFunctionObject.H" -/*---------------------------------------------------------------------------*\ - Class vtkFoamData Declaration -\*---------------------------------------------------------------------------*/ +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -class VTK_IO_EXPORT vtkFoamData -: - public vtkDataSetSource +namespace Foam { - -public: - - static vtkFoamData *New(); - vtkTypeRevisionMacro(vtkFoamData,vtkDataSetSource); - - vtkFoamData(); - ~vtkFoamData(); - - void SetNthOutput(int num, vtkDataObject *output) - { - vtkDataSetSource::SetNthOutput(num, output); - } -}; - + typedef OutputFilterFunctionObject<abortCalculation> + abortCalculationFunctionObject; +} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C index 4544afdc459e53f955710bf11c770f2381cb682a..7d72ddd265ddf6e332eacf9ce70083fc11e51daf 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C @@ -62,7 +62,12 @@ Foam::dsmcFields::dsmcFields WarningIn ( "dsmcFields::dsmcFields" - "(const objectRegistry&, const dictionary&)" + "(" + "const word&, " + "const objectRegistry&, " + "const dictionary&, " + "const bool" + ")" ) << "No fvMesh available, deactivating." << nl << endl; } diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H index 758626798c8563a706959d890368ba74f44e9dd3..a6b3db2e53078d4ebbd6b19c1ab36478b14dd304 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around dsmcFields to allow it to be created via - the functions list within controlDict. + the functions entry within controlDict. SourceFiles dsmcFieldsFunctionObject.C diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C index b746987f3c17ed9ad2789622cc0ea2c56c29fd0b..3f082410a5a2247674f48ee880558fe044f4629d 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C +++ b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C @@ -68,7 +68,12 @@ Foam::staticPressure::staticPressure WarningIn ( "staticPressure::staticPressure" - "(const objectRegistry&, const dictionary&)" + "(" + "const word&, " + "const objectRegistry&, " + "const dictionary&, " + "const bool" + ")" ) << "No fvMesh available, deactivating." << nl << endl; } @@ -81,7 +86,12 @@ Foam::staticPressure::staticPressure WarningIn ( "staticPressure::staticPressure" - "(const objectRegistry&, const dictionary&)" + "(" + "const word&, " + "const objectRegistry&, " + "const dictionary&, " + "const bool" + ")" ) << "Pressure is not kinematic pressure, deactivating." << nl << endl; } diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H index 0ddb184d22edc949f28fb4cdcc79c02d1bfc3364..71c1049ef007b90e1fe7ede3e35406cdb181d265 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H +++ b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around staticPressure to allow it to be created via - the functions list within controlDict. + the functions entry within controlDict. SourceFiles staticPressureFunctionObject.C diff --git a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddFields.H b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.H similarity index 71% rename from applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddFields.H rename to src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.H index 3136edd5fee3a16ee467440779a2a05540257fce..e0e197f74c9134ba8baab89df769cec62821e750 100644 --- a/applications/utilities/postProcessing/graphics/PV2Readers/PVFoamReader/vtkFoam/vtkFoamAddFields.H +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/IOtimeActivatedFileUpdate.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,37 +22,27 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -InClass - Foam::vtkFoam +Typedef + Foam::IOtimeActivatedFileUpdate + +Description + Instance of the generic IOOutputFilter for timeActivatedFileUpdate. \*---------------------------------------------------------------------------*/ -#ifndef vtkFoamAddFields_H -#define vtkFoamAddFields_H +#ifndef IOtimeActivatedFileUpdate_H +#define IOtimeActivatedFileUpdate_H + +#include "timeActivatedFileUpdate.H" +#include "IOOutputFilter.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -template<class GeoField> -void Foam::vtkFoam::addFields -( - vtkDataArraySelection *fieldSelection, - const IOobjectList& objects -) +namespace Foam { - IOobjectList fieldObjects(objects.lookupClass(GeoField::typeName)); - - for - ( - IOobjectList::iterator iter = fieldObjects.begin(); - iter != fieldObjects.end(); - ++iter - ) - { - fieldSelection->AddArray(iter()->name().c_str()); - } + typedef IOOutputFilter<timeActivatedFileUpdate> IOtimeActivatedFileUpdate; } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/controlDict b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..635cefc4e8fd4366f2dc341e7213e05a8ffff09d --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/controlDict @@ -0,0 +1,67 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application icoFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0.5; + +deltaT 0.005; + +writeControl timeStep; + +writeInterval 20; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +functions +{ + fileUpdate1 + { + type timeActivatedFileUpdate; + functionObjectLibs ("libutilityFunctionObjects.so"); + outputControl timeStep; + outputInterval 1; + fileToUpdate "$FOAM_CASE/system/fvSolution"; + timeVsFile + ( + (-1 "$FOAM_CASE/system/fvSolution.0") + (0.10 "$FOAM_CASE/system/fvSolution.10") + (0.20 "$FOAM_CASE/system/fvSolution.20") + (0.35 "$FOAM_CASE/system/fvSolution.35") + ); + } +} + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C new file mode 100644 index 0000000000000000000000000000000000000000..7504fb5bfa58fb8bf8b1011d51da2f504aec3777 --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C @@ -0,0 +1,146 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "timeActivatedFileUpdate.H" +#include "objectRegistry.H" +#include "Time.H" +#include "dictionary.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(timeActivatedFileUpdate, 0); +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::timeActivatedFileUpdate::updateFile() +{ + label i = lastIndex_; + while + ( + i < timeVsFile_.size()-1 + && timeVsFile_[i+1].first() < obr_.time().value() + ) + { + i++; + } + + if (i > lastIndex_) + { + Info<< nl << type() << ": copying file" << nl << timeVsFile_[i].second() + << nl << "to:" << nl << fileToUpdate_ << nl << endl; + + cp(timeVsFile_[i].second(), fileToUpdate_); + lastIndex_ = i; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::timeActivatedFileUpdate::timeActivatedFileUpdate +( + const word& name, + const objectRegistry& obr, + const dictionary& dict, + const bool loadFromFiles +) +: + name_(name), + obr_(obr), + active_(true), + fileToUpdate_(dict.lookup("fileToUpdate")), + timeVsFile_(), + lastIndex_(-1) +{ + read(dict); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::timeActivatedFileUpdate::~timeActivatedFileUpdate() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::timeActivatedFileUpdate::read(const dictionary& dict) +{ + if (active_) + { + dict.lookup("fileToUpdate") >> fileToUpdate_; + dict.lookup("timeVsFile") >> timeVsFile_; + + lastIndex_ = -1; + fileToUpdate_.expand(); + + Info<< type() << ": time vs file list:" << nl; + forAll(timeVsFile_, i) + { + timeVsFile_[i].second() = timeVsFile_[i].second().expand(); + if (!isFile(timeVsFile_[i].second())) + { + FatalErrorIn("timeActivatedFileUpdate::read(const dictionary&)") + << "File: " << timeVsFile_[i].second() << " not found" + << nl << exit(FatalError); + } + + Info<< " " << timeVsFile_[i].first() << tab + << timeVsFile_[i].second() << endl; + } + Info<< endl; + + updateFile(); + } +} + + +void Foam::timeActivatedFileUpdate::execute() +{ + if (active_) + { + updateFile(); + } +} + + +void Foam::timeActivatedFileUpdate::end() +{ + // Do nothing +} + + +void Foam::timeActivatedFileUpdate::write() +{ + // Do nothing +} + + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H new file mode 100644 index 0000000000000000000000000000000000000000..c304c483bd457a3b2fb1a31fb2cb1e4f9cabc747 --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.H @@ -0,0 +1,173 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::timeActivatedFileUpdate + +Description + Performs a file copy/replacement once a specified time has been reached. + + Example usage to update the fvSolution dictionary at various times + throughout the calculation: + + fileUpdate1 + { + type timeActivatedFileUpdate; + functionObjectLibs ("libutilityFunctionObjects.so"); + outputControl timeStep; + outputInterval 1; + fileToUpdate "$FOAM_CASE/system/fvSolution"; + timeVsFile + ( + (-1 "$FOAM_CASE/system/fvSolution.0") + (0.10 "$FOAM_CASE/system/fvSolution.10") + (0.20 "$FOAM_CASE/system/fvSolution.20") + (0.35 "$FOAM_CASE/system/fvSolution.35") + ); + } + + +SourceFiles + timeActivatedFileUpdate.C + IOtimeActivatedFileUpdate.H + +\*---------------------------------------------------------------------------*/ + +#ifndef timeActivatedFileUpdate_H +#define timeActivatedFileUpdate_H + +#include "pointFieldFwd.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class objectRegistry; +class dictionary; +class mapPolyMesh; + +/*---------------------------------------------------------------------------*\ + Class timeActivatedFileUpdate Declaration +\*---------------------------------------------------------------------------*/ + +class timeActivatedFileUpdate +{ + // Private data + + //- Name of this set of timeActivatedFileUpdate objects + word name_; + + //- Owner database + const objectRegistry& obr_; + + //- On/off switch + bool active_; + + //- Name of file to update + fileName fileToUpdate_; + + //- List of times vs filenames + List<Tuple2<scalar, fileName> > timeVsFile_; + + //- Index of last file copied + label lastIndex_; + + + // Private Member Functions + + //- Update file + void updateFile(); + + //- Disallow default bitwise copy construct + timeActivatedFileUpdate(const timeActivatedFileUpdate&); + + //- Disallow default bitwise assignment + void operator=(const timeActivatedFileUpdate&); + + +public: + + //- Runtime type information + TypeName("timeActivatedFileUpdate"); + + + // Constructors + + //- Construct for given objectRegistry and dictionary. + // Allow the possibility to load fields from files + timeActivatedFileUpdate + ( + const word& name, + const objectRegistry&, + const dictionary&, + const bool loadFromFiles = false + ); + + + //- Destructor + virtual ~timeActivatedFileUpdate(); + + + // Member Functions + + //- Return name of the set of timeActivatedFileUpdate + virtual const word& name() const + { + return name_; + } + + //- Read the timeActivatedFileUpdate data + virtual void read(const dictionary&); + + //- Execute, currently does nothing + virtual void execute(); + + //- Execute at the final time-loop, currently does nothing + virtual void end(); + + //- Calculate the timeActivatedFileUpdate and write + virtual void write(); + + //- Update for changes of mesh + virtual void updateMesh(const mapPolyMesh&) + {} + + //- Update for changes of mesh + virtual void movePoints(const pointField&) + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.C b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.C new file mode 100644 index 0000000000000000000000000000000000000000..29a26be3d4bfcef606d8149ecf77867ccf43e3f8 --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.C @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "timeActivatedFileUpdateFunctionObject.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineNamedTemplateTypeNameAndDebug + ( + timeActivatedFileUpdateFunctionObject, + 0 + ); + + addToRunTimeSelectionTable + ( + functionObject, + timeActivatedFileUpdateFunctionObject, + dictionary + ); +} + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.H b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.H new file mode 100644 index 0000000000000000000000000000000000000000..c0dd16ab9876ec596d505e0d163dffabdc845bec --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.H @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Typedef + Foam::timeActivatedFileUpdateFunctionObject + +Description + FunctionObject wrapper around timeActivatedFileUpdate to allow it to be + created via the functions list within controlDict. + +SourceFiles + timeActivatedFileUpdateFunctionObject.C + +\*---------------------------------------------------------------------------*/ + +#ifndef timeActivatedFileUpdateFunctionObject_H +#define timeActivatedFileUpdateFunctionObject_H + +#include "timeActivatedFileUpdate.H" +#include "OutputFilterFunctionObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef OutputFilterFunctionObject<timeActivatedFileUpdate> + timeActivatedFileUpdateFunctionObject; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/sampling/Make/files b/src/sampling/Make/files index 3442889069920a5cbc37654598d20e839a85450d..e9d78df7a07c94f20ec4625723c94e0fd9e75811 100644 --- a/src/sampling/Make/files +++ b/src/sampling/Make/files @@ -1,5 +1,6 @@ probes/probes.C -probes/probesFunctionObject.C +probes/probesGrouping.C +probes/probesFunctionObject/probesFunctionObject.C sampledSet/cloud/cloudSet.C sampledSet/coordSet/coordSet.C @@ -9,6 +10,7 @@ sampledSet/midPoint/midPointSet.C sampledSet/midPointAndFace/midPointAndFaceSet.C sampledSet/sampledSet/sampledSet.C sampledSet/sampledSets/sampledSets.C +sampledSet/sampledSets/sampledSetsGrouping.C sampledSet/sampledSetsFunctionObject/sampledSetsFunctionObject.C sampledSet/triSurfaceMeshPointSet/triSurfaceMeshPointSet.C sampledSet/uniform/uniformSet.C @@ -34,6 +36,7 @@ sampledSurface/distanceSurface/distanceSurface.C sampledSurface/sampledCuttingPlane/sampledCuttingPlane.C sampledSurface/sampledSurface/sampledSurface.C sampledSurface/sampledSurfaces/sampledSurfaces.C +sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C sampledSurface/sampledSurfacesFunctionObject/sampledSurfacesFunctionObject.C sampledSurface/thresholdCellFaces/thresholdCellFaces.C sampledSurface/thresholdCellFaces/sampledThresholdCellFaces.C diff --git a/src/sampling/cuttingPlane/cuttingPlane.C b/src/sampling/cuttingPlane/cuttingPlane.C index 09585ec5e7c658b440a4df58f9d7c2f20913a30c..80a4e72bd5dbb7be4a45ef14b84a65e537ff31c2 100644 --- a/src/sampling/cuttingPlane/cuttingPlane.C +++ b/src/sampling/cuttingPlane/cuttingPlane.C @@ -258,6 +258,7 @@ bool Foam::cuttingPlane::walkCell void Foam::cuttingPlane::walkCellCuts ( const primitiveMesh& mesh, + const bool triangulate, const UList<label>& edgePoint ) { @@ -293,7 +294,7 @@ void Foam::cuttingPlane::walkCellCuts // Check for the unexpected ... if (startEdgeI == -1) { - FatalErrorIn("Foam::cuttingPlane::walkCellCuts") + FatalErrorIn("Foam::cuttingPlane::walkCellCuts(..)") << "Cannot find cut edge for cut cell " << cellI << abort(FatalError); } @@ -318,10 +319,18 @@ void Foam::cuttingPlane::walkCellCuts f = f.reverseFace(); } - // the cut faces are usually quite ugly, so always triangulate - label nTri = f.triangles(cutPoints, dynCutFaces); - while (nTri--) + // the cut faces are usually quite ugly, so optionally triangulate + if (triangulate) { + label nTri = f.triangles(cutPoints, dynCutFaces); + while (nTri--) + { + dynCutCells.append(cellI); + } + } + else + { + dynCutFaces.append(f); dynCutCells.append(cellI); } } @@ -346,12 +355,13 @@ Foam::cuttingPlane::cuttingPlane ( const plane& pln, const primitiveMesh& mesh, + const bool triangulate, const UList<label>& cellIdLabels ) : plane(pln) { - reCut(mesh, cellIdLabels); + reCut(mesh, triangulate, cellIdLabels); } @@ -362,6 +372,7 @@ Foam::cuttingPlane::cuttingPlane void Foam::cuttingPlane::reCut ( const primitiveMesh& mesh, + const bool triangulate, const UList<label>& cellIdLabels ) { @@ -379,7 +390,7 @@ void Foam::cuttingPlane::reCut intersectEdges(mesh, dotProducts, edgePoint); // Do topological walk around cell to find closed loop. - walkCellCuts(mesh, edgePoint); + walkCellCuts(mesh, triangulate, edgePoint); } diff --git a/src/sampling/cuttingPlane/cuttingPlane.H b/src/sampling/cuttingPlane/cuttingPlane.H index 6804a9ab18197c687bbb9f84a311cd3662751e0a..aba51a78edf6cb84796f8fc49c9947acf01ddb1f 100644 --- a/src/sampling/cuttingPlane/cuttingPlane.H +++ b/src/sampling/cuttingPlane/cuttingPlane.H @@ -105,6 +105,7 @@ class cuttingPlane void walkCellCuts ( const primitiveMesh& mesh, + const bool triangulate, const UList<label>& edgePoint ); @@ -122,6 +123,7 @@ protected: void reCut ( const primitiveMesh&, + const bool triangulate, const UList<label>& cellIdLabels = UList<label>::null() ); @@ -138,6 +140,7 @@ public: ( const plane&, const primitiveMesh&, + const bool triangulate, const UList<label>& cellIdLabels = UList<label>::null() ); diff --git a/src/sampling/include/mapPatch.H b/src/sampling/include/mapPatch.H index aabec554a8d904fb599f71d3ca2e69acbf0ef540..371317a0ab2a5747a95817610ee5110e48de3556 100644 --- a/src/sampling/include/mapPatch.H +++ b/src/sampling/include/mapPatch.H @@ -1,8 +1,8 @@ - if(planeMapping && targetPatchNamePresent && cut.cut()) + if (planeMapping && targetPatchNamePresent && cut.cut()) { //Map variables U, phi & k - //Info << typeInfo("isoLESmodel") << endl; - //Info << "SGS model" << sgsModel.type() << endl; + //Info<< typeInfo("isoLESmodel") << endl; + //Info<< "SGS model" << sgsModel.type() << endl; scalarField planek(cutCells.size()); scalarField planeNuTilda(cutCells.size()); @@ -10,7 +10,7 @@ forAll(cutCells, cCellsI) { - if(sgsModel.type() == "SpalartAllmaras") + if (sgsModel.type() == "SpalartAllmaras") { planeNuTilda[cCellsI] = sgsModel.nuTilda()()[cutCells[cCellsI]]; } @@ -21,23 +21,23 @@ planeU[cCellsI] = U[cutCells[cCellsI]]; } - if(sgsModel.type() == "SpalartAllmaras") + if (sgsModel.type() == "SpalartAllmaras") { - Info << "Mapping NuTilda." << endl; + Info<< "Mapping NuTilda." << endl; sgsModel.nuTilda()().boundaryField()[targetPatchNumber] == interPatch.faceInterpolate(planeNuTilda)(); } else { - Info << "Mapping k." << endl; + Info<< "Mapping k." << endl; sgsModel.k()().boundaryField()[targetPatchNumber] == interPatch.faceInterpolate(planek)(); } - + U.boundaryField()[targetPatchNumber] == interPatch.faceInterpolate(planeU)(); -/* sgsModel.k()().boundaryField()[targetPatchNumber] == +/* sgsModel.k()().boundaryField()[targetPatchNumber] == toPatchInter.pointToFaceInterpolate ( interPatch.pointInterpolate @@ -49,7 +49,7 @@ ) ); - U.boundaryField()[targetPatchNumber] == + U.boundaryField()[targetPatchNumber] == toPatchInter.pointToFaceInterpolate ( interPatch.pointInterpolate @@ -62,7 +62,7 @@ ); */ - + scalar Q = sum ( mesh.Sf().boundaryField()[targetPatchNumber] @@ -74,11 +74,11 @@ mesh.Sf().boundaryField()[targetPatchNumber] & Ubar.value() ); - + U.boundaryField()[targetPatchNumber] == U.boundaryField()[targetPatchNumber] * (Qbar/Q); - - Info << "Mass flux correction factor: " << (Qbar/Q) << endl; + + Info<< "Mass flux correction factor: " << (Qbar/Q) << endl; phi.boundaryField()[targetPatchNumber] == ( diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshAddressing.C b/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshAddressing.C index 8233d24ea58b74af1e8161628959f68d0c83488d..0015c5618ecb0537e80fbc8fa175310c042cd9a3 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshAddressing.C +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshAddressing.C @@ -36,14 +36,9 @@ Description #include "octreeDataCell.H" #include "octreeDataFace.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void meshToMesh::calcAddressing() +void Foam::meshToMesh::calcAddressing() { if (debug) { @@ -225,7 +220,7 @@ void meshToMesh::calcAddressing() } -void meshToMesh::cellAddresses +void Foam::meshToMesh::cellAddresses ( labelList& cellAddressing_, const pointField& points, @@ -356,8 +351,4 @@ void meshToMesh::cellAddresses } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshWeights.C b/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshWeights.C index 0133dee52b0cb2e07450a9a96e83c7169c10e03f..be2900f50b543ff53870afc18c54f5f364c05376 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshWeights.C +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/calculateMeshToMeshWeights.C @@ -26,14 +26,9 @@ License #include "meshToMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void meshToMesh::calculateInverseDistanceWeights() const +void Foam::meshToMesh::calculateInverseDistanceWeights() const { if (debug) { @@ -93,7 +88,7 @@ void meshToMesh::calculateInverseDistanceWeights() const invDistCoeffs[celli][ni + 1] = invDist; sumInvDist += invDist; } - + // divide by the total inverse-distance forAll (invDistCoeffs[celli], i) { @@ -107,19 +102,15 @@ void meshToMesh::calculateInverseDistanceWeights() const // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -const scalarListList& meshToMesh::inverseDistanceWeights() const +const Foam::scalarListList& Foam::meshToMesh::inverseDistanceWeights() const { if (!inverseDistanceWeightsPtr_) { calculateInverseDistanceWeights(); } - + return *inverseDistanceWeightsPtr_; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C index 2046bd1a3ad95e63ecf86a9d16efbb6134067563..07bff4786eeef4e18d15e00452e27c7b7c0342c9 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C @@ -28,20 +28,15 @@ License #include "processorFvPatch.H" #include "demandDrivenData.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTypeNameAndDebug(meshToMesh, 0); - -const scalar meshToMesh::directHitTol = 1e-5; +defineTypeNameAndDebug(Foam::meshToMesh, 0); +const Foam::scalar Foam::meshToMesh::directHitTol = 1e-5; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -meshToMesh::meshToMesh +Foam::meshToMesh::meshToMesh ( const fvMesh& meshFrom, const fvMesh& meshTo, @@ -114,7 +109,7 @@ meshToMesh::meshToMesh } -meshToMesh::meshToMesh +Foam::meshToMesh::meshToMesh ( const fvMesh& meshFrom, const fvMesh& meshTo @@ -159,7 +154,7 @@ meshToMesh::meshToMesh << exit(FatalError); } - if + if ( fromMesh_.boundaryMesh()[patchi].type() != toMesh_.boundaryMesh()[patchi].type() @@ -201,14 +196,10 @@ meshToMesh::meshToMesh // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -meshToMesh::~meshToMesh() +Foam::meshToMesh::~meshToMesh() { deleteDemandDrivenData(inverseDistanceWeightsPtr_); } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.H b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.H index 83b0e2de234576ee7664d45cf506d71d4931a88d..fe1dc68b05111684e5eaeef6ce9789ba3348474a 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.H +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.H @@ -56,7 +56,7 @@ class octree; class octreeDataCell; /*---------------------------------------------------------------------------*\ - Class meshToMesh Declaration + Class meshToMesh Declaration \*---------------------------------------------------------------------------*/ class meshToMesh @@ -207,7 +207,7 @@ public: { return fromMesh_; } - + const fvMesh& toMesh() const { return toMesh_; diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMeshInterpolate.C b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMeshInterpolate.C index f63f2dea835d2fe8fd245f5464f36cb1c5cc18a0..0bc573de88bfbdcf9e269f4a409adfb678f80f97 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMeshInterpolate.C +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMeshInterpolate.C @@ -30,15 +30,10 @@ License #include "SubField.H" #include "mixedFvPatchField.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -void meshToMesh::mapField +void Foam::meshToMesh::mapField ( Field<Type>& toF, const Field<Type>& fromVf, @@ -60,7 +55,7 @@ void meshToMesh::mapField template<class Type> -void meshToMesh::interpolateField +void Foam::meshToMesh::interpolateField ( Field<Type>& toF, const GeometricField<Type, fvPatchField, volMesh>& fromVf, @@ -79,7 +74,7 @@ void meshToMesh::interpolateField { const labelList& neighbours = cc[adr[celli]]; const scalarList& w = weights[celli]; - + toF[celli] = fromVf[adr[celli]]*w[0]; for (label ni = 1; ni < w.size(); ni++) @@ -92,7 +87,7 @@ void meshToMesh::interpolateField template<class Type> -void meshToMesh::interpolateField +void Foam::meshToMesh::interpolateField ( Field<Type>& toF, const GeometricField<Type, fvPatchField, volMesh>& fromVf, @@ -118,7 +113,7 @@ void meshToMesh::interpolateField template<class Type> -void meshToMesh::interpolateInternalField +void Foam::meshToMesh::interpolateInternalField ( Field<Type>& toF, const GeometricField<Type, fvPatchField, volMesh>& fromVf, @@ -160,7 +155,7 @@ void meshToMesh::interpolateInternalField case INTERPOLATE: interpolateField ( - toF, + toF, fromVf, cellAddressing_, inverseDistanceWeights() @@ -170,7 +165,7 @@ void meshToMesh::interpolateInternalField case CELL_POINT_INTERPOLATE: interpolateField ( - toF, + toF, fromVf, cellAddressing_, toMesh_.cellCentres() @@ -190,7 +185,7 @@ void meshToMesh::interpolateInternalField template<class Type> -void meshToMesh::interpolateInternalField +void Foam::meshToMesh::interpolateInternalField ( Field<Type>& toF, const tmp<GeometricField<Type, fvPatchField, volMesh> >& tfromVf, @@ -203,7 +198,7 @@ void meshToMesh::interpolateInternalField template<class Type> -void meshToMesh::interpolate +void Foam::meshToMesh::interpolate ( GeometricField<Type, fvPatchField, volMesh>& toVf, const GeometricField<Type, fvPatchField, volMesh>& fromVf, @@ -268,7 +263,7 @@ void meshToMesh::interpolate ).refValue() = toVf.boundaryField()[patchi]; } } - else if + else if ( patchMap_.found(toPatch.name()) && fromMeshPatches_.found(patchMap_.find(toPatch.name())()) @@ -300,7 +295,7 @@ void meshToMesh::interpolate template<class Type> -void meshToMesh::interpolate +void Foam::meshToMesh::interpolate ( GeometricField<Type, fvPatchField, volMesh>& toVf, const tmp<GeometricField<Type, fvPatchField, volMesh> >& tfromVf, @@ -313,7 +308,8 @@ void meshToMesh::interpolate template<class Type> -tmp<GeometricField<Type, fvPatchField, volMesh> > meshToMesh::interpolate +Foam::tmp< Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh> > +Foam::meshToMesh::interpolate ( const GeometricField<Type, fvPatchField, volMesh>& fromVf, meshToMesh::order ord @@ -387,7 +383,8 @@ tmp<GeometricField<Type, fvPatchField, volMesh> > meshToMesh::interpolate template<class Type> -tmp<GeometricField<Type, fvPatchField, volMesh> > meshToMesh::interpolate +Foam::tmp< Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh> > +Foam::meshToMesh::interpolate ( const tmp<GeometricField<Type, fvPatchField, volMesh> >& tfromVf, meshToMesh::order ord @@ -401,8 +398,4 @@ tmp<GeometricField<Type, fvPatchField, volMesh> > meshToMesh::interpolate } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/sampling/probes/probes.C b/src/sampling/probes/probes.C index 5a6686aad04b6c7a5e17169f42bdcd91a92e3360..8eee0048ca86bbb9047b71d16ab850db35a080f9 100644 --- a/src/sampling/probes/probes.C +++ b/src/sampling/probes/probes.C @@ -32,243 +32,163 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -namespace Foam -{ - defineTypeNameAndDebug(probes, 0); -} +defineTypeNameAndDebug(Foam::probes, 0); + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::probes::findCells(const fvMesh& mesh) { - if (cellList_.empty()) + cellList_.clear(); + cellList_.setSize(size()); + + forAll(*this, probeI) { - cellList_.setSize(probeLocations_.size()); + const vector& location = operator[](probeI); - forAll(probeLocations_, probeI) - { - cellList_[probeI] = mesh.findCell(probeLocations_[probeI]); + cellList_[probeI] = mesh.findCell(location); - if (debug && cellList_[probeI] != -1) - { - Pout<< "probes : found point " << probeLocations_[probeI] - << " in cell " << cellList_[probeI] << endl; - } + if (debug && cellList_[probeI] != -1) + { + Pout<< "probes : found point " << location + << " in cell " << cellList_[probeI] << endl; } + } - // Check if all probes have been found. - forAll(cellList_, probeI) - { - label cellI = cellList_[probeI]; + // Check if all probes have been found. + forAll(cellList_, probeI) + { + const vector& location = operator[](probeI); + label cellI = cellList_[probeI]; - // Check at least one processor with cell. - reduce(cellI, maxOp<label>()); + // Check at least one processor with cell. + reduce(cellI, maxOp<label>()); - if (cellI == -1) + if (cellI == -1) + { + if (Pstream::master()) { - if (Pstream::master()) - { - WarningIn("probes::read()") - << "Did not find location " << probeLocations_[probeI] - << " in any cell. Skipping location." << endl; - } + WarningIn("probes::read()") + << "Did not find location " << location + << " in any cell. Skipping location." << endl; } - else + } + else + { + // Make sure location not on two domains. + if (cellList_[probeI] != -1 && cellList_[probeI] != cellI) { - // Make sure location not on two domains. - if (cellList_[probeI] != -1 && cellList_[probeI] != cellI) - { - WarningIn("probes::read()") - << "Location " << probeLocations_[probeI] - << " seems to be on multiple domains:" - << " cell " << cellList_[probeI] - << " on my domain " << Pstream::myProcNo() + WarningIn("probes::read()") + << "Location " << location + << " seems to be on multiple domains:" + << " cell " << cellList_[probeI] + << " on my domain " << Pstream::myProcNo() << " and cell " << cellI << " on some other domain." - << endl - << "This might happen if the probe location is on" - << " a processor patch. Change the location slightly" - << " to prevent this." << endl; - } + << endl + << "This might happen if the probe location is on" + << " a processor patch. Change the location slightly" + << " to prevent this." << endl; } } } } -bool Foam::probes::checkFieldTypes() +Foam::label Foam::probes::prepare() { - wordList fieldTypes(fieldNames_.size()); + const label nFields = classifyFields(); - // check files for a particular time - if (loadFromFiles_) - { - forAll(fieldNames_, fieldI) - { - IOobject io - ( - fieldNames_[fieldI], - obr_.time().timeName(), - refCast<const polyMesh>(obr_), - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (io.headerOk()) - { - fieldTypes[fieldI] = io.headerClassName(); - } - else - { - fieldTypes[fieldI] = "(notFound)"; - } - } - } - else + // adjust file streams + if (Pstream::master()) { - // check objectRegistry - forAll(fieldNames_, fieldI) - { - objectRegistry::const_iterator iter = - obr_.find(fieldNames_[fieldI]); - - if (iter != obr_.end()) - { - fieldTypes[fieldI] = iter()->type(); - } - else - { - fieldTypes[fieldI] = "(notFound)"; - } - } - } + wordHashSet currentFields; + currentFields.insert(scalarFields_); + currentFields.insert(vectorFields_); + currentFields.insert(sphericalTensorFields_); + currentFields.insert(symmTensorFields_); + currentFields.insert(tensorFields_); - label nFields = 0; - - // classify fieldTypes - nFields += countFields(scalarFields_, fieldTypes); - nFields += countFields(vectorFields_, fieldTypes); - nFields += countFields(sphericalTensorFields_, fieldTypes); - nFields += countFields(symmTensorFields_, fieldTypes); - nFields += countFields(tensorFields_, fieldTypes); + if (debug) + { + Info<< "Probing fields:" << currentFields << nl + << "Probing locations:" << *this << nl + << endl; + } - // concatenate all the lists into foundFields - wordList foundFields(nFields); - label fieldI = 0; - forAll(scalarFields_, i) - { - foundFields[fieldI++] = scalarFields_[i]; - } - forAll(vectorFields_, i) - { - foundFields[fieldI++] = vectorFields_[i]; - } - forAll(sphericalTensorFields_, i) - { - foundFields[fieldI++] = sphericalTensorFields_[i]; - } - forAll(symmTensorFields_, i) - { - foundFields[fieldI++] = symmTensorFields_[i]; - } - forAll(tensorFields_, i) - { - foundFields[fieldI++] = tensorFields_[i]; - } - - if (Pstream::master()) - { fileName probeDir; - fileName probeSubDir = name_; - if (obr_.name() != polyMesh::defaultRegion) + if (mesh_.name() != polyMesh::defaultRegion) { - probeSubDir = probeSubDir/obr_.name(); + probeSubDir = probeSubDir/mesh_.name(); } - probeSubDir = probeSubDir/obr_.time().timeName(); + probeSubDir = probeSubDir/mesh_.time().timeName(); if (Pstream::parRun()) { // Put in undecomposed case // (Note: gives problems for distributed data running) - probeDir = obr_.time().path()/".."/probeSubDir; + probeDir = mesh_.time().path()/".."/probeSubDir; } else { - probeDir = obr_.time().path()/probeSubDir; + probeDir = mesh_.time().path()/probeSubDir; } - // Close the file if any fields have been removed. + // ignore known fields, close streams for fields that no longer exist forAllIter(HashPtrTable<OFstream>, probeFilePtrs_, iter) { - if (findIndex(foundFields, iter.key()) == -1) + if (!currentFields.erase(iter.key())) { if (debug) { - Pout<< "close stream: " << iter()->name() << endl; + Info<< "close probe stream: " << iter()->name() << endl; } delete probeFilePtrs_.remove(iter); } } - // Open new files for new fields. Keep existing files. - - probeFilePtrs_.resize(2*foundFields.size()); - - forAll(foundFields, fieldI) + // currentFields now just has the new fields - open streams for them + forAllConstIter(wordHashSet, currentFields, iter) { - const word& fldName = foundFields[fieldI]; + const word& fieldName = iter.key(); + + // Create directory if does not exist. + mkDir(probeDir); - // Check if added field. If so open a stream for it. + OFstream* sPtr = new OFstream(probeDir/fieldName); - if (!probeFilePtrs_.found(fldName)) + if (debug) { - // Create directory if does not exist. - mkDir(probeDir); + Info<< "open probe stream: " << sPtr->name() << endl; + } - OFstream* sPtr = new OFstream(probeDir/fldName); + probeFilePtrs_.insert(fieldName, sPtr); - if (debug) - { - Pout<< "open stream: " << sPtr->name() << endl; - } + unsigned int w = IOstream::defaultPrecision() + 7; - probeFilePtrs_.insert(fldName, sPtr); - - unsigned int w = IOstream::defaultPrecision() + 7; + for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) + { + *sPtr<< '#' << setw(IOstream::defaultPrecision() + 6) + << vector::componentNames[cmpt]; - for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) + forAll(*this, probeI) { - *sPtr<< '#' << setw(IOstream::defaultPrecision() + 6) - << vector::componentNames[cmpt]; - - forAll(probeLocations_, probeI) - { - *sPtr<< ' ' << setw(w) << probeLocations_[probeI][cmpt]; - } - *sPtr << endl; + *sPtr<< ' ' << setw(w) << operator[](probeI)[cmpt]; } - - *sPtr<< '#' << setw(IOstream::defaultPrecision() + 6) - << "Time" << endl; + *sPtr << endl; } - } - if (debug) - { - Pout<< "Probing fields:" << foundFields << nl - << "Probing locations:" << probeLocations_ << nl - << endl; + *sPtr<< '#' << setw(IOstream::defaultPrecision() + 6) + << "Time" << endl; } } - - return nFields > 0; + return nFields; } @@ -282,18 +202,10 @@ Foam::probes::probes const bool loadFromFiles ) : + pointField(0), name_(name), - obr_(obr), - loadFromFiles_(loadFromFiles), - fieldNames_(0), - probeLocations_(0), - scalarFields_(), - vectorFields_(), - sphericalTensorFields_(), - symmTensorFields_(), - tensorFields_(), - cellList_(0), - probeFilePtrs_(0) + mesh_(refCast<const fvMesh>(obr)), + loadFromFiles_(loadFromFiles) { read(dict); } @@ -321,7 +233,7 @@ void Foam::probes::end() void Foam::probes::write() { - if (probeLocations_.size() && checkFieldTypes()) + if (size() && prepare()) { sampleAndWrite(scalarFields_); sampleAndWrite(vectorFields_); @@ -334,13 +246,12 @@ void Foam::probes::write() void Foam::probes::read(const dictionary& dict) { - dict.lookup("fields") >> fieldNames_; - dict.lookup("probeLocations") >> probeLocations_; + dict.lookup("probeLocations") >> *this; + dict.lookup("fields") >> fieldSelection_; - // Force all cell locations to be redetermined - cellList_.clear(); - findCells(refCast<const fvMesh>(obr_)); - checkFieldTypes(); + // redetermined all cell locations + findCells(mesh_); + prepare(); } diff --git a/src/sampling/probes/probes.H b/src/sampling/probes/probes.H index 11a7f581c16215cc4f7fe448163c368af9240c7c..8fd31b889d8bdd7af18a897492f5208bbfee5cd8 100644 --- a/src/sampling/probes/probes.H +++ b/src/sampling/probes/probes.H @@ -44,6 +44,8 @@ SourceFiles #include "pointField.H" #include "volFieldsFwd.H" +#include "wordReList.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -60,6 +62,8 @@ class mapPolyMesh; \*---------------------------------------------------------------------------*/ class probes +: + public pointField { // Private classes @@ -67,20 +71,15 @@ class probes template<class Type> class fieldGroup : - public wordList + public DynamicList<word> { public: //- Construct null fieldGroup() : - wordList() + DynamicList<word>(0) {} - //- Construct for a list of field names - fieldGroup(const wordList& fieldNames) - : - wordList(fieldNames) - {} }; @@ -90,8 +89,8 @@ class probes // Also used as the name of the probes directory. word name_; - //- Const reference to objectRegistry - const objectRegistry& obr_; + //- Const reference to fvMesh + const fvMesh& mesh_; //- Load fields from files (not from objectRegistry) bool loadFromFiles_; @@ -100,11 +99,7 @@ class probes // Read from dictonary //- Names of fields to probe - wordList fieldNames_; - - //- Locations to probe - vectorField probeLocations_; - + wordReList fieldSelection_; // Calculated @@ -124,19 +119,21 @@ class probes // Private Member Functions + //- Clear old field groups + void clearFieldGroups(); + + //- Append fieldName to the appropriate group + label appendFieldGroup(const word& fieldName, const word& fieldType); + + //- Classify field types, returns the number of fields + label classifyFields(); + //- Find cells containing probes void findCells(const fvMesh&); - //- classify field types, return true if nFields > 0 - bool checkFieldTypes(); - - //- Find the fields in the list of the given type, return count - template<class Type> - label countFields - ( - fieldGroup<Type>& fieldList, - const wordList& fieldTypes - ) const; + //- Classify field type and Open/close file streams, + // returns number of fields + label prepare(); //- Sample and write a particular volume field template<class Type> @@ -146,7 +143,7 @@ class probes ); //- Sample and write all the fields of the given type - template <class Type> + template<class Type> void sampleAndWrite(const fieldGroup<Type>&); //- Disallow default bitwise copy construct @@ -188,15 +185,21 @@ public: } //- Return names of fields to probe - virtual const wordList& fieldNames() const + virtual const wordReList& fieldNames() const { - return fieldNames_; + return fieldSelection_; } //- Return locations to probe - virtual const vectorField& probeLocations() const + virtual const pointField& probeLocations() const + { + return *this; + } + + //- Return location for probe i + virtual const point& probe(const label i) const { - return probeLocations_; + return operator[](i); } //- Cells to be probed (obtained from the locations) diff --git a/src/sampling/probes/probesFunctionObject.C b/src/sampling/probes/probesFunctionObject/probesFunctionObject.C similarity index 100% rename from src/sampling/probes/probesFunctionObject.C rename to src/sampling/probes/probesFunctionObject/probesFunctionObject.C diff --git a/src/sampling/probes/probesFunctionObject.H b/src/sampling/probes/probesFunctionObject/probesFunctionObject.H similarity index 97% rename from src/sampling/probes/probesFunctionObject.H rename to src/sampling/probes/probesFunctionObject/probesFunctionObject.H index 63f52327c8a7d93e8c652c8d878311bae19930cb..9bedf137f21fd04c481bec0e795711faa07ae47d 100644 --- a/src/sampling/probes/probesFunctionObject.H +++ b/src/sampling/probes/probesFunctionObject/probesFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around probes to allow them to be created via the - functions list within controlDict. + functions entry within controlDict. SourceFiles probesFunctionObject.C diff --git a/src/sampling/probes/probesGrouping.C b/src/sampling/probes/probesGrouping.C new file mode 100644 index 0000000000000000000000000000000000000000..f3f6bae494c9db63c113263d0531687c160f86fd --- /dev/null +++ b/src/sampling/probes/probesGrouping.C @@ -0,0 +1,125 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "probes.H" +#include "volFields.H" +#include "IOobjectList.H" +#include "stringListOps.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::probes::clearFieldGroups() +{ + scalarFields_.clear(); + vectorFields_.clear(); + sphericalTensorFields_.clear(); + symmTensorFields_.clear(); + tensorFields_.clear(); +} + + +Foam::label Foam::probes::appendFieldGroup +( + const word& fieldName, + const word& fieldType +) +{ + if (fieldType == volScalarField::typeName) + { + scalarFields_.append(fieldName); + return 1; + } + else if (fieldType == volVectorField::typeName) + { + vectorFields_.append(fieldName); + return 1; + } + else if (fieldType == volSphericalTensorField::typeName) + { + sphericalTensorFields_.append(fieldName); + return 1; + } + else if (fieldType == volSymmTensorField::typeName) + { + symmTensorFields_.append(fieldName); + return 1; + } + else if (fieldType == volTensorField::typeName) + { + tensorFields_.append(fieldName); + return 1; + } + + return 0; +} + + +Foam::label Foam::probes::classifyFields() +{ + label nFields = 0; + clearFieldGroups(); + + if (loadFromFiles_) + { + // check files for a particular time + IOobjectList objects(mesh_, mesh_.time().timeName()); + wordList allFields = objects.sortedNames(); + + labelList indices = findStrings(fieldSelection_, allFields); + + forAll(indices, fieldI) + { + const word& fieldName = allFields[indices[fieldI]]; + + nFields += appendFieldGroup + ( + fieldName, + objects.find(fieldName)()->headerClassName() + ); + } + } + else + { + // check currently available fields + wordList allFields = mesh_.sortedNames(); + labelList indices = findStrings(fieldSelection_, allFields); + + forAll(indices, fieldI) + { + const word& fieldName = allFields[indices[fieldI]]; + + nFields += appendFieldGroup + ( + fieldName, + mesh_.find(fieldName)()->type() + ); + } + } + + return nFields; +} + +// ************************************************************************* // diff --git a/src/sampling/probes/probesTemplates.C b/src/sampling/probes/probesTemplates.C index 0d6f52a1cd28d546ec5f5f3961779b623d214924..450d41663a801bd229cb78147a927e5b2fbb50d8 100644 --- a/src/sampling/probes/probesTemplates.C +++ b/src/sampling/probes/probesTemplates.C @@ -63,35 +63,6 @@ public: // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -template<class Type> -Foam::label Foam::probes::countFields -( - fieldGroup<Type>& fieldList, - const wordList& fieldTypes -) const -{ - fieldList.setSize(fieldNames_.size()); - label nFields = 0; - - forAll(fieldNames_, fieldI) - { - if - ( - fieldTypes[fieldI] - == GeometricField<Type, fvPatchField, volMesh>::typeName - ) - { - fieldList[nFields] = fieldNames_[fieldI]; - nFields++; - } - } - - fieldList.setSize(nFields); - - return nFields; -} - - template<class Type> void Foam::probes::sampleAndWrite ( @@ -103,15 +74,15 @@ void Foam::probes::sampleAndWrite if (Pstream::master()) { unsigned int w = IOstream::defaultPrecision() + 7; - OFstream& probeStream = *probeFilePtrs_[vField.name()]; + OFstream& os = *probeFilePtrs_[vField.name()]; - probeStream << setw(w) << vField.time().value(); + os << setw(w) << vField.time().value(); forAll(values, probeI) { - probeStream << ' ' << setw(w) << values[probeI]; + os << ' ' << setw(w) << values[probeI]; } - probeStream << endl; + os << endl; } } @@ -133,30 +104,30 @@ void Foam::probes::sampleAndWrite IOobject ( fields[fieldI], - obr_.time().timeName(), - refCast<const polyMesh>(obr_), + mesh_.time().timeName(), + mesh_, IOobject::MUST_READ, IOobject::NO_WRITE, false ), - refCast<const fvMesh>(obr_) + mesh_ ) ); } else { - objectRegistry::const_iterator iter = obr_.find(fields[fieldI]); + objectRegistry::const_iterator iter = mesh_.find(fields[fieldI]); if ( - iter != obr_.end() + iter != objectRegistry::end() && iter()->type() == GeometricField<Type, fvPatchField, volMesh>::typeName ) { sampleAndWrite ( - obr_.lookupObject + mesh_.lookupObject <GeometricField<Type, fvPatchField, volMesh> > ( fields[fieldI] @@ -181,12 +152,12 @@ Foam::probes::sample tmp<Field<Type> > tValues ( - new Field<Type>(probeLocations_.size(), unsetVal) + new Field<Type>(this->size(), unsetVal) ); Field<Type>& values = tValues(); - forAll(probeLocations_, probeI) + forAll(*this, probeI) { if (cellList_[probeI] >= 0) { @@ -207,7 +178,7 @@ Foam::probes::sample(const word& fieldName) const { return sample ( - obr_.lookupObject<GeometricField<Type, fvPatchField, volMesh> > + mesh_.lookupObject<GeometricField<Type, fvPatchField, volMesh> > ( fieldName ) diff --git a/src/sampling/sampledSet/curve/curveSet.C b/src/sampling/sampledSet/curve/curveSet.C index 7b0a0b8e0350641344626e3cf5692ec0c5155c74..b294ab360008372043b6c3482198d4919d226e51 100644 --- a/src/sampling/sampledSet/curve/curveSet.C +++ b/src/sampling/sampledSet/curve/curveSet.C @@ -60,7 +60,7 @@ bool Foam::curveSet::trackToBoundary // Alias const point& trackPt = singleParticle.position(); - while(true) + while (true) { // Local geometry info const vector offset = sampleCoords_[sampleI+1] - sampleCoords_[sampleI]; @@ -145,7 +145,7 @@ void Foam::curveSet::calcSamples << sampleCoords_ << exit(FatalError); } point oldPoint = sampleCoords_[0]; - for(label sampleI = 1; sampleI < sampleCoords_.size(); sampleI++) + for (label sampleI = 1; sampleI < sampleCoords_.size(); sampleI++) { if (mag(sampleCoords_[sampleI] - oldPoint) < SMALL) { @@ -169,7 +169,7 @@ void Foam::curveSet::calcSamples label sampleI = 0; point lastSample(GREAT, GREAT, GREAT); - while(true) + while (true) { // Get boundary intersection point trackPt; @@ -243,7 +243,7 @@ void Foam::curveSet::calcSamples // No intersection found. Go to next point sampleI++; } - } while((trackCellI == -1) && (sampleI < sampleCoords_.size() - 1)); + } while ((trackCellI == -1) && (sampleI < sampleCoords_.size() - 1)); if (sampleI == sampleCoords_.size() - 1) { @@ -278,7 +278,7 @@ void Foam::curveSet::calcSamples ); // fill sampleSegments - for(label i = samplingPts.size() - 1; i >= startSegmentI; --i) + for (label i = samplingPts.size() - 1; i >= startSegmentI; --i) { samplingSegments.append(segmentI); } diff --git a/src/sampling/sampledSet/face/faceOnlySet.C b/src/sampling/sampledSet/face/faceOnlySet.C index fba774f802159abdb6eb7f326b5981fa9284420f..e66d05884b5ddc59809d7a4d74536eb11505bd40 100644 --- a/src/sampling/sampledSet/face/faceOnlySet.C +++ b/src/sampling/sampledSet/face/faceOnlySet.C @@ -65,7 +65,7 @@ bool Foam::faceOnlySet::trackToBoundary // Alias const point& trackPt = singleParticle.position(); - while(true) + while (true) { point oldPoint = trackPt; @@ -199,7 +199,7 @@ void Foam::faceOnlySet::calcSamples // index in bHits; current boundary intersection label bHitI = 1; - while(true) + while (true) { if (trackFaceI != -1) { @@ -230,7 +230,7 @@ void Foam::faceOnlySet::calcSamples ); // fill sampleSegments - for(label i = samplingPts.size() - 1; i >= startSegmentI; --i) + for (label i = samplingPts.size() - 1; i >= startSegmentI; --i) { samplingSegments.append(segmentI); } diff --git a/src/sampling/sampledSet/midPoint/midPointSet.C b/src/sampling/sampledSet/midPoint/midPointSet.C index 0ec01f6571bc5e614b298d4c74f9408ad6b4c1a7..ffe75103426d13902535d360f17298e7c512b985 100644 --- a/src/sampling/sampledSet/midPoint/midPointSet.C +++ b/src/sampling/sampledSet/midPoint/midPointSet.C @@ -54,7 +54,7 @@ void Foam::midPointSet::genSamples() label sampleI = 0; - while(true) + while (true) { // calculate midpoint between sampleI and sampleI+1 (if in same segment) while diff --git a/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C b/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C index 7e110ef9018ea74f28d8eca539965cd0533c40ff..e5a2a9caea21fcaeff78013fb01c99a502f437ca 100644 --- a/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C +++ b/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C @@ -56,7 +56,7 @@ void Foam::midPointAndFaceSet::genSamples() label sampleI = 0; - while(true) + while (true) { // sampleI is start of segment diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.C b/src/sampling/sampledSet/sampledSets/sampledSets.C index a964cab15293f9e5ccbf107391496604eccee903..9131b0196ed7ce5758d6c52250beb8bba91286fe 100644 --- a/src/sampling/sampledSet/sampledSets/sampledSets.C +++ b/src/sampling/sampledSet/sampledSets/sampledSets.C @@ -34,103 +34,12 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -namespace Foam -{ - defineTypeNameAndDebug(sampledSets, 0); -} - +defineTypeNameAndDebug(Foam::sampledSets, 0); bool Foam::sampledSets::verbose_ = false; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -bool Foam::sampledSets::checkFieldTypes() -{ - wordList fieldTypes(fieldNames_.size()); - - // check files for a particular time - if (loadFromFiles_) - { - forAll(fieldNames_, fieldi) - { - IOobject io - ( - fieldNames_[fieldi], - mesh_.time().timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (io.headerOk()) - { - fieldTypes[fieldi] = io.headerClassName(); - } - else - { - fieldTypes[fieldi] = "(notFound)"; - } - } - } - else - { - // check objectRegistry - forAll(fieldNames_, fieldi) - { - objectRegistry::const_iterator iter = - mesh_.find(fieldNames_[fieldi]); - - if (iter != mesh_.objectRegistry::end()) - { - fieldTypes[fieldi] = iter()->type(); - } - else - { - fieldTypes[fieldi] = "(notFound)"; - } - } - } - - - label nFields = 0; - - // classify fieldTypes - nFields += grep(scalarFields_, fieldTypes); - nFields += grep(vectorFields_, fieldTypes); - nFields += grep(sphericalTensorFields_, fieldTypes); - nFields += grep(symmTensorFields_, fieldTypes); - nFields += grep(tensorFields_, fieldTypes); - - if (Pstream::master()) - { - if (debug) - { - Pout<< "timeName = " << mesh_.time().timeName() << nl - << "scalarFields " << scalarFields_ << nl - << "vectorFields " << vectorFields_ << nl - << "sphTensorFields " << sphericalTensorFields_ << nl - << "symTensorFields " << symmTensorFields_ <<nl - << "tensorFields " << tensorFields_ <<nl; - } - - if (nFields > 0) - { - if (debug) - { - Pout<< "Creating directory " - << outputPath_/mesh_.time().timeName() - << nl << endl; - } - - mkDir(outputPath_/mesh_.time().timeName()); - } - } - - return nFields > 0; -} - - void Foam::sampledSets::combineSampledSets ( PtrList<coordSet>& masterSampledSets, @@ -147,9 +56,9 @@ void Foam::sampledSets::combineSampledSets const PtrList<sampledSet>& sampledSets = *this; - forAll(sampledSets, seti) + forAll(sampledSets, setI) { - const sampledSet& samplePts = sampledSets[seti]; + const sampledSet& samplePts = sampledSets[setI]; // Collect data from all processors List<List<point> > gatheredPts(Pstream::nProcs()); @@ -190,7 +99,7 @@ void Foam::sampledSets::combineSampledSets // Sort curveDist and use to fill masterSamplePts SortableList<scalar> sortedDist(allCurveDist); - indexSets[seti] = sortedDist.indices(); + indexSets[setI] = sortedDist.indices(); // Get reference point (note: only master has all points) point refPt; @@ -207,12 +116,12 @@ void Foam::sampledSets::combineSampledSets masterSampledSets.set ( - seti, + setI, new coordSet ( samplePts.name(), samplePts.axis(), - List<point>(UIndirectList<point>(allPts, indexSets[seti])), + List<point>(UIndirectList<point>(allPts, indexSets[setI])), refPt ) ); @@ -236,7 +145,6 @@ Foam::sampledSets::sampledSets loadFromFiles_(loadFromFiles), outputPath_(fileName::null), searchEngine_(mesh_, true), - fieldNames_(), interpolationScheme_(word::null), writeFormat_(word::null) { @@ -285,13 +193,43 @@ void Foam::sampledSets::end() void Foam::sampledSets::write() { - if (size() && checkFieldTypes()) + if (size()) { - sampleAndWrite(scalarFields_); - sampleAndWrite(vectorFields_); - sampleAndWrite(sphericalTensorFields_); - sampleAndWrite(symmTensorFields_); - sampleAndWrite(tensorFields_); + const label nFields = classifyFields(); + + if (Pstream::master()) + { + if (debug) + { + Pout<< "timeName = " << mesh_.time().timeName() << nl + << "scalarFields " << scalarFields_ << nl + << "vectorFields " << vectorFields_ << nl + << "sphTensorFields " << sphericalTensorFields_ << nl + << "symTensorFields " << symmTensorFields_ <<nl + << "tensorFields " << tensorFields_ <<nl; + } + + if (nFields) + { + if (debug) + { + Pout<< "Creating directory " + << outputPath_/mesh_.time().timeName() + << nl << endl; + } + + mkDir(outputPath_/mesh_.time().timeName()); + } + } + + if (nFields) + { + sampleAndWrite(scalarFields_); + sampleAndWrite(vectorFields_); + sampleAndWrite(sphericalTensorFields_); + sampleAndWrite(symmTensorFields_); + sampleAndWrite(tensorFields_); + } } } @@ -299,20 +237,20 @@ void Foam::sampledSets::write() void Foam::sampledSets::read(const dictionary& dict) { dict_ = dict; + dict_.lookup("fields") >> fieldSelection_; + clearFieldGroups(); - fieldNames_ = wordList(dict_.lookup("fields")); - - interpolationScheme_ = "cell"; - dict_.readIfPresent("interpolationScheme", interpolationScheme_); - - writeFormat_ = "null"; - dict_.readIfPresent("setFormat", writeFormat_); + interpolationScheme_ = dict.lookupOrDefault<word> + ( + "interpolationScheme", + "cell" + ); + writeFormat_ = dict.lookupOrDefault<word> + ( + "setFormat", + "null" + ); - scalarFields_.clear(); - vectorFields_.clear(); - sphericalTensorFields_.clear(); - symmTensorFields_.clear(); - tensorFields_.clear(); PtrList<sampledSet> newList ( @@ -324,7 +262,7 @@ void Foam::sampledSets::read(const dictionary& dict) if (Pstream::master() && debug) { - Pout<< "sample fields:" << fieldNames_ << nl + Pout<< "sample fields:" << fieldSelection_ << nl << "sample sets:" << nl << "(" << nl; forAll(*this, si) diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.H b/src/sampling/sampledSet/sampledSets/sampledSets.H index da38f9e1c50ef5d43adf9426fb0517dbadd94a9a..7302d26deb9f6119a5072dbada454c7e2c1dd3d4 100644 --- a/src/sampling/sampledSet/sampledSets/sampledSets.H +++ b/src/sampling/sampledSet/sampledSets/sampledSets.H @@ -43,6 +43,7 @@ SourceFiles #include "interpolation.H" #include "coordSet.H" #include "writer.H" +#include "wordReList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -54,7 +55,7 @@ class dictionary; class fvMesh; /*---------------------------------------------------------------------------*\ - Class sampledSets Declaration + Class sampledSets Declaration \*---------------------------------------------------------------------------*/ class sampledSets @@ -67,25 +68,40 @@ class sampledSets template<class Type> class fieldGroup : - public wordList + public DynamicList<word> { public: - //- Set formatter - autoPtr<writer<Type> > formatter; + //- The set formatter + autoPtr< writer<Type> > formatter; //- Construct null fieldGroup() : - wordList(0), + DynamicList<word>(0), formatter(NULL) {} + //- Construct for a particular format + fieldGroup(const word& writeFormat) + : + DynamicList<word>(0), + formatter(writer<Type>::New(writeFormat)) + {} + + //- Reset format and field list void clear() { - wordList::clear(); + DynamicList<word>::clear(); formatter.clear(); } + + //- Assign a new formatter + void operator=(const word& writeFormat) + { + formatter = writer<Type>::New(writeFormat); + } + }; @@ -161,7 +177,7 @@ class sampledSets // Read from dictonary //- Names of fields to sample - wordList fieldNames_; + wordReList fieldSelection_; //- Interpolation scheme to use word interpolationScheme_; @@ -187,16 +203,14 @@ class sampledSets // Private Member Functions - //- Classify field types, return true if nFields > 0 - bool checkFieldTypes(); + //- Clear old field groups + void clearFieldGroups(); - //- Find the fields in the list of the given type, return count - template<class Type> - label grep - ( - fieldGroup<Type>& fieldList, - const wordList& fieldTypes - ) const; + //- Append fieldName to the appropriate group + label appendFieldGroup(const word& fieldName, const word& fieldType); + + //- Classify field types, returns the number of fields + label classifyFields(); //- Combine points from all processors. Sort by curveDist and produce // index list. Valid result only on master processor. diff --git a/src/sampling/sampledSet/sampledSets/sampledSetsGrouping.C b/src/sampling/sampledSet/sampledSets/sampledSetsGrouping.C new file mode 100644 index 0000000000000000000000000000000000000000..6e9fb68f0ec1a1c938a0fafe5f04838689a6430e --- /dev/null +++ b/src/sampling/sampledSet/sampledSets/sampledSetsGrouping.C @@ -0,0 +1,125 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "sampledSets.H" +#include "volFields.H" +#include "IOobjectList.H" +#include "stringListOps.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::sampledSets::clearFieldGroups() +{ + scalarFields_.clear(); + vectorFields_.clear(); + sphericalTensorFields_.clear(); + symmTensorFields_.clear(); + tensorFields_.clear(); +} + + +Foam::label Foam::sampledSets::appendFieldGroup +( + const word& fieldName, + const word& fieldType +) +{ + if (fieldType == volScalarField::typeName) + { + scalarFields_.append(fieldName); + return 1; + } + else if (fieldType == volVectorField::typeName) + { + vectorFields_.append(fieldName); + return 1; + } + else if (fieldType == volSphericalTensorField::typeName) + { + sphericalTensorFields_.append(fieldName); + return 1; + } + else if (fieldType == volSymmTensorField::typeName) + { + symmTensorFields_.append(fieldName); + return 1; + } + else if (fieldType == volTensorField::typeName) + { + tensorFields_.append(fieldName); + return 1; + } + + return 0; +} + + +Foam::label Foam::sampledSets::classifyFields() +{ + label nFields = 0; + clearFieldGroups(); + + if (loadFromFiles_) + { + // check files for a particular time + IOobjectList objects(mesh_, mesh_.time().timeName()); + wordList allFields = objects.sortedNames(); + + labelList indices = findStrings(fieldSelection_, allFields); + + forAll(indices, fieldI) + { + const word& fieldName = allFields[indices[fieldI]]; + + nFields += appendFieldGroup + ( + fieldName, + objects.find(fieldName)()->headerClassName() + ); + } + } + else + { + // check currently available fields + wordList allFields = mesh_.sortedNames(); + labelList indices = findStrings(fieldSelection_, allFields); + + forAll(indices, fieldI) + { + const word& fieldName = allFields[indices[fieldI]]; + + nFields += appendFieldGroup + ( + fieldName, + mesh_.find(fieldName)()->type() + ); + } + } + + return nFields; +} + +// ************************************************************************* // diff --git a/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C b/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C index c5cfecb8a8fb6c850e638676ca6f6fd255a81cb7..1450c8c7bf3fedfcff568906ccc8bebf4046c84f 100644 --- a/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C +++ b/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C @@ -46,10 +46,10 @@ Foam::sampledSets::volFieldSampler<Type>::volFieldSampler interpolation<Type>::New(interpolationScheme, field) ); - forAll(samplers, seti) + forAll(samplers, setI) { - Field<Type>& values = this->operator[](seti); - const sampledSet& samples = samplers[seti]; + Field<Type>& values = this->operator[](setI); + const sampledSet& samples = samplers[setI]; values.setSize(samples.size()); forAll(samples, samplei) @@ -79,10 +79,10 @@ Foam::sampledSets::volFieldSampler<Type>::volFieldSampler List<Field<Type> >(samplers.size()), name_(field.name()) { - forAll(samplers, seti) + forAll(samplers, setI) { - Field<Type>& values = this->operator[](seti); - const sampledSet& samples = samplers[seti]; + Field<Type>& values = this->operator[](setI); + const sampledSet& samples = samplers[setI]; values.setSize(samples.size()); forAll(samples, samplei) @@ -105,41 +105,12 @@ Foam::sampledSets::volFieldSampler<Type>::volFieldSampler {} -template<class Type> -Foam::label Foam::sampledSets::grep -( - fieldGroup<Type>& fieldList, - const wordList& fieldTypes -) const -{ - fieldList.setSize(fieldNames_.size()); - label nFields = 0; - - forAll(fieldNames_, fieldi) - { - if - ( - fieldTypes[fieldi] - == GeometricField<Type, fvPatchField, volMesh>::typeName - ) - { - fieldList[nFields] = fieldNames_[fieldi]; - nFields++; - } - } - - fieldList.setSize(nFields); - - return nFields; -} - - template<class Type> void Foam::sampledSets::writeSampleFile ( const coordSet& masterSampleSet, const PtrList<volFieldSampler<Type> >& masterFields, - const label seti, + const label setI, const fileName& timeDir, const writer<Type>& formatter ) @@ -150,7 +121,7 @@ void Foam::sampledSets::writeSampleFile forAll(masterFields, fieldi) { valueSetNames[fieldi] = masterFields[fieldi].name(); - valueSets[fieldi] = &masterFields[fieldi][seti]; + valueSets[fieldi] = &masterFields[fieldi][setI]; } fileName fName @@ -180,11 +151,11 @@ void Foam::sampledSets::combineSampledValues { List<Field<T> > masterValues(indexSets.size()); - forAll(indexSets, seti) + forAll(indexSets, setI) { // Collect data from all processors List<Field<T> > gatheredData(Pstream::nProcs()); - gatheredData[Pstream::myProcNo()] = sampledFields[fieldi][seti]; + gatheredData[Pstream::myProcNo()] = sampledFields[fieldi][setI]; Pstream::gatherList(gatheredData); if (Pstream::master()) @@ -198,10 +169,10 @@ void Foam::sampledSets::combineSampledValues ) ); - masterValues[seti] = UIndirectList<T> + masterValues[setI] = UIndirectList<T> ( allData, - indexSets[seti] + indexSets[setI] )(); } } @@ -232,7 +203,7 @@ void Foam::sampledSets::sampleAndWrite // Create or use existing writer if (fields.formatter.empty()) { - fields.formatter = writer<Type>::New(writeFormat_); + fields = writeFormat_; } // Storage for interpolated values @@ -326,13 +297,13 @@ void Foam::sampledSets::sampleAndWrite if (Pstream::master()) { - forAll(masterSampledSets_, seti) + forAll(masterSampledSets_, setI) { writeSampleFile ( - masterSampledSets_[seti], + masterSampledSets_[setI], masterFields, - seti, + setI, outputPath_/mesh_.time().timeName(), fields.formatter() ); diff --git a/src/sampling/sampledSet/sampledSetsFunctionObject/sampledSetsFunctionObject.H b/src/sampling/sampledSet/sampledSetsFunctionObject/sampledSetsFunctionObject.H index b2111ceb6154bc74077d2aca0992e2175f6291a6..c021bce3f68336217669413e10c053a19cad03ed 100644 --- a/src/sampling/sampledSet/sampledSetsFunctionObject/sampledSetsFunctionObject.H +++ b/src/sampling/sampledSet/sampledSetsFunctionObject/sampledSetsFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around sets to allow them to be created via the - functions list within controlDict. + functions entry within controlDict. SourceFiles sampledSetsFunctionObject.C diff --git a/src/sampling/sampledSet/uniform/uniformSet.C b/src/sampling/sampledSet/uniform/uniformSet.C index 9b25ba42345fec8675b38487d194cf3d82286c00..ee293d6588ec8690993459ba0e4084bd5388973d 100644 --- a/src/sampling/sampledSet/uniform/uniformSet.C +++ b/src/sampling/sampledSet/uniform/uniformSet.C @@ -65,7 +65,7 @@ bool Foam::uniformSet::nextSample samplePt += offset; sampleI++; - for(; sampleI < nPoints_; sampleI++) + for (; sampleI < nPoints_; sampleI++) { scalar s = (samplePt - currentPt) & normOffset; @@ -103,7 +103,7 @@ bool Foam::uniformSet::trackToBoundary // Alias const point& trackPt = singleParticle.position(); - while(true) + while (true) { // Find next samplePt on/after trackPt. Update samplePt, sampleI if (!nextSample(trackPt, offset, smallDist, samplePt, sampleI)) @@ -305,7 +305,7 @@ void Foam::uniformSet::calcSamples // index in bHits; current boundary intersection label bHitI = 1; - while(true) + while (true) { // Initialize tracking starting from trackPt Cloud<passiveParticle> particles(mesh(), IDLList<passiveParticle>()); @@ -329,7 +329,7 @@ void Foam::uniformSet::calcSamples ); // fill sampleSegments - for(label i = samplingPts.size() - 1; i >= startSegmentI; --i) + for (label i = samplingPts.size() - 1; i >= startSegmentI; --i) { samplingSegments.append(segmentI); } diff --git a/src/sampling/sampledSet/writers/vtk/vtkSetWriter.C b/src/sampling/sampledSet/writers/vtk/vtkSetWriter.C index f8172ea5b3bc3446bb376f3102dcee3aa6715fd2..54d7e96a40f5287efbb9dd20e39481228e882927 100644 --- a/src/sampling/sampledSet/writers/vtk/vtkSetWriter.C +++ b/src/sampling/sampledSet/writers/vtk/vtkSetWriter.C @@ -153,7 +153,7 @@ void Foam::vtkSetWriter<Type>::write label globalPtI = 0; forAll(tracks, trackI) { - const coordSet& points = tracks[trackI]; + const coordSet& points = tracks[trackI]; os << points.size(); forAll(points, i) @@ -164,7 +164,7 @@ void Foam::vtkSetWriter<Type>::write os << nl; } } - + os << "POINT_DATA " << nPoints << nl << " FIELD attributes " << valueSetNames.size() << nl; diff --git a/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceCell.C b/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceCell.C index b9e3eaf7b5a54e146a42e2a0590f784453b582a9..3193ca6414b2b333289d0b60facb7a700ef70b0c 100644 --- a/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceCell.C +++ b/src/sampling/sampledSurface/isoSurface/sampledIsoSurfaceCell.C @@ -243,7 +243,7 @@ bool Foam::sampledIsoSurfaceCell::expire() { return false; } - + // force update prevTimeIndex_ = -1; return true; diff --git a/src/sampling/sampledSurface/sampledPlane/sampledPlane.C b/src/sampling/sampledSurface/sampledPlane/sampledPlane.C index c5ce93f1d09e8752f87f69bf67493dc0e5e7bb0b..1f03cdcf36c6b603171961f57c18bf426a8a8a95 100644 --- a/src/sampling/sampledSurface/sampledPlane/sampledPlane.C +++ b/src/sampling/sampledSurface/sampledPlane/sampledPlane.C @@ -150,11 +150,11 @@ bool Foam::sampledPlane::update() if (zoneId < 0) { - reCut(mesh()); + reCut(mesh(), true); // always triangulate. Note:Make option? } else { - reCut(mesh(), mesh().cellZones()[zoneId]); + reCut(mesh(), true, mesh().cellZones()[zoneId]); } if (debug) diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C index d6b9613f6f15db7b091654e5d0bffded16ced5a1..a5155a9f49f24eef79aafc8e2d988adf5aa47405 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C @@ -35,6 +35,10 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +defineTypeNameAndDebug(Foam::sampledSurfaces, 0); +bool Foam::sampledSurfaces::verbose_ = false; +Foam::scalar Foam::sampledSurfaces::mergeTol_ = 1e-10; + namespace Foam { //- Used to offset faces in Pstream::combineOffset @@ -60,101 +64,11 @@ namespace Foam } }; - - defineTypeNameAndDebug(sampledSurfaces, 0); } -bool Foam::sampledSurfaces::verbose_(false); -Foam::scalar Foam::sampledSurfaces::mergeTol_(1e-10); - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -Foam::label Foam::sampledSurfaces::classifyFieldTypes() -{ - label nFields = 0; - - scalarFields_.clear(); - vectorFields_.clear(); - sphericalTensorFields_.clear(); - symmTensorFields_.clear(); - tensorFields_.clear(); - - forAll(fieldNames_, fieldI) - { - const word& fieldName = fieldNames_[fieldI]; - word fieldType = ""; - - // check files for a particular time - if (loadFromFiles_) - { - IOobject io - ( - fieldName, - mesh_.time().timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (io.headerOk()) - { - fieldType = io.headerClassName(); - } - else - { - continue; - } - } - else - { - // check objectRegistry - objectRegistry::const_iterator iter = mesh_.find(fieldName); - - if (iter != mesh_.objectRegistry::end()) - { - fieldType = iter()->type(); - } - else - { - continue; - } - } - - - if (fieldType == volScalarField::typeName) - { - scalarFields_.append(fieldName); - nFields++; - } - else if (fieldType == volVectorField::typeName) - { - vectorFields_.append(fieldName); - nFields++; - } - else if (fieldType == volSphericalTensorField::typeName) - { - sphericalTensorFields_.append(fieldName); - nFields++; - } - else if (fieldType == volSymmTensorField::typeName) - { - symmTensorFields_.append(fieldName); - nFields++; - } - else if (fieldType == volTensorField::typeName) - { - tensorFields_.append(fieldName); - nFields++; - } - - } - - return nFields; -} - - void Foam::sampledSurfaces::writeGeometry() const { // Write to time directory under outputPath_ @@ -208,7 +122,7 @@ Foam::sampledSurfaces::sampledSurfaces mesh_(refCast<const fvMesh>(obr)), loadFromFiles_(loadFromFiles), outputPath_(fileName::null), - fieldNames_(), + fieldSelection_(), interpolationScheme_(word::null), writeFormat_(word::null), mergeList_(), @@ -265,7 +179,7 @@ void Foam::sampledSurfaces::write() // finalize surfaces, merge points etc. update(); - const label nFields = classifyFieldTypes(); + const label nFields = classifyFields(); if (Pstream::master()) { @@ -286,8 +200,8 @@ void Foam::sampledSurfaces::write() mkDir(outputPath_/mesh_.time().timeName()); } - // write geometry first if required, or when no fields would otherwise - // be written + // write geometry first if required, + // or when no fields would otherwise be written if (nFields == 0 || genericFormatter_->separateFiles()) { writeGeometry(); @@ -304,15 +218,8 @@ void Foam::sampledSurfaces::write() void Foam::sampledSurfaces::read(const dictionary& dict) { - fieldNames_ = wordList(dict.lookup("fields")); - - const label nFields = fieldNames_.size(); - - scalarFields_.reset(nFields); - vectorFields_.reset(nFields); - sphericalTensorFields_.reset(nFields); - symmTensorFields_.reset(nFields); - tensorFields_.reset(nFields); + dict.lookup("fields") >> fieldSelection_; + clearFieldGroups(); interpolationScheme_ = dict.lookupOrDefault<word> ( @@ -335,7 +242,6 @@ void Foam::sampledSurfaces::read(const dictionary& dict) dict.lookup("surfaces"), sampledSurface::iNew(mesh_) ); - transfer(newList); if (Pstream::parRun()) @@ -348,7 +254,7 @@ void Foam::sampledSurfaces::read(const dictionary& dict) if (Pstream::master() && debug) { - Pout<< "sample fields:" << fieldNames_ << nl + Pout<< "sample fields:" << fieldSelection_ << nl << "sample surfaces:" << nl << "(" << nl; forAll(*this, surfI) diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H index 4ad59c486f70e1fb8271fddee07bdc03eaf54a47..66b6472ff923f2ceee9f255c7555133bd005e7c1 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H @@ -41,6 +41,7 @@ SourceFiles #include "sampledSurface.H" #include "surfaceWriter.H" #include "volFieldsFwd.H" +#include "wordReList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,7 +52,7 @@ class fvMesh; class dictionary; /*---------------------------------------------------------------------------*\ - Class sampledSurfaces Declaration + Class sampledSurfaces Declaration \*---------------------------------------------------------------------------*/ class sampledSurfaces @@ -68,7 +69,7 @@ class sampledSurfaces { public: - //- Surface formatter + //- The surface formatter autoPtr< surfaceWriter<Type> > formatter; //- Construct null @@ -85,34 +86,19 @@ class sampledSurfaces formatter(surfaceWriter<Type>::New(writeFormat)) {} - //- Construct for a particular surface format and a list of field - // names - fieldGroup - ( - const word& writeFormat, - const wordList& fieldNames - ) - : - DynamicList<word>(fieldNames), - formatter(surfaceWriter<Type>::New(writeFormat)) - {} - - void reset(const label nElem) + //- Reset format and field list + void clear() { + DynamicList<word>::clear(); formatter.clear(); - DynamicList<word>::setCapacity(nElem); - DynamicList<word>::clear(); } + //- Assign a new formatter void operator=(const word& writeFormat) { formatter = surfaceWriter<Type>::New(writeFormat); } - void operator=(const wordList& fieldNames) - { - DynamicList<word>::operator=(fieldNames); - } }; @@ -161,7 +147,7 @@ class sampledSurfaces // Read from dictonary //- Names of fields to sample - wordList fieldNames_; + wordReList fieldSelection_; //- Interpolation scheme to use word interpolationScheme_; @@ -191,8 +177,14 @@ class sampledSurfaces // Private Member Functions + //- Clear old field groups + void clearFieldGroups(); + + //- Append fieldName to the appropriate group + label appendFieldGroup(const word& fieldName, const word& fieldType); + //- Classify field types, returns the number of fields - label classifyFieldTypes(); + label classifyFields(); //- Write geometry only void writeGeometry() const; diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C new file mode 100644 index 0000000000000000000000000000000000000000..497c36f8423b386bdbbc601a8fdd4f5973cec45e --- /dev/null +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesGrouping.C @@ -0,0 +1,125 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "sampledSurfaces.H" +#include "volFields.H" +#include "IOobjectList.H" +#include "stringListOps.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::sampledSurfaces::clearFieldGroups() +{ + scalarFields_.clear(); + vectorFields_.clear(); + sphericalTensorFields_.clear(); + symmTensorFields_.clear(); + tensorFields_.clear(); +} + + +Foam::label Foam::sampledSurfaces::appendFieldGroup +( + const word& fieldName, + const word& fieldType +) +{ + if (fieldType == volScalarField::typeName) + { + scalarFields_.append(fieldName); + return 1; + } + else if (fieldType == volVectorField::typeName) + { + vectorFields_.append(fieldName); + return 1; + } + else if (fieldType == volSphericalTensorField::typeName) + { + sphericalTensorFields_.append(fieldName); + return 1; + } + else if (fieldType == volSymmTensorField::typeName) + { + symmTensorFields_.append(fieldName); + return 1; + } + else if (fieldType == volTensorField::typeName) + { + tensorFields_.append(fieldName); + return 1; + } + + return 0; +} + + +Foam::label Foam::sampledSurfaces::classifyFields() +{ + label nFields = 0; + clearFieldGroups(); + + // check files for a particular time + if (loadFromFiles_) + { + IOobjectList objects(mesh_, mesh_.time().timeName()); + wordList allFields = objects.sortedNames(); + + labelList indices = findStrings(fieldSelection_, allFields); + + forAll(indices, fieldI) + { + const word& fieldName = allFields[indices[fieldI]]; + + nFields += appendFieldGroup + ( + fieldName, + objects.find(fieldName)()->headerClassName() + ); + } + } + else + { + wordList allFields = mesh_.sortedNames(); + labelList indices = findStrings(fieldSelection_, allFields); + + forAll(indices, fieldI) + { + const word& fieldName = allFields[indices[fieldI]]; + + nFields += appendFieldGroup + ( + fieldName, + mesh_.find(fieldName)()->type() + ); + } + } + + return nFields; +} + + +// ************************************************************************* // diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C index 6da55cfe8736220134b921afdef9403ea9f3fb6e..b5dc2d418ce45f63e8ac49e5470eb0d8dca65dd2 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfacesTemplates.C @@ -178,7 +178,7 @@ void Foam::sampledSurfaces::sampleAndWrite if ( - iter != mesh_.objectRegistry::end() + iter != objectRegistry::end() && iter()->type() == GeometricField<Type, fvPatchField, volMesh>::typeName ) diff --git a/src/sampling/sampledSurface/sampledSurfacesFunctionObject/sampledSurfacesFunctionObject.H b/src/sampling/sampledSurface/sampledSurfacesFunctionObject/sampledSurfacesFunctionObject.H index 44229e414f1d7b8e33c73ae50bf9a34ebcf83618..8e318a6e9536991f28c4c16648762ba6e2709ec9 100644 --- a/src/sampling/sampledSurface/sampledSurfacesFunctionObject/sampledSurfacesFunctionObject.H +++ b/src/sampling/sampledSurface/sampledSurfacesFunctionObject/sampledSurfacesFunctionObject.H @@ -27,7 +27,7 @@ Typedef Description FunctionObject wrapper around surfaces to allow them to be created via the - functions list within controlDict. + functions entry within controlDict. SourceFiles sampledSurfacesFunctionObject.C diff --git a/src/sampling/sampledSurface/thresholdCellFaces/thresholdCellFaces.H b/src/sampling/sampledSurface/thresholdCellFaces/thresholdCellFaces.H index a8428cdd089982f21bacbb4f45c1263b60e2bb94..dd7ea408d599b1582c1bea94efe0df76c1b5f607 100644 --- a/src/sampling/sampledSurface/thresholdCellFaces/thresholdCellFaces.H +++ b/src/sampling/sampledSurface/thresholdCellFaces/thresholdCellFaces.H @@ -67,7 +67,7 @@ class thresholdCellFaces void calculate ( - const scalarField&, + const scalarField&, const scalar lowerThreshold, const scalar upperThreshold, const bool triangulate diff --git a/src/sampling/sampledSurface/writers/raw/rawSurfaceWriter.C b/src/sampling/sampledSurface/writers/raw/rawSurfaceWriter.C index c916fe16c3c11d1892b805a9886be0840d0a4fe3..4ebdbb976b01bd122055e83671444190b666eede 100644 --- a/src/sampling/sampledSurface/writers/raw/rawSurfaceWriter.C +++ b/src/sampling/sampledSurface/writers/raw/rawSurfaceWriter.C @@ -192,7 +192,7 @@ void Foam::rawSurfaceWriter<Type>::writeData { // header os << "# xx xy xz yy yz "; - for(int i=0; i<6; i++) + for (int i=0; i<6; i++) { os << fieldName << "_" << i << " "; } diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C index 1c1622c0ebb13898bb5e6d34a6ed6c5b5f446d1e..3cf72dbcbc518d06479bc12a370f211fd186f84b 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.C +++ b/src/surfMesh/MeshedSurface/MeshedSurface.C @@ -918,7 +918,7 @@ Foam::label Foam::MeshedSurface<Face>::triangulate // 'face' not '<Face>' const face& f = faceLst[faceI]; - label nTmp; + label nTmp = 0; f.triangles(this->points(), nTmp, tmpTri); for (label triI = 0; triI < nTmp; triI++) { diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.H b/src/surfMesh/MeshedSurface/MeshedSurface.H index ea7125fa833b780b6634b4ecd3b56854fccf26ff..459329bed3b87d3bb4c8eef4298943f5edddf78c 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.H +++ b/src/surfMesh/MeshedSurface/MeshedSurface.H @@ -396,10 +396,10 @@ public: const labelHashSet& include ) const; - //- Transfer the contents of the argument and annull the argument + //- Transfer the contents of the argument and annul the argument void transfer(MeshedSurface<Face>&); - //- Transfer the contents of the argument and annull the argument + //- Transfer the contents of the argument and annul the argument void transfer(UnsortedMeshedSurface<Face>&); //- Transfer contents to the Xfer container diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceZones.C b/src/surfMesh/MeshedSurface/MeshedSurfaceZones.C index a31e8d6314ee75d921e8a340a04a0836b8596fc8..8e837e6f8572bffd61b4082b5abf012fe425b9d4 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurfaceZones.C +++ b/src/surfMesh/MeshedSurface/MeshedSurfaceZones.C @@ -53,7 +53,7 @@ void Foam::MeshedSurface<Face>::checkZones() << " ... extending final zone" << endl; - zones[zones.size()-1].size() += count - this->size(); + zones.last().size() += count - this->size(); } else if (count > this->size()) { diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H index bb4fa01b379a3080bb8a75459a7eb569073ce6bc..7e16cc909dbd675735184554d4d2948cf0f25f17 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H @@ -334,10 +334,10 @@ public: const Xfer< List<label> >& zoneIds ); - //- Transfer the contents of the argument and annull the argument + //- Transfer the contents of the argument and annul the argument void transfer(UnsortedMeshedSurface<Face>&); - //- Transfer the contents of the argument and annull the argument + //- Transfer the contents of the argument and annul the argument void transfer(MeshedSurface<Face>&); //- Transfer contents to the Xfer container diff --git a/src/surfMesh/surfMesh/surfMesh.C b/src/surfMesh/surfMesh/surfMesh.C index 71f6fd82c463d81f3b92f72afd200d015fbeab10..686271da9af8bf43c34efd1d08a3e40738976147 100644 --- a/src/surfMesh/surfMesh/surfMesh.C +++ b/src/surfMesh/surfMesh/surfMesh.C @@ -377,7 +377,7 @@ void Foam::surfMesh::checkZones() << " ... extending final zone" << endl; - zones[zones.size()-1].size() += count - nFaces(); + zones.last().size() += count - nFaces(); } else if (count > size()) { diff --git a/src/surfMesh/surfMesh/surfMesh.H b/src/surfMesh/surfMesh/surfMesh.H index 3215bfd345ae767a0a81d96a8128972f1bd40e98..48879918a0dca4dec76dcba5705d3c1e753dcfbd 100644 --- a/src/surfMesh/surfMesh/surfMesh.H +++ b/src/surfMesh/surfMesh/surfMesh.H @@ -257,7 +257,7 @@ public: ); - //- Transfer the contents of the argument and annull the argument + //- Transfer the contents of the argument and annul the argument void transfer(MeshedSurface<face>&); diff --git a/src/surfMesh/surfMesh/surfMeshIO.C b/src/surfMesh/surfMesh/surfMeshIO.C index c74b1c693eb5ae9fae13f00ca9948801da540707..ca2d840d072bba27dded473d547622421ca08116 100644 --- a/src/surfMesh/surfMesh/surfMeshIO.C +++ b/src/surfMesh/surfMesh/surfMeshIO.C @@ -75,7 +75,7 @@ Foam::surfMesh::readUpdateState Foam::surfMesh::readUpdate() // Topological change if (debug) { - Info << "Topological change" << endl; + Info<< "Topological change" << endl; } clearOut(); @@ -169,7 +169,7 @@ Foam::surfMesh::readUpdateState Foam::surfMesh::readUpdate() // Points moved if (debug) { - Info << "Point motion" << endl; + Info<< "Point motion" << endl; } clearGeom(); @@ -195,7 +195,7 @@ Foam::surfMesh::readUpdateState Foam::surfMesh::readUpdate() { if (debug) { - Info << "No change" << endl; + Info<< "No change" << endl; } } diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C index 7153826609d66271404f693e633450c9cc2ca06c..3e204e65b1dea330e3840ebc99c12d172c9e1ddb 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C @@ -707,7 +707,7 @@ Foam::scalar Foam::ODEChemistryModel<CompType, ThermoType>::solve // calculate the chemical source terms scalar cTot = 0.0; - while(timeLeft > SMALL) + while (timeLeft > SMALL) { tauC = solver().solve(c, Ti, pi, t, dt); t += dt; diff --git a/src/thermophysicalModels/pdfs/RosinRammler/RosinRammler.C b/src/thermophysicalModels/pdfs/RosinRammler/RosinRammler.C index f157c2645f6cda4aea9f2901e255ac3c9193078b..becfd94db21e0b202d4a937617f0457641dc2d11 100644 --- a/src/thermophysicalModels/pdfs/RosinRammler/RosinRammler.C +++ b/src/thermophysicalModels/pdfs/RosinRammler/RosinRammler.C @@ -118,7 +118,7 @@ Foam::scalar Foam::RosinRammler::sample() const scalar xx = pow(x/d_[i], n_[i]); p += ls_[i]*xx*exp(-xx); } - } while(y>p); + } while (y>p); return x; } diff --git a/src/thermophysicalModels/pdfs/exponential/exponential.C b/src/thermophysicalModels/pdfs/exponential/exponential.C index 6ebe918fe892ea464091365e82ee57bc57618952..8498c2c9e2a234475ffbdb318d98f12f79443818 100644 --- a/src/thermophysicalModels/pdfs/exponential/exponential.C +++ b/src/thermophysicalModels/pdfs/exponential/exponential.C @@ -105,7 +105,7 @@ Foam::scalar Foam::exponential::sample() const { p += ls_[i]*exp(-lambda_[i]*x); } - } while(p>y); + } while (p>y); return x; } diff --git a/src/thermophysicalModels/pdfs/general/general.C b/src/thermophysicalModels/pdfs/general/general.C index 59b1a75953f14b344856ea8ec2b27ae4ec931e34..33d3e3f57d4cd5a7708ecb8e9a8a397a08882c89 100644 --- a/src/thermophysicalModels/pdfs/general/general.C +++ b/src/thermophysicalModels/pdfs/general/general.C @@ -96,7 +96,7 @@ Foam::scalar Foam::general::sample() const + (x - xy_[i][0]) *(xy_[i+1][1] - xy_[i][1]) /(xy_[i+1][0] - xy_[i][0]); - } while(p>y); + } while (p>y); return x; } diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C index d57b13866abe422a195317116896fe86512b86a6..7821fb7d58034eaa6869694f05c72fe673600759 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C @@ -307,9 +307,9 @@ void Foam::radiation::fvDOM::calculate() maxResidual = max(maxBandResidual, maxResidual); } - Info << "Radiation solver iter: " << radIter << endl; + Info<< "Radiation solver iter: " << radIter << endl; - } while(maxResidual > convergence_ && radIter < maxIter_); + } while (maxResidual > convergence_ && radIter < maxIter_); updateG(); } diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L index 17529cdb6499b27dbad781bc01fc2555c6b8201c..dc2d0e7830c801fa6eb90043b6b61d80d34cb79c 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L @@ -32,6 +32,8 @@ License #include "error.H" #include "IStringStream.H" +// For EOF only +#include <cstdio> // flex input buffer size int Foam::chemkinReader::yyBufSize = YY_BUF_SIZE; diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C index a6841241225ab9ced70ca0466d3c6fcb0d34347a..9302e1665947a3e8147f9649839e70232d671b49 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C @@ -813,7 +813,7 @@ void Foam::chemkinReader::read yy_buffer_state* bufferPtr(yy_create_buffer(&thermoStream, yyBufSize)); yy_switch_to_buffer(bufferPtr); - while(lex() != 0) + while (lex() != 0) {} yy_delete_buffer(bufferPtr); @@ -838,7 +838,7 @@ void Foam::chemkinReader::read initReactionKeywordTable(); - while(lex() != 0) + while (lex() != 0) {} yy_delete_buffer(bufferPtr); diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H index de679103806b55e96a6a8a9faad1edd41bca973a..0afbc9a457d7fed92793fe1cd4d88db35c87b664 100644 --- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H @@ -234,7 +234,7 @@ private: { elementName[1] = tolower(elementName[1]); } - else if(elementName[0] == 'E') + else if (elementName[0] == 'E') { elementName = 'e'; } diff --git a/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H b/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H index 6d982155c7d48f30f671585112e5d1ecc105430a..c4e079796f6e7e32a3b53c31aa126105f17edcf9 100644 --- a/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H +++ b/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H @@ -30,7 +30,7 @@ Description \*---------------------------------------------------------------------------*/ -#ifndef makeReactionTherno_H +#ifndef makeReactionThermo_H #define makeReactionThermo_H #include "Reaction.H" diff --git a/src/topoChangerFvMesh/linearValveFvMesh/linearValveFvMesh.C b/src/topoChangerFvMesh/linearValveFvMesh/linearValveFvMesh.C index 3953db92fea4257197488e55fde383070acb4aa8..d90a7ad0a43fd729e5e18416d21fc35f5c1124bc 100644 --- a/src/topoChangerFvMesh/linearValveFvMesh/linearValveFvMesh.C +++ b/src/topoChangerFvMesh/linearValveFvMesh/linearValveFvMesh.C @@ -137,11 +137,11 @@ void Foam::linearValveFvMesh::addZonesAndModifiers() List<cellZone*> cz(0); - Info << "Adding point, face and cell zones" << endl; + Info<< "Adding point, face and cell zones" << endl; addZones(pz, fz, cz); // Add a topology modifier - Info << "Adding topology modifiers" << endl; + Info<< "Adding topology modifiers" << endl; topoChanger_.setSize(1); topoChanger_.set ( @@ -249,11 +249,11 @@ bool Foam::linearValveFvMesh::attached() const if (result) { - Info << "linearValveFvMesh: attached!" << endl; + Info<< "linearValveFvMesh: attached!" << endl; } else { - Info << "linearValveFvMesh: detached!" << endl; + Info<< "linearValveFvMesh: detached!" << endl; } return result; @@ -299,7 +299,7 @@ void Foam::linearValveFvMesh::update() // Detaching the interface if (attached()) { - Info << "Decoupling sliding interfaces" << endl; + Info<< "Decoupling sliding interfaces" << endl; makeSlidersLive(); // Changing topology by hand @@ -311,7 +311,7 @@ void Foam::linearValveFvMesh::update() } else { - Info << "Sliding interfaces decoupled" << endl; + Info<< "Sliding interfaces decoupled" << endl; } // Perform mesh motion @@ -328,7 +328,7 @@ void Foam::linearValveFvMesh::update() { if (topoChangeMap().hasMotionPoints()) { - Info << "Topology change; executing pre-motion" << endl; + Info<< "Topology change; executing pre-motion" << endl; movePoints(topoChangeMap().preMotionPoints()); } } @@ -339,17 +339,17 @@ void Foam::linearValveFvMesh::update() movePoints(msPtr_->curPoints()); // Attach the interface - Info << "Coupling sliding interfaces" << endl; + Info<< "Coupling sliding interfaces" << endl; makeSlidersLive(); resetMorph(); setMorphTimeIndex(3*time().timeIndex() + 2); updateMesh(); - Info << "Moving points post slider attach" << endl; + Info<< "Moving points post slider attach" << endl; msPtr_->updateMesh(); - Info << "Sliding interfaces coupled: " << attached() << endl; + Info<< "Sliding interfaces coupled: " << attached() << endl; } diff --git a/src/topoChangerFvMesh/linearValveLayersFvMesh/linearValveLayersFvMesh.C b/src/topoChangerFvMesh/linearValveLayersFvMesh/linearValveLayersFvMesh.C index 8b5ca8a90d2e3b069c3a31d85e06b03c978b4cde..46119de94487c1389d56f7c1957a90ce88f171e8 100644 --- a/src/topoChangerFvMesh/linearValveLayersFvMesh/linearValveLayersFvMesh.C +++ b/src/topoChangerFvMesh/linearValveLayersFvMesh/linearValveLayersFvMesh.C @@ -164,7 +164,7 @@ void Foam::linearValveLayersFvMesh::addZonesAndModifiers() ); - Info << "Adding point and face zones" << endl; + Info<< "Adding point and face zones" << endl; addZones(pz, fz, cz); // Add a topology modifier @@ -204,7 +204,7 @@ void Foam::linearValveLayersFvMesh::addZonesAndModifiers() ); - Info << "Adding topology modifiers" << endl; + Info<< "Adding topology modifiers" << endl; addTopologyModifiers(tm); // Write mesh @@ -375,7 +375,7 @@ void Foam::linearValveLayersFvMesh::update() // Detaching the interface if (attached()) { - Info << "Decoupling sliding interfaces" << endl; + Info<< "Decoupling sliding interfaces" << endl; makeSlidersLive(); // Changing topology @@ -385,7 +385,7 @@ void Foam::linearValveLayersFvMesh::update() } else { - Info << "Sliding interfaces decoupled" << endl; + Info<< "Sliding interfaces decoupled" << endl; } // Perform layer action and mesh motion @@ -400,7 +400,7 @@ void Foam::linearValveLayersFvMesh::update() { if (topoChangeMap().hasMotionPoints()) { - Info << "Topology change; executing pre-motion" << endl; + Info<< "Topology change; executing pre-motion" << endl; movePoints(topoChangeMap().preMotionPoints()); } } @@ -409,7 +409,7 @@ void Foam::linearValveLayersFvMesh::update() movePoints(newPoints()); // Attach the interface - Info << "Coupling sliding interfaces" << endl; + Info<< "Coupling sliding interfaces" << endl; makeSlidersLive(); // Changing topology @@ -417,11 +417,11 @@ void Foam::linearValveLayersFvMesh::update() setMorphTimeIndex(3*time().timeIndex() + 2); updateMesh(); - Info << "Moving points post slider attach" << endl; + Info<< "Moving points post slider attach" << endl; // const pointField p = allPoints(); // movePoints(p); - Info << "Sliding interfaces coupled: " << attached() << endl; + Info<< "Sliding interfaces coupled: " << attached() << endl; } diff --git a/src/topoChangerFvMesh/mixerFvMesh/mixerFvMesh.C b/src/topoChangerFvMesh/mixerFvMesh/mixerFvMesh.C index a080a156a53c481a68068e50a9fc8cba61ce861d..33d8cffd8d7e75fe36d8162fe62464d4264d3b17 100644 --- a/src/topoChangerFvMesh/mixerFvMesh/mixerFvMesh.C +++ b/src/topoChangerFvMesh/mixerFvMesh/mixerFvMesh.C @@ -156,7 +156,7 @@ void Foam::mixerFvMesh::addZonesAndModifiers() } movingCells.setSize(nMovingCells); - Info << "Number of cells in the moving region: " << nMovingCells << endl; + Info<< "Number of cells in the moving region: " << nMovingCells << endl; cz[0] = new cellZone ( @@ -166,11 +166,11 @@ void Foam::mixerFvMesh::addZonesAndModifiers() cellZones() ); - Info << "Adding point, face and cell zones" << endl; + Info<< "Adding point, face and cell zones" << endl; addZones(pz, fz, cz); // Add a topology modifier - Info << "Adding topology modifiers" << endl; + Info<< "Adding topology modifiers" << endl; topoChanger_.setSize(1); topoChanger_.set ( @@ -361,7 +361,7 @@ bool Foam::mixerFvMesh::update() { if (debug) { - Info << "Mesh topology is changing" << endl; + Info<< "Mesh topology is changing" << endl; } deleteDemandDrivenData(movingPointsMaskPtr_); diff --git a/src/topoChangerFvMesh/movingConeTopoFvMesh/movingConeTopoFvMesh.C b/src/topoChangerFvMesh/movingConeTopoFvMesh/movingConeTopoFvMesh.C index 959c4540a56fa64eb039bee701b72701343ac570..5e4a1bbde241d8f3fd86af8d183e18dfca07a30f 100644 --- a/src/topoChangerFvMesh/movingConeTopoFvMesh/movingConeTopoFvMesh.C +++ b/src/topoChangerFvMesh/movingConeTopoFvMesh/movingConeTopoFvMesh.C @@ -146,7 +146,7 @@ void Foam::movingConeTopoFvMesh::addZonesAndModifiers() flipZone2[nZoneFaces2] = true; } - Info << "face " << faceI << " for zone 2. Flip: " + Info<< "face " << faceI << " for zone 2. Flip: " << flipZone2[nZoneFaces2] << endl; nZoneFaces2++; } @@ -158,8 +158,8 @@ void Foam::movingConeTopoFvMesh::addZonesAndModifiers() zone2.setSize(nZoneFaces2); flipZone2.setSize(nZoneFaces2); - Info << "zone: " << zone1 << endl; - Info << "zone: " << zone2 << endl; + Info<< "zone: " << zone1 << endl; + Info<< "zone: " << zone2 << endl; List<pointZone*> pz(0); List<faceZone*> fz(2); @@ -191,7 +191,7 @@ void Foam::movingConeTopoFvMesh::addZonesAndModifiers() fz.setSize(nFz); - Info << "Adding mesh zones." << endl; + Info<< "Adding mesh zones." << endl; addZones(pz, fz, cz); @@ -236,7 +236,7 @@ void Foam::movingConeTopoFvMesh::addZonesAndModifiers() nMods++; tm.setSize(nMods); - Info << "Adding " << nMods << " mesh modifiers" << endl; + Info<< "Adding " << nMods << " mesh modifiers" << endl; topoChanger_.addTopologyModifiers(tm); write(); @@ -334,11 +334,11 @@ bool Foam::movingConeTopoFvMesh::update() if (topoChangeMap.valid()) { - Info << "Topology change. Calculating motion points" << endl; + Info<< "Topology change. Calculating motion points" << endl; if (topoChangeMap().hasMotionPoints()) { - Info << "Topology change. Has premotion points" << endl; + Info<< "Topology change. Has premotion points" << endl; //Info<< "preMotionPoints:" << topoChangeMap().preMotionPoints() // << endl; @@ -390,7 +390,7 @@ bool Foam::movingConeTopoFvMesh::update() } else { - Info << "Topology change. Already set mesh points" << endl; + Info<< "Topology change. Already set mesh points" << endl; motionMask_ = vertexMarkup @@ -424,7 +424,7 @@ bool Foam::movingConeTopoFvMesh::update() } else { - Info << "No topology change" << endl; + Info<< "No topology change" << endl; // Set the mesh motion newPoints = points() @@ -466,7 +466,7 @@ bool Foam::movingConeTopoFvMesh::update() // The mesh now contains the cells with zero volume - Info << "Executing mesh motion" << endl; + Info<< "Executing mesh motion" << endl; movePoints(newPoints); // The mesh now has got non-zero volume cells diff --git a/src/triSurface/triSurface/interfaces/OBJ/readOBJ.C b/src/triSurface/triSurface/interfaces/OBJ/readOBJ.C index 20c3d9cc65d4ebda88b31578e000283efac832c0..d98a504bc4c2bd8e3ae3f467fb2c6946408a7bdb 100644 --- a/src/triSurface/triSurface/interfaces/OBJ/readOBJ.C +++ b/src/triSurface/triSurface/interfaces/OBJ/readOBJ.C @@ -107,7 +107,7 @@ bool triSurface::readOBJ(const fileName& OBJfileName) // Assume 'f' is followed by space. string::size_type endNum = 1; - while(true) + while (true) { string::size_type startNum = line.find_first_not_of(' ', endNum); diff --git a/src/triSurface/triSurface/interfaces/STL/readSTLASCII.L b/src/triSurface/triSurface/interfaces/STL/readSTLASCII.L index 208aa13d1619dc85175233845aa14dbd46a85eed..2d04d3640757359bd2514d7c93a6f475323ce17a 100644 --- a/src/triSurface/triSurface/interfaces/STL/readSTLASCII.L +++ b/src/triSurface/triSurface/interfaces/STL/readSTLASCII.L @@ -399,7 +399,7 @@ bool triSurface::readSTLASCII(const fileName& STLfileName) // Create the lexer obtaining the approximate number of vertices in the STL // from the file size STLLexer lexer(&STLstream.stdStream(), Foam::fileSize(STLfileName)/400); - while(lexer.lex() != 0) + while (lexer.lex() != 0) {} DynamicList<STLpoint>& STLpoints = lexer.STLpoints(); diff --git a/src/triSurface/triSurface/interfaces/TRI/readTRI.C b/src/triSurface/triSurface/interfaces/TRI/readTRI.C index c0452e46aafe3e058e0f30f8dede8a28c3e1170f..d0dc0b3c314db2fab3277dee08bf46a15dd89d80 100644 --- a/src/triSurface/triSurface/interfaces/TRI/readTRI.C +++ b/src/triSurface/triSurface/interfaces/TRI/readTRI.C @@ -63,7 +63,7 @@ bool triSurface::readTRI(const fileName& TRIfileName) // Max region number so far label maxRegion = 0; - while(TRIfile) + while (TRIfile) { string line = getLineNoComment(TRIfile); diff --git a/src/triSurface/triSurface/stitchTriangles.C b/src/triSurface/triSurface/stitchTriangles.C index 463eb41ba9a3619ecf0eb23402e5523406484c79..7a441ac6795fe268c4518873aada3872217cb1fb 100644 --- a/src/triSurface/triSurface/stitchTriangles.C +++ b/src/triSurface/triSurface/stitchTriangles.C @@ -46,10 +46,7 @@ bool triSurface::stitchTriangles pointField newPoints; bool hasMerged = mergePoints(rawPoints, tol, verbose, pointMap, newPoints); - pointField& ps = storedPoints(); - // Set the coordinates to the merged ones - ps = newPoints; if (hasMerged) { @@ -59,6 +56,11 @@ bool triSurface::stitchTriangles << " points down to " << newPoints.size() << endl; } + pointField& ps = storedPoints(); + + // Set the coordinates to the merged ones + ps = newPoints; + // Reset the triangle point labels to the unique points array label newTriangleI = 0; forAll(*this, i) diff --git a/src/triSurface/triSurface/triSurface.C b/src/triSurface/triSurface/triSurface.C index 65258557e88735c759ecbb66d550994bfae5d2d5..96ca3d78a363a59d1e18cc5aa600e9c929f17317 100644 --- a/src/triSurface/triSurface/triSurface.C +++ b/src/triSurface/triSurface/triSurface.C @@ -814,7 +814,7 @@ void Foam::triSurface::scalePoints(const scalar scaleFactor) void Foam::triSurface::cleanup(const bool verbose) { // Merge points (already done for STL, TRI) - stitchTriangles(pointField(points()), SMALL, verbose); + stitchTriangles(points(), SMALL, verbose); // Merging points might have changed geometric factors clearOut(); @@ -838,7 +838,7 @@ void Foam::triSurface::markZone // List of faces whose faceZone has been set. labelList changedFaces(1, faceI); - while(true) + while (true) { // Pick up neighbours of changedFaces DynamicList<label> newChangedFaces(2*changedFaces.size()); diff --git a/src/triSurface/triSurface/triSurfaceAddressing.C b/src/triSurface/triSurface/triSurfaceAddressing.C index ce2e5608f47e413b4af1d82968af72769767b839..14a383c9fc3507d5226e6cb4b7dc728908667f3e 100644 --- a/src/triSurface/triSurface/triSurfaceAddressing.C +++ b/src/triSurface/triSurface/triSurfaceAddressing.C @@ -91,7 +91,7 @@ void triSurface::calcSortedEdgeFaces() const // e0 is reference so angle is 0 faceAngles[0] = 0; - for(label nbI = 1; nbI < myFaceNbs.size(); nbI++) + for (label nbI = 1; nbI < myFaceNbs.size(); nbI++) { // Get opposite vertex const labelledTri& f = localFaces()[myFaceNbs[nbI]]; diff --git a/src/turbulenceModels/compressible/LES/LESModel/LESModel.C b/src/turbulenceModels/compressible/LES/LESModel/LESModel.C index c32cb077d8a82a5425ec70060bd6dfb371187e32..6ac295dea68c6bcf8ec213714e6fee2f40b45ed1 100644 --- a/src/turbulenceModels/compressible/LES/LESModel/LESModel.C +++ b/src/turbulenceModels/compressible/LES/LESModel/LESModel.C @@ -77,7 +77,7 @@ LESModel::LESModel ), printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subDictPtr(type + "Coeffs")), + coeffDict_(subOrEmptyDict(type + "Coeffs")), k0_("k0", dimVelocity*dimVelocity, SMALL), diff --git a/src/turbulenceModels/compressible/RAS/Make/files b/src/turbulenceModels/compressible/RAS/Make/files index 6fa7d7e9634651106073bad239bcbd4b14e086ca..def806534ab52e722648072d881ea925b7fcb51b 100644 --- a/src/turbulenceModels/compressible/RAS/Make/files +++ b/src/turbulenceModels/compressible/RAS/Make/files @@ -38,8 +38,8 @@ derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFv derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.C +derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C derivedFvPatchFields/turbulentTemperatureCoupledBaffle/regionProperties.C - backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C LIB = $(FOAM_LIBBIN)/libcompressibleRASModels diff --git a/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C b/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C index 642fc686d695e583ef83fe4b3ea0bbada5c986c8..ffab28703b52976b621b8dd3506ded787962e2e6 100644 --- a/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C +++ b/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C @@ -79,7 +79,7 @@ RASModel::RASModel turbulence_(lookup("turbulence")), printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subDictPtr(type + "Coeffs")), + coeffDict_(subOrEmptyDict(type + "Coeffs")), k0_("k0", dimVelocity*dimVelocity, SMALL), epsilon0_("epsilon", k0_.dimensions()/dimTime, SMALL), diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.C index 52a358f53207abe4be4db19a38d70155ae314a4a..bc3c56c2f052d8ed69bec67a0e02b60789d333d2 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.C +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.C @@ -33,16 +33,9 @@ License #include "basicThermo.H" #include "RASModel.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -bool turbulentTemperatureCoupledBaffleFvPatchScalarField::interfaceOwner +bool Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::interfaceOwner ( const polyMesh& nbrRegion, const polyPatch& nbrPatch @@ -103,6 +96,7 @@ bool turbulentTemperatureCoupledBaffleFvPatchScalarField::interfaceOwner } nbrIndex = props.fluidRegionNames().size() + i; } + return myIndex < nbrIndex; } } @@ -110,25 +104,20 @@ bool turbulentTemperatureCoupledBaffleFvPatchScalarField::interfaceOwner // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -turbulentTemperatureCoupledBaffleFvPatchScalarField:: +Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField:: turbulentTemperatureCoupledBaffleFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF ) : - mixedFvPatchScalarField(p, iF), + fixedValueFvPatchScalarField(p, iF), neighbourFieldName_("undefined-neighbourFieldName"), KName_("undefined-K") -{ - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 1.0; - this->fixesValue_ = true; -} +{} -turbulentTemperatureCoupledBaffleFvPatchScalarField:: +Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField:: turbulentTemperatureCoupledBaffleFvPatchScalarField ( const turbulentTemperatureCoupledBaffleFvPatchScalarField& ptf, @@ -137,14 +126,13 @@ turbulentTemperatureCoupledBaffleFvPatchScalarField const fvPatchFieldMapper& mapper ) : - mixedFvPatchScalarField(ptf, p, iF, mapper), + fixedValueFvPatchScalarField(ptf, p, iF, mapper), neighbourFieldName_(ptf.neighbourFieldName_), - KName_(ptf.KName_), - fixesValue_(ptf.fixesValue_) + KName_(ptf.KName_) {} -turbulentTemperatureCoupledBaffleFvPatchScalarField:: +Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField:: turbulentTemperatureCoupledBaffleFvPatchScalarField ( const fvPatch& p, @@ -152,7 +140,7 @@ turbulentTemperatureCoupledBaffleFvPatchScalarField const dictionary& dict ) : - mixedFvPatchScalarField(p, iF), + fixedValueFvPatchScalarField(p, iF, dict), neighbourFieldName_(dict.lookup("neighbourFieldName")), KName_(dict.lookup("K")) { @@ -174,46 +162,26 @@ turbulentTemperatureCoupledBaffleFvPatchScalarField << " in file " << dimensionedInternalField().objectPath() << exit(FatalError); } - - fvPatchScalarField::operator=(scalarField("value", dict, p.size())); - - if (dict.found("refValue")) - { - // Full restart - refValue() = scalarField("refValue", dict, p.size()); - refGrad() = scalarField("refGradient", dict, p.size()); - valueFraction() = scalarField("valueFraction", dict, p.size()); - fixesValue_ = readBool(dict.lookup("fixesValue")); - } - else - { - // Start from user entered data. Assume fixedValue. - refValue() = *this; - refGrad() = 0.0; - valueFraction() = 1.0; - fixesValue_ = true; - } } -turbulentTemperatureCoupledBaffleFvPatchScalarField:: +Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField:: turbulentTemperatureCoupledBaffleFvPatchScalarField ( const turbulentTemperatureCoupledBaffleFvPatchScalarField& wtcsf, const DimensionedField<scalar, volMesh>& iF ) : - mixedFvPatchScalarField(wtcsf, iF), + fixedValueFvPatchScalarField(wtcsf, iF), neighbourFieldName_(wtcsf.neighbourFieldName_), - KName_(wtcsf.KName_), - fixesValue_(wtcsf.fixesValue_) + KName_(wtcsf.KName_) {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<scalarField> -turbulentTemperatureCoupledBaffleFvPatchScalarField::K() const +Foam::tmp<Foam::scalarField> +Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::K() const { const fvMesh& mesh = patch().boundaryMesh().mesh(); @@ -260,7 +228,7 @@ turbulentTemperatureCoupledBaffleFvPatchScalarField::K() const } -void turbulentTemperatureCoupledBaffleFvPatchScalarField::updateCoeffs() +void Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::updateCoeffs() { if (updated()) { @@ -353,18 +321,13 @@ void turbulentTemperatureCoupledBaffleFvPatchScalarField::updateCoeffs() ).fvPatchScalarField::operator=(Twall); } - - // Switch between fixed value (of harmonic avg) or gradient - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - label nFixed = 0; - - // Like snGrad but bypass switching on refValue/refGrad. - tmp<scalarField> normalGradient = (*this-intFld())*patch().deltaCoeffs(); - if (debug) { - scalar Q = gSum(K()*patch().magSf()*normalGradient()); + //tmp<scalarField> normalGradient = + // (*this-intFld()) + // * patch().deltaCoeffs(); + + scalar Q = gSum(K()*patch().magSf()*snGrad()); Info<< patch().boundaryMesh().mesh().name() << ':' << patch().name() << ':' @@ -380,74 +343,33 @@ void turbulentTemperatureCoupledBaffleFvPatchScalarField::updateCoeffs() << endl; } - forAll(*this, i) - { - // if outgoing flux use fixed value. - if (normalGradient()[i] < 0.0) - { - this->refValue()[i] = operator[](i); - this->refGrad()[i] = 0.0; // not used - this->valueFraction()[i] = 1.0; - nFixed++; - } - else - { - this->refValue()[i] = 0.0; // not used - this->refGrad()[i] = normalGradient()[i]; - this->valueFraction()[i] = 0.0; - } - } - - reduce(nFixed, sumOp<label>()); - - fixesValue_ = (nFixed > 0); - - if (debug) - { - label nTotSize = returnReduce(this->size(), sumOp<label>()); - - Info<< patch().boundaryMesh().mesh().name() << ':' - << patch().name() << ':' - << this->dimensionedInternalField().name() << " -> " - << nbrMesh.name() << ':' - << nbrPatch.name() << ':' - << this->dimensionedInternalField().name() << " :" - << " patch:" << patch().name() - << " out of:" << nTotSize - << " fixedBC:" << nFixed - << " gradient:" << nTotSize-nFixed << endl; - } - - mixedFvPatchScalarField::updateCoeffs(); + fixedValueFvPatchScalarField::updateCoeffs(); } -void turbulentTemperatureCoupledBaffleFvPatchScalarField::write +void Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::write ( Ostream& os ) const { - mixedFvPatchScalarField::write(os); + fixedValueFvPatchScalarField::write(os); os.writeKeyword("neighbourFieldName")<< neighbourFieldName_ << token::END_STATEMENT << nl; os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; - os.writeKeyword("fixesValue") << fixesValue_ << token::END_STATEMENT << nl; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +namespace Foam +{ + makePatchTypeField ( fvPatchScalarField, turbulentTemperatureCoupledBaffleFvPatchScalarField ); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible } // End namespace Foam - // ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.H index 9e13167a62743756c5eba979e544c4ddffa026e7..c5e57745d794e32cda1e304f6c9cd32143892f45 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.H +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.H @@ -23,16 +23,15 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::compressible::turbulentTemperatureCoupledBaffleFvPatchScalarField + turbulentTemperatureCoupledBaffleFvPatchScalarField Description - Mixed boundary condition for temperature, to be used for heat-transfer - on back-to-back baffles. + Harmonic fixed value boundary condition for temperature, to be used + for heat-transfer on back-to-back baffles. - If my temperature is T1, neighbour is T2: + If my temperature is T1, heat conductivity K1 and neighbour is T2,K2 - T1 > T2: my side becomes fixedValue T2 bc, other side becomes fixedGradient. - + both sides get fixedValue (K1/dx1*T1 + K2/dx2*T2)/(K1/dx1+K2/dx2) Example usage: myInterfacePatchName @@ -65,16 +64,12 @@ SourceFiles #ifndef turbulentTemperatureCoupledBaffleFvPatchScalarField_H #define turbulentTemperatureCoupledBaffleFvPatchScalarField_H -//#include "fvPatchFields.H" -#include "mixedFvPatchFields.H" -//#include "fvPatch.H" +#include "fixedValueFvPatchFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace compressible -{ /*---------------------------------------------------------------------------*\ Class turbulentTemperatureCoupledBaffleFvPatchScalarField Declaration @@ -82,7 +77,7 @@ namespace compressible class turbulentTemperatureCoupledBaffleFvPatchScalarField : - public mixedFvPatchScalarField + public fixedValueFvPatchScalarField { // Private data @@ -92,8 +87,6 @@ class turbulentTemperatureCoupledBaffleFvPatchScalarField //- Name of thermal conductivity field const word KName_; - bool fixesValue_; - // Private Member Functions @@ -172,14 +165,6 @@ public: //- Get corresponding K field tmp<scalarField> K() const; - //- Return true if this patch field fixes a value. - // Needed to check if a level has to be specified while solving - // Poissons equations. - virtual bool fixesValue() const - { - return fixesValue_; - } - //- Update the coefficients associated with the patch field virtual void updateCoeffs(); @@ -190,7 +175,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace compressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C new file mode 100644 index 0000000000000000000000000000000000000000..c44ec7656c15571ac5e23b0d07cb5578c19c6a5e --- /dev/null +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C @@ -0,0 +1,458 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" +#include "volFields.H" +#include "directMappedPatchBase.H" +#include "regionProperties.H" +#include "basicThermo.H" +#include "RASModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace compressible +{ + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +bool turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::interfaceOwner +( + const polyMesh& nbrRegion, + const polyPatch& nbrPatch +) const +{ + const fvMesh& myRegion = patch().boundaryMesh().mesh(); + + if (nbrRegion.name() == myRegion.name()) + { + return patch().index() < nbrPatch.index(); + } + else + { + const regionProperties& props = + myRegion.objectRegistry::parent().lookupObject<regionProperties> + ( + "regionProperties" + ); + + label myIndex = findIndex(props.fluidRegionNames(), myRegion.name()); + if (myIndex == -1) + { + label i = findIndex(props.solidRegionNames(), myRegion.name()); + + if (i == -1) + { + FatalErrorIn + ( + "turbulentTemperatureCoupledBaffleMixedFvPatchScalarField" + "::interfaceOwner(const polyMesh&" + ", const polyPatch&)const" + ) << "Cannot find region " << myRegion.name() + << " neither in fluids " << props.fluidRegionNames() + << " nor in solids " << props.solidRegionNames() + << exit(FatalError); + } + myIndex = props.fluidRegionNames().size() + i; + } + label nbrIndex = findIndex + ( + props.fluidRegionNames(), + nbrRegion.name() + ); + if (nbrIndex == -1) + { + label i = findIndex(props.solidRegionNames(), nbrRegion.name()); + + if (i == -1) + { + FatalErrorIn + ( + "coupleManager::interfaceOwner" + "(const polyMesh&, const polyPatch&) const" + ) << "Cannot find region " << nbrRegion.name() + << " neither in fluids " << props.fluidRegionNames() + << " nor in solids " << props.solidRegionNames() + << exit(FatalError); + } + nbrIndex = props.fluidRegionNames().size() + i; + } + return myIndex < nbrIndex; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField:: +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF +) +: + mixedFvPatchScalarField(p, iF), + neighbourFieldName_("undefined-neighbourFieldName"), + KName_("undefined-K") +{ + this->refValue() = 0.0; + this->refGrad() = 0.0; + this->valueFraction() = 1.0; + this->fixesValue_ = true; +} + + +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField:: +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField +( + const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + mixedFvPatchScalarField(ptf, p, iF, mapper), + neighbourFieldName_(ptf.neighbourFieldName_), + KName_(ptf.KName_), + fixesValue_(ptf.fixesValue_) +{} + + +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField:: +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const dictionary& dict +) +: + mixedFvPatchScalarField(p, iF), + neighbourFieldName_(dict.lookup("neighbourFieldName")), + KName_(dict.lookup("K")) +{ + if (!isA<directMappedPatchBase>(this->patch().patch())) + { + FatalErrorIn + ( + "turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::" + "turbulentTemperatureCoupledBaffleMixedFvPatchScalarField\n" + "(\n" + " const fvPatch& p,\n" + " const DimensionedField<scalar, volMesh>& iF,\n" + " const dictionary& dict\n" + ")\n" + ) << "\n patch type '" << p.type() + << "' not type '" << directMappedPatchBase::typeName << "'" + << "\n for patch " << p.name() + << " of field " << dimensionedInternalField().name() + << " in file " << dimensionedInternalField().objectPath() + << exit(FatalError); + } + + fvPatchScalarField::operator=(scalarField("value", dict, p.size())); + + if (dict.found("refValue")) + { + // Full restart + refValue() = scalarField("refValue", dict, p.size()); + refGrad() = scalarField("refGradient", dict, p.size()); + valueFraction() = scalarField("valueFraction", dict, p.size()); + fixesValue_ = readBool(dict.lookup("fixesValue")); + } + else + { + // Start from user entered data. Assume fixedValue. + refValue() = *this; + refGrad() = 0.0; + valueFraction() = 1.0; + fixesValue_ = true; + } +} + + +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField:: +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField +( + const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField& wtcsf, + const DimensionedField<scalar, volMesh>& iF +) +: + mixedFvPatchScalarField(wtcsf, iF), + neighbourFieldName_(wtcsf.neighbourFieldName_), + KName_(wtcsf.KName_), + fixesValue_(wtcsf.fixesValue_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +tmp<scalarField> +turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::K() const +{ + const fvMesh& mesh = patch().boundaryMesh().mesh(); + + if (KName_ == "none") + { + const compressible::RASModel& model = + db().lookupObject<compressible::RASModel>("RASProperties"); + + tmp<volScalarField> talpha = model.alphaEff(); + + const basicThermo& thermo = + db().lookupObject<basicThermo>("thermophysicalProperties"); + + return + talpha().boundaryField()[patch().index()] + *thermo.Cp()().boundaryField()[patch().index()]; + } + else if (mesh.objectRegistry::foundObject<volScalarField>(KName_)) + { + return patch().lookupPatchField<volScalarField, scalar>(KName_); + } + else if (mesh.objectRegistry::foundObject<volSymmTensorField>(KName_)) + { + const symmTensorField& KWall = + patch().lookupPatchField<volSymmTensorField, scalar>(KName_); + + vectorField n = patch().nf(); + + return n & KWall & n; + } + else + { + FatalErrorIn + ( + "turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::K()" + " const" + ) << "Did not find field " << KName_ + << " on mesh " << mesh.name() << " patch " << patch().name() + << endl + << "Please set 'K' to 'none', a valid volScalarField" + << " or a valid volSymmTensorField." << exit(FatalError); + + return scalarField(0); + } +} + + +void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs() +{ + if (updated()) + { + return; + } + + // Get the coupling information from the directMappedPatchBase + const directMappedPatchBase& mpp = refCast<const directMappedPatchBase> + ( + patch().patch() + ); + const polyMesh& nbrMesh = mpp.sampleMesh(); + const fvPatch& nbrPatch = refCast<const fvMesh> + ( + nbrMesh + ).boundary()[mpp.samplePolyPatch().index()]; + + // Force recalculation of mapping and schedule + const mapDistribute& distMap = mpp.map(); + (void)distMap.schedule(); + + tmp<scalarField> intFld = patchInternalField(); + + if (interfaceOwner(nbrMesh, nbrPatch.patch())) + { + // Note: other side information could be cached - it only needs + // to be updated the first time round the iteration (i.e. when + // switching regions) but unfortunately we don't have this information. + + + // Calculate the temperature by harmonic averaging + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField& + nbrField = + refCast + < + const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + > + ( + nbrPatch.lookupPatchField<volScalarField, scalar> + ( + neighbourFieldName_ + ) + ); + + // Swap to obtain full local values of neighbour internal field + scalarField nbrIntFld = nbrField.patchInternalField(); + mapDistribute::distribute + ( + Pstream::defaultCommsType, + distMap.schedule(), + distMap.constructSize(), + distMap.subMap(), // what to send + distMap.constructMap(), // what to receive + nbrIntFld + ); + + // Swap to obtain full local values of neighbour K*delta + scalarField nbrKDelta = nbrField.K()*nbrPatch.deltaCoeffs(); + mapDistribute::distribute + ( + Pstream::defaultCommsType, + distMap.schedule(), + distMap.constructSize(), + distMap.subMap(), // what to send + distMap.constructMap(), // what to receive + nbrKDelta + ); + + tmp<scalarField> myKDelta = K()*patch().deltaCoeffs(); + + // Calculate common wall temperature. Reuse *this to store common value. + scalarField Twall + ( + (myKDelta()*intFld() + nbrKDelta*nbrIntFld) + / (myKDelta() + nbrKDelta) + ); + // Assign to me + fvPatchScalarField::operator=(Twall); + // Distribute back and assign to neighbour + mapDistribute::distribute + ( + Pstream::defaultCommsType, + distMap.schedule(), + nbrField.size(), + distMap.constructMap(), // reverse : what to send + distMap.subMap(), + Twall + ); + const_cast<turbulentTemperatureCoupledBaffleMixedFvPatchScalarField&> + ( + nbrField + ).fvPatchScalarField::operator=(Twall); + } + + + // Switch between fixed value (of harmonic avg) or gradient + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + label nFixed = 0; + + // Like snGrad but bypass switching on refValue/refGrad. + tmp<scalarField> normalGradient = (*this-intFld())*patch().deltaCoeffs(); + + if (debug) + { + scalar Q = gSum(K()*patch().magSf()*normalGradient()); + + Info<< patch().boundaryMesh().mesh().name() << ':' + << patch().name() << ':' + << this->dimensionedInternalField().name() << " -> " + << nbrMesh.name() << ':' + << nbrPatch.name() << ':' + << this->dimensionedInternalField().name() << " :" + << " heatFlux:" << Q + << " walltemperature " + << " min:" << gMin(*this) + << " max:" << gMax(*this) + << " avg:" << gAverage(*this) + << endl; + } + + forAll(*this, i) + { + // if outgoing flux use fixed value. + if (normalGradient()[i] < 0.0) + { + this->refValue()[i] = operator[](i); + this->refGrad()[i] = 0.0; // not used + this->valueFraction()[i] = 1.0; + nFixed++; + } + else + { + this->refValue()[i] = 0.0; // not used + this->refGrad()[i] = normalGradient()[i]; + this->valueFraction()[i] = 0.0; + } + } + + reduce(nFixed, sumOp<label>()); + + fixesValue_ = (nFixed > 0); + + if (debug) + { + label nTotSize = returnReduce(this->size(), sumOp<label>()); + + Info<< patch().boundaryMesh().mesh().name() << ':' + << patch().name() << ':' + << this->dimensionedInternalField().name() << " -> " + << nbrMesh.name() << ':' + << nbrPatch.name() << ':' + << this->dimensionedInternalField().name() << " :" + << " patch:" << patch().name() + << " out of:" << nTotSize + << " fixedBC:" << nFixed + << " gradient:" << nTotSize-nFixed << endl; + } + + mixedFvPatchScalarField::updateCoeffs(); +} + + +void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::write +( + Ostream& os +) const +{ + mixedFvPatchScalarField::write(os); + os.writeKeyword("neighbourFieldName")<< neighbourFieldName_ + << token::END_STATEMENT << nl; + os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; + os.writeKeyword("fixesValue") << fixesValue_ << token::END_STATEMENT << nl; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePatchTypeField +( + fvPatchScalarField, + turbulentTemperatureCoupledBaffleMixedFvPatchScalarField +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace compressible +} // End namespace Foam + + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H new file mode 100644 index 0000000000000000000000000000000000000000..d4fe1d06fd16c09b74405c288fe42871cf61eaa8 --- /dev/null +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H @@ -0,0 +1,204 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::compressible::turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + +Description + Mixed boundary condition for temperature, to be used for heat-transfer + on back-to-back baffles. + + If my temperature is T1, neighbour is T2: + + T1 > T2: my side becomes fixedValue T2 bc, other side becomes fixedGradient. + + + Example usage: + myInterfacePatchName + { + type turbulentTemperatureCoupledBaffleMixed; + neighbourFieldName T; + K K; // or none + value uniform 300; + } + + Needs to be on underlying directMapped(Wall)FvPatch. + + Note: if K is "none" looks up RASModel and basicThermo, otherwise expects + the solver to calculate a 'K' field. + + Note: runs in parallel with arbitrary decomposition. Uses directMapped + functionality to calculate exchange. + + Note: lags interface data so both sides use same data. + - problem: schedule to calculate average would interfere + with standard processor swaps. + - so: updateCoeffs sets both to same Twall. Only need to do + this for last outer iteration but don't have access to this. + +SourceFiles + turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef turbulentTemperatureCoupledBaffleMixedFvPatchScalarField_H +#define turbulentTemperatureCoupledBaffleMixedFvPatchScalarField_H + +//#include "fvPatchFields.H" +#include "mixedFvPatchFields.H" +//#include "fvPatch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace compressible +{ + +/*---------------------------------------------------------------------------*\ + Class turbulentTemperatureCoupledBaffleMixedFvPatchScalarField Declaration +\*---------------------------------------------------------------------------*/ + +class turbulentTemperatureCoupledBaffleMixedFvPatchScalarField +: + public mixedFvPatchScalarField +{ + // Private data + + //- Name of field on the neighbour region + const word neighbourFieldName_; + + //- Name of thermal conductivity field + const word KName_; + + bool fixesValue_; + + + // Private Member Functions + + //- Am I or neighbour owner of interface + bool interfaceOwner(const polyMesh&, const polyPatch&) const; + + +public: + + //- Runtime type information + TypeName("compressible::turbulentTemperatureCoupledBaffleMixed"); + + + // Constructors + + //- Construct from patch and internal field + turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + ( + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given + // turbulentTemperatureCoupledBaffleMixedFvPatchScalarField onto a + // new patch + turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + ( + const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField&, + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct and return a clone + virtual tmp<fvPatchScalarField> clone() const + { + return tmp<fvPatchScalarField> + ( + new turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + ( + *this + ) + ); + } + + //- Construct as copy setting internal field reference + turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + ( + const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField&, + const DimensionedField<scalar, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchScalarField> clone + ( + const DimensionedField<scalar, volMesh>& iF + ) const + { + return tmp<fvPatchScalarField> + ( + new turbulentTemperatureCoupledBaffleMixedFvPatchScalarField + ( + *this, + iF + ) + ); + } + + + // Member functions + + //- Get corresponding K field + tmp<scalarField> K() const; + + //- Return true if this patch field fixes a value. + // Needed to check if a level has to be specified while solving + // Poissons equations. + virtual bool fixesValue() const + { + return fixesValue_; + } + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace compressible +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C index b5022e2756469fcb0b70eea08ae1be15633cb0fd..5c73b8b146f80447c58e1142000b931d6f839d58 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C @@ -239,7 +239,7 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() // Molecular Prandtl number scalar Pr = muw[faceI]/alphaw[faceI]; - // Molecular-to-turbulenbt Prandtl number ratio + // Molecular-to-turbulent Prandtl number ratio scalar Prat = Pr/Prt_; // Thermal sublayer thickness diff --git a/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C b/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C index 76c2ef0ba475c0ba25be0728c787087a2bff2db4..fd7791d9f322cfae4c5ba3bd81335d714fe00903 100644 --- a/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C +++ b/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C @@ -76,7 +76,7 @@ LESModel::LESModel ), printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subDictPtr(type + "Coeffs")), + coeffDict_(subOrEmptyDict(type + "Coeffs")), k0_("k0", dimVelocity*dimVelocity, SMALL), delta_(LESdelta::New("delta", U.mesh(), *this)) diff --git a/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C b/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C index 53a07734571ec0a2a16b45557ebbf236b563d0c1..60bbb41ef1776c67eb43e1f3a2273a249225adc6 100644 --- a/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C +++ b/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C @@ -73,6 +73,8 @@ Smagorinsky::Smagorinsky ) { updateSubGridScaleFields(fvc::grad(U)); + + printCoeffs(); } diff --git a/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C b/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C index 9a6a447166bac7a3616a7092fc9ccf28b197afd8..1803075428c9e1ac2a8b9b0317fe9f9ef6f49b79 100644 --- a/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C +++ b/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C @@ -78,7 +78,7 @@ RASModel::RASModel turbulence_(lookup("turbulence")), printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subDictPtr(type + "Coeffs")), + coeffDict_(subOrEmptyDict(type + "Coeffs")), k0_("k0", dimVelocity*dimVelocity, SMALL), epsilon0_("epsilon", k0_.dimensions()/dimTime, SMALL), diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C index c202ac479c8e3c71f3a9d2fb744cd853e6e4975e..a857b587e30ddcd462560efc8fa1bc9774e8ae41 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C @@ -186,7 +186,7 @@ tmp<scalarField> nutURoughWallFunctionFvPatchScalarField::calcYPlus yPlusLast = yp; yp = (kappaRe + yp)/(1.0 + log(E_*yp)); - } while(mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 && ++iter < 10); + } while (mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 && ++iter < 10); yPlus[facei] = max(0.0, yp); } diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C index bccc07672ff826a4f6d5a84e5748d2133e5a7e23..ba5f0e79c5a473e4b976ca5da1e6689afb848166 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C @@ -98,7 +98,7 @@ tmp<scalarField> nutUWallFunctionFvPatchScalarField::calcYPlus yPlusLast = yp; yp = (kappaRe + yp)/(1.0 + log(E_*yp)); - } while(mag(ryPlusLam*(yp - yPlusLast)) > 0.01 && ++iter < 10 ); + } while (mag(ryPlusLam*(yp - yPlusLast)) > 0.01 && ++iter < 10 ); yPlus[facei] = max(0.0, yp); } diff --git a/tutorials/basic/potentialFoam/cylinder/analyticalCylinder/analyticalCylinder.C b/tutorials/basic/potentialFoam/cylinder/analyticalCylinder/analyticalCylinder.C index 5c3b671271f41f36e8c0091c32a7a2e8d88efc3c..044a9fb6096699e6758bf35e6ee9b8179d7068b5 100644 --- a/tutorials/basic/potentialFoam/cylinder/analyticalCylinder/analyticalCylinder.C +++ b/tutorials/basic/potentialFoam/cylinder/analyticalCylinder/analyticalCylinder.C @@ -26,7 +26,7 @@ Application analyticalCylinder Description - Generates an analytical solution for potential flow around a cylinder. + Generates an analytical solution for potential flow around a cylinder. Can be compared with the solution from the potentialFlow/cylinder example. \*---------------------------------------------------------------------------*/ @@ -47,19 +47,19 @@ int main(int argc, char *argv[]) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nEvaluating analytical solution" << endl; + Info<< "\nEvaluating analytical solution" << endl; volVectorField centres = UA.mesh().C(); volScalarField magCentres = mag(centres); volScalarField theta = acos((centres & vector(1,0,0))/magCentres); volVectorField cs2theta = - cos(2*theta)*vector(1,0,0) + cos(2*theta)*vector(1,0,0) + sin(2*theta)*vector(0,1,0); UA = uInfX*(dimensionedVector(vector(1,0,0)) - pow((radius/magCentres),2)*cs2theta); - + runTime.write(); Info<< "end" << endl; diff --git a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C index 09c2a247f316e18bd37a76dd1b0507eaba1a66eb..c4f266376a9ce43f16b78d600347191223a0873b 100644 --- a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C +++ b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C @@ -106,7 +106,7 @@ int main(int argc, char *argv[]) plot3dFile >> coord; // if statement ignores the first layer in i and j - if(i>0 && j>0) + if (i>0 && j>0) { points[p++][comp] = coord; } @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) // correct error in biconic meshes forAll(points, i) { - if(points[i][1] < 1e-07) + if (points[i][1] < 1e-07) { points[i][1] = 0.0; } @@ -143,11 +143,11 @@ int main(int argc, char *argv[]) pointsWedge[i+nPointsij] = cmptMultiply(vector(1.0, 1.0, -1.0), pointsWedge[i]); } - Info << "Writing points to: " << nl + Info<< "Writing points to: " << nl << " " << pointsFile << endl; pFile << pointsWedge; - Info << "End" << endl; + Info<< "End" << endl; return 0; } diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/T b/tutorials/compressible/rhoSimplecFoam/squareBend/0/T new file mode 100644 index 0000000000000000000000000000000000000000..c8a138aa58790f15280607c4f5efcbb6af718458 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/T @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 1000; + +boundaryField +{ + Default_Boundary_Region + { + type zeroGradient; + } + + inlet + { + type fixedValue; + value uniform 1000; + } + + outlet + { + type inletOutlet; + //type zeroGradient; + value uniform 1000; + inletValue uniform 1000; + } +} + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/U b/tutorials/compressible/rhoSimplecFoam/squareBend/0/U new file mode 100644 index 0000000000000000000000000000000000000000..971e760d3de41121061402f49b9b5f48606e05df --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/U @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ 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 +{ + Default_Boundary_Region + { + type fixedValue; + value uniform (0 0 0); + } + inlet + { + type flowRateInletVelocity; + flowRate 0.5; //0.75; + value uniform (0 0 0); + } + outlet + { + type inletOutlet; + value uniform (0 0 0); + inletValue uniform (0 0 0); + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/alphat b/tutorials/compressible/rhoSimplecFoam/squareBend/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..7b530fa40d6ca9703e0e6ff00cbdfb508d6cb886 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/alphat @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + Default_Boundary_Region + { + type alphatWallFunction; + Prt 0.85; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon b/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..c63316a51f187fbad536b6cdc759d7dc26038820 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ 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 +{ + Default_Boundary_Region + { + type compressible::epsilonWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; + value uniform 200; + } + inlet + { + type compressible::turbulentMixingLengthDissipationRateInlet; + mixingLength 0.005; + value uniform 200; + } + outlet + { + type inletOutlet; + inletValue uniform 200; + value uniform 200; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/k b/tutorials/compressible/rhoSimplecFoam/squareBend/0/k new file mode 100644 index 0000000000000000000000000000000000000000..b885efd902903cfab3886b5ddd5a3398c1c6fb03 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/k @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ 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 +{ + Default_Boundary_Region + { + type compressible::kqRWallFunction; + value uniform 1; + } + inlet + { + type turbulentIntensityKineticEnergyInlet; + intensity 0.05; + value uniform 1; + } + outlet + { + type inletOutlet; + inletValue uniform 1; + value uniform 1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/mut b/tutorials/compressible/rhoSimplecFoam/squareBend/0/mut new file mode 100644 index 0000000000000000000000000000000000000000..4d70cca517befb6df33d9cab5de6b92ef93054c2 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/mut @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object mut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + Default_Boundary_Region + { + type mutkWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/p b/tutorials/compressible/rhoSimplecFoam/squareBend/0/p new file mode 100644 index 0000000000000000000000000000000000000000..fa45b63e2ce0c795081c3adcd857d0ec8ff1ba3b --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/p @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 110000; + +boundaryField +{ + Default_Boundary_Region + { + type zeroGradient; + } + inlet + { + //type zeroGradient; + type mixed; + refValue uniform 110000; + refGradient uniform 0; + valueFraction uniform 0.3; + } + outlet + { + type fixedValue; + value uniform 110000; + + //type mixed; + //refValue uniform 110000; + //refGradient uniform 0; + //valueFraction uniform 1; + //type transonicOutletPressure; + //U U; + //phi phi; + //gamma 1.4; + //psi psi; + //pInf uniform 110000; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..81b1ec9115226882e6e980b8e5f4e19cabb886d9 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/polyMesh/blockMeshDict b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..f8b06e3446c6677dfb854db4183fb39cb55b4a9d --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/polyMesh/blockMeshDict @@ -0,0 +1,115 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.001; + +vertices +( + // front-plane: z = +25mm + // inlet region + ( -50 25 25) // pt 0 + ( 0 25 25) // pt 1 + ( -50 75 25) // pt 2 + ( 0 75 25) // pt 3 + // outlet region + ( -500 -75 25) // pt 4 + ( 0 -75 25) // pt 5 + ( -500 -25 25) // pt 6 + ( 0 -25 25) // pt 7 + // bend mid-points + ( 25 0 25) // pt 8 + ( 75 0 25) // pt 9 + // back-plane: z = -25mm + // inlet region + ( -50 25 -25) // pt 0 + 10 + ( 0 25 -25) // pt 1 + 10 + ( -50 75 -25) // pt 2 + 10 + ( 0 75 -25) // pt 3 + 10 + // outlet region + ( -500 -75 -25) // pt 4 + 10 + ( 0 -75 -25) // pt 5 + 10 + ( -500 -25 -25) // pt 7 + 10 + ( 0 -25 -25) // pt 8 + 10 + // bend mid-points + ( 25 0 -25) // pt 8 + 10 + ( 75 0 -25) // pt 9 + 10 +); + +blocks +( + hex (0 1 11 10 2 3 13 12) inlet ( 20 20 20) simpleGrading (1 1 1) + hex (4 5 15 14 6 7 17 16) outlet (200 20 20) simpleGrading (1 1 1) + + hex (1 8 18 11 3 9 19 13) bend1 ( 30 20 20) simpleGrading (1 1 1) + hex (5 9 19 15 7 8 18 17) bend2 ( 30 20 20) simpleGrading (1 1 1) +); + +edges +( + // block 2 + arc 1 8 ( 17.678 17.678 25) + arc 11 18 ( 17.678 17.678 -25) + arc 3 9 ( 53.033 53.033 25) + arc 13 19 ( 53.033 53.033 -25) + // block 3 + arc 7 8 ( 17.678 -17.678 25) + arc 17 18 ( 17.678 -17.678 -25) + arc 5 9 ( 53.033 -53.033 25) + arc 15 19 ( 53.033 -53.033 -25) +); + +patches +( + // is there no way of defining all my 'defaultFaces' to be 'wall'? + wall Default_Boundary_Region + ( + // block0 + ( 0 1 3 2 ) + ( 11 10 12 13 ) + ( 0 10 11 1 ) + ( 2 3 13 12 ) + // block1 + ( 4 5 7 6 ) + ( 15 14 16 17 ) + ( 4 14 15 5 ) + ( 6 7 17 16 ) + // block2 + ( 1 8 9 3 ) + ( 18 11 13 19 ) + ( 3 9 19 13 ) + ( 1 11 18 8 ) + // block3 + ( 5 9 8 7 ) + ( 19 15 17 18 ) + ( 5 15 19 9 ) + ( 7 8 18 17 ) + ) + patch inlet + ( + (0 2 12 10) + ) + + patch outlet + ( + (4 6 16 14) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/polyMesh/boundary b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..ae1e146725bc8086594a16afae82bc7ac774dfe9 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- 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 polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + Default_Boundary_Region + { + type wall; + nFaces 22400; + startFace 324400; + } + inlet + { + type patch; + nFaces 400; + startFace 346800; + } + outlet + { + type patch; + nFaces 400; + startFace 347200; + } +) + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/thermophysicalProperties b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..a2c84a89d38005a697cd9d8b3bcce3ada3e0db44 --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/thermophysicalProperties @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hPsiThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; + +mixture air 1 28.9 1007 0 1.4792e-06 116; + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..f6753662e27e414f4bfb666745b7888fef8510bb --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/system/controlDict b/tutorials/compressible/rhoSimplecFoam/squareBend/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..49ae3f8a17dea10fc4665f7df8c730bc95e82b1a --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/system/controlDict @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application rhoSimplecFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 500; + +deltaT 1; + +writeControl timeStep; + +writeInterval 100; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +graphFormat raw; + +runTimeModifiable yes; + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes b/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..e84e32f437fe54f051abfe715b3e6998909352da --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes @@ -0,0 +1,71 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + + div(phi,U) Gauss upwind; //limitedLinearV 1; //upwind; + div((muEff*dev2(grad(U).T()))) Gauss linear; + div(phi,h) Gauss upwind; //limitedLinear 1; //upwind; + div(phi,epsilon) Gauss upwind; + div(phi,k) Gauss upwind; + + div(phid,p) Gauss upwind; + div(U,p) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; +} + +interpolationSchemes +{ + default none; + interpolate(rho) linear; + div(U,p) upwind phi; + interpolate((psi*U)) linear; + interpolate(U) linear; + UD upwind phid; + interpolate(p) linear; + interpolate(((rho|(A(U)-H(1)))-(rho|A(U)))) linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p; + pCorr; +} + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSolution b/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..d114a8557125247771c9dcdf6309b19a6b62035c --- /dev/null +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSolution @@ -0,0 +1,199 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p0 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0.01; + } + + p + { + solver GAMG; + tolerance 1e-08; + relTol 0.1; + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + nFinestSweeps 2; + cacheAgglomeration true; + nCellsInCoarsestLevel 20; + agglomerator faceAreaPair; + mergeLevels 1; + } + + U0 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0.1; + } + + U1 + { + solver smoothSolver; + smoother GaussSeidel; + nSweeps 1; + tolerance 1e-08; + relTol 0.1; + } + + U + { + solver GAMG; + tolerance 1e-08; + relTol 0.1; + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + nFinestSweeps 2; + cacheAgglomeration true; + nCellsInCoarsestLevel 20; + agglomerator faceAreaPair; + mergeLevels 1; + } + + h0 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0.1; + } + + h1 + { + solver smoothSolver; + smoother GaussSeidel; + nSweeps 1; + tolerance 1e-08; + relTol 0.1; + } + + h + { + solver GAMG; + tolerance 1e-08; + relTol 0.1; + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + nFinestSweeps 2; + cacheAgglomeration true; + nCellsInCoarsestLevel 20; + agglomerator faceAreaPair; + mergeLevels 1; + } + + k0 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0.1; + } + + k1 + { + solver smoothSolver; + smoother GaussSeidel; + nSweeps 1; + tolerance 1e-08; + relTol 0.1; + } + + k + { + solver GAMG; + tolerance 1e-08; + relTol 0.1; + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + nFinestSweeps 2; + cacheAgglomeration true; + nCellsInCoarsestLevel 20; + agglomerator faceAreaPair; + mergeLevels 1; + } + + epsilon0 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0.1; + } + + epsilon1 + { + solver smoothSolver; + smoother GaussSeidel; + nSweeps 1; + tolerance 1e-08; + relTol 0.1; + } + + epsilon + { + solver GAMG; + tolerance 1e-08; + relTol 0.1; + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + nFinestSweeps 2; + cacheAgglomeration true; + nCellsInCoarsestLevel 20; + agglomerator faceAreaPair; + mergeLevels 1; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; + pMin pMin [1 -1 -2 0 0 0 0] 10000; + transonic yes; +} + +relaxationFactors +{ + p 1; + rho 1; //0.1; + U 0.9; + h 0.95; + k 0.9; + epsilon 0.9; +} + +relaxationFactors0 +{ + p 0.3; + rho 0.1; + U 0.7; + h 0.7; + k 0.7; + epsilon 0.7; +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/iDof b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/iDof index 4f081fa179a0422cd94a93f612b19642f8a65a30..1e13af9370f63157d67336a43f8506b935b100bd 100644 --- a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/iDof +++ b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/iDof @@ -32,7 +32,8 @@ boundaryField walls { - type zeroGradient; + type calculated; + value uniform 0; } } diff --git a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/internalE b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/internalE index 8bf198ceaef2722f8ffc0ec035134eacb1b811fe..976ec30e748377cdf28804e7eafffd9678af758d 100644 --- a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/internalE +++ b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/internalE @@ -32,7 +32,8 @@ boundaryField walls { - type zeroGradient; + type calculated; + value uniform 0; } } diff --git a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/linearKE b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/linearKE index f05be3b1c8420ccf544949ddcfa974b65d97bda9..b26e99313c337f33fdd5fb3a6014ddfc4be6bf1f 100644 --- a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/linearKE +++ b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/linearKE @@ -32,7 +32,8 @@ boundaryField walls { - type zeroGradient; + type calculated; + value uniform 0; } } diff --git a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/momentum b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/momentum index 244901de0c415b351cdeebe51ea07045411219a6..05d234bd2a9faeea9e3be9f3704f6c70332adf85 100644 --- a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/momentum +++ b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/momentum @@ -32,7 +32,8 @@ boundaryField walls { - type zeroGradient; + type calculated; + value uniform (0 0 0); } } diff --git a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoM b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoM index fa4dec993be1da096d12025ec261540e90be66dc..7ec6f3368f6ffb0e880a51f0cf7caf0d5fe7dd08 100644 --- a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoM +++ b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoM @@ -32,7 +32,8 @@ boundaryField walls { - type zeroGradient; + type calculated; + value uniform 0; } } diff --git a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoN b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoN index cd16296be931f3e54ad743e68165113548372821..f847c22cd09bcd571c103f2dd0ccb8512cf97fbc 100644 --- a/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoN +++ b/tutorials/discreteMethods/dsmcFoam/supersonicCorner/0/rhoN @@ -32,7 +32,8 @@ boundaryField walls { - type zeroGradient; + type calculated; + value uniform 0; } } diff --git a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/iDof b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/iDof index 3e8f63f7c3bcea350c645b1f3100243a2cd32d67..b31b782ef050c24772f71c89a2de1167f746c923 100644 --- a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/iDof +++ b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/iDof @@ -27,7 +27,8 @@ boundaryField obstacle { - type zeroGradient; + type calculated; + value uniform 0; } periodic diff --git a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/internalE b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/internalE index 4cb241119786cd855db3ef548cb70bbad5853d58..61e30470b9791854b94c86ca60de0db6ebf9d7c4 100644 --- a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/internalE +++ b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/internalE @@ -27,7 +27,8 @@ boundaryField obstacle { - type zeroGradient; + type calculated; + value uniform 0; } periodic diff --git a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/linearKE b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/linearKE index 72f2c152c5c29dbc7ddeddbc33b4fa50ff626203..b3f5a50d70da3a3fa0ef3389bfffced201ce155c 100644 --- a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/linearKE +++ b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/linearKE @@ -27,7 +27,8 @@ boundaryField obstacle { - type zeroGradient; + type calculated; + value uniform 0; } periodic diff --git a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/momentum b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/momentum index f0e6facaef53db8cd1aeba1bc2cb3b5c232ce68b..424e0310cc4070392cd1708231e7ab87e4360d2f 100644 --- a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/momentum +++ b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/momentum @@ -27,7 +27,8 @@ boundaryField obstacle { - type zeroGradient; + type calculated; + value uniform (0 0 0); } periodic diff --git a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoM b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoM index 9a84df6fa04f1055614e23361c93d23080fd87a8..224aae627a1e17ebdbc52bce9e1220805b83b23b 100644 --- a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoM +++ b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoM @@ -27,7 +27,8 @@ boundaryField obstacle { - type zeroGradient; + type calculated; + value uniform 0; } periodic diff --git a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoN b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoN index 4f948784aef625e893f24c88fc72321bbf760da6..275417c99567a6157034da5570056d96538eb489 100644 --- a/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoN +++ b/tutorials/discreteMethods/dsmcFoam/wedge15Ma5/0/rhoN @@ -27,7 +27,8 @@ boundaryField obstacle { - type zeroGradient; + type calculated; + value uniform 0; } periodic diff --git a/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/createFields.H b/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/createFields.H index 43242a6e377c03d6c71f0ee37612f82a3fa42435..869a5899ccb89c9cdb961916c95be4d2953b9bae 100644 --- a/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/createFields.H +++ b/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/createFields.H @@ -1,4 +1,4 @@ - Info << "Reading field p\n" << endl; + Info<< "Reading field p\n" << endl; volScalarField p ( IOobject @@ -12,7 +12,7 @@ mesh ); - Info << "Reading field U\n" << endl; + Info<< "Reading field U\n" << endl; volVectorField U ( IOobject diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/0/U b/tutorials/incompressible/simpleFoam/pitzDaily/0/U index ec085adb4f59eb5cc3f97b7e0d9c0d100e1ccfc4..030418e9b5ccae776bd60c448468af292feab2bb 100644 --- a/tutorials/incompressible/simpleFoam/pitzDaily/0/U +++ b/tutorials/incompressible/simpleFoam/pitzDaily/0/U @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,43 +10,12270 @@ 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); +internalField nonuniform List<vector> +12225 +( +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(5.97149 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.01997 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(7.60266 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.0342 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.38927 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.69822 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(8.97654 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.19669 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.38007 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.56993 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.76615 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(9.96866 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.80182 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.51447 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(9.20555 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.8656 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.47838 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(8.01213 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(7.38873 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.27953 0 0) +(6.4341 0 0) +(7.17455 0 0) +(7.17409 0 0) +(7.17363 0 0) +(7.17317 0 0) +(7.1727 0 0) +(7.17223 0 0) +(7.17175 0 0) +(7.17127 0 0) +(7.17079 0 0) +(7.1703 0 0) +(7.16981 0 0) +(7.16932 0 0) +(7.16882 0 0) +(7.16831 0 0) +(7.16781 0 0) +(7.16729 0 0) +(7.16678 0 0) +(7.16626 0 0) +(7.16573 0 0) +(7.1652 0 0) +(7.16467 0 0) +(7.16413 0 0) +(7.16359 0 0) +(7.16304 0 0) +(7.16249 0 0) +(7.16194 0 0) +(7.16138 0 0) +(7.16081 0 0) +(7.16024 0 0) +(7.15967 0 0) +(7.15909 0 0) +(7.15851 0 0) +(7.15792 0 0) +(7.15732 0 0) +(7.15673 0 0) +(7.15612 0 0) +(7.15551 0 0) +(7.1549 0 0) +(7.15428 0 0) +(7.15366 0 0) +(7.15303 0 0) +(7.1524 0 0) +(7.15176 0 0) +(7.15111 0 0) +(7.15046 0 0) +(7.14981 0 0) +(7.14915 0 0) +(7.14848 0 0) +(7.14781 0 0) +(7.14713 0 0) +(7.14645 0 0) +(7.14576 0 0) +(7.14507 0 0) +(7.14436 0 0) +(7.14366 0 0) +(7.14295 0 0) +(7.14223 0 0) +(7.1415 0 0) +(7.14077 0 0) +(7.14004 0 0) +(7.1393 0 0) +(7.13855 0 0) +(7.13779 0 0) +(7.13703 0 0) +(7.13626 0 0) +(7.13549 0 0) +(7.13471 0 0) +(7.13392 0 0) +(7.13313 0 0) +(7.13233 0 0) +(7.13152 0 0) +(7.1307 0 0) +(7.12988 0 0) +(7.12905 0 0) +(7.12822 0 0) +(7.12738 0 0) +(7.12653 0 0) +(7.12567 0 0) +(7.12481 0 0) +(7.12393 0 0) +(7.12306 0 0) +(7.12217 0 0) +(7.12128 0 0) +(7.12037 0 0) +(7.11947 0 0) +(7.11855 0 0) +(7.11762 0 0) +(7.11669 0 0) +(7.11575 0 0) +(7.1148 0 0) +(7.11384 0 0) +(7.11288 0 0) +(7.11191 0 0) +(7.11092 0 0) +(7.10993 0 0) +(7.10893 0 0) +(7.10793 0 0) +(7.10691 0 0) +(7.10589 0 0) +(7.10485 0 0) +(7.10381 0 0) +(7.10276 0 0) +(7.1017 0 0) +(7.10063 0 0) +(7.09955 0 0) +(7.09846 0 0) +(7.09736 0 0) +(7.09625 0 0) +(7.09514 0 0) +(7.09401 0 0) +(7.09287 0 0) +(7.09172 0 0) +(7.09057 0 0) +(7.0894 0 0) +(7.08822 0 0) +(7.08703 0 0) +(7.08584 0 0) +(7.08463 0 0) +(7.08341 0 0) +(7.08218 0 0) +(7.08094 0 0) +(7.07968 0 0) +(7.07842 0 0) +(7.07715 0 0) +(7.07586 0 0) +(7.07456 0 0) +(7.07326 0 0) +(7.07194 0 0) +(7.0706 0 0) +(7.06926 0 0) +(7.0679 0 0) +(7.06654 0 0) +(7.06516 0 0) +(7.06376 0 0) +(7.06236 0 0) +(7.06094 0 0) +(7.05951 0 0) +(7.05807 0 0) +(7.05661 0 0) +(7.05514 0 0) +(7.05366 0 0) +(7.05216 0 0) +(7.05065 0 0) +(7.04913 0 0) +(7.04759 0 0) +(7.04604 0 0) +(7.04447 0 0) +(7.04289 0 0) +(7.0413 0 0) +(7.03969 0 0) +(7.03807 0 0) +(7.03643 0 0) +(7.03478 0 0) +(7.03311 0 0) +(7.03142 0 0) +(7.02972 0 0) +(7.02801 0 0) +(7.02628 0 0) +(7.02453 0 0) +(7.02277 0 0) +(7.02099 0 0) +(7.01919 0 0) +(7.01738 0 0) +(7.01555 0 0) +(7.0137 0 0) +(7.01183 0 0) +(7.00995 0 0) +(7.00805 0 0) +(7.00613 0 0) +(7.0042 0 0) +(7.00224 0 0) +(7.00027 0 0) +(6.99828 0 0) +(6.99627 0 0) +(6.99424 0 0) +(6.99219 0 0) +(6.99012 0 0) +(6.98804 0 0) +(6.98593 0 0) +(6.4341 0 0) +(7.53029 0 0) +(8.10456 0 0) +(8.39266 0 0) +(8.39211 0 0) +(8.39156 0 0) +(8.39101 0 0) +(8.39046 0 0) +(8.38989 0 0) +(8.38933 0 0) +(8.38876 0 0) +(8.38818 0 0) +(8.3876 0 0) +(8.38702 0 0) +(8.38643 0 0) +(8.38584 0 0) +(8.38524 0 0) +(8.38463 0 0) +(8.38403 0 0) +(8.38341 0 0) +(8.38279 0 0) +(8.38217 0 0) +(8.38154 0 0) +(8.38091 0 0) +(8.38027 0 0) +(8.37962 0 0) +(8.37897 0 0) +(8.37832 0 0) +(8.37766 0 0) +(8.37699 0 0) +(8.37632 0 0) +(8.37564 0 0) +(8.37496 0 0) +(8.37427 0 0) +(8.37357 0 0) +(8.37287 0 0) +(8.37217 0 0) +(8.37146 0 0) +(8.37074 0 0) +(8.37002 0 0) +(8.36929 0 0) +(8.36855 0 0) +(8.36781 0 0) +(8.36706 0 0) +(8.36631 0 0) +(8.36555 0 0) +(8.36478 0 0) +(8.36401 0 0) +(8.36323 0 0) +(8.36244 0 0) +(8.36165 0 0) +(8.36085 0 0) +(8.36004 0 0) +(8.35923 0 0) +(8.35841 0 0) +(8.35759 0 0) +(8.35675 0 0) +(8.35591 0 0) +(8.35507 0 0) +(8.35421 0 0) +(8.35335 0 0) +(8.35248 0 0) +(8.35161 0 0) +(8.35072 0 0) +(8.34983 0 0) +(8.34893 0 0) +(8.34803 0 0) +(8.34711 0 0) +(8.34619 0 0) +(8.34526 0 0) +(8.34433 0 0) +(8.34338 0 0) +(8.34243 0 0) +(8.34147 0 0) +(8.3405 0 0) +(8.33952 0 0) +(8.33854 0 0) +(8.33754 0 0) +(8.33654 0 0) +(8.33553 0 0) +(8.33451 0 0) +(8.33348 0 0) +(8.33245 0 0) +(8.3314 0 0) +(8.33035 0 0) +(8.32928 0 0) +(8.32821 0 0) +(8.32713 0 0) +(8.32604 0 0) +(8.32494 0 0) +(8.32383 0 0) +(8.32271 0 0) +(8.32158 0 0) +(8.32044 0 0) +(8.31929 0 0) +(8.31813 0 0) +(8.31696 0 0) +(8.31578 0 0) +(8.31459 0 0) +(8.3134 0 0) +(8.31219 0 0) +(8.31097 0 0) +(8.30974 0 0) +(8.30849 0 0) +(8.30724 0 0) +(8.30598 0 0) +(8.30471 0 0) +(8.30342 0 0) +(8.30212 0 0) +(8.30082 0 0) +(8.2995 0 0) +(8.29817 0 0) +(8.29683 0 0) +(8.29547 0 0) +(8.29411 0 0) +(8.29273 0 0) +(8.29134 0 0) +(8.28994 0 0) +(8.28852 0 0) +(8.2871 0 0) +(8.28566 0 0) +(8.28421 0 0) +(8.28274 0 0) +(8.28126 0 0) +(8.27977 0 0) +(8.27827 0 0) +(8.27675 0 0) +(8.27522 0 0) +(8.27368 0 0) +(8.27212 0 0) +(8.27054 0 0) +(8.26896 0 0) +(8.26736 0 0) +(8.26574 0 0) +(8.26411 0 0) +(8.26247 0 0) +(8.26081 0 0) +(8.25914 0 0) +(8.25745 0 0) +(8.25575 0 0) +(8.25403 0 0) +(8.25229 0 0) +(8.25054 0 0) +(8.24877 0 0) +(8.24699 0 0) +(8.24519 0 0) +(8.24338 0 0) +(8.24155 0 0) +(8.2397 0 0) +(8.23783 0 0) +(8.23595 0 0) +(8.23405 0 0) +(8.23214 0 0) +(8.2302 0 0) +(8.22825 0 0) +(8.22628 0 0) +(8.22429 0 0) +(8.22228 0 0) +(8.22026 0 0) +(8.21821 0 0) +(8.21615 0 0) +(8.21407 0 0) +(8.21197 0 0) +(8.20985 0 0) +(8.2077 0 0) +(8.20554 0 0) +(8.20336 0 0) +(8.20116 0 0) +(8.19894 0 0) +(8.19669 0 0) +(8.19443 0 0) +(8.19214 0 0) +(8.18983 0 0) +(8.1875 0 0) +(8.18515 0 0) +(8.18278 0 0) +(8.18038 0 0) +(8.17796 0 0) +(8.17552 0 0) +(8.17305 0 0) +(6.4341 0 0) +(7.53029 0 0) +(8.10456 0 0) +(8.50824 0 0) +(8.82408 0 0) +(9.02684 0 0) +(9.02624 0 0) +(9.02564 0 0) +(9.02504 0 0) +(9.02443 0 0) +(9.02382 0 0) +(9.0232 0 0) +(9.02258 0 0) +(9.02195 0 0) +(9.02132 0 0) +(9.02068 0 0) +(9.02003 0 0) +(9.01938 0 0) +(9.01873 0 0) +(9.01807 0 0) +(9.0174 0 0) +(9.01673 0 0) +(9.01605 0 0) +(9.01537 0 0) +(9.01468 0 0) +(9.01399 0 0) +(9.01329 0 0) +(9.01259 0 0) +(9.01188 0 0) +(9.01116 0 0) +(9.01044 0 0) +(9.00971 0 0) +(9.00897 0 0) +(9.00823 0 0) +(9.00749 0 0) +(9.00673 0 0) +(9.00597 0 0) +(9.00521 0 0) +(9.00444 0 0) +(9.00366 0 0) +(9.00287 0 0) +(9.00208 0 0) +(9.00128 0 0) +(9.00048 0 0) +(8.99967 0 0) +(8.99885 0 0) +(8.99803 0 0) +(8.99719 0 0) +(8.99636 0 0) +(8.99551 0 0) +(8.99466 0 0) +(8.9938 0 0) +(8.99293 0 0) +(8.99206 0 0) +(8.99118 0 0) +(8.99029 0 0) +(8.98939 0 0) +(8.98849 0 0) +(8.98758 0 0) +(8.98666 0 0) +(8.98573 0 0) +(8.9848 0 0) +(8.98385 0 0) +(8.9829 0 0) +(8.98195 0 0) +(8.98098 0 0) +(8.98 0 0) +(8.97902 0 0) +(8.97803 0 0) +(8.97703 0 0) +(8.97602 0 0) +(8.97501 0 0) +(8.97398 0 0) +(8.97295 0 0) +(8.97191 0 0) +(8.97086 0 0) +(8.9698 0 0) +(8.96873 0 0) +(8.96765 0 0) +(8.96656 0 0) +(8.96546 0 0) +(8.96436 0 0) +(8.96324 0 0) +(8.96212 0 0) +(8.96098 0 0) +(8.95984 0 0) +(8.95869 0 0) +(8.95752 0 0) +(8.95635 0 0) +(8.95516 0 0) +(8.95397 0 0) +(8.95277 0 0) +(8.95155 0 0) +(8.95033 0 0) +(8.94909 0 0) +(8.94784 0 0) +(8.94659 0 0) +(8.94532 0 0) +(8.94404 0 0) +(8.94275 0 0) +(8.94145 0 0) +(8.94014 0 0) +(8.93881 0 0) +(8.93748 0 0) +(8.93613 0 0) +(8.93477 0 0) +(8.9334 0 0) +(8.93202 0 0) +(8.93063 0 0) +(8.92922 0 0) +(8.9278 0 0) +(8.92637 0 0) +(8.92493 0 0) +(8.92347 0 0) +(8.922 0 0) +(8.92052 0 0) +(8.91903 0 0) +(8.91752 0 0) +(8.916 0 0) +(8.91446 0 0) +(8.91291 0 0) +(8.91135 0 0) +(8.90978 0 0) +(8.90819 0 0) +(8.90658 0 0) +(8.90496 0 0) +(8.90333 0 0) +(8.90168 0 0) +(8.90002 0 0) +(8.89835 0 0) +(8.89666 0 0) +(8.89495 0 0) +(8.89323 0 0) +(8.89149 0 0) +(8.88974 0 0) +(8.88797 0 0) +(8.88619 0 0) +(8.88439 0 0) +(8.88257 0 0) +(8.88074 0 0) +(8.87889 0 0) +(8.87702 0 0) +(8.87514 0 0) +(8.87324 0 0) +(8.87132 0 0) +(8.86939 0 0) +(8.86743 0 0) +(8.86546 0 0) +(8.86348 0 0) +(8.86147 0 0) +(8.85944 0 0) +(8.8574 0 0) +(8.85534 0 0) +(8.85326 0 0) +(8.85116 0 0) +(8.84904 0 0) +(8.8469 0 0) +(8.84474 0 0) +(8.84256 0 0) +(8.84036 0 0) +(8.83814 0 0) +(8.8359 0 0) +(8.83364 0 0) +(8.83136 0 0) +(8.82906 0 0) +(8.82673 0 0) +(8.82439 0 0) +(8.82202 0 0) +(8.81963 0 0) +(8.81721 0 0) +(8.81478 0 0) +(8.81232 0 0) +(8.80983 0 0) +(8.80733 0 0) +(8.8048 0 0) +(8.80224 0 0) +(8.79967 0 0) +(8.79706 0 0) +(8.79444 0 0) +(8.79178 0 0) +(6.4341 0 0) +(7.53029 0 0) +(8.10457 0 0) +(8.50824 0 0) +(8.82409 0 0) +(9.08572 0 0) +(9.31031 0 0) +(9.47008 0 0) +(9.46945 0 0) +(9.46881 0 0) +(9.46817 0 0) +(9.46752 0 0) +(9.46686 0 0) +(9.4662 0 0) +(9.46554 0 0) +(9.46487 0 0) +(9.46419 0 0) +(9.46351 0 0) +(9.46282 0 0) +(9.46213 0 0) +(9.46143 0 0) +(9.46073 0 0) +(9.46002 0 0) +(9.4593 0 0) +(9.45858 0 0) +(9.45785 0 0) +(9.45712 0 0) +(9.45638 0 0) +(9.45563 0 0) +(9.45488 0 0) +(9.45412 0 0) +(9.45336 0 0) +(9.45259 0 0) +(9.45181 0 0) +(9.45103 0 0) +(9.45024 0 0) +(9.44944 0 0) +(9.44864 0 0) +(9.44783 0 0) +(9.44701 0 0) +(9.44619 0 0) +(9.44536 0 0) +(9.44452 0 0) +(9.44368 0 0) +(9.44282 0 0) +(9.44197 0 0) +(9.4411 0 0) +(9.44023 0 0) +(9.43935 0 0) +(9.43846 0 0) +(9.43757 0 0) +(9.43667 0 0) +(9.43576 0 0) +(9.43484 0 0) +(9.43391 0 0) +(9.43298 0 0) +(9.43204 0 0) +(9.43109 0 0) +(9.43014 0 0) +(9.42917 0 0) +(9.4282 0 0) +(9.42722 0 0) +(9.42623 0 0) +(9.42523 0 0) +(9.42423 0 0) +(9.42322 0 0) +(9.42219 0 0) +(9.42116 0 0) +(9.42012 0 0) +(9.41907 0 0) +(9.41802 0 0) +(9.41695 0 0) +(9.41587 0 0) +(9.41479 0 0) +(9.4137 0 0) +(9.41259 0 0) +(9.41148 0 0) +(9.41036 0 0) +(9.40923 0 0) +(9.40809 0 0) +(9.40694 0 0) +(9.40578 0 0) +(9.40461 0 0) +(9.40343 0 0) +(9.40224 0 0) +(9.40103 0 0) +(9.39982 0 0) +(9.3986 0 0) +(9.39737 0 0) +(9.39613 0 0) +(9.39488 0 0) +(9.39361 0 0) +(9.39234 0 0) +(9.39105 0 0) +(9.38976 0 0) +(9.38845 0 0) +(9.38713 0 0) +(9.3858 0 0) +(9.38446 0 0) +(9.3831 0 0) +(9.38174 0 0) +(9.38036 0 0) +(9.37897 0 0) +(9.37757 0 0) +(9.37616 0 0) +(9.37473 0 0) +(9.3733 0 0) +(9.37185 0 0) +(9.37038 0 0) +(9.36891 0 0) +(9.36742 0 0) +(9.36592 0 0) +(9.3644 0 0) +(9.36288 0 0) +(9.36133 0 0) +(9.35978 0 0) +(9.35821 0 0) +(9.35663 0 0) +(9.35503 0 0) +(9.35342 0 0) +(9.3518 0 0) +(9.35016 0 0) +(9.34851 0 0) +(9.34684 0 0) +(9.34515 0 0) +(9.34346 0 0) +(9.34174 0 0) +(9.34002 0 0) +(9.33827 0 0) +(9.33651 0 0) +(9.33474 0 0) +(9.33295 0 0) +(9.33114 0 0) +(9.32932 0 0) +(9.32748 0 0) +(9.32563 0 0) +(9.32375 0 0) +(9.32187 0 0) +(9.31996 0 0) +(9.31804 0 0) +(9.3161 0 0) +(9.31414 0 0) +(9.31216 0 0) +(9.31017 0 0) +(9.30816 0 0) +(9.30613 0 0) +(9.30408 0 0) +(9.30201 0 0) +(9.29993 0 0) +(9.29782 0 0) +(9.2957 0 0) +(9.29355 0 0) +(9.29139 0 0) +(9.28921 0 0) +(9.287 0 0) +(9.28478 0 0) +(9.28253 0 0) +(9.28027 0 0) +(9.27798 0 0) +(9.27568 0 0) +(9.27335 0 0) +(9.271 0 0) +(9.26862 0 0) +(9.26623 0 0) +(9.26381 0 0) +(9.26137 0 0) +(9.25891 0 0) +(9.25643 0 0) +(9.25392 0 0) +(9.25139 0 0) +(9.24883 0 0) +(9.24625 0 0) +(9.24364 0 0) +(9.24101 0 0) +(9.23836 0 0) +(9.23568 0 0) +(9.23297 0 0) +(9.23024 0 0) +(9.22749 0 0) +(9.2247 0 0) +(6.4341 0 0) +(7.53029 0 0) +(8.10457 0 0) +(8.50825 0 0) +(8.82409 0 0) +(9.08572 0 0) +(9.31031 0 0) +(9.50788 0 0) +(9.68481 0 0) +(9.81493 0 0) +(9.81427 0 0) +(9.8136 0 0) +(9.81292 0 0) +(9.81223 0 0) +(9.81154 0 0) +(9.81085 0 0) +(9.81015 0 0) +(9.80944 0 0) +(9.80873 0 0) +(9.80801 0 0) +(9.80729 0 0) +(9.80656 0 0) +(9.80582 0 0) +(9.80508 0 0) +(9.80433 0 0) +(9.80358 0 0) +(9.80282 0 0) +(9.80205 0 0) +(9.80128 0 0) +(9.8005 0 0) +(9.79971 0 0) +(9.79892 0 0) +(9.79812 0 0) +(9.79731 0 0) +(9.7965 0 0) +(9.79568 0 0) +(9.79486 0 0) +(9.79403 0 0) +(9.79319 0 0) +(9.79234 0 0) +(9.79149 0 0) +(9.79063 0 0) +(9.78976 0 0) +(9.78888 0 0) +(9.788 0 0) +(9.78711 0 0) +(9.78621 0 0) +(9.78531 0 0) +(9.7844 0 0) +(9.78348 0 0) +(9.78255 0 0) +(9.78162 0 0) +(9.78067 0 0) +(9.77972 0 0) +(9.77876 0 0) +(9.7778 0 0) +(9.77682 0 0) +(9.77584 0 0) +(9.77485 0 0) +(9.77385 0 0) +(9.77284 0 0) +(9.77183 0 0) +(9.7708 0 0) +(9.76977 0 0) +(9.76873 0 0) +(9.76767 0 0) +(9.76661 0 0) +(9.76555 0 0) +(9.76447 0 0) +(9.76338 0 0) +(9.76229 0 0) +(9.76118 0 0) +(9.76007 0 0) +(9.75894 0 0) +(9.75781 0 0) +(9.75666 0 0) +(9.75551 0 0) +(9.75435 0 0) +(9.75318 0 0) +(9.75199 0 0) +(9.7508 0 0) +(9.7496 0 0) +(9.74838 0 0) +(9.74716 0 0) +(9.74593 0 0) +(9.74468 0 0) +(9.74343 0 0) +(9.74216 0 0) +(9.74089 0 0) +(9.7396 0 0) +(9.7383 0 0) +(9.73699 0 0) +(9.73567 0 0) +(9.73434 0 0) +(9.73299 0 0) +(9.73164 0 0) +(9.73027 0 0) +(9.72889 0 0) +(9.7275 0 0) +(9.7261 0 0) +(9.72468 0 0) +(9.72326 0 0) +(9.72182 0 0) +(9.72036 0 0) +(9.7189 0 0) +(9.71742 0 0) +(9.71593 0 0) +(9.71443 0 0) +(9.71291 0 0) +(9.71138 0 0) +(9.70984 0 0) +(9.70828 0 0) +(9.70671 0 0) +(9.70513 0 0) +(9.70353 0 0) +(9.70192 0 0) +(9.70029 0 0) +(9.69865 0 0) +(9.697 0 0) +(9.69533 0 0) +(9.69365 0 0) +(9.69195 0 0) +(9.69023 0 0) +(9.68851 0 0) +(9.68676 0 0) +(9.685 0 0) +(9.68323 0 0) +(9.68143 0 0) +(9.67963 0 0) +(9.6778 0 0) +(9.67597 0 0) +(9.67411 0 0) +(9.67224 0 0) +(9.67035 0 0) +(9.66844 0 0) +(9.66652 0 0) +(9.66458 0 0) +(9.66262 0 0) +(9.66064 0 0) +(9.65865 0 0) +(9.65664 0 0) +(9.65461 0 0) +(9.65256 0 0) +(9.6505 0 0) +(9.64841 0 0) +(9.64631 0 0) +(9.64418 0 0) +(9.64204 0 0) +(9.63988 0 0) +(9.6377 0 0) +(9.63549 0 0) +(9.63327 0 0) +(9.63103 0 0) +(9.62877 0 0) +(9.62648 0 0) +(9.62418 0 0) +(9.62185 0 0) +(9.6195 0 0) +(9.61713 0 0) +(9.61474 0 0) +(9.61233 0 0) +(9.60989 0 0) +(9.60743 0 0) +(9.60495 0 0) +(9.60245 0 0) +(9.59992 0 0) +(9.59736 0 0) +(9.59479 0 0) +(9.59219 0 0) +(9.58956 0 0) +(9.58691 0 0) +(9.58424 0 0) +(9.58154 0 0) +(9.57881 0 0) +(9.57606 0 0) +(9.57328 0 0) +(9.57048 0 0) +(9.56765 0 0) +(9.56479 0 0) +(9.5619 0 0) +(6.4341 0 0) +(7.5303 0 0) +(8.10458 0 0) +(8.50825 0 0) +(8.8241 0 0) +(9.08573 0 0) +(9.31032 0 0) +(9.50789 0 0) +(9.68482 0 0) +(9.84542 0 0) +(9.99278 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99849 0 0) +(9.99694 0 0) +(9.99538 0 0) +(9.99381 0 0) +(9.99222 0 0) +(9.99062 0 0) +(9.989 0 0) +(9.98737 0 0) +(9.98573 0 0) +(9.98407 0 0) +(9.9824 0 0) +(9.98071 0 0) +(9.97901 0 0) +(9.97729 0 0) +(9.97556 0 0) +(9.97381 0 0) +(9.97205 0 0) +(9.97027 0 0) +(9.96847 0 0) +(9.96666 0 0) +(9.96483 0 0) +(9.96299 0 0) +(9.96113 0 0) +(9.95926 0 0) +(9.95736 0 0) +(9.95545 0 0) +(9.95353 0 0) +(9.95158 0 0) +(9.94962 0 0) +(9.94764 0 0) +(9.94564 0 0) +(9.94363 0 0) +(9.9416 0 0) +(9.93954 0 0) +(9.93747 0 0) +(9.93539 0 0) +(9.93328 0 0) +(9.93115 0 0) +(9.92901 0 0) +(9.92684 0 0) +(9.92466 0 0) +(9.92245 0 0) +(9.92023 0 0) +(9.91798 0 0) +(9.91571 0 0) +(9.91343 0 0) +(9.91112 0 0) +(9.90879 0 0) +(9.90644 0 0) +(9.90407 0 0) +(9.90167 0 0) +(9.89926 0 0) +(9.89682 0 0) +(9.89436 0 0) +(9.89187 0 0) +(9.88937 0 0) +(9.88684 0 0) +(9.88428 0 0) +(9.8817 0 0) +(9.8791 0 0) +(9.87648 0 0) +(9.87383 0 0) +(9.87115 0 0) +(9.86845 0 0) +(9.86572 0 0) +(9.86297 0 0) +(9.86019 0 0) +(9.85739 0 0) +(9.85455 0 0) +(9.8517 0 0) +(9.84881 0 0) +(9.8459 0 0) +(9.84295 0 0) +(9.83998 0 0) +(6.4341 0 0) +(7.5303 0 0) +(8.10458 0 0) +(8.50826 0 0) +(8.8241 0 0) +(9.08574 0 0) +(9.31033 0 0) +(9.5079 0 0) +(9.68482 0 0) +(9.84543 0 0) +(9.99279 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53031 0 0) +(8.10459 0 0) +(8.50827 0 0) +(8.82411 0 0) +(9.08574 0 0) +(9.31034 0 0) +(9.50791 0 0) +(9.68483 0 0) +(9.84544 0 0) +(9.9928 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53032 0 0) +(8.1046 0 0) +(8.50828 0 0) +(8.82412 0 0) +(9.08575 0 0) +(9.31035 0 0) +(9.50792 0 0) +(9.68484 0 0) +(9.84545 0 0) +(9.99281 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53033 0 0) +(8.10461 0 0) +(8.50829 0 0) +(8.82413 0 0) +(9.08576 0 0) +(9.31036 0 0) +(9.50793 0 0) +(9.68485 0 0) +(9.84546 0 0) +(9.99282 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53034 0 0) +(8.10462 0 0) +(8.5083 0 0) +(8.82414 0 0) +(9.08577 0 0) +(9.31037 0 0) +(9.50794 0 0) +(9.68486 0 0) +(9.84547 0 0) +(9.99283 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53035 0 0) +(8.10463 0 0) +(8.50831 0 0) +(8.82415 0 0) +(9.08579 0 0) +(9.31038 0 0) +(9.50795 0 0) +(9.68488 0 0) +(9.84549 0 0) +(9.99285 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53036 0 0) +(8.10464 0 0) +(8.50832 0 0) +(8.82417 0 0) +(9.0858 0 0) +(9.3104 0 0) +(9.50797 0 0) +(9.68489 0 0) +(9.8455 0 0) +(9.99286 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53037 0 0) +(8.10466 0 0) +(8.50833 0 0) +(8.82418 0 0) +(9.08582 0 0) +(9.31041 0 0) +(9.50798 0 0) +(9.68491 0 0) +(9.84552 0 0) +(9.99288 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53039 0 0) +(8.10467 0 0) +(8.50835 0 0) +(8.8242 0 0) +(9.08583 0 0) +(9.31043 0 0) +(9.508 0 0) +(9.68493 0 0) +(9.84553 0 0) +(9.9929 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.5304 0 0) +(8.10469 0 0) +(8.50837 0 0) +(8.82421 0 0) +(9.08585 0 0) +(9.31044 0 0) +(9.50802 0 0) +(9.68494 0 0) +(9.84555 0 0) +(9.99292 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53042 0 0) +(8.1047 0 0) +(8.50838 0 0) +(8.82423 0 0) +(9.08587 0 0) +(9.31046 0 0) +(9.50804 0 0) +(9.68496 0 0) +(9.84557 0 0) +(9.99294 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4341 0 0) +(7.53043 0 0) +(8.10472 0 0) +(8.5084 0 0) +(8.82425 0 0) +(9.08589 0 0) +(9.31048 0 0) +(9.50806 0 0) +(9.68499 0 0) +(9.84559 0 0) +(9.99296 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43428 0 0) +(7.5305 0 0) +(8.10477 0 0) +(8.50844 0 0) +(8.82428 0 0) +(9.08591 0 0) +(9.3105 0 0) +(9.50807 0 0) +(9.685 0 0) +(9.84561 0 0) +(9.99297 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43432 0 0) +(7.5305 0 0) +(8.10475 0 0) +(8.50842 0 0) +(8.82426 0 0) +(9.08589 0 0) +(9.31048 0 0) +(9.50805 0 0) +(9.68498 0 0) +(9.84559 0 0) +(9.99295 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43436 0 0) +(7.53049 0 0) +(8.10474 0 0) +(8.5084 0 0) +(8.82424 0 0) +(9.08587 0 0) +(9.31046 0 0) +(9.50803 0 0) +(9.68495 0 0) +(9.84556 0 0) +(9.99292 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4344 0 0) +(7.53049 0 0) +(8.10473 0 0) +(8.50839 0 0) +(8.82422 0 0) +(9.08585 0 0) +(9.31044 0 0) +(9.508 0 0) +(9.68493 0 0) +(9.84553 0 0) +(9.99289 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43445 0 0) +(7.53048 0 0) +(8.10471 0 0) +(8.50837 0 0) +(8.8242 0 0) +(9.08583 0 0) +(9.31041 0 0) +(9.50798 0 0) +(9.6849 0 0) +(9.84551 0 0) +(9.99287 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43451 0 0) +(7.53048 0 0) +(8.10471 0 0) +(8.50836 0 0) +(8.82419 0 0) +(9.08581 0 0) +(9.3104 0 0) +(9.50796 0 0) +(9.68488 0 0) +(9.84549 0 0) +(9.99285 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43457 0 0) +(7.53049 0 0) +(8.1047 0 0) +(8.50835 0 0) +(8.82418 0 0) +(9.0858 0 0) +(9.31038 0 0) +(9.50795 0 0) +(9.68487 0 0) +(9.84547 0 0) +(9.99283 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.43463 0 0) +(7.5305 0 0) +(8.10471 0 0) +(8.50835 0 0) +(8.82417 0 0) +(9.08579 0 0) +(9.31037 0 0) +(9.50794 0 0) +(9.68486 0 0) +(9.84546 0 0) +(9.99282 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.4347 0 0) +(7.53052 0 0) +(8.10472 0 0) +(8.50835 0 0) +(8.82418 0 0) +(9.08579 0 0) +(9.31037 0 0) +(9.50794 0 0) +(9.68485 0 0) +(9.84546 0 0) +(9.99281 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(6.5753 0 0) +(7.62622 0 0) +(8.14368 0 0) +(8.52948 0 0) +(8.83748 0 0) +(9.09496 0 0) +(9.3171 0 0) +(9.51308 0 0) +(9.68893 0 0) +(9.84876 0 0) +(9.99555 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(7.43748 0 0) +(7.83261 0 0) +(8.24158 0 0) +(8.58549 0 0) +(8.87363 0 0) +(9.12025 0 0) +(9.3358 0 0) +(9.5275 0 0) +(9.7004 0 0) +(9.85812 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(7.86493 0 0) +(8.09142 0 0) +(8.39037 0 0) +(8.67793 0 0) +(8.93577 0 0) +(9.16469 0 0) +(9.36913 0 0) +(9.55342 0 0) +(9.72115 0 0) +(9.87511 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(8.17827 0 0) +(8.36098 0 0) +(8.57338 0 0) +(8.80285 0 0) +(9.02432 0 0) +(9.23004 0 0) +(9.41911 0 0) +(9.5928 0 0) +(9.75294 0 0) +(9.90132 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(8.47643 0 0) +(8.62412 0 0) +(8.77502 0 0) +(8.95313 0 0) +(9.13716 0 0) +(9.31653 0 0) +(9.48693 0 0) +(9.64717 0 0) +(9.79739 0 0) +(9.93827 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(8.7548 0 0) +(8.86679 0 0) +(8.98456 0 0) +(9.12107 0 0) +(9.27046 0 0) +(9.42286 0 0) +(9.57276 0 0) +(9.71741 0 0) +(9.85569 0 0) +(9.98731 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.01524 0 0) +(9.09486 0 0) +(9.19581 0 0) +(9.30019 0 0) +(9.4197 0 0) +(9.54663 0 0) +(9.6757 0 0) +(9.80362 0 0) +(9.92852 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.22567 0 0) +(9.28652 0 0) +(9.37181 0 0) +(9.45869 0 0) +(9.55695 0 0) +(9.66434 0 0) +(9.77638 0 0) +(9.88989 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.40308 0 0) +(9.45194 0 0) +(9.52141 0 0) +(9.60642 0 0) +(9.68309 0 0) +(9.77533 0 0) +(9.87349 0 0) +(9.97473 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.58814 0 0) +(9.62718 0 0) +(9.68323 0 0) +(9.75302 0 0) +(9.82306 0 0) +(9.90103 0 0) +(9.98557 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.78055 0 0) +(9.81161 0 0) +(9.85646 0 0) +(9.91308 0 0) +(9.97917 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.98003 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99746 0 0) +(9.99013 0 0) +(9.9827 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99671 0 0) +(9.99224 0 0) +(9.98772 0 0) +(9.98315 0 0) +(9.97853 0 0) +(9.97386 0 0) +(9.96915 0 0) +(9.96438 0 0) +(9.95957 0 0) +(9.9547 0 0) +(9.94978 0 0) +(9.9448 0 0) +(9.93977 0 0) +(9.93469 0 0) +(9.92955 0 0) +(9.92436 0 0) +(9.91911 0 0) +(9.9138 0 0) +(9.90843 0 0) +(9.90301 0 0) +(9.89752 0 0) +(9.89197 0 0) +(9.88636 0 0) +(9.88069 0 0) +(9.87495 0 0) +(9.86915 0 0) +(9.86328 0 0) +(9.85735 0 0) +(9.85134 0 0) +(9.84527 0 0) +(9.83913 0 0) +(9.83292 0 0) +(9.82663 0 0) +(9.82027 0 0) +(9.81384 0 0) +(9.80733 0 0) +(9.80075 0 0) +(9.79408 0 0) +(9.78734 0 0) +(9.78052 0 0) +(9.77361 0 0) +(9.76662 0 0) +(9.75955 0 0) +(9.75239 0 0) +(9.74514 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99872 0 0) +(9.99682 0 0) +(9.9949 0 0) +(9.99296 0 0) +(9.991 0 0) +(9.98903 0 0) +(9.98704 0 0) +(9.98503 0 0) +(9.983 0 0) +(9.98096 0 0) +(9.97889 0 0) +(9.97681 0 0) +(9.97471 0 0) +(9.97259 0 0) +(9.97045 0 0) +(9.96829 0 0) +(9.96611 0 0) +(9.96392 0 0) +(9.9617 0 0) +(9.95946 0 0) +(9.9572 0 0) +(9.95492 0 0) +(9.95262 0 0) +(9.9503 0 0) +(9.94796 0 0) +(9.94559 0 0) +(9.94321 0 0) +(9.9408 0 0) +(9.93837 0 0) +(9.93591 0 0) +(9.93344 0 0) +(9.93094 0 0) +(9.92842 0 0) +(9.92587 0 0) +(9.9233 0 0) +(9.92071 0 0) +(9.91809 0 0) +(9.91545 0 0) +(9.91278 0 0) +(9.91009 0 0) +(9.90737 0 0) +(9.90463 0 0) +(9.90186 0 0) +(9.89907 0 0) +(9.89624 0 0) +(9.8934 0 0) +(9.89052 0 0) +(9.88762 0 0) +(9.88469 0 0) +(9.88173 0 0) +(9.87874 0 0) +(9.87572 0 0) +(9.87268 0 0) +(9.8696 0 0) +(9.8665 0 0) +(9.86336 0 0) +(9.8602 0 0) +(9.857 0 0) +(9.85378 0 0) +(9.85052 0 0) +(9.84723 0 0) +(9.84391 0 0) +(9.84055 0 0) +(9.83716 0 0) +(9.83374 0 0) +(9.83029 0 0) +(9.8268 0 0) +(9.82327 0 0) +(9.81971 0 0) +(9.81612 0 0) +(9.81249 0 0) +(9.80882 0 0) +(9.80512 0 0) +(9.80137 0 0) +(9.79759 0 0) +(9.79378 0 0) +(9.78992 0 0) +(9.78603 0 0) +(9.78209 0 0) +(9.77812 0 0) +(9.7741 0 0) +(9.77004 0 0) +(9.76594 0 0) +(9.7618 0 0) +(9.75762 0 0) +(9.75339 0 0) +(9.74912 0 0) +(9.7448 0 0) +(9.74044 0 0) +(9.73603 0 0) +(9.73158 0 0) +(9.72708 0 0) +(9.72253 0 0) +(9.71793 0 0) +(9.71328 0 0) +(9.70859 0 0) +(9.70384 0 0) +(9.69905 0 0) +(9.6942 0 0) +(9.6893 0 0) +(9.68434 0 0) +(9.67933 0 0) +(9.67427 0 0) +(9.66915 0 0) +(9.66398 0 0) +(9.65875 0 0) +(9.65346 0 0) +(9.64811 0 0) +(9.6427 0 0) +(9.63723 0 0) +(9.6317 0 0) +(9.62611 0 0) +(9.62045 0 0) +(9.61473 0 0) +(9.60895 0 0) +(9.60309 0 0) +(9.59718 0 0) +(9.59119 0 0) +(9.58513 0 0) +(9.57901 0 0) +(9.57281 0 0) +(9.56654 0 0) +(9.56019 0 0) +(9.55377 0 0) +(9.54728 0 0) +(9.5407 0 0) +(9.53405 0 0) +(9.52732 0 0) +(9.52051 0 0) +(9.51361 0 0) +(9.50663 0 0) +(9.49956 0 0) +(9.80122 0 0) +(9.79999 0 0) +(9.79876 0 0) +(9.79752 0 0) +(9.79627 0 0) +(9.795 0 0) +(9.79373 0 0) +(9.79244 0 0) +(9.79115 0 0) +(9.78984 0 0) +(9.78852 0 0) +(9.78719 0 0) +(9.78585 0 0) +(9.78449 0 0) +(9.78313 0 0) +(9.78175 0 0) +(9.78036 0 0) +(9.77896 0 0) +(9.77755 0 0) +(9.77612 0 0) +(9.77469 0 0) +(9.77324 0 0) +(9.77177 0 0) +(9.7703 0 0) +(9.76881 0 0) +(9.76731 0 0) +(9.7658 0 0) +(9.76427 0 0) +(9.76273 0 0) +(9.76117 0 0) +(9.75961 0 0) +(9.75803 0 0) +(9.75643 0 0) +(9.75482 0 0) +(9.7532 0 0) +(9.75156 0 0) +(9.74991 0 0) +(9.74824 0 0) +(9.74656 0 0) +(9.74486 0 0) +(9.74315 0 0) +(9.74143 0 0) +(9.73969 0 0) +(9.73793 0 0) +(9.73616 0 0) +(9.73437 0 0) +(9.73257 0 0) +(9.73075 0 0) +(9.72891 0 0) +(9.72706 0 0) +(9.72519 0 0) +(9.7233 0 0) +(9.7214 0 0) +(9.71948 0 0) +(9.71754 0 0) +(9.71559 0 0) +(9.71361 0 0) +(9.71162 0 0) +(9.70962 0 0) +(9.70759 0 0) +(9.70555 0 0) +(9.70348 0 0) +(9.7014 0 0) +(9.6993 0 0) +(9.69718 0 0) +(9.69504 0 0) +(9.69289 0 0) +(9.69071 0 0) +(9.68851 0 0) +(9.68629 0 0) +(9.68405 0 0) +(9.68179 0 0) +(9.67952 0 0) +(9.67721 0 0) +(9.67489 0 0) +(9.67255 0 0) +(9.67018 0 0) +(9.6678 0 0) +(9.66539 0 0) +(9.66296 0 0) +(9.6605 0 0) +(9.65803 0 0) +(9.65553 0 0) +(9.653 0 0) +(9.65046 0 0) +(9.64789 0 0) +(9.64529 0 0) +(9.64267 0 0) +(9.64003 0 0) +(9.63736 0 0) +(9.63466 0 0) +(9.63194 0 0) +(9.6292 0 0) +(9.62643 0 0) +(9.62363 0 0) +(9.6208 0 0) +(9.61795 0 0) +(9.61507 0 0) +(9.61217 0 0) +(9.60923 0 0) +(9.60627 0 0) +(9.60328 0 0) +(9.60026 0 0) +(9.59721 0 0) +(9.59413 0 0) +(9.59102 0 0) +(9.58788 0 0) +(9.58471 0 0) +(9.58151 0 0) +(9.57827 0 0) +(9.57501 0 0) +(9.57171 0 0) +(9.56838 0 0) +(9.56502 0 0) +(9.56162 0 0) +(9.5582 0 0) +(9.55473 0 0) +(9.55123 0 0) +(9.5477 0 0) +(9.54413 0 0) +(9.54053 0 0) +(9.53689 0 0) +(9.53321 0 0) +(9.5295 0 0) +(9.52574 0 0) +(9.52195 0 0) +(9.51812 0 0) +(9.51426 0 0) +(9.51035 0 0) +(9.5064 0 0) +(9.50241 0 0) +(9.49838 0 0) +(9.49431 0 0) +(9.4902 0 0) +(9.48604 0 0) +(9.48184 0 0) +(9.4776 0 0) +(9.47331 0 0) +(9.46897 0 0) +(9.46459 0 0) +(9.46017 0 0) +(9.4557 0 0) +(9.45118 0 0) +(9.44661 0 0) +(9.44199 0 0) +(9.43732 0 0) +(9.4326 0 0) +(9.42783 0 0) +(9.42301 0 0) +(9.41814 0 0) +(9.41321 0 0) +(9.40823 0 0) +(9.4032 0 0) +(9.39811 0 0) +(9.39296 0 0) +(9.38776 0 0) +(9.38249 0 0) +(9.37717 0 0) +(9.37179 0 0) +(9.36635 0 0) +(9.36085 0 0) +(9.35528 0 0) +(9.34965 0 0) +(9.34396 0 0) +(9.3382 0 0) +(9.33237 0 0) +(9.32648 0 0) +(9.32052 0 0) +(9.31449 0 0) +(9.30839 0 0) +(9.30221 0 0) +(9.29597 0 0) +(9.28965 0 0) +(9.28325 0 0) +(9.27678 0 0) +(9.27023 0 0) +(9.2636 0 0) +(9.25689 0 0) +(9.2501 0 0) +(9.24322 0 0) +(9.51388 0 0) +(9.51269 0 0) +(9.5115 0 0) +(9.51029 0 0) +(9.50907 0 0) +(9.50785 0 0) +(9.50661 0 0) +(9.50536 0 0) +(9.5041 0 0) +(9.50283 0 0) +(9.50155 0 0) +(9.50026 0 0) +(9.49896 0 0) +(9.49764 0 0) +(9.49632 0 0) +(9.49498 0 0) +(9.49364 0 0) +(9.49228 0 0) +(9.4909 0 0) +(9.48952 0 0) +(9.48813 0 0) +(9.48672 0 0) +(9.4853 0 0) +(9.48387 0 0) +(9.48242 0 0) +(9.48097 0 0) +(9.4795 0 0) +(9.47801 0 0) +(9.47652 0 0) +(9.47501 0 0) +(9.47349 0 0) +(9.47195 0 0) +(9.4704 0 0) +(9.46884 0 0) +(9.46727 0 0) +(9.46568 0 0) +(9.46407 0 0) +(9.46246 0 0) +(9.46082 0 0) +(9.45918 0 0) +(9.45752 0 0) +(9.45584 0 0) +(9.45415 0 0) +(9.45245 0 0) +(9.45073 0 0) +(9.44899 0 0) +(9.44724 0 0) +(9.44547 0 0) +(9.44369 0 0) +(9.44189 0 0) +(9.44008 0 0) +(9.43825 0 0) +(9.4364 0 0) +(9.43454 0 0) +(9.43266 0 0) +(9.43076 0 0) +(9.42884 0 0) +(9.42691 0 0) +(9.42496 0 0) +(9.423 0 0) +(9.42101 0 0) +(9.41901 0 0) +(9.41699 0 0) +(9.41495 0 0) +(9.41289 0 0) +(9.41082 0 0) +(9.40872 0 0) +(9.40661 0 0) +(9.40448 0 0) +(9.40232 0 0) +(9.40015 0 0) +(9.39796 0 0) +(9.39574 0 0) +(9.39351 0 0) +(9.39126 0 0) +(9.38898 0 0) +(9.38669 0 0) +(9.38437 0 0) +(9.38203 0 0) +(9.37967 0 0) +(9.37729 0 0) +(9.37489 0 0) +(9.37246 0 0) +(9.37001 0 0) +(9.36754 0 0) +(9.36504 0 0) +(9.36252 0 0) +(9.35998 0 0) +(9.35741 0 0) +(9.35482 0 0) +(9.35221 0 0) +(9.34957 0 0) +(9.3469 0 0) +(9.34421 0 0) +(9.3415 0 0) +(9.33875 0 0) +(9.33599 0 0) +(9.33319 0 0) +(9.33037 0 0) +(9.32752 0 0) +(9.32464 0 0) +(9.32174 0 0) +(9.31881 0 0) +(9.31585 0 0) +(9.31286 0 0) +(9.30984 0 0) +(9.30679 0 0) +(9.30372 0 0) +(9.30061 0 0) +(9.29747 0 0) +(9.2943 0 0) +(9.2911 0 0) +(9.28787 0 0) +(9.28461 0 0) +(9.28131 0 0) +(9.27798 0 0) +(9.27462 0 0) +(9.27122 0 0) +(9.2678 0 0) +(9.26433 0 0) +(9.26083 0 0) +(9.2573 0 0) +(9.25373 0 0) +(9.25012 0 0) +(9.24648 0 0) +(9.2428 0 0) +(9.23909 0 0) +(9.23533 0 0) +(9.23154 0 0) +(9.22771 0 0) +(9.22383 0 0) +(9.21992 0 0) +(9.21597 0 0) +(9.21198 0 0) +(9.20794 0 0) +(9.20387 0 0) +(9.19975 0 0) +(9.19558 0 0) +(9.19138 0 0) +(9.18713 0 0) +(9.18283 0 0) +(9.17849 0 0) +(9.1741 0 0) +(9.16966 0 0) +(9.16518 0 0) +(9.16065 0 0) +(9.15607 0 0) +(9.15144 0 0) +(9.14676 0 0) +(9.14203 0 0) +(9.13725 0 0) +(9.13242 0 0) +(9.12753 0 0) +(9.12259 0 0) +(9.11759 0 0) +(9.11254 0 0) +(9.10743 0 0) +(9.10227 0 0) +(9.09704 0 0) +(9.09176 0 0) +(9.08642 0 0) +(9.08102 0 0) +(9.07555 0 0) +(9.07003 0 0) +(9.06444 0 0) +(9.05878 0 0) +(9.05306 0 0) +(9.04727 0 0) +(9.04142 0 0) +(9.0355 0 0) +(9.02951 0 0) +(9.02344 0 0) +(9.01731 0 0) +(9.0111 0 0) +(9.00482 0 0) +(8.99846 0 0) +(8.99202 0 0) +(8.98551 0 0) +(8.97892 0 0) +(8.97224 0 0) +(9.20498 0 0) +(9.20383 0 0) +(9.20267 0 0) +(9.20151 0 0) +(9.20033 0 0) +(9.19914 0 0) +(9.19795 0 0) +(9.19674 0 0) +(9.19552 0 0) +(9.19429 0 0) +(9.19305 0 0) +(9.1918 0 0) +(9.19054 0 0) +(9.18927 0 0) +(9.18799 0 0) +(9.1867 0 0) +(9.18539 0 0) +(9.18408 0 0) +(9.18275 0 0) +(9.18141 0 0) +(9.18006 0 0) +(9.1787 0 0) +(9.17733 0 0) +(9.17594 0 0) +(9.17454 0 0) +(9.17314 0 0) +(9.17171 0 0) +(9.17028 0 0) +(9.16883 0 0) +(9.16737 0 0) +(9.1659 0 0) +(9.16442 0 0) +(9.16292 0 0) +(9.16141 0 0) +(9.15988 0 0) +(9.15834 0 0) +(9.15679 0 0) +(9.15523 0 0) +(9.15365 0 0) +(9.15206 0 0) +(9.15045 0 0) +(9.14883 0 0) +(9.14719 0 0) +(9.14554 0 0) +(9.14388 0 0) +(9.1422 0 0) +(9.1405 0 0) +(9.1388 0 0) +(9.13707 0 0) +(9.13533 0 0) +(9.13358 0 0) +(9.1318 0 0) +(9.13002 0 0) +(9.12821 0 0) +(9.12639 0 0) +(9.12456 0 0) +(9.12271 0 0) +(9.12084 0 0) +(9.11895 0 0) +(9.11705 0 0) +(9.11513 0 0) +(9.11319 0 0) +(9.11124 0 0) +(9.10927 0 0) +(9.10727 0 0) +(9.10527 0 0) +(9.10324 0 0) +(9.10119 0 0) +(9.09913 0 0) +(9.09705 0 0) +(9.09494 0 0) +(9.09282 0 0) +(9.09068 0 0) +(9.08852 0 0) +(9.08634 0 0) +(9.08414 0 0) +(9.08192 0 0) +(9.07968 0 0) +(9.07741 0 0) +(9.07513 0 0) +(9.07283 0 0) +(9.0705 0 0) +(9.06815 0 0) +(9.06578 0 0) +(9.06339 0 0) +(9.06098 0 0) +(9.05854 0 0) +(9.05608 0 0) +(9.0536 0 0) +(9.05109 0 0) +(9.04856 0 0) +(9.046 0 0) +(9.04343 0 0) +(9.04082 0 0) +(9.03819 0 0) +(9.03554 0 0) +(9.03286 0 0) +(9.03016 0 0) +(9.02743 0 0) +(9.02467 0 0) +(9.02189 0 0) +(9.01908 0 0) +(9.01624 0 0) +(9.01338 0 0) +(9.01049 0 0) +(9.00757 0 0) +(9.00462 0 0) +(9.00164 0 0) +(8.99863 0 0) +(8.9956 0 0) +(8.99253 0 0) +(8.98944 0 0) +(8.98631 0 0) +(8.98315 0 0) +(8.97996 0 0) +(8.97674 0 0) +(8.97349 0 0) +(8.9702 0 0) +(8.96689 0 0) +(8.96354 0 0) +(8.96015 0 0) +(8.95673 0 0) +(8.95328 0 0) +(8.94979 0 0) +(8.94627 0 0) +(8.94271 0 0) +(8.93911 0 0) +(8.93548 0 0) +(8.93181 0 0) +(8.9281 0 0) +(8.92435 0 0) +(8.92057 0 0) +(8.91674 0 0) +(8.91288 0 0) +(8.90898 0 0) +(8.90503 0 0) +(8.90105 0 0) +(8.89702 0 0) +(8.89295 0 0) +(8.88884 0 0) +(8.88468 0 0) +(8.88048 0 0) +(8.87623 0 0) +(8.87194 0 0) +(8.8676 0 0) +(8.86322 0 0) +(8.85879 0 0) +(8.85431 0 0) +(8.84978 0 0) +(8.84521 0 0) +(8.84058 0 0) +(8.8359 0 0) +(8.83117 0 0) +(8.82639 0 0) +(8.82156 0 0) +(8.81667 0 0) +(8.81173 0 0) +(8.80673 0 0) +(8.80168 0 0) +(8.79657 0 0) +(8.7914 0 0) +(8.78617 0 0) +(8.78089 0 0) +(8.77554 0 0) +(8.77013 0 0) +(8.76466 0 0) +(8.75912 0 0) +(8.75353 0 0) +(8.74786 0 0) +(8.74213 0 0) +(8.73633 0 0) +(8.73047 0 0) +(8.72453 0 0) +(8.71852 0 0) +(8.71245 0 0) +(8.70629 0 0) +(8.70007 0 0) +(8.69377 0 0) +(8.68739 0 0) +(8.68093 0 0) +(8.86505 0 0) +(8.86394 0 0) +(8.86283 0 0) +(8.86171 0 0) +(8.86057 0 0) +(8.85943 0 0) +(8.85828 0 0) +(8.85711 0 0) +(8.85594 0 0) +(8.85476 0 0) +(8.85356 0 0) +(8.85236 0 0) +(8.85115 0 0) +(8.84992 0 0) +(8.84869 0 0) +(8.84744 0 0) +(8.84619 0 0) +(8.84492 0 0) +(8.84364 0 0) +(8.84235 0 0) +(8.84105 0 0) +(8.83974 0 0) +(8.83842 0 0) +(8.83708 0 0) +(8.83574 0 0) +(8.83438 0 0) +(8.83301 0 0) +(8.83163 0 0) +(8.83024 0 0) +(8.82883 0 0) +(8.82741 0 0) +(8.82598 0 0) +(8.82454 0 0) +(8.82308 0 0) +(8.82162 0 0) +(8.82014 0 0) +(8.81864 0 0) +(8.81713 0 0) +(8.81561 0 0) +(8.81408 0 0) +(8.81253 0 0) +(8.81097 0 0) +(8.8094 0 0) +(8.80781 0 0) +(8.8062 0 0) +(8.80459 0 0) +(8.80295 0 0) +(8.80131 0 0) +(8.79965 0 0) +(8.79797 0 0) +(8.79628 0 0) +(8.79458 0 0) +(8.79285 0 0) +(8.79112 0 0) +(8.78937 0 0) +(8.7876 0 0) +(8.78581 0 0) +(8.78401 0 0) +(8.7822 0 0) +(8.78037 0 0) +(8.77852 0 0) +(8.77665 0 0) +(8.77477 0 0) +(8.77287 0 0) +(8.77095 0 0) +(8.76902 0 0) +(8.76707 0 0) +(8.7651 0 0) +(8.76311 0 0) +(8.7611 0 0) +(8.75908 0 0) +(8.75703 0 0) +(8.75497 0 0) +(8.75289 0 0) +(8.75079 0 0) +(8.74867 0 0) +(8.74653 0 0) +(8.74437 0 0) +(8.74219 0 0) +(8.74 0 0) +(8.73778 0 0) +(8.73554 0 0) +(8.73327 0 0) +(8.73099 0 0) +(8.72869 0 0) +(8.72636 0 0) +(8.72402 0 0) +(8.72165 0 0) +(8.71926 0 0) +(8.71684 0 0) +(8.7144 0 0) +(8.71194 0 0) +(8.70946 0 0) +(8.70695 0 0) +(8.70442 0 0) +(8.70187 0 0) +(8.69929 0 0) +(8.69668 0 0) +(8.69406 0 0) +(8.6914 0 0) +(8.68872 0 0) +(8.68601 0 0) +(8.68328 0 0) +(8.68052 0 0) +(8.67774 0 0) +(8.67493 0 0) +(8.67209 0 0) +(8.66922 0 0) +(8.66632 0 0) +(8.6634 0 0) +(8.66045 0 0) +(8.65747 0 0) +(8.65445 0 0) +(8.65141 0 0) +(8.64834 0 0) +(8.64524 0 0) +(8.64211 0 0) +(8.63894 0 0) +(8.63575 0 0) +(8.63252 0 0) +(8.62926 0 0) +(8.62597 0 0) +(8.62264 0 0) +(8.61928 0 0) +(8.61589 0 0) +(8.61246 0 0) +(8.609 0 0) +(8.6055 0 0) +(8.60196 0 0) +(8.59839 0 0) +(8.59479 0 0) +(8.59114 0 0) +(8.58746 0 0) +(8.58374 0 0) +(8.57998 0 0) +(8.57618 0 0) +(8.57234 0 0) +(8.56846 0 0) +(8.56454 0 0) +(8.56058 0 0) +(8.55658 0 0) +(8.55253 0 0) +(8.54844 0 0) +(8.54431 0 0) +(8.54013 0 0) +(8.53591 0 0) +(8.53164 0 0) +(8.52733 0 0) +(8.52297 0 0) +(8.51856 0 0) +(8.51411 0 0) +(8.5096 0 0) +(8.50505 0 0) +(8.50044 0 0) +(8.49579 0 0) +(8.49108 0 0) +(8.48632 0 0) +(8.48151 0 0) +(8.47664 0 0) +(8.47172 0 0) +(8.46674 0 0) +(8.46171 0 0) +(8.45662 0 0) +(8.45147 0 0) +(8.44626 0 0) +(8.44099 0 0) +(8.43566 0 0) +(8.43027 0 0) +(8.42481 0 0) +(8.41929 0 0) +(8.41371 0 0) +(8.40806 0 0) +(8.40234 0 0) +(8.39656 0 0) +(8.3907 0 0) +(8.38478 0 0) +(8.37878 0 0) +(8.37271 0 0) +(8.36657 0 0) +(8.36035 0 0) +(8.47786 0 0) +(8.4768 0 0) +(8.47573 0 0) +(8.47466 0 0) +(8.47357 0 0) +(8.47248 0 0) +(8.47138 0 0) +(8.47027 0 0) +(8.46914 0 0) +(8.46801 0 0) +(8.46687 0 0) +(8.46572 0 0) +(8.46456 0 0) +(8.46339 0 0) +(8.46221 0 0) +(8.46102 0 0) +(8.45982 0 0) +(8.45861 0 0) +(8.45738 0 0) +(8.45615 0 0) +(8.45491 0 0) +(8.45365 0 0) +(8.45239 0 0) +(8.45111 0 0) +(8.44983 0 0) +(8.44853 0 0) +(8.44722 0 0) +(8.4459 0 0) +(8.44456 0 0) +(8.44322 0 0) +(8.44186 0 0) +(8.4405 0 0) +(8.43912 0 0) +(8.43772 0 0) +(8.43632 0 0) +(8.4349 0 0) +(8.43347 0 0) +(8.43203 0 0) +(8.43058 0 0) +(8.42911 0 0) +(8.42763 0 0) +(8.42614 0 0) +(8.42463 0 0) +(8.42311 0 0) +(8.42158 0 0) +(8.42003 0 0) +(8.41847 0 0) +(8.4169 0 0) +(8.41531 0 0) +(8.41371 0 0) +(8.41209 0 0) +(8.41046 0 0) +(8.40881 0 0) +(8.40715 0 0) +(8.40548 0 0) +(8.40379 0 0) +(8.40208 0 0) +(8.40036 0 0) +(8.39862 0 0) +(8.39687 0 0) +(8.3951 0 0) +(8.39332 0 0) +(8.39152 0 0) +(8.3897 0 0) +(8.38787 0 0) +(8.38602 0 0) +(8.38415 0 0) +(8.38227 0 0) +(8.38037 0 0) +(8.37845 0 0) +(8.37651 0 0) +(8.37456 0 0) +(8.37259 0 0) +(8.3706 0 0) +(8.36859 0 0) +(8.36656 0 0) +(8.36452 0 0) +(8.36245 0 0) +(8.36037 0 0) +(8.35826 0 0) +(8.35614 0 0) +(8.354 0 0) +(8.35184 0 0) +(8.34965 0 0) +(8.34745 0 0) +(8.34523 0 0) +(8.34298 0 0) +(8.34072 0 0) +(8.33843 0 0) +(8.33612 0 0) +(8.33379 0 0) +(8.33144 0 0) +(8.32906 0 0) +(8.32667 0 0) +(8.32425 0 0) +(8.3218 0 0) +(8.31934 0 0) +(8.31684 0 0) +(8.31433 0 0) +(8.31179 0 0) +(8.30923 0 0) +(8.30664 0 0) +(8.30403 0 0) +(8.30139 0 0) +(8.29873 0 0) +(8.29604 0 0) +(8.29332 0 0) +(8.29058 0 0) +(8.28781 0 0) +(8.28501 0 0) +(8.28219 0 0) +(8.27934 0 0) +(8.27646 0 0) +(8.27355 0 0) +(8.27061 0 0) +(8.26765 0 0) +(8.26465 0 0) +(8.26163 0 0) +(8.25857 0 0) +(8.25548 0 0) +(8.25237 0 0) +(8.24922 0 0) +(8.24604 0 0) +(8.24282 0 0) +(8.23958 0 0) +(8.2363 0 0) +(8.23299 0 0) +(8.22964 0 0) +(8.22626 0 0) +(8.22285 0 0) +(8.2194 0 0) +(8.21591 0 0) +(8.21239 0 0) +(8.20883 0 0) +(8.20523 0 0) +(8.2016 0 0) +(8.19793 0 0) +(8.19422 0 0) +(8.19047 0 0) +(8.18668 0 0) +(8.18286 0 0) +(8.17899 0 0) +(8.17508 0 0) +(8.17113 0 0) +(8.16713 0 0) +(8.16309 0 0) +(8.15901 0 0) +(8.15489 0 0) +(8.15072 0 0) +(8.1465 0 0) +(8.14224 0 0) +(8.13793 0 0) +(8.13358 0 0) +(8.12917 0 0) +(8.12472 0 0) +(8.12022 0 0) +(8.11567 0 0) +(8.11107 0 0) +(8.10641 0 0) +(8.10171 0 0) +(8.09695 0 0) +(8.09213 0 0) +(8.08726 0 0) +(8.08234 0 0) +(8.07736 0 0) +(8.07232 0 0) +(8.06722 0 0) +(8.06206 0 0) +(8.05685 0 0) +(8.05157 0 0) +(8.04623 0 0) +(8.04083 0 0) +(8.03536 0 0) +(8.02983 0 0) +(8.02423 0 0) +(8.01856 0 0) +(8.01283 0 0) +(8.00702 0 0) +(8.00115 0 0) +(7.9952 0 0) +(8.01163 0 0) +(8.01064 0 0) +(8.00963 0 0) +(8.00861 0 0) +(8.00759 0 0) +(8.00656 0 0) +(8.00551 0 0) +(8.00446 0 0) +(8.0034 0 0) +(8.00233 0 0) +(8.00126 0 0) +(8.00017 0 0) +(7.99907 0 0) +(7.99796 0 0) +(7.99685 0 0) +(7.99572 0 0) +(7.99459 0 0) +(7.99344 0 0) +(7.99229 0 0) +(7.99112 0 0) +(7.98995 0 0) +(7.98876 0 0) +(7.98757 0 0) +(7.98636 0 0) +(7.98515 0 0) +(7.98392 0 0) +(7.98268 0 0) +(7.98143 0 0) +(7.98017 0 0) +(7.9789 0 0) +(7.97762 0 0) +(7.97633 0 0) +(7.97503 0 0) +(7.97371 0 0) +(7.97238 0 0) +(7.97105 0 0) +(7.96969 0 0) +(7.96833 0 0) +(7.96696 0 0) +(7.96557 0 0) +(7.96417 0 0) +(7.96276 0 0) +(7.96134 0 0) +(7.9599 0 0) +(7.95845 0 0) +(7.95699 0 0) +(7.95552 0 0) +(7.95403 0 0) +(7.95253 0 0) +(7.95102 0 0) +(7.94949 0 0) +(7.94795 0 0) +(7.94639 0 0) +(7.94482 0 0) +(7.94324 0 0) +(7.94164 0 0) +(7.94003 0 0) +(7.9384 0 0) +(7.93676 0 0) +(7.9351 0 0) +(7.93343 0 0) +(7.93175 0 0) +(7.93005 0 0) +(7.92833 0 0) +(7.9266 0 0) +(7.92485 0 0) +(7.92308 0 0) +(7.9213 0 0) +(7.91951 0 0) +(7.91769 0 0) +(7.91586 0 0) +(7.91402 0 0) +(7.91215 0 0) +(7.91027 0 0) +(7.90838 0 0) +(7.90646 0 0) +(7.90453 0 0) +(7.90258 0 0) +(7.90061 0 0) +(7.89862 0 0) +(7.89661 0 0) +(7.89459 0 0) +(7.89255 0 0) +(7.89048 0 0) +(7.8884 0 0) +(7.8863 0 0) +(7.88418 0 0) +(7.88204 0 0) +(7.87988 0 0) +(7.8777 0 0) +(7.87549 0 0) +(7.87327 0 0) +(7.87103 0 0) +(7.86876 0 0) +(7.86647 0 0) +(7.86416 0 0) +(7.86183 0 0) +(7.85948 0 0) +(7.8571 0 0) +(7.8547 0 0) +(7.85228 0 0) +(7.84984 0 0) +(7.84737 0 0) +(7.84487 0 0) +(7.84236 0 0) +(7.83982 0 0) +(7.83725 0 0) +(7.83466 0 0) +(7.83204 0 0) +(7.8294 0 0) +(7.82673 0 0) +(7.82403 0 0) +(7.82131 0 0) +(7.81857 0 0) +(7.81579 0 0) +(7.81299 0 0) +(7.81016 0 0) +(7.8073 0 0) +(7.80441 0 0) +(7.80149 0 0) +(7.79855 0 0) +(7.79557 0 0) +(7.79256 0 0) +(7.78953 0 0) +(7.78646 0 0) +(7.78336 0 0) +(7.78023 0 0) +(7.77707 0 0) +(7.77388 0 0) +(7.77065 0 0) +(7.76739 0 0) +(7.7641 0 0) +(7.76077 0 0) +(7.7574 0 0) +(7.75401 0 0) +(7.75057 0 0) +(7.7471 0 0) +(7.7436 0 0) +(7.74006 0 0) +(7.73648 0 0) +(7.73286 0 0) +(7.7292 0 0) +(7.72551 0 0) +(7.72177 0 0) +(7.718 0 0) +(7.71418 0 0) +(7.71033 0 0) +(7.70643 0 0) +(7.70249 0 0) +(7.6985 0 0) +(7.69448 0 0) +(7.69041 0 0) +(7.68629 0 0) +(7.68213 0 0) +(7.67792 0 0) +(7.67367 0 0) +(7.66937 0 0) +(7.66502 0 0) +(7.66062 0 0) +(7.65617 0 0) +(7.65167 0 0) +(7.64712 0 0) +(7.64252 0 0) +(7.63787 0 0) +(7.63316 0 0) +(7.6284 0 0) +(7.62358 0 0) +(7.61871 0 0) +(7.61378 0 0) +(7.60879 0 0) +(7.60374 0 0) +(7.59864 0 0) +(7.59347 0 0) +(7.58824 0 0) +(7.58295 0 0) +(7.5776 0 0) +(7.57218 0 0) +(7.5667 0 0) +(7.56114 0 0) +(7.55552 0 0) +(7.38827 0 0) +(7.38735 0 0) +(7.38642 0 0) +(7.38549 0 0) +(7.38454 0 0) +(7.38359 0 0) +(7.38263 0 0) +(7.38166 0 0) +(7.38068 0 0) +(7.37969 0 0) +(7.3787 0 0) +(7.3777 0 0) +(7.37669 0 0) +(7.37567 0 0) +(7.37464 0 0) +(7.3736 0 0) +(7.37255 0 0) +(7.3715 0 0) +(7.37043 0 0) +(7.36936 0 0) +(7.36827 0 0) +(7.36718 0 0) +(7.36608 0 0) +(7.36497 0 0) +(7.36384 0 0) +(7.36271 0 0) +(7.36157 0 0) +(7.36042 0 0) +(7.35926 0 0) +(7.35809 0 0) +(7.35691 0 0) +(7.35571 0 0) +(7.35451 0 0) +(7.3533 0 0) +(7.35207 0 0) +(7.35084 0 0) +(7.3496 0 0) +(7.34834 0 0) +(7.34707 0 0) +(7.34579 0 0) +(7.3445 0 0) +(7.3432 0 0) +(7.34189 0 0) +(7.34057 0 0) +(7.33923 0 0) +(7.33788 0 0) +(7.33652 0 0) +(7.33515 0 0) +(7.33377 0 0) +(7.33237 0 0) +(7.33096 0 0) +(7.32954 0 0) +(7.3281 0 0) +(7.32666 0 0) +(7.3252 0 0) +(7.32372 0 0) +(7.32224 0 0) +(7.32074 0 0) +(7.31922 0 0) +(7.3177 0 0) +(7.31616 0 0) +(7.3146 0 0) +(7.31303 0 0) +(7.31145 0 0) +(7.30985 0 0) +(7.30824 0 0) +(7.30661 0 0) +(7.30497 0 0) +(7.30331 0 0) +(7.30164 0 0) +(7.29995 0 0) +(7.29825 0 0) +(7.29653 0 0) +(7.2948 0 0) +(7.29305 0 0) +(7.29128 0 0) +(7.2895 0 0) +(7.2877 0 0) +(7.28588 0 0) +(7.28405 0 0) +(7.2822 0 0) +(7.28033 0 0) +(7.27845 0 0) +(7.27655 0 0) +(7.27463 0 0) +(7.27269 0 0) +(7.27073 0 0) +(7.26876 0 0) +(7.26677 0 0) +(7.26475 0 0) +(7.26272 0 0) +(7.26067 0 0) +(7.2586 0 0) +(7.25651 0 0) +(7.2544 0 0) +(7.25227 0 0) +(7.25012 0 0) +(7.24795 0 0) +(7.24576 0 0) +(7.24355 0 0) +(7.24132 0 0) +(7.23906 0 0) +(7.23679 0 0) +(7.23449 0 0) +(7.23217 0 0) +(7.22982 0 0) +(7.22745 0 0) +(7.22506 0 0) +(7.22265 0 0) +(7.22021 0 0) +(7.21775 0 0) +(7.21527 0 0) +(7.21276 0 0) +(7.21022 0 0) +(7.20767 0 0) +(7.20508 0 0) +(7.20247 0 0) +(7.19983 0 0) +(7.19717 0 0) +(7.19448 0 0) +(7.19176 0 0) +(7.18902 0 0) +(7.18625 0 0) +(7.18345 0 0) +(7.18062 0 0) +(7.17776 0 0) +(7.17487 0 0) +(7.17196 0 0) +(7.16901 0 0) +(7.16604 0 0) +(7.16303 0 0) +(7.15999 0 0) +(7.15692 0 0) +(7.15382 0 0) +(7.15069 0 0) +(7.14752 0 0) +(7.14432 0 0) +(7.14109 0 0) +(7.13782 0 0) +(7.13452 0 0) +(7.13119 0 0) +(7.12782 0 0) +(7.12441 0 0) +(7.12096 0 0) +(7.11748 0 0) +(7.11396 0 0) +(7.11041 0 0) +(7.10681 0 0) +(7.10318 0 0) +(7.09951 0 0) +(7.09579 0 0) +(7.09204 0 0) +(7.08824 0 0) +(7.0844 0 0) +(7.08052 0 0) +(7.0766 0 0) +(7.07263 0 0) +(7.06862 0 0) +(7.06457 0 0) +(7.06047 0 0) +(7.05632 0 0) +(7.05212 0 0) +(7.04788 0 0) +(7.04359 0 0) +(7.03925 0 0) +(7.03485 0 0) +(7.03041 0 0) +(7.02592 0 0) +(7.02137 0 0) +(7.01677 0 0) +(7.01212 0 0) +(7.00741 0 0) +(7.00265 0 0) +(6.99783 0 0) +(6.99295 0 0) +(6.98801 0 0) +(6.98301 0 0) +(6.97795 0 0) +(6.97283 0 0) +(6.96765 0 0) +(6.27914 0 0) +(6.27836 0 0) +(6.27757 0 0) +(6.27678 0 0) +(6.27597 0 0) +(6.27516 0 0) +(6.27435 0 0) +(6.27352 0 0) +(6.27269 0 0) +(6.27185 0 0) +(6.27101 0 0) +(6.27016 0 0) +(6.2693 0 0) +(6.26843 0 0) +(6.26756 0 0) +(6.26667 0 0) +(6.26578 0 0) +(6.26489 0 0) +(6.26398 0 0) +(6.26307 0 0) +(6.26215 0 0) +(6.26122 0 0) +(6.26028 0 0) +(6.25934 0 0) +(6.25838 0 0) +(6.25742 0 0) +(6.25645 0 0) +(6.25547 0 0) +(6.25449 0 0) +(6.25349 0 0) +(6.25249 0 0) +(6.25147 0 0) +(6.25045 0 0) +(6.24942 0 0) +(6.24838 0 0) +(6.24733 0 0) +(6.24627 0 0) +(6.24521 0 0) +(6.24413 0 0) +(6.24304 0 0) +(6.24195 0 0) +(6.24084 0 0) +(6.23972 0 0) +(6.2386 0 0) +(6.23746 0 0) +(6.23632 0 0) +(6.23516 0 0) +(6.234 0 0) +(6.23282 0 0) +(6.23163 0 0) +(6.23044 0 0) +(6.22923 0 0) +(6.22801 0 0) +(6.22678 0 0) +(6.22554 0 0) +(6.22429 0 0) +(6.22302 0 0) +(6.22175 0 0) +(6.22046 0 0) +(6.21916 0 0) +(6.21785 0 0) +(6.21653 0 0) +(6.2152 0 0) +(6.21385 0 0) +(6.21249 0 0) +(6.21112 0 0) +(6.20974 0 0) +(6.20835 0 0) +(6.20694 0 0) +(6.20552 0 0) +(6.20408 0 0) +(6.20264 0 0) +(6.20118 0 0) +(6.1997 0 0) +(6.19821 0 0) +(6.19671 0 0) +(6.1952 0 0) +(6.19367 0 0) +(6.19213 0 0) +(6.19057 0 0) +(6.189 0 0) +(6.18741 0 0) +(6.18581 0 0) +(6.18419 0 0) +(6.18256 0 0) +(6.18091 0 0) +(6.17925 0 0) +(6.17757 0 0) +(6.17588 0 0) +(6.17417 0 0) +(6.17244 0 0) +(6.1707 0 0) +(6.16894 0 0) +(6.16716 0 0) +(6.16537 0 0) +(6.16356 0 0) +(6.16174 0 0) +(6.15989 0 0) +(6.15803 0 0) +(6.15615 0 0) +(6.15425 0 0) +(6.15233 0 0) +(6.1504 0 0) +(6.14844 0 0) +(6.14647 0 0) +(6.14448 0 0) +(6.14247 0 0) +(6.14044 0 0) +(6.13839 0 0) +(6.13632 0 0) +(6.13422 0 0) +(6.13211 0 0) +(6.12998 0 0) +(6.12782 0 0) +(6.12565 0 0) +(6.12345 0 0) +(6.12123 0 0) +(6.11899 0 0) +(6.11673 0 0) +(6.11444 0 0) +(6.11213 0 0) +(6.1098 0 0) +(6.10745 0 0) +(6.10507 0 0) +(6.10266 0 0) +(6.10023 0 0) +(6.09778 0 0) +(6.0953 0 0) +(6.0928 0 0) +(6.09027 0 0) +(6.08772 0 0) +(6.08513 0 0) +(6.08253 0 0) +(6.07989 0 0) +(6.07723 0 0) +(6.07454 0 0) +(6.07182 0 0) +(6.06907 0 0) +(6.06629 0 0) +(6.06349 0 0) +(6.06065 0 0) +(6.05779 0 0) +(6.05489 0 0) +(6.05196 0 0) +(6.049 0 0) +(6.04601 0 0) +(6.04299 0 0) +(6.03994 0 0) +(6.03685 0 0) +(6.03373 0 0) +(6.03057 0 0) +(6.02738 0 0) +(6.02415 0 0) +(6.02089 0 0) +(6.0176 0 0) +(6.01426 0 0) +(6.01089 0 0) +(6.00748 0 0) +(6.00403 0 0) +(6.00055 0 0) +(5.99702 0 0) +(5.99346 0 0) +(5.98985 0 0) +(5.9862 0 0) +(5.98251 0 0) +(5.97878 0 0) +(5.97501 0 0) +(5.97119 0 0) +(5.96732 0 0) +(5.96341 0 0) +(5.95946 0 0) +(5.95546 0 0) +(5.95141 0 0) +(5.94731 0 0) +(5.94316 0 0) +(5.93897 0 0) +(5.93472 0 0) +(5.93042 0 0) +(5.92607 0 0) +(5.92167 0 0) +(6.97468 0 0) +(6.96493 0 0) +(6.95471 0 0) +(6.944 0 0) +(6.93276 0 0) +(6.92097 0 0) +(6.90859 0 0) +(6.89559 0 0) +(6.88193 0 0) +(6.86756 0 0) +(6.85244 0 0) +(6.83651 0 0) +(6.81972 0 0) +(6.80202 0 0) +(6.78332 0 0) +(6.76357 0 0) +(6.74268 0 0) +(6.72055 0 0) +(6.69709 0 0) +(6.67219 0 0) +(6.64571 0 0) +(6.61751 0 0) +(6.58743 0 0) +(6.55529 0 0) +(6.52086 0 0) +(8.16611 0 0) +(8.15468 0 0) +(8.1427 0 0) +(8.13014 0 0) +(8.11697 0 0) +(8.10315 0 0) +(8.08863 0 0) +(8.07338 0 0) +(8.05735 0 0) +(8.04049 0 0) +(8.02275 0 0) +(8.00406 0 0) +(7.98436 0 0) +(7.96358 0 0) +(7.94163 0 0) +(7.91844 0 0) +(7.89389 0 0) +(7.8679 0 0) +(7.84033 0 0) +(7.81105 0 0) +(7.77992 0 0) +(7.74675 0 0) +(7.71135 0 0) +(7.67351 0 0) +(7.63296 0 0) +(8.78438 0 0) +(8.77209 0 0) +(8.75921 0 0) +(8.74571 0 0) +(8.73154 0 0) +(8.71668 0 0) +(8.70108 0 0) +(8.68469 0 0) +(8.66746 0 0) +(8.64934 0 0) +(8.63026 0 0) +(8.61018 0 0) +(8.589 0 0) +(8.56667 0 0) +(8.54309 0 0) +(8.51816 0 0) +(8.4918 0 0) +(8.46387 0 0) +(8.43426 0 0) +(8.40281 0 0) +(8.36937 0 0) +(8.33375 0 0) +(8.29575 0 0) +(8.25512 0 0) +(8.21159 0 0) +(9.21696 0 0) +(9.20407 0 0) +(9.19056 0 0) +(9.17639 0 0) +(9.16154 0 0) +(9.14595 0 0) +(9.12958 0 0) +(9.11239 0 0) +(9.09431 0 0) +(9.07531 0 0) +(9.0553 0 0) +(9.03423 0 0) +(9.01203 0 0) +(8.98861 0 0) +(8.96387 0 0) +(8.93774 0 0) +(8.91009 0 0) +(8.8808 0 0) +(8.84975 0 0) +(8.81678 0 0) +(8.78172 0 0) +(8.74437 0 0) +(8.70453 0 0) +(8.66194 0 0) +(8.61632 0 0) +(9.5539 0 0) +(9.54053 0 0) +(9.52653 0 0) +(9.51185 0 0) +(9.49645 0 0) +(9.4803 0 0) +(9.46333 0 0) +(9.44551 0 0) +(9.42678 0 0) +(9.40709 0 0) +(9.38636 0 0) +(9.36452 0 0) +(9.34151 0 0) +(9.31724 0 0) +(9.29161 0 0) +(9.26452 0 0) +(9.23587 0 0) +(9.20553 0 0) +(9.17335 0 0) +(9.13918 0 0) +(9.10286 0 0) +(9.06417 0 0) +(9.02289 0 0) +(8.97877 0 0) +(8.9315 0 0) +(9.83176 0 0) +(9.81801 0 0) +(9.8036 0 0) +(9.78849 0 0) +(9.77265 0 0) +(9.75602 0 0) +(9.73857 0 0) +(9.72023 0 0) +(9.70096 0 0) +(9.68069 0 0) +(9.65936 0 0) +(9.63689 0 0) +(9.61322 0 0) +(9.58824 0 0) +(9.56187 0 0) +(9.534 0 0) +(9.50452 0 0) +(9.4733 0 0) +(9.4402 0 0) +(9.40505 0 0) +(9.36767 0 0) +(9.32787 0 0) +(9.28541 0 0) +(9.24002 0 0) +(9.1914 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99166 0 0) +(9.97378 0 0) +(9.95501 0 0) +(9.93527 0 0) +(9.91451 0 0) +(9.89267 0 0) +(9.86966 0 0) +(9.84542 0 0) +(9.81984 0 0) +(9.79284 0 0) +(9.7643 0 0) +(9.73411 0 0) +(9.70214 0 0) +(9.66824 0 0) +(9.63225 0 0) +(9.59398 0 0) +(9.55323 0 0) +(9.50975 0 0) +(9.46328 0 0) +(9.41349 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99511 0 0) +(9.96599 0 0) +(9.93518 0 0) +(9.90256 0 0) +(9.86796 0 0) +(9.83123 0 0) +(9.79218 0 0) +(9.75059 0 0) +(9.70622 0 0) +(9.65879 0 0) +(9.60799 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.96888 0 0) +(9.92654 0 0) +(9.88138 0 0) +(9.8331 0 0) +(9.7814 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99064 0 0) +(9.93811 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.98707 0 0) +(9.9508 0 0) +(9.91225 0 0) +(9.87122 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(10 0 0) +(9.99144 0 0) +(9.96868 0 0) +(9.9447 0 0) +(9.91942 0 0) +(9.89273 0 0) +(9.86454 0 0) +(9.83473 0 0) +(9.80317 0 0) +(9.76973 0 0) +(9.73423 0 0) +(9.69652 0 0) +(9.65638 0 0) +(9.97313 0 0) +(9.96124 0 0) +(9.9488 0 0) +(9.93577 0 0) +(9.92213 0 0) +(9.90783 0 0) +(9.89285 0 0) +(9.87714 0 0) +(9.86065 0 0) +(9.84335 0 0) +(9.82518 0 0) +(9.80608 0 0) +(9.786 0 0) +(9.76487 0 0) +(9.74263 0 0) +(9.71919 0 0) +(9.69448 0 0) +(9.66839 0 0) +(9.64084 0 0) +(9.6117 0 0) +(9.58085 0 0) +(9.54816 0 0) +(9.51347 0 0) +(9.4766 0 0) +(9.43736 0 0) +(9.73579 0 0) +(9.72418 0 0) +(9.71203 0 0) +(9.69932 0 0) +(9.686 0 0) +(9.67204 0 0) +(9.65741 0 0) +(9.64207 0 0) +(9.62598 0 0) +(9.60909 0 0) +(9.59134 0 0) +(9.5727 0 0) +(9.5531 0 0) +(9.53247 0 0) +(9.51075 0 0) +(9.48787 0 0) +(9.46374 0 0) +(9.43827 0 0) +(9.41137 0 0) +(9.38292 0 0) +(9.3528 0 0) +(9.32088 0 0) +(9.28701 0 0) +(9.25101 0 0) +(9.21269 0 0) +(9.49044 0 0) +(9.47913 0 0) +(9.46729 0 0) +(9.45489 0 0) +(9.4419 0 0) +(9.4283 0 0) +(9.41404 0 0) +(9.39908 0 0) +(9.38339 0 0) +(9.36692 0 0) +(9.34962 0 0) +(9.33145 0 0) +(9.31234 0 0) +(9.29223 0 0) +(9.27105 0 0) +(9.24874 0 0) +(9.22522 0 0) +(9.20039 0 0) +(9.17416 0 0) +(9.14642 0 0) +(9.11705 0 0) +(9.08593 0 0) +(9.0529 0 0) +(9.0178 0 0) +(8.98044 0 0) +(9.23434 0 0) +(9.22333 0 0) +(9.2118 0 0) +(9.19974 0 0) +(9.1871 0 0) +(9.17386 0 0) +(9.15998 0 0) +(9.14543 0 0) +(9.13016 0 0) +(9.11414 0 0) +(9.0973 0 0) +(9.07961 0 0) +(9.06101 0 0) +(9.04144 0 0) +(9.02084 0 0) +(8.99913 0 0) +(8.97623 0 0) +(8.95206 0 0) +(8.92654 0 0) +(8.89954 0 0) +(8.87096 0 0) +(8.84066 0 0) +(8.80851 0 0) +(8.77435 0 0) +(8.73798 0 0) +(8.96361 0 0) +(8.95292 0 0) +(8.94173 0 0) +(8.93002 0 0) +(8.91775 0 0) +(8.9049 0 0) +(8.89142 0 0) +(8.87729 0 0) +(8.86247 0 0) +(8.84691 0 0) +(8.83057 0 0) +(8.81339 0 0) +(8.79534 0 0) +(8.77633 0 0) +(8.75633 0 0) +(8.73525 0 0) +(8.71302 0 0) +(8.68955 0 0) +(8.66476 0 0) +(8.63855 0 0) +(8.61079 0 0) +(8.58138 0 0) +(8.55016 0 0) +(8.51697 0 0) +(8.48166 0 0) +(8.67256 0 0) +(8.66221 0 0) +(8.65139 0 0) +(8.64005 0 0) +(8.62818 0 0) +(8.61574 0 0) +(8.6027 0 0) +(8.58903 0 0) +(8.57468 0 0) +(8.55963 0 0) +(8.54381 0 0) +(8.52719 0 0) +(8.50971 0 0) +(8.49132 0 0) +(8.47196 0 0) +(8.45155 0 0) +(8.43004 0 0) +(8.40732 0 0) +(8.38333 0 0) +(8.35795 0 0) +(8.33109 0 0) +(8.30261 0 0) +(8.27238 0 0) +(8.24026 0 0) +(8.20606 0 0) +(8.35226 0 0) +(8.3423 0 0) +(8.33187 0 0) +(8.32095 0 0) +(8.30951 0 0) +(8.29753 0 0) +(8.28497 0 0) +(8.2718 0 0) +(8.25798 0 0) +(8.24347 0 0) +(8.22823 0 0) +(8.21222 0 0) +(8.19538 0 0) +(8.17766 0 0) +(8.159 0 0) +(8.13934 0 0) +(8.11861 0 0) +(8.09672 0 0) +(8.0736 0 0) +(8.04914 0 0) +(8.02325 0 0) +(7.9958 0 0) +(7.96667 0 0) +(7.9357 0 0) +(7.90274 0 0) +(7.98743 0 0) +(7.9779 0 0) +(7.96792 0 0) +(7.95747 0 0) +(7.94653 0 0) +(7.93507 0 0) +(7.92305 0 0) +(7.91045 0 0) +(7.89722 0 0) +(7.88334 0 0) +(7.86876 0 0) +(7.85343 0 0) +(7.83732 0 0) +(7.82036 0 0) +(7.80251 0 0) +(7.78369 0 0) +(7.76384 0 0) +(7.74289 0 0) +(7.72076 0 0) +(7.69735 0 0) +(7.67256 0 0) +(7.64628 0 0) +(7.61838 0 0) +(7.58873 0 0) +(7.55716 0 0) +(7.54812 0 0) +(7.5391 0 0) +(7.52967 0 0) +(7.51979 0 0) +(7.50944 0 0) +(7.4986 0 0) +(7.48723 0 0) +(7.47531 0 0) +(7.4628 0 0) +(7.44967 0 0) +(7.43587 0 0) +(7.42138 0 0) +(7.40613 0 0) +(7.39009 0 0) +(7.37319 0 0) +(7.35538 0 0) +(7.3366 0 0) +(7.31677 0 0) +(7.29582 0 0) +(7.27365 0 0) +(7.25018 0 0) +(7.2253 0 0) +(7.19889 0 0) +(7.17081 0 0) +(7.14091 0 0) +(6.96068 0 0) +(6.95236 0 0) +(6.94364 0 0) +(6.93452 0 0) +(6.92496 0 0) +(6.91494 0 0) +(6.90444 0 0) +(6.89342 0 0) +(6.88186 0 0) +(6.86973 0 0) +(6.85697 0 0) +(6.84357 0 0) +(6.82947 0 0) +(6.81464 0 0) +(6.79901 0 0) +(6.78254 0 0) +(6.76516 0 0) +(6.74682 0 0) +(6.72743 0 0) +(6.70692 0 0) +(6.6852 0 0) +(6.66217 0 0) +(6.63772 0 0) +(6.61174 0 0) +(6.58408 0 0) +(5.9114 0 0) +(5.90435 0 0) +(5.89698 0 0) +(5.88926 0 0) +(5.88118 0 0) +(5.87271 0 0) +(5.86383 0 0) +(5.85452 0 0) +(5.84475 0 0) +(5.8345 0 0) +(5.82374 0 0) +(5.81242 0 0) +(5.80053 0 0) +(5.78801 0 0) +(5.77484 0 0) +(5.76095 0 0) +(5.74632 0 0) +(5.73087 0 0) +(5.71455 0 0) +(5.69729 0 0) +(5.67903 0 0) +(5.65967 0 0) +(5.63913 0 0) +(5.61731 0 0) +(5.59408 0 0) +) +; boundaryField { - inlet + inlet { type fixedValue; value uniform (10 0 0); } - - outlet + outlet { type zeroGradient; } - - upperWall + upperWall { type fixedValue; value uniform (0 0 0); } - - lowerWall + lowerWall { type fixedValue; value uniform (0 0 0); } - - frontAndBack + frontAndBack { type empty; } } + // ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/0/epsilon b/tutorials/incompressible/simpleFoam/pitzDaily/0/epsilon index 7128897fb1c4a2917f2161098a58811808356821..dc23ee0ade9986684a314f485283e8aa2fb4b1b6 100644 --- a/tutorials/incompressible/simpleFoam/pitzDaily/0/epsilon +++ b/tutorials/incompressible/simpleFoam/pitzDaily/0/epsilon @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -17,7 +17,12236 @@ FoamFile dimensions [0 2 -3 0 0 0 0]; -internalField uniform 14.855; +internalField nonuniform List<scalar> +12225 +( +37429.9 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36356.1 +1342.56 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +544.283 +563.412 +1297.78 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +291.948 +304.877 +1325.04 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +218.242 +224.153 +1258.05 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +178.54 +181.565 +1094.14 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +152.356 +154.049 +865.035 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +135.522 +136.543 +639.644 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.221 +121.913 +447.635 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +109.569 +110.075 +275.879 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.153 +101.526 +147.799 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.2857 +93.56 +19.3313 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.6883 +18.8095 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0.0313675 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1.55294e-41 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +4.57669 +98.1386 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7358 +62.7362 +325.279 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +105.629 +631.738 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.512 +121.513 +967.6 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +143.243 +1232.73 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +176.106 +1354.05 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +236.886 +1419.44 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +443.508 +31097.4 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +47306.7 +15089.9 +16549.9 +17510.2 +17514.7 +17519.3 +17523.9 +17528.6 +17533.3 +17538 +17542.8 +17547.6 +17552.4 +17557.3 +17562.3 +17567.2 +17572.3 +17577.3 +17582.4 +17587.6 +17592.8 +17598 +17603.3 +17608.6 +17614 +17619.4 +17624.9 +17630.4 +17636 +17641.6 +17647.2 +17652.9 +17658.7 +17664.5 +17670.4 +17676.3 +17682.2 +17688.2 +17694.3 +17700.4 +17706.6 +17712.8 +17719.1 +17725.4 +17731.8 +17738.3 +17744.8 +17751.3 +17758 +17764.6 +17771.4 +17778.2 +17785 +17791.9 +17798.9 +17806 +17813.1 +17820.2 +17827.5 +17834.8 +17842.1 +17849.5 +17857 +17864.6 +17872.2 +17879.9 +17887.7 +17895.5 +17903.4 +17911.4 +17919.4 +17927.5 +17935.7 +17944 +17952.3 +17960.7 +17969.2 +17977.8 +17986.5 +17995.2 +18004 +18012.9 +18021.8 +18030.9 +18040 +18049.2 +18058.5 +18067.9 +18077.4 +18087 +18096.6 +18106.3 +18116.2 +18126.1 +18136.1 +18146.2 +18156.4 +18166.7 +18177.1 +18187.6 +18198.2 +18208.9 +18219.7 +18230.5 +18241.5 +18252.6 +18263.8 +18275.1 +18286.6 +18298.1 +18309.7 +18321.5 +18333.3 +18345.3 +18357.4 +18369.6 +18381.9 +18394.3 +18406.9 +18419.6 +18432.4 +18445.3 +18458.3 +18471.5 +18484.8 +18498.3 +18511.8 +18525.5 +18539.4 +18553.4 +18567.5 +18581.7 +18596.1 +18610.6 +18625.3 +18640.2 +18655.1 +18670.3 +18685.5 +18701 +18716.5 +18732.3 +18748.2 +18764.3 +18780.5 +18796.9 +18813.4 +18830.2 +18847.1 +18864.1 +18881.4 +18898.8 +18916.4 +18934.2 +18952.2 +18970.4 +18988.7 +19007.3 +19026 +19044.9 +19064.1 +19083.4 +19103 +19122.7 +19142.7 +19162.8 +19183.2 +19203.9 +19224.7 +19245.7 +19267 +19288.5 +19310.3 +19332.3 +19354.5 +19377 +19399.7 +19422.7 +19445.9 +19469.4 +41660.9 +640.313 +311.73 +142.89 +188.083 +266.562 +266.632 +266.703 +266.774 +266.846 +266.919 +266.992 +267.066 +267.14 +267.215 +267.291 +267.367 +267.445 +267.522 +267.601 +267.68 +267.759 +267.84 +267.921 +268.003 +268.085 +268.168 +268.252 +268.337 +268.422 +268.508 +268.595 +268.683 +268.771 +268.86 +268.95 +269.041 +269.132 +269.225 +269.318 +269.412 +269.506 +269.602 +269.698 +269.796 +269.894 +269.993 +270.092 +270.193 +270.295 +270.397 +270.501 +270.605 +270.71 +270.816 +270.923 +271.032 +271.141 +271.251 +271.362 +271.473 +271.586 +271.7 +271.815 +271.931 +272.048 +272.167 +272.286 +272.406 +272.527 +272.65 +272.773 +272.898 +273.024 +273.15 +273.279 +273.408 +273.538 +273.67 +273.802 +273.936 +274.072 +274.208 +274.346 +274.485 +274.625 +274.767 +274.909 +275.053 +275.199 +275.346 +275.494 +275.644 +275.794 +275.947 +276.101 +276.256 +276.412 +276.571 +276.73 +276.891 +277.054 +277.218 +277.384 +277.551 +277.72 +277.89 +278.062 +278.236 +278.411 +278.588 +278.767 +278.947 +279.129 +279.313 +279.499 +279.686 +279.876 +280.067 +280.26 +280.454 +280.651 +280.85 +281.05 +281.253 +281.457 +281.664 +281.872 +282.083 +282.295 +282.51 +282.727 +282.946 +283.167 +283.39 +283.616 +283.844 +284.074 +284.306 +284.541 +284.778 +285.018 +285.26 +285.504 +285.751 +286.001 +286.253 +286.507 +286.764 +287.024 +287.287 +287.552 +287.82 +288.09 +288.364 +288.64 +288.919 +289.202 +289.487 +289.775 +290.066 +290.36 +290.658 +290.958 +291.262 +291.569 +291.879 +292.193 +292.51 +292.83 +293.154 +293.481 +293.812 +294.147 +294.485 +294.827 +295.173 +295.522 +295.876 +296.234 +41660.9 +633.003 +346.646 +268.098 +193.061 +70.3956 +90.2899 +146.316 +146.355 +146.394 +146.434 +146.474 +146.515 +146.556 +146.597 +146.638 +146.68 +146.723 +146.765 +146.808 +146.852 +146.895 +146.939 +146.984 +147.029 +147.074 +147.12 +147.166 +147.212 +147.259 +147.306 +147.354 +147.402 +147.45 +147.499 +147.549 +147.598 +147.649 +147.699 +147.75 +147.802 +147.854 +147.906 +147.959 +148.012 +148.066 +148.121 +148.175 +148.231 +148.286 +148.343 +148.399 +148.456 +148.514 +148.572 +148.631 +148.69 +148.75 +148.811 +148.872 +148.933 +148.995 +149.057 +149.12 +149.184 +149.248 +149.313 +149.379 +149.444 +149.511 +149.578 +149.646 +149.714 +149.783 +149.853 +149.923 +149.994 +150.066 +150.138 +150.211 +150.284 +150.358 +150.433 +150.509 +150.585 +150.662 +150.74 +150.818 +150.897 +150.977 +151.057 +151.139 +151.221 +151.303 +151.387 +151.471 +151.557 +151.642 +151.729 +151.817 +151.905 +151.994 +152.084 +152.175 +152.267 +152.36 +152.453 +152.548 +152.643 +152.739 +152.836 +152.934 +153.033 +153.133 +153.234 +153.336 +153.439 +153.542 +153.647 +153.753 +153.86 +153.968 +154.077 +154.187 +154.298 +154.41 +154.523 +154.638 +154.753 +154.87 +154.988 +155.107 +155.227 +155.348 +155.471 +155.594 +155.719 +155.846 +155.973 +156.102 +156.232 +156.364 +156.496 +156.63 +156.766 +156.903 +157.041 +157.181 +157.322 +157.464 +157.608 +157.754 +157.901 +158.049 +158.199 +158.351 +158.504 +158.659 +158.815 +158.973 +159.133 +159.294 +159.458 +159.622 +159.789 +159.957 +160.128 +160.3 +160.474 +160.649 +160.827 +161.007 +161.188 +161.372 +161.557 +161.745 +161.935 +162.126 +162.32 +162.518 +41660.9 +633.01 +346.648 +266.218 +223.919 +197.412 +154.263 +51.9843 +65.4795 +112.68 +112.71 +112.741 +112.773 +112.804 +112.836 +112.868 +112.9 +112.932 +112.965 +112.998 +113.032 +113.065 +113.099 +113.133 +113.168 +113.203 +113.238 +113.273 +113.309 +113.345 +113.382 +113.418 +113.455 +113.493 +113.53 +113.568 +113.606 +113.645 +113.684 +113.723 +113.763 +113.803 +113.843 +113.884 +113.925 +113.967 +114.008 +114.051 +114.093 +114.136 +114.179 +114.223 +114.267 +114.311 +114.356 +114.401 +114.447 +114.493 +114.54 +114.586 +114.634 +114.681 +114.729 +114.778 +114.827 +114.876 +114.926 +114.977 +115.027 +115.079 +115.13 +115.182 +115.235 +115.288 +115.342 +115.396 +115.45 +115.506 +115.561 +115.617 +115.674 +115.731 +115.788 +115.847 +115.905 +115.964 +116.024 +116.085 +116.145 +116.207 +116.269 +116.331 +116.395 +116.458 +116.523 +116.588 +116.653 +116.719 +116.786 +116.853 +116.921 +116.99 +117.059 +117.129 +117.2 +117.271 +117.343 +117.416 +117.489 +117.563 +117.638 +117.713 +117.79 +117.867 +117.944 +118.023 +118.102 +118.182 +118.262 +118.344 +118.426 +118.509 +118.593 +118.678 +118.763 +118.849 +118.937 +119.025 +119.114 +119.203 +119.294 +119.386 +119.478 +119.571 +119.666 +119.761 +119.857 +119.954 +120.053 +120.152 +120.252 +120.353 +120.455 +120.558 +120.663 +120.768 +120.874 +120.982 +121.09 +121.2 +121.311 +121.423 +121.536 +121.65 +121.766 +121.883 +122 +122.12 +122.24 +122.362 +122.485 +122.609 +122.734 +122.861 +122.99 +123.119 +123.25 +123.383 +123.517 +123.652 +123.789 +123.927 +124.067 +124.208 +124.351 +124.495 +124.641 +124.789 +124.938 +125.091 +41660.9 +633.019 +346.651 +266.22 +223.921 +196.55 +176.894 +162.409 +129.271 +42.1967 +54.4708 +56.985 +57.223 +57.4636 +57.707 +57.9532 +58.2022 +58.454 +58.7087 +58.9664 +59.227 +59.4906 +59.7572 +60.027 +60.2999 +60.5759 +60.8552 +61.1378 +61.4236 +61.7129 +62.0055 +62.3016 +62.6013 +62.9044 +63.2112 +63.5217 +63.8359 +64.1538 +64.4756 +64.8013 +65.1309 +65.4645 +65.8021 +66.1439 +66.4899 +66.84 +67.1945 +67.5534 +67.9167 +68.2845 +68.6569 +69.0339 +69.4156 +69.8022 +70.1935 +70.5898 +70.9911 +71.3975 +71.8091 +72.2258 +72.648 +73.0755 +73.5085 +73.9471 +74.3914 +74.8414 +75.2973 +75.7591 +76.2269 +76.7009 +77.1811 +77.6677 +78.1607 +78.6602 +79.1664 +79.6793 +80.1991 +80.7259 +81.2598 +81.8009 +82.3493 +82.9052 +83.4687 +84.0398 +84.6188 +85.2058 +85.8009 +86.4042 +87.016 +87.6362 +88.2651 +88.9029 +89.5496 +90.2054 +90.8706 +91.5452 +92.2294 +92.9234 +93.6274 +94.3415 +95.0659 +95.8009 +96.5465 +97.303 +98.0706 +98.8494 +98.9218 +98.983 +99.0449 +99.1073 +99.1703 +99.2339 +99.2981 +99.363 +99.4284 +99.4945 +99.5612 +99.6286 +99.6966 +99.7653 +99.8346 +99.9046 +99.9753 +100.047 +100.119 +100.192 +100.265 +100.339 +100.414 +100.49 +100.566 +100.644 +100.721 +100.8 +100.88 +100.96 +101.041 +101.123 +101.206 +101.289 +101.374 +101.459 +101.545 +101.632 +101.72 +101.809 +101.899 +101.989 +102.081 +102.173 +102.267 +102.361 +102.456 +102.553 +102.65 +102.749 +102.848 +102.948 +103.05 +103.152 +103.256 +103.361 +103.467 +103.574 +103.682 +103.791 +103.902 +104.013 +104.126 +104.24 +104.355 +104.472 +104.59 +104.709 +104.829 +104.951 +105.074 +105.198 +105.324 +105.454 +41661 +633.031 +346.655 +266.223 +223.924 +196.552 +176.896 +161.866 +149.879 +140.51 +30.4388 +3.22313 +3.22107 +3.26129 +3.3022 +3.34384 +3.38621 +3.42934 +3.47322 +3.51789 +3.56336 +3.60964 +3.65675 +3.70471 +3.75354 +3.80326 +3.85387 +3.90542 +3.9579 +4.01135 +4.06578 +4.12122 +4.17769 +4.2352 +4.29379 +4.35347 +4.41427 +4.47622 +4.53934 +4.60365 +4.66918 +4.73596 +4.80401 +4.87338 +4.94407 +5.01613 +5.08958 +5.16446 +5.2408 +5.31863 +5.39798 +5.47889 +5.5614 +5.64555 +5.73136 +5.81888 +5.90814 +5.9992 +6.09209 +6.18685 +6.28352 +6.38216 +6.4828 +6.58551 +6.69031 +6.79727 +6.90644 +7.01786 +7.1316 +7.2477 +7.36623 +7.48724 +7.6108 +7.73696 +7.8658 +7.99737 +8.13174 +8.26898 +8.40917 +8.55237 +8.69866 +8.84812 +9.00083 +9.15686 +9.31631 +9.47925 +9.64579 +9.816 +9.98998 +10.1678 +10.3496 +10.5355 +10.7256 +10.92 +11.1187 +11.3219 +11.5298 +11.7424 +11.9599 +12.1824 +12.4101 +12.643 +12.8813 +13.1252 +13.3748 +13.6296 +13.8623 +14.0988 +14.3403 +14.5868 +14.8384 +15.0954 +15.3578 +15.6258 +15.8994 +16.1789 +16.4644 +16.756 +17.0538 +17.3581 +17.669 +17.9866 +18.3111 +18.6426 +18.9814 +19.3277 +19.6816 +20.0432 +20.4129 +20.7907 +21.177 +21.5719 +21.9756 +22.3883 +22.8104 +23.242 +23.6833 +24.1346 +24.5963 +25.0684 +25.5514 +26.0454 +26.5509 +27.068 +27.5971 +28.1385 +28.6925 +29.2594 +29.8396 +30.4335 +31.0414 +31.6636 +32.3007 +32.9528 +33.6206 +34.3043 +35.0045 +35.7215 +36.4558 +37.2079 +37.9784 +38.7676 +39.5761 +40.4045 +41.2532 +42.1229 +43.0142 +43.9276 +44.8638 +45.8233 +46.807 +47.8154 +48.8493 +49.9094 +50.9964 +52.1111 +53.2544 +54.427 +55.6298 +56.8683 +41661 +633.045 +346.659 +266.227 +223.927 +196.554 +176.898 +161.868 +149.88 +140.024 +21.5195 +0.00215694 +2.43154e-43 +2.10003e-42 +1.44651e-40 +6.56933e-42 +1.21399e-40 +2.36206e-41 +7.91283e-45 +2.04683e-40 +5.89359e-42 +2.76442e-42 +3.61194e-40 +3.07157e-41 +9.2069e-43 +1.01116e-40 +9.33868e-42 +5.60423e-41 +6.6519e-40 +1.1594e-41 +2.56979e-40 +1.90101e-40 +4.54802e-42 +1.06374e-41 +1.66679e-43 +5.8111e-42 +4.17348e-42 +3.08794e-40 +5.13465e-45 +1.15593e-41 +3.59185e-41 +6.948e-42 +4.92499e-40 +1.62813e-40 +1.31963e-40 +1.95016e-41 +2.27998e-41 +1.58137e-42 +6.17448e-41 +1.56788e-40 +3.95049e-41 +7.24157e-42 +1.11407e-41 +3.72994e-45 +1.33373e-41 +4.69951e-41 +8.34277e-43 +2.66886e-42 +3.28881e-41 +4.35862e-43 +1.7739e-42 +2.67447e-41 +1.36065e-41 +3.20544e-42 +1.74108e-40 +2.46728e-40 +3.80688e-40 +1.50018e-40 +4.04939e-41 +3.74557e-43 +6.21751e-43 +1.27329e-40 +1.85389e-43 +2.61013e-44 +1.01158e-40 +1.09686e-40 +4.33386e-41 +4.74192e-41 +1.41398e-43 +1.57999e-41 +7.47988e-41 +1.51605e-41 +6.07364e-42 +7.27727e-42 +2.74472e-43 +1.92711e-41 +1.49913e-44 +4.2214e-42 +2.02103e-41 +6.80289e-41 +1.38127e-44 +1.79476e-42 +6.39886e-41 +1.7074e-40 +1.54865e-40 +1.57116e-41 +1.13216e-43 +8.25469e-43 +1.8339e-43 +7.57434e-42 +2.09766e-41 +2.90337e-41 +3.5101e-41 +4.5503e-43 +1.62518e-43 +3.30495e-41 +2.08212e-06 +1.73505e-05 +6.00083e-05 +0.00014518 +0.00028896 +0.000508456 +0.000821844 +0.00124842 +0.00180865 +0.00252425 +0.00341819 +0.00451485 +0.00583999 +0.00742089 +0.00928637 +0.0114669 +0.0139948 +0.0169039 +0.0202302 +0.0240115 +0.028288 +0.0331016 +0.0384969 +0.0445208 +0.0512225 +0.0586542 +0.0668706 +0.0759294 +0.0858914 +0.0968205 +0.108784 +0.121853 +0.136101 +0.151607 +0.168454 +0.186728 +0.20652 +0.227926 +0.251046 +0.275987 +0.302859 +0.33178 +0.362873 +0.396265 +0.432093 +0.470499 +0.511633 +0.555652 +0.60272 +0.653012 +0.706709 +0.764002 +0.825091 +0.890189 +0.959516 +1.03331 +1.1118 +1.19526 +1.28395 +1.37815 +1.47816 +1.5843 +1.69689 +1.81628 +1.94281 +2.07689 +2.2189 +2.36926 +2.52842 +2.69683 +2.87497 +3.06337 +3.26256 +3.47309 +41661.1 +633.061 +346.665 +266.231 +223.93 +196.557 +176.901 +161.871 +149.883 +140.026 +21.5162 +0.00214896 +7.24361e-42 +1.10144e-42 +8.68883e-41 +3.08119e-41 +1.08506e-40 +3.01495e-42 +2.13419e-43 +6.02276e-42 +5.21635e-40 +1.74245e-41 +2.5958e-41 +1.12926e-39 +3.65637e-41 +2.16367e-40 +1.56382e-41 +2.37584e-41 +6.75591e-42 +8.98989e-42 +5.64734e-44 +1.13781e-41 +2.57627e-41 +4.99713e-41 +4.47615e-44 +4.35373e-40 +4.88396e-40 +2.02568e-40 +6.84043e-45 +1.4542e-40 +3.91128e-40 +1.13288e-41 +8.55898e-42 +6.12037e-43 +1.6858e-42 +4.92009e-40 +8.57876e-50 +5.62012e-43 +4.40145e-42 +1.06373e-40 +2.7396e-43 +2.68206e-40 +9.08015e-43 +3.95824e-42 +7.8881e-43 +7.72272e-43 +2.8012e-44 +2.66886e-42 +4.99577e-41 +1.05662e-40 +2.73136e-41 +2.75391e-41 +1.97421e-40 +1.66544e-42 +1.08027e-41 +3.07373e-42 +2.83946e-45 +1.22518e-41 +1.49979e-42 +1.97359e-43 +1.15073e-41 +2.71134e-42 +6.62192e-41 +1.96112e-44 +7.0132e-41 +1.99587e-41 +5.48804e-43 +1.40503e-41 +4.64473e-41 +1.68507e-42 +1.68531e-40 +7.75006e-43 +1.07152e-41 +1.24125e-41 +2.74239e-42 +1.05442e-42 +3.57186e-42 +1.17472e-43 +9.80331e-42 +2.47522e-42 +3.62909e-41 +3.18312e-41 +9.1374e-43 +2.72416e-41 +3.80066e-41 +4.21148e-44 +1.79689e-47 +2.10505e-43 +1.46712e-45 +2.74137e-42 +1.40911e-42 +1.46553e-42 +7.13e-42 +4.84473e-42 +1.62546e-43 +1.89712e-41 +1.56137e-43 +5.20549e-42 +1.57757e-41 +4.39167e-43 +2.65269e-42 +1.48615e-41 +1.65012e-41 +1.37475e-40 +1.17827e-40 +8.86855e-42 +4.51766e-42 +6.92128e-41 +1.17272e-40 +1.29595e-40 +2.39015e-40 +9.35747e-42 +4.96418e-42 +5.71505e-44 +7.00619e-45 +3.01646e-42 +6.3432e-42 +1.18888e-40 +4.03917e-41 +1.04499e-41 +5.69416e-42 +6.12696e-45 +1.38091e-41 +1.59037e-43 +9.69533e-41 +9.9652e-44 +1.22119e-40 +2.55012e-43 +1.27662e-42 +5.11568e-43 +2.11614e-44 +8.88853e-43 +1.07291e-42 +1.16198e-42 +8.40956e-44 +2.58937e-42 +2.95018e-46 +1.68904e-42 +6.24555e-43 +1.92342e-41 +3.42467e-44 +4.20283e-45 +7.24667e-43 +1.92112e-41 +6.36657e-41 +9.72624e-41 +2.11533e-42 +1.4063e-42 +1.19946e-41 +3.53714e-43 +1.66753e-43 +1.00793e-42 +2.26487e-46 +1.01017e-41 +9.55496e-43 +7.16779e-41 +2.56645e-44 +2.01735e-43 +9.24848e-42 +1.11163e-41 +3.76782e-42 +4.06356e-44 +3.19504e-43 +1.1631e-44 +6.02893e-43 +6.90322e-42 +6.47775e-46 +5.79783e-46 +2.03058e-42 +0 +41661.2 +633.079 +346.671 +266.235 +223.934 +196.561 +176.904 +161.874 +149.885 +140.028 +21.5123 +0.00213986 +7.01243e-42 +2.02662e-41 +6.89748e-44 +1.53192e-41 +3.479e-40 +8.07984e-45 +7.90415e-45 +6.02278e-42 +1.40842e-41 +8.23475e-48 +4.26625e-40 +2.53849e-42 +1.65416e-42 +2.99603e-41 +2.32421e-40 +9.13922e-42 +2.02797e-40 +7.00265e-41 +4.5213e-41 +8.39105e-43 +1.40532e-41 +1.5436e-43 +8.07272e-42 +1.24296e-42 +2.36411e-41 +3.26793e-41 +4.35916e-41 +2.77127e-42 +1.17247e-42 +1.30029e-43 +1.51574e-40 +6.4875e-43 +7.57742e-41 +4.33291e-41 +4.61259e-44 +1.14407e-43 +8.91107e-41 +3.00841e-43 +2.54399e-43 +1.36662e-41 +2.37334e-41 +1.96494e-41 +1.36302e-42 +3.79417e-42 +2.78318e-40 +9.23973e-40 +5.6301e-41 +3.48689e-42 +1.20084e-42 +1.38956e-41 +3.9524e-41 +8.1555e-44 +1.89299e-43 +1.80433e-41 +2.41612e-40 +1.42456e-45 +3.82482e-43 +6.12675e-42 +2.76848e-42 +6.89923e-44 +2.00237e-44 +5.85427e-41 +8.76666e-42 +3.30562e-43 +4.18131e-42 +1.15676e-45 +2.5501e-41 +2.17347e-45 +4.45657e-41 +9.15915e-42 +5.82394e-42 +3.45362e-45 +1.68554e-40 +3.64594e-42 +1.98814e-42 +1.17496e-43 +1.9083e-42 +9.60479e-42 +4.94577e-41 +1.16562e-40 +3.81131e-42 +3.05603e-41 +2.03859e-41 +8.59608e-43 +1.62153e-42 +9.63377e-42 +1.0712e-41 +5.25113e-42 +1.19624e-41 +4.03487e-41 +1.43633e-42 +9.98804e-42 +1.10378e-41 +2.75292e-43 +9.40522e-42 +2.33443e-42 +1.68756e-43 +7.32917e-42 +1.51597e-41 +2.70087e-41 +2.33045e-41 +1.09515e-41 +1.7459e-41 +8.13448e-43 +5.27992e-46 +6.25594e-42 +1.81182e-41 +3.04679e-41 +1.50755e-40 +3.91309e-41 +7.73033e-42 +3.93887e-42 +4.77459e-42 +1.07385e-43 +1.41338e-41 +2.46752e-42 +3.78143e-41 +3.50677e-42 +8.77384e-43 +2.51115e-44 +2.80124e-43 +3.87378e-46 +1.37726e-42 +5.51988e-43 +3.95852e-46 +5.79272e-42 +6.74724e-42 +3.34292e-42 +9.07071e-44 +3.15297e-41 +8.73032e-41 +6.85572e-43 +3.0622e-43 +7.7161e-42 +1.21145e-41 +8.21671e-42 +8.06566e-42 +1.78605e-44 +2.66675e-41 +7.63192e-42 +9.92862e-42 +2.52398e-41 +2.4783e-41 +6.4186e-42 +6.30311e-42 +1.23451e-43 +1.51812e-44 +1.14263e-42 +6.26907e-43 +7.57274e-46 +3.45898e-45 +5.94118e-43 +1.57599e-41 +1.67189e-42 +9.18562e-42 +2.01735e-43 +3.90229e-42 +2.73903e-41 +1.91425e-46 +7.07343e-42 +6.24031e-46 +3.57708e-42 +9.14612e-44 +3.85529e-42 +9.85186e-42 +8.68924e-44 +1.67592e-43 +4.30079e-41 +41661.2 +633.1 +346.677 +266.241 +223.938 +196.564 +176.907 +161.877 +149.888 +140.031 +21.508 +0.00212966 +7.01243e-42 +7.04969e-44 +5.94236e-43 +2.46697e-41 +1.15977e-41 +2.18102e-43 +8.85108e-40 +2.48722e-40 +4.1731e-42 +3.93603e-42 +6.15302e-41 +3.73633e-41 +5.89243e-41 +9.55055e-43 +6.69873e-41 +2.37586e-41 +0 +1.78395e-41 +1.10723e-41 +3.29045e-42 +2.13315e-41 +1.5436e-43 +3.08479e-42 +5.81114e-42 +5.68768e-42 +4.45359e-41 +1.50025e-40 +3.66957e-41 +3.06459e-41 +2.81268e-40 +3.01663e-40 +1.62813e-40 +1.68591e-42 +1.05369e-42 +2.27999e-41 +3.59689e-41 +3.12294e-41 +2.139e-41 +5.22482e-41 +5.76543e-42 +3.04786e-47 +3.75893e-41 +1.19662e-43 +1.52006e-41 +6.73813e-41 +1.02341e-41 +3.87369e-41 +9.41461e-41 +2.34906e-41 +8.25822e-43 +2.40205e-42 +1.93316e-43 +1.61253e-41 +1.58932e-40 +4.75861e-41 +3.20621e-41 +1.43296e-41 +2.66384e-45 +2.07419e-40 +9.33143e-42 +7.47179e-42 +4.67292e-42 +2.70044e-42 +8.7756e-43 +8.59463e-43 +5.42676e-42 +3.10375e-42 +7.90348e-42 +9.01194e-42 +3.29261e-49 +3.2254e-49 +1.04833e-45 +6.69582e-43 +8.12999e-42 +2.34215e-43 +1.84344e-45 +1.15082e-43 +4.12139e-41 +1.11074e-41 +4.94149e-41 +2.87224e-45 +4.7442e-41 +6.03528e-41 +2.04927e-41 +3.64145e-43 +0 +1.1737e-44 +2.64548e-41 +2.55862e-42 +3.29155e-43 +1.52118e-41 +4.18572e-41 +1.8284e-43 +6.71328e-42 +1.44187e-41 +5.40076e-42 +3.78714e-41 +0 +4.45353e-41 +2.37713e-41 +3.17602e-41 +5.41574e-41 +8.52333e-45 +1.33732e-40 +1.43897e-42 +3.81276e-42 +6.30208e-41 +1.23615e-40 +2.82746e-42 +1.04443e-42 +4.99642e-41 +1.00369e-41 +6.59447e-42 +1.08963e-48 +6.76917e-45 +3.72814e-41 +1.93613e-41 +1.21264e-41 +4.10308e-46 +5.9572e-43 +4.67527e-42 +2.19871e-42 +2.69618e-43 +1.50046e-40 +1.11948e-40 +1.17901e-45 +5.70304e-44 +1.72219e-43 +1.69073e-43 +2.22198e-42 +2.5432e-45 +6.85572e-43 +7.08872e-42 +8.25414e-44 +1.37644e-41 +2.14552e-41 +3.45897e-42 +1.41361e-41 +4.16679e-43 +1.96154e-43 +1.18152e-41 +1.99056e-41 +2.4783e-41 +3.45644e-42 +6.74701e-44 +1.65431e-42 +5.11877e-44 +1.43334e-41 +2.28433e-43 +2.98646e-43 +3.18934e-41 +1.5784e-43 +1.07776e-41 +8.21345e-42 +4.06973e-48 +9.20987e-41 +8.87474e-41 +9.57372e-43 +8.20735e-42 +1.2123e-44 +6.24031e-43 +3.19416e-42 +1.14326e-44 +3.03435e-43 +4.89783e-42 +1.25875e-42 +4.07003e-42 +0 +41661.3 +633.123 +346.685 +266.246 +223.943 +196.569 +176.911 +161.88 +149.892 +140.034 +21.5032 +0.00211836 +9.07541e-41 +7.48067e-41 +2.13625e-50 +1.18525e-41 +6.02729e-41 +1.0097e-39 +9.88018e-43 +8.92808e-41 +6.05654e-44 +4.08364e-42 +3.81808e-41 +5.67397e-44 +6.94832e-45 +5.11425e-41 +7.67286e-41 +9.63768e-42 +2.2357e-41 +5.75352e-40 +2.27592e-42 +3.71759e-41 +3.07686e-41 +2.08776e-41 +4.3566e-42 +3.41122e-41 +1.60038e-41 +9.3117e-40 +2.55891e-40 +1.64687e-43 +7.14633e-41 +2.24663e-40 +1.54452e-43 +1.94449e-40 +1.05657e-40 +2.75418e-41 +7.85891e-42 +1.14393e-43 +1.54821e-42 +9.33863e-42 +3.17999e-44 +1.81562e-40 +6.58338e-45 +8.8905e-43 +7.88786e-43 +8.60262e-42 +8.42267e-42 +1.25177e-41 +8.70305e-41 +2.99416e-40 +4.22887e-41 +3.17474e-41 +1.97421e-40 +6.94736e-42 +2.03855e-40 +7.66494e-41 +3.9849e-42 +6.38835e-42 +3.40071e-43 +5.07894e-42 +2.62028e-45 +9.33156e-42 +9.34048e-43 +1.25486e-42 +3.07547e-41 +2.64242e-41 +1.68126e-41 +1.64676e-41 +1.41388e-43 +1.19313e-42 +1.65058e-42 +2.91717e-42 +1.10896e-41 +1.04833e-45 +2.74506e-43 +2.68667e-42 +5.05816e-44 +2.29421e-43 +1.12016e-41 +1.32651e-41 +5.65856e-44 +9.32497e-43 +7.04539e-42 +1.63635e-41 +1.78825e-41 +1.21401e-42 +9.78023e-44 +3.44329e-42 +6.47149e-42 +2.02004e-42 +1.12724e-44 +9.77426e-42 +5.9699e-42 +1.12617e-41 +1.8284e-43 +1.4323e-41 +2.38156e-42 +7.62738e-42 +1.26205e-40 +6.18993e-46 +6.13081e-41 +2.70087e-41 +6.08251e-41 +1.20181e-40 +6.22321e-41 +3.4229e-44 +5.58367e-42 +8.52559e-42 +1.29446e-41 +7.5187e-43 +4.4176e-41 +1.0446e-42 +2.38797e-43 +4.86941e-42 +7.037e-45 +1.20741e-42 +1.05306e-40 +2.14312e-41 +4.15086e-43 +1.1171e-42 +2.96069e-42 +2.90458e-42 +4.80323e-44 +5.89026e-45 +3.96372e-41 +1.30406e-41 +3.5603e-46 +9.59989e-44 +2.76111e-45 +5.57738e-42 +3.67e-46 +1.09338e-42 +3.179e-43 +1.53285e-42 +8.40267e-43 +3.00643e-43 +9.95809e-43 +7.43449e-42 +5.2911e-42 +7.662e-43 +1.87918e-42 +3.95567e-42 +8.91744e-43 +1.47986e-41 +5.77923e-41 +3.12868e-44 +2.52295e-46 +6.19077e-42 +4.92469e-42 +7.62094e-42 +3.81436e-44 +6.05819e-42 +7.22225e-42 +5.96152e-44 +6.97066e-42 +2.88883e-42 +1.19781e-42 +1.39038e-41 +4.35209e-42 +3.04361e-45 +4.13478e-44 +1.09753e-42 +3.44142e-42 +1.1631e-44 +2.24276e-44 +7.40809e-44 +4.75305e-44 +5.72777e-46 +7.03931e-44 +0 +41661.4 +633.148 +346.693 +266.253 +223.949 +196.573 +176.916 +161.884 +149.895 +140.038 +21.4979 +0.00210598 +5.76348e-43 +6.86141e-42 +0 +6.5693e-42 +2.41195e-40 +3.01495e-42 +6.15487e-42 +5.64727e-41 +6.05654e-44 +2.21152e-41 +2.16414e-41 +1.53197e-42 +6.80212e-41 +2.99604e-41 +9.33876e-42 +2.37585e-41 +4.71662e-43 +7.98299e-41 +6.0976e-42 +5.43806e-40 +1.67234e-41 +9.59046e-41 +8.28894e-42 +7.19768e-41 +2.95518e-42 +1.00022e-41 +2.62894e-42 +2.57323e-42 +8.25346e-41 +8.07876e-41 +2.34902e-40 +3.36878e-41 +9.49569e-41 +2.41032e-41 +1.29232e-41 +7.32114e-45 +7.80621e-41 +3.16173e-42 +6.66892e-41 +5.76543e-42 +6.39184e-41 +3.95824e-42 +2.7057e-43 +2.78407e-42 +3.52774e-41 +7.40404e-43 +1.41427e-40 +1.44934e-41 +3.41434e-42 +4.66741e-42 +2.74378e-47 +4.47524e-42 +4.15565e-42 +3.4076e-40 +2.41611e-40 +1.46324e-41 +3.57538e-41 +1.45229e-41 +1.15073e-41 +3.58966e-42 +3.51897e-43 +7.31783e-42 +1.75257e-41 +2.36128e-45 +8.59536e-43 +1.91477e-41 +2.48514e-42 +1.34804e-41 +1.25738e-40 +1.81514e-41 +1.12156e-42 +7.43774e-43 +9.93259e-42 +4.39812e-42 +1.45879e-42 +1.34007e-41 +4.85503e-44 +3.80584e-43 +1.34417e-42 +2.37616e-42 +1.40685e-41 +8.90969e-41 +4.6487e-41 +1.75228e-41 +2.4226e-49 +7.87667e-46 +2.06322e-43 +3.02286e-41 +2.364e-41 +1.17239e-41 +1.52248e-42 +4.95281e-43 +1.01262e-42 +9.92369e-43 +1.2491e-42 +6.10183e-41 +2.63465e-44 +7.52966e-44 +1.2755e-40 +4.44388e-41 +7.52852e-41 +3.56089e-41 +2.54511e-41 +1.46877e-43 +1.29928e-48 +1.01203e-41 +3.23217e-44 +7.27021e-42 +2.38194e-42 +7.69584e-41 +5.48487e-41 +1.11511e-41 +6.59447e-42 +2.2526e-43 +3.1444e-43 +7.42975e-41 +9.11841e-43 +2.06186e-41 +1.34777e-42 +6.51683e-44 +7.56336e-42 +2.19871e-42 +1.51873e-41 +3.19761e-41 +9.78383e-44 +9.58579e-43 +4.28478e-44 +5.81238e-43 +2.65879e-45 +3.74985e-43 +6.04357e-41 +2.65773e-41 +3.0622e-43 +7.44704e-49 +3.36573e-41 +1.65272e-41 +5.59562e-42 +9.53385e-46 +3.43973e-44 +1.13698e-43 +1.95672e-41 +1.32991e-43 +6.87455e-45 +3.97543e-45 +1.0082e-41 +1.55374e-44 +6.50142e-43 +3.69801e-45 +1.15717e-41 +7.57644e-43 +7.80485e-46 +2.99368e-42 +4.1873e-42 +1.5495e-42 +1.52124e-41 +6.15015e-43 +1.46872e-41 +2.22226e-41 +1.46949e-41 +2.8707e-43 +4.54919e-43 +1.93511e-42 +8.02775e-43 +5.92647e-43 +6.49054e-42 +3.7276e-42 +1.14483e-42 +0 +41661.5 +633.176 +346.702 +266.26 +223.954 +196.579 +176.92 +161.888 +149.899 +140.041 +21.4922 +0.00209253 +7.20435e-44 +1.15821e-40 +0 +6.56939e-42 +3.18762e-40 +1.77989e-39 +1.11049e-41 +2.72932e-40 +1.63482e-42 +9.25792e-43 +5.45717e-41 +4.41826e-41 +5.55408e-44 +8.49069e-43 +4.25414e-40 +5.06551e-42 +2.04722e-40 +4.85162e-42 +8.56669e-42 +3.48579e-40 +6.19812e-42 +1.36241e-42 +1.6706e-41 +1.28102e-40 +1.02189e-41 +6.24763e-40 +6.89162e-40 +2.97884e-42 +3.83074e-42 +3.0818e-43 +1.37719e-40 +1.06118e-41 +2.8474e-40 +4.64904e-40 +3.37017e-42 +1.71688e-42 +7.53143e-42 +1.18635e-40 +8.54024e-41 +8.40564e-43 +3.81402e-45 +5.52611e-42 +3.19233e-41 +5.29701e-42 +1.04526e-41 +1.88987e-42 +1.05891e-40 +4.62007e-43 +1.41915e-41 +6.06392e-41 +4.33804e-43 +3.9703e-41 +6.51749e-40 +3.44949e-40 +1.55637e-40 +2.22207e-44 +3.82715e-43 +7.19588e-44 +1.3275e-41 +2.8741e-42 +5.85386e-41 +1.90835e-42 +2.35237e-41 +2.36128e-45 +6.87585e-42 +1.75626e-42 +3.36977e-41 +8.0776e-43 +1.69762e-44 +4.77574e-42 +6.07351e-42 +6.99754e-42 +1.2496e-43 +8.43483e-42 +1.49872e-44 +1.0006e-41 +2.52637e-42 +5.26066e-42 +1.73954e-41 +5.54424e-44 +4.29762e-41 +2.98762e-41 +8.67408e-42 +1.24724e-44 +2.91283e-42 +3.23414e-43 +2.0612e-42 +1.61756e-42 +1.85209e-41 +5.15608e-43 +4.43491e-41 +1.33686e-41 +7.706e-43 +3.34205e-43 +1.81453e-41 +4.56998e-43 +3.24057e-41 +1.0411e-42 +1.67562e-41 +4.76501e-41 +9.97512e-42 +4.5798e-41 +5.66355e-41 +3.90022e-43 +2.68601e-43 +3.74954e-43 +6.13445e-42 +3.04677e-41 +5.16191e-42 +7.2301e-43 +1.38902e-41 +5.56309e-42 +8.82578e-42 +2.81938e-44 +4.5928e-42 +5.61199e-41 +3.5349e-41 +1.1171e-42 +2.91182e-43 +4.89619e-44 +2.80124e-43 +4.58668e-42 +8.12553e-43 +1.85787e-43 +2.29425e-44 +3.47266e-42 +7.53215e-43 +3.58161e-42 +7.64106e-42 +6.37583e-42 +1.42805e-42 +1.16198e-42 +6.72308e-42 +1.30023e-44 +5.09792e-43 +2.89591e-43 +7.29896e-42 +3.48839e-41 +6.02311e-43 +3.4908e-42 +1.13239e-41 +1.78714e-41 +1.95455e-41 +1.2823e-43 +1.96417e-42 +1.23663e-43 +1.52593e-44 +1.04474e-42 +2.64439e-43 +4.84655e-44 +6.02375e-45 +3.80609e-42 +5.46133e-42 +4.58736e-42 +2.5669e-41 +4.46732e-41 +5.0896e-42 +5.34806e-43 +2.03876e-42 +4.14392e-43 +8.62734e-42 +2.5123e-42 +9.80207e-42 +5.23127e-42 +2.10077e-42 +2.1588e-44 +3.61513e-44 +0 +41661.6 +633.206 +346.712 +266.267 +223.961 +196.584 +176.925 +161.893 +149.903 +140.045 +21.4859 +0.00207802 +7.20435e-44 +4.04296e-40 +1.86238e-42 +3.14893e-42 +5.2832e-40 +8.9332e-40 +1.90183e-41 +3.96007e-42 +1.44306e-41 +8.33112e-42 +5.79972e-44 +2.1178e-41 +7.39213e-44 +4.95929e-41 +2.42769e-41 +2.86936e-41 +1.90096e-41 +8.18944e-41 +1.64635e-43 +3.81932e-40 +4.54802e-42 +1.36552e-40 +1.63469e-40 +6.32096e-41 +4.55015e-41 +4.08497e-42 +2.2649e-41 +4.02178e-44 +1.7967e-41 +1.69105e-41 +3.54904e-41 +1.10216e-40 +1.74401e-40 +6.21143e-42 +5.15442e-40 +9.7445e-42 +2.28718e-42 +3.24827e-44 +5.58457e-42 +3.1132e-47 +5.64462e-42 +1.89796e-41 +5.13067e-42 +1.26165e-40 +6.5884e-41 +2.7419e-44 +1.6724e-40 +6.90821e-41 +8.68664e-44 +1.38958e-41 +1.36064e-41 +5.23546e-45 +5.63942e-42 +6.22307e-41 +1.5464e-41 +8.93199e-41 +3.57536e-41 +2.83903e-44 +9.73814e-43 +3.58966e-42 +8.78767e-42 +2.46979e-41 +6.225e-41 +5.61594e-41 +5.97182e-41 +2.96458e-41 +3.10418e-42 +3.63054e-41 +1.79955e-41 +2.72934e-41 +1.01367e-40 +8.78911e-42 +1.21597e-41 +2.68878e-43 +1.50036e-44 +5.48039e-42 +3.01689e-41 +5.26055e-42 +1.2997e-41 +3.65308e-43 +1.17294e-41 +3.87874e-41 +3.34516e-41 +8.49957e-42 +9.05724e-43 +1.50874e-41 +3.08463e-41 +2.64573e-41 +4.94832e-42 +1.39167e-41 +1.01907e-41 +6.79168e-43 +1.30014e-42 +1.01948e-41 +6.85404e-41 +8.81456e-41 +4.23545e-41 +3.51334e-42 +2.75512e-41 +2.48205e-41 +5.64022e-42 +9.25692e-41 +6.81867e-44 +1.47259e-43 +1.48787e-41 +2.71148e-41 +3.73546e-41 +1.23615e-40 +9.4589e-41 +3.27649e-41 +4.31856e-42 +3.33415e-43 +1.111e-48 +6.08058e-42 +5.39163e-47 +2.41429e-41 +1.77923e-41 +2.50074e-43 +2.02257e-41 +2.68664e-42 +2.80124e-43 +1.93095e-43 +1.01635e-43 +1.28495e-45 +2.59634e-43 +3.07843e-41 +8.80004e-42 +1.72219e-43 +3.3008e-43 +5.06134e-45 +4.96718e-45 +1.33769e-44 +3.26137e-42 +1.01489e-42 +2.95343e-43 +1.98691e-42 +7.67546e-42 +5.19341e-42 +4.54285e-42 +3.27541e-42 +5.80209e-43 +1.31355e-41 +1.64073e-44 +1.72316e-41 +5.30326e-44 +2.41115e-46 +5.20248e-43 +5.10962e-43 +6.26819e-43 +1.63793e-43 +1.4106e-44 +1.58054e-43 +2.12705e-43 +2.78142e-43 +1.74907e-41 +1.47264e-43 +9.24927e-42 +4.208e-41 +1.22512e-44 +1.03237e-41 +6.64469e-42 +1.54809e-41 +1.42908e-45 +2.13651e-42 +2.98524e-43 +6.95438e-43 +2.60761e-42 +0 +41661.8 +633.238 +346.723 +266.275 +223.968 +196.59 +176.931 +161.898 +149.908 +140.05 +21.4792 +0.00206247 +9.00544e-45 +5.2269e-40 +1.2123e-42 +4.92778e-40 +1.04431e-39 +7.86243e-40 +3.33114e-40 +4.81821e-41 +2.871e-40 +0 +1.01908e-42 +2.03078e-41 +8.67625e-43 +5.43381e-47 +1.90326e-41 +1.55393e-40 +1.33848e-40 +6.23728e-45 +2.27592e-42 +8.38424e-42 +8.21272e-43 +1.80377e-40 +8.28894e-42 +8.11281e-42 +4.17353e-42 +4.08497e-42 +1.29163e-41 +3.91377e-42 +8.06148e-41 +1.6518e-42 +1.54452e-43 +7.9728e-45 +6.72365e-41 +2.32909e-41 +9.2988e-41 +1.48787e-41 +3.52116e-41 +4.56751e-42 +2.18115e-40 +9.29596e-41 +2.7817e-41 +4.19584e-42 +7.0293e-41 +1.22634e-42 +2.80043e-44 +2.03142e-42 +6.45952e-41 +1.81167e-42 +3.619e-42 +2.01617e-43 +1.01079e-43 +1.58919e-45 +4.15958e-43 +1.80441e-41 +7.4385e-43 +9.10158e-44 +1.38412e-41 +7.95418e-42 +4.50801e-45 +2.4344e-41 +1.24704e-40 +9.14729e-43 +1.63022e-40 +3.15539e-40 +4.97435e-43 +1.0176e-40 +1.54499e-40 +8.5052e-41 +1.35698e-43 +3.16713e-41 +6.66503e-44 +8.78911e-42 +3.72208e-42 +1.62893e-40 +2.34175e-40 +9.39968e-43 +2.02277e-42 +6.57624e-43 +2.4306e-43 +1.44067e-43 +3.58112e-43 +2.53445e-42 +2.66938e-41 +1.32926e-43 +2.91316e-42 +3.92457e-43 +7.51372e-43 +1.1705e-44 +9.97311e-42 +4.12487e-42 +8.66194e-44 +1.49091e-41 +1.31029e-41 +5.37063e-41 +4.38658e-42 +1.72017e-42 +1.2097e-41 +3.86181e-44 +1.29628e-41 +5.36143e-42 +1.73015e-42 +1.03542e-41 +2.3388e-41 +1.44403e-41 +9.06314e-43 +3.29072e-41 +2.13109e-43 +2.42882e-42 +4.17751e-42 +1.02684e-40 +7.28471e-42 +1.54306e-42 +9.69274e-44 +4.88962e-46 +6.3432e-42 +4.81897e-42 +4.44733e-41 +3.96205e-41 +4.27927e-41 +3.91695e-46 +4.67527e-42 +2.74816e-43 +4.62314e-41 +6.0374e-41 +9.76946e-43 +1.17901e-42 +9.36833e-45 +1.96168e-42 +1.22918e-42 +2.07313e-41 +1.85399e-42 +4.96092e-45 +3.0622e-43 +2.22926e-42 +3.28017e-46 +2.89591e-46 +5.55227e-43 +4.24432e-43 +9.2466e-43 +5.29515e-42 +1.5407e-42 +1.78726e-41 +2.02483e-41 +1.60013e-44 +5.9888e-42 +1.23451e-43 +1.21241e-43 +3.09554e-43 +1.12229e-42 +0 +2.76719e-44 +1.06374e-42 +4.59442e-44 +4.1132e-42 +1.49879e-43 +1.38412e-42 +1.36005e-42 +9.57372e-43 +9.69625e-42 +9.63215e-44 +1.47919e-42 +1.24652e-42 +1.14326e-44 +2.42748e-42 +2.99207e-43 +9.31242e-42 +1.37169e-45 +0 +41661.9 +633.273 +346.734 +266.284 +223.975 +196.597 +176.936 +161.903 +149.913 +140.054 +21.472 +0.00204589 +2.63122e-40 +2.88766e-43 +5.51836e-43 +2.2781e-43 +3.01494e-41 +6.28994e-42 +1.88813e-40 +0 +9.94843e-41 +9.48967e-41 +2.70517e-42 +2.07229e-40 +4.32371e-41 +5.03225e-43 +4.25413e-43 +2.46962e-41 +8.95181e-43 +1.17264e-40 +3.32428e-41 +1.4359e-41 +6.74195e-41 +1.37542e-41 +7.86029e-42 +4.26403e-42 +4.55019e-41 +1.91598e-41 +2.16398e-40 +4.28124e-40 +1.17243e-42 +2.65501e-42 +1.7593e-42 +4.64978e-41 +3.5171e-42 +4.3329e-41 +1.90907e-41 +1.81652e-40 +1.8295e-41 +1.51564e-42 +2.35792e-40 +4.12986e-42 +8.76249e-42 +1.31623e-40 +4.67516e-40 +4.46916e-40 +9.07842e-41 +2.7419e-44 +8.01633e-41 +1.91926e-40 +8.4348e-43 +3.17474e-41 +3.46986e-42 +6.35059e-41 +2.30368e-42 +1.27761e-41 +1.54631e-41 +1.0917e-40 +1.58884e-40 +1.17502e-41 +2.93215e-41 +6.10325e-41 +8.78751e-42 +8.03054e-44 +1.49528e-41 +5.40723e-42 +3.51227e-41 +7.39054e-44 +7.23906e-41 +1.28258e-42 +2.97802e-42 +6.52944e-43 +2.86044e-43 +3.45362e-45 +7.4044e-41 +2.14926e-41 +2.63585e-43 +1.0881e-42 +5.674e-41 +1.09754e-41 +6.55352e-42 +3.11192e-41 +2.1022e-48 +1.22258e-41 +8.09589e-42 +5.11746e-44 +2.21938e-41 +9.32622e-42 +4.61485e-43 +1.01769e-41 +1.26799e-41 +1.8152e-41 +6.41746e-42 +1.29116e-40 +1.82661e-42 +3.8055e-42 +5.26421e-41 +4.32061e-41 +3.11261e-41 +4.13168e-42 +1.99296e-45 +6.16437e-42 +8.86749e-45 +2.38552e-44 +8.29627e-43 +5.31532e-42 +3.05823e-42 +2.11135e-41 +2.87713e-41 +5.81617e-41 +2.16889e-41 +1.22048e-41 +7.28439e-45 +1.13282e-48 +3.95137e-41 +2.50968e-41 +6.73953e-45 +1.89274e-41 +3.07696e-42 +1.89929e-41 +4.25261e-42 +1.9244e-42 +2.64835e-41 +4.71221e-41 +2.53678e-42 +2.6906e-42 +1.06065e-41 +1.20091e-43 +4.1715e-42 +7.26547e-41 +7.25186e-43 +8.746e-45 +3.179e-46 +3.89998e-44 +5.38212e-42 +6.60761e-43 +2.36015e-42 +7.94638e-43 +4.91229e-43 +3.92396e-41 +8.97852e-42 +3.58339e-43 +6.44093e-42 +3.45446e-43 +5.51643e-44 +1.82264e-43 +1.58214e-44 +1.92892e-45 +1.7544e-41 +2.57219e-41 +2.11604e-42 +1.15079e-43 +2.80364e-44 +3.60241e-41 +1.70164e-45 +2.22514e-42 +1.32306e-44 +1.2911e-41 +2.48874e-44 +1.55833e-45 +1.39738e-43 +1.20402e-41 +1.85711e-43 +7.45662e-43 +1.90383e-42 +5.92647e-43 +1.00812e-42 +1.69712e-43 +4.06949e-42 +5.37598e-42 +41662 +633.31 +346.746 +266.293 +223.983 +196.603 +176.943 +161.909 +149.918 +140.059 +21.4644 +0.00202831 +9.00544e-45 +1.90328e-42 +8.62185e-42 +2.01527e-40 +1.38496e-40 +7.86243e-40 +8.88381e-41 +8.20792e-42 +5.35703e-41 +4.08362e-42 +1.89993e-42 +7.55377e-44 +7.80734e-42 +9.54263e-42 +1.26736e-41 +9.63768e-42 +1.2138e-41 +2.18801e-41 +1.05367e-44 +4.64703e-42 +2.25533e-40 +2.13362e-42 +8.32894e-41 +1.03063e-40 +4.40601e-47 +3.94996e-41 +1.18095e-41 +2.64767e-41 +4.08619e-42 +2.39976e-40 +3.77079e-44 +4.89712e-42 +1.42515e-40 +4.45556e-41 +1.6154e-42 +1.5815e-42 +2.65445e-43 +3.05724e-41 +5.22482e-41 +5.47265e-43 +6.58338e-45 +4.12816e-43 +5.1347e-43 +8.9938e-42 +4.14896e-41 +2.19412e-43 +3.77497e-42 +7.84907e-41 +6.13484e-42 +4.35824e-44 +2.47047e-44 +2.35207e-42 +6.49297e-44 +2.45896e-41 +9.96146e-42 +2.16287e-42 +3.82166e-42 +2.13107e-44 +3.42908e-41 +1.12698e-41 +7.31131e-41 +2.46979e-41 +2.65504e-43 +1.88076e-44 +1.18707e-45 +5.91243e-43 +8.24854e-43 +5.61218e-41 +2.93026e-41 +6.80682e-44 +2.28798e-42 +1.55189e-42 +4.91007e-42 +2.68695e-42 +5.14244e-42 +2.79949e-41 +2.80674e-42 +1.76206e-42 +5.04338e-41 +1.08241e-40 +2.1022e-48 +1.29897e-44 +2.74931e-45 +9.9779e-44 +7.82419e-43 +4.20603e-41 +3.50471e-41 +2.02025e-42 +4.9487e-42 +8.83802e-47 +4.75334e-42 +1.49091e-41 +4.26762e-44 +2.43081e-42 +8.51223e-43 +3.20964e-43 +3.11267e-41 +9.48521e-41 +9.22666e-45 +7.2362e-41 +3.30977e-42 +1.20272e-43 +2.45042e-42 +1.17409e-41 +9.06314e-43 +3.54369e-41 +4.44279e-41 +2.88315e-42 +1.80525e-42 +1.34885e-41 +1.02424e-42 +1.87291e-42 +1.89999e-43 +9.66809e-43 +1.18762e-43 +1.16486e-43 +7.29473e-42 +1.4634e-41 +2.91083e-43 +9.11116e-41 +3.31043e-42 +1.35488e-41 +3.69847e-46 +3.62866e-46 +7.81557e-42 +2.40766e-41 +7.52581e-42 +3.36364e-43 +0 +1.88914e-42 +2.03456e-44 +2.89014e-42 +8.26894e-42 +1.75287e-42 +9.95687e-43 +2.14552e-41 +2.63268e-42 +1.79833e-44 +1.76548e-44 +7.38084e-43 +3.31566e-44 +2.86768e-41 +4.47508e-42 +3.12525e-44 +2.45791e-43 +2.41115e-43 +2.36799e-43 +1.27617e-41 +6.16843e-42 +6.16037e-43 +2.45058e-46 +1.48553e-42 +1.04542e-42 +1.02668e-42 +2.28281e-46 +1.86873e-42 +6.86026e-44 +3.36599e-43 +1.53308e-42 +1.09716e-42 +5.91813e-46 +1.68304e-42 +2.38627e-43 +6.02305e-44 +3.1969e-41 +2.25886e-43 +1.09735e-44 +0 +41662.2 +633.349 +346.759 +266.303 +223.991 +196.611 +176.949 +161.915 +149.924 +140.064 +21.4562 +0.00200975 +2.84162e-40 +9.90364e-41 +6.89748e-44 +8.50192e-41 +6.11634e-43 +5.98455e-40 +3.33114e-40 +1.1459e-41 +2.76426e-41 +3.12134e-40 +1.38186e-41 +3.91062e-42 +1.59635e-41 +5.43381e-44 +2.30295e-40 +5.6867e-41 +4.95738e-42 +2.32555e-42 +4.74838e-42 +4.49344e-41 +1.53108e-42 +1.20184e-40 +8.329e-41 +7.95474e-41 +1.53462e-41 +4.08492e-42 +1.9165e-42 +9.58267e-42 +1.13148e-41 +1.43797e-41 +1.40747e-41 +4.64978e-41 +1.17132e-40 +3.32894e-41 +1.26455e-40 +2.71228e-43 +5.73361e-44 +3.05724e-41 +9.14234e-42 +2.12156e-41 +8.36803e-44 +1.22275e-43 +5.13049e-42 +1.06761e-41 +4.91818e-42 +5.43493e-49 +1.00204e-41 +2.62862e-44 +6.13431e-42 +6.00653e-42 +1.01123e-43 +4.24426e-42 +1.84259e-41 +1.48296e-42 +2.83685e-42 +4.87788e-43 +8.91319e-44 +1.65946e-41 +1.06198e-40 +5.37169e-41 +4.19823e-41 +6.3558e-41 +6.2929e-43 +3.66958e-42 +1.7338e-41 +5.91243e-43 +1.13726e-40 +3.46307e-41 +4.66359e-44 +4.7761e-42 +7.14304e-42 +1.02018e-42 +2.74461e-43 +2.91709e-41 +5.05856e-41 +4.81131e-43 +2.02269e-42 +1.37214e-42 +1.38696e-44 +8.6058e-42 +1.86257e-41 +2.80578e-42 +3.43831e-43 +2.73947e-43 +9.05499e-43 +5.25754e-42 +1.62252e-43 +1.01769e-41 +2.46462e-45 +1.94298e-43 +8.15255e-41 +4.95281e-43 +4.85934e-43 +1.7832e-44 +8.48361e-41 +4.32061e-41 +6.54316e-42 +4.46684e-42 +3.78573e-44 +1.13064e-42 +1.69074e-41 +4.90303e-41 +3.62372e-41 +3.66838e-42 +3.61419e-41 +2.16914e-43 +1.87829e-42 +3.1857e-44 +1.12237e-41 +2.00555e-43 +1.07921e-41 +4.57204e-43 +7.50454e-45 +1.85892e-43 +5.41534e-44 +2.07931e-42 +2.1283e-43 +5.62811e-42 +1.6362e-42 +6.76849e-43 +5.31199e-42 +1.2723e-42 +5.11276e-42 +2.90292e-45 +1.39934e-41 +1.14483e-41 +1.75806e-43 +9.08184e-42 +5.80148e-42 +2.66291e-45 +2.31749e-43 +1.99679e-44 +2.101e-42 +5.19368e-43 +2.18587e-41 +1.35112e-41 +7.80054e-43 +1.79833e-44 +1.40515e-43 +1.7216e-41 +1.7018e-44 +4.55825e-42 +4.47508e-42 +1.2801e-43 +1.58214e-44 +1.92945e-42 +1.16384e-42 +4.0877e-42 +1.82746e-45 +3.87724e-43 +1.60676e-43 +2.63434e-42 +4.21618e-48 +1.52341e-43 +8.41336e-43 +4.435e-43 +1.58756e-42 +3.37627e-43 +1.31458e-42 +5.91534e-41 +5.51838e-42 +6.53362e-42 +1.52169e-41 +2.46906e-41 +3.7287e-44 +2.34609e-42 +4.72692e-45 +0 +41615.9 +633.031 +346.67 +266.255 +223.96 +196.588 +176.931 +161.9 +149.912 +140.054 +21.4253 +0.00199576 +2.2236e-43 +2.16781e-43 +6.35282e-41 +9.08043e-40 +1.36726e-40 +3.43685e-42 +4.54164e-41 +4.2154e-41 +1.81037e-43 +2.89796e-40 +9.85812e-40 +4.03027e-40 +1.63229e-43 +1.59063e-43 +7.34956e-40 +9.94618e-41 +3.5077e-41 +4.69989e-42 +2.29605e-40 +2.47259e-40 +3.9904e-41 +1.81622e-40 +1.26097e-43 +9.09251e-42 +1.49468e-41 +3.14594e-42 +3.38149e-42 +2.66086e-40 +1.89366e-42 +3.44103e-42 +2.43747e-41 +1.24532e-44 +8.84423e-42 +1.6607e-41 +1.61892e-42 +8.98281e-44 +5.63268e-45 +1.49535e-41 +6.14523e-42 +1.74521e-41 +1.38352e-42 +1.34743e-42 +2.4208e-40 +1.27741e-41 +1.16405e-40 +2.57571e-41 +1.81496e-42 +1.43132e-44 +7.97002e-42 +1.09146e-42 +2.47733e-43 +1.03548e-42 +1.13714e-48 +4.47089e-43 +3.97282e-40 +1.275e-40 +5.16046e-44 +2.2061e-41 +2.69836e-41 +3.0501e-42 +8.15045e-42 +1.48102e-42 +1.60725e-40 +4.31849e-40 +1.36744e-42 +4.31172e-41 +3.16497e-43 +2.46538e-42 +3.00062e-43 +2.48889e-41 +9.779e-44 +9.34759e-43 +2.7997e-41 +2.10036e-42 +7.61586e-42 +9.78125e-42 +5.23334e-44 +2.86992e-42 +1.26044e-41 +3.86308e-43 +3.77225e-43 +1.69542e-42 +5.5695e-42 +1.60625e-42 +2.59271e-41 +9.75821e-44 +3.20041e-43 +2.25358e-44 +4.73886e-42 +1.35824e-41 +3.41539e-41 +2.53065e-42 +2.48062e-41 +7.15466e-42 +2.95833e-48 +2.6902e-41 +6.59654e-42 +4.64663e-43 +1.07147e-42 +0 +1.01606e-42 +6.33269e-44 +2.11035e-41 +7.70122e-41 +3.90394e-44 +5.16794e-42 +4.73203e-41 +2.31077e-43 +1.24445e-42 +1.24733e-44 +2.12409e-43 +1.65226e-41 +2.73251e-42 +5.19593e-43 +4.43888e-44 +2.01063e-41 +1.80312e-42 +6.39764e-43 +2.31674e-42 +4.483e-41 +2.11611e-41 +2.05968e-41 +1.22552e-42 +7.49829e-42 +1.03881e-41 +3.37723e-44 +4.99655e-43 +1.31263e-44 +1.03923e-42 +1.24279e-41 +9.67235e-44 +2.23454e-43 +2.32603e-41 +2.82973e-42 +3.21017e-42 +8.45861e-44 +4.74801e-44 +1.24786e-42 +2.46914e-42 +8.53147e-42 +1.22305e-41 +8.94106e-42 +1.10493e-43 +2.28473e-43 +1.67323e-41 +2.37316e-42 +1.6837e-42 +1.54068e-41 +3.32357e-42 +1.55041e-42 +7.06618e-45 +2.51812e-43 +2.01173e-45 +4.18444e-42 +1.13838e-42 +7.38388e-42 +6.02908e-43 +2.1422e-43 +8.49912e-43 +4.36043e-44 +8.04447e-43 +2.54319e-43 +1.86712e-43 +1.67491e-42 +1.28968e-43 +5.78887e-43 +2.64105e-47 +2.56953e-47 +41606.2 +632.916 +346.635 +266.233 +223.942 +196.574 +176.919 +161.89 +149.902 +140.045 +21.429 +0.00201605 +1.69417e-41 +1.6221e-42 +2.54932e-40 +1.81793e-41 +3.70621e-40 +1.37248e-41 +8.22022e-43 +2.88561e-42 +3.43812e-41 +6.07202e-42 +4.80628e-42 +2.59375e-42 +1.2105e-42 +5.29762e-41 +1.00738e-40 +4.15024e-44 +2.06246e-41 +3.98558e-42 +1.63701e-42 +5.80806e-43 +6.86111e-43 +5.59309e-41 +6.43227e-41 +2.43307e-41 +8.77164e-43 +1.1713e-42 +1.38714e-41 +6.47137e-42 +1.40165e-41 +1.59874e-42 +8.18712e-42 +1.24606e-43 +4.15504e-41 +6.46957e-42 +0 +7.69548e-42 +1.44162e-41 +2.06523e-40 +3.38026e-41 +1.10739e-41 +5.34668e-42 +3.11446e-41 +3.11948e-43 +1.47478e-40 +3.25972e-41 +3.33976e-42 +3.85753e-42 +6.26334e-41 +1.71785e-42 +1.81449e-41 +2.12935e-41 +7.20533e-44 +1.83753e-41 +4.39396e-45 +1.14618e-43 +5.02433e-41 +1.10329e-42 +3.93398e-45 +1.60328e-42 +9.48969e-41 +1.35168e-40 +5.7983e-41 +5.17275e-42 +1.11635e-44 +2.05969e-43 +8.58487e-42 +1.28416e-42 +1.00162e-44 +4.37681e-42 +1.63188e-41 +4.13874e-42 +3.65745e-41 +7.0647e-43 +2.89634e-42 +4.75105e-42 +3.59647e-42 +3.17853e-41 +3.50814e-44 +0 +1.54031e-42 +3.02139e-41 +1.02244e-42 +2.42665e-43 +2.77546e-41 +4.96836e-44 +1.14327e-43 +5.68019e-41 +0 +1.68299e-45 +1.93688e-41 +1.23782e-41 +7.61746e-41 +1.06588e-42 +1.13643e-41 +5.8243e-43 +6.88134e-43 +1.38848e-41 +1.58392e-43 +1.36911e-45 +4.03853e-42 +1.45507e-43 +1.41391e-43 +2.97339e-44 +5.40365e-41 +1.26124e-41 +2.76359e-42 +9.72565e-42 +1.18972e-43 +3.96919e-44 +5.23361e-42 +2.94243e-42 +3.15404e-42 +1.00159e-41 +3.92707e-42 +2.13067e-42 +2.07683e-43 +1.28778e-41 +1.08243e-42 +3.22567e-41 +1.21111e-40 +6.52932e-43 +4.05428e-44 +2.01634e-41 +9.90861e-42 +4.45554e-41 +3.87081e-42 +5.44032e-42 +1.7942e-42 +1.53801e-41 +3.65486e-43 +2.49271e-43 +3.78219e-42 +6.11045e-43 +1.22393e-42 +1.18844e-42 +9.24014e-43 +8.96608e-43 +1.06988e-44 +2.65161e-41 +1.22402e-41 +2.48755e-42 +1.64292e-41 +1.87577e-41 +1.12008e-42 +3.56333e-41 +2.50226e-45 +3.81223e-44 +1.37526e-41 +2.65063e-42 +3.47224e-41 +2.87168e-42 +3.49627e-43 +6.97124e-43 +5.42132e-43 +2.3936e-43 +1.69368e-43 +1.8045e-42 +4.72757e-44 +1.23889e-42 +1.20242e-42 +2.43465e-42 +4.26669e-43 +4.12095e-44 +2.43465e-43 +3.83444e-44 +5.64763e-42 +3.65544e-44 +2.57281e-47 +41595.7 +632.791 +346.598 +266.209 +223.924 +196.559 +176.906 +161.878 +149.892 +140.035 +21.4333 +0.0020383 +2.4136e-40 +2.96216e-40 +7.87626e-41 +3.37618e-43 +7.2108e-42 +3.11069e-41 +4.13831e-43 +9.09752e-41 +3.68233e-44 +2.08686e-40 +9.14809e-41 +1.0647e-41 +5.69166e-41 +9.56701e-41 +5.38924e-44 +6.97165e-41 +8.09e-44 +2.87065e-44 +1.90065e-41 +4.76332e-42 +3.70903e-42 +9.57503e-42 +7.14317e-41 +2.44486e-40 +1.24279e-40 +4.0288e-42 +3.08364e-43 +8.88407e-44 +2.65667e-41 +3.60215e-42 +2.51144e-41 +1.94682e-44 +2.64753e-41 +4.21362e-41 +0 +3.37993e-42 +2.66896e-48 +3.8993e-42 +1.23841e-41 +3.50348e-45 +1.02403e-41 +7.47762e-42 +4.6017e-41 +4.47245e-41 +2.61612e-42 +4.26998e-43 +2.54844e-40 +4.59385e-42 +4.70228e-43 +1.13118e-42 +5.78184e-45 +3.01772e-44 +1.34315e-41 +3.86696e-42 +6.44174e-46 +6.43128e-46 +1.31439e-43 +1.75989e-41 +1.3026e-40 +6.96876e-44 +1.11228e-40 +3.83642e-43 +5.11157e-43 +3.94648e-41 +1.89495e-41 +4.812e-46 +8.95248e-42 +1.58747e-41 +7.13755e-41 +2.13313e-43 +0 +1.93053e-42 +1.37117e-41 +2.98429e-45 +3.83148e-42 +3.58947e-46 +5.86518e-43 +4.55244e-42 +1.63693e-43 +2.48316e-42 +5.93486e-42 +4.35526e-41 +3.54986e-41 +2.19184e-41 +2.67897e-43 +8.76675e-43 +5.72288e-41 +2.44721e-43 +5.2141e-42 +3.06833e-43 +2.17784e-41 +3.76347e-43 +9.99978e-41 +1.40933e-41 +3.48491e-41 +1.92552e-46 +1.28781e-41 +3.1864e-42 +3.09168e-42 +1.09228e-41 +8.49253e-44 +1.28518e-42 +9.0924e-43 +1.7788e-41 +1.46673e-43 +1.42281e-43 +5.42459e-42 +5.48587e-43 +1.62317e-44 +3.30177e-41 +1.04065e-41 +1.18478e-43 +6.70348e-43 +1.47819e-41 +1.27139e-41 +4.12247e-42 +2.23208e-42 +9.89756e-44 +5.26849e-41 +3.12689e-43 +4.4134e-43 +1.92472e-43 +1.85472e-42 +2.68939e-41 +1.25855e-47 +4.9242e-45 +5.14057e-42 +1.41088e-41 +3.58836e-44 +2.53584e-41 +2.35674e-41 +3.29015e-44 +1.08721e-42 +2.02731e-43 +5.65542e-42 +3.08974e-42 +1.5688e-41 +9.30017e-43 +1.12872e-43 +1.7844e-42 +4.81129e-44 +2.72248e-43 +3.61353e-43 +3.50108e-46 +1.71816e-41 +3.99922e-42 +1.25179e-41 +6.66193e-44 +2.18105e-43 +2.89744e-43 +0 +1.86324e-42 +5.78277e-43 +3.74577e-46 +1.01074e-42 +1.22576e-43 +5.0853e-43 +1.10133e-42 +5.95693e-43 +3.63278e-43 +4.5187e-44 +5.8736e-42 +1.90892e-46 +1.07798e-42 +1.17702e-44 +4.67872e-45 +7.19598e-42 +5.32273e-42 +41584.1 +632.659 +346.559 +266.184 +223.905 +196.543 +176.893 +161.867 +149.881 +140.026 +21.4372 +0.002061 +1.84712e-41 +1.00384e-42 +3.68844e-40 +1.97066e-40 +2.76289e-40 +4.96185e-42 +3.96479e-43 +3.74974e-41 +7.6895e-41 +3.54173e-41 +3.53711e-43 +1.02374e-41 +3.09257e-42 +3.15855e-41 +3.94573e-44 +4.82437e-41 +1.3889e-41 +2.46388e-41 +1.2336e-40 +2.18416e-45 +1.13726e-41 +1.31988e-43 +6.10512e-42 +9.96124e-43 +4.15164e-42 +1.21937e-40 +5.05865e-41 +2.16526e-43 +5.6768e-42 +7.33893e-42 +1.44571e-40 +4.59011e-41 +3.28465e-41 +2.00869e-41 +1.41098e-45 +1.58647e-42 +4.95413e-42 +1.06327e-40 +2.08666e-43 +1.85234e-42 +2.55358e-40 +2.3572e-40 +3.06189e-43 +3.65052e-45 +1.741e-41 +8.38948e-41 +3.37973e-45 +7.90403e-41 +3.1459e-42 +1.98733e-42 +1.09737e-43 +5.84559e-42 +1.21593e-41 +7.31161e-41 +1.07639e-41 +7.56343e-43 +3.42028e-41 +1.08179e-42 +5.11724e-42 +1.47105e-42 +9.02823e-47 +4.04021e-44 +1.91107e-41 +3.8021e-44 +2.35637e-42 +5.94217e-42 +1.4903e-43 +6.56946e-44 +3.26429e-44 +3.16587e-44 +4.79045e-43 +3.71577e-42 +1.23586e-42 +1.8425e-43 +6.22796e-42 +4.99643e-42 +4.98232e-44 +7.59818e-42 +1.92363e-43 +7.84334e-44 +9.65756e-43 +7.49652e-43 +7.1399e-44 +5.63184e-42 +3.30721e-42 +3.76288e-44 +8.69224e-42 +2.26282e-42 +1.59827e-42 +4.58932e-43 +6.27787e-42 +4.38421e-42 +4.17925e-43 +6.13876e-41 +2.83664e-41 +1.28249e-42 +2.26784e-42 +2.42756e-41 +1.59916e-45 +5.76953e-42 +2.28279e-42 +3.93676e-44 +4.83215e-43 +1.1749e-41 +1.13801e-41 +1.053e-40 +7.92914e-41 +1.19239e-41 +1.16186e-42 +1.75794e-44 +1.70972e-44 +1.28351e-41 +3.80381e-42 +1.50394e-42 +7.0993e-42 +1.12775e-41 +1.97127e-42 +1.05686e-41 +6.72627e-42 +8.13845e-43 +5.74455e-43 +2.0933e-42 +1.12322e-42 +3.01287e-43 +1.35012e-42 +3.90363e-42 +3.31379e-43 +7.87311e-46 +1.6362e-44 +1.62682e-44 +1.24638e-42 +2.35327e-44 +1.79214e-45 +6.42126e-47 +2.44147e-42 +1.62239e-42 +3.71991e-42 +5.62206e-44 +0 +1.15452e-42 +2.96644e-43 +4.91915e-47 +1.28443e-42 +5.08752e-42 +1.20106e-45 +4.18676e-42 +1.01646e-42 +1.62962e-41 +2.83438e-41 +1.75605e-42 +6.39084e-43 +3.25645e-43 +5.30583e-43 +1.69216e-44 +1.24893e-42 +3.90095e-45 +3.48621e-46 +2.44024e-42 +4.78404e-44 +3.76201e-42 +6.16207e-42 +1.99879e-46 +5.27858e-45 +7.64404e-43 +4.86855e-45 +4.76141e-45 +2.04835e-42 +0 +41571.6 +632.522 +346.518 +266.158 +223.886 +196.527 +176.88 +161.855 +149.871 +140.017 +21.4402 +0.00208263 +3.08215e-43 +2.19789e-41 +1.69114e-41 +7.31203e-41 +9.40729e-42 +6.32309e-42 +4.91147e-41 +2.68815e-41 +5.95992e-44 +2.06577e-41 +1.47254e-40 +2.58125e-41 +1.38762e-40 +9.00089e-42 +3.16418e-41 +4.54474e-41 +2.05721e-41 +9.85435e-45 +7.75194e-42 +2.74161e-45 +9.90778e-42 +7.0846e-42 +7.10803e-41 +4.78471e-41 +2.35878e-42 +5.02362e-41 +1.29488e-41 +3.88508e-40 +2.61283e-43 +6.86268e-45 +2.71849e-41 +5.23503e-42 +1.18419e-40 +9.09072e-41 +4.78107e-43 +2.56769e-42 +1.89535e-42 +2.415e-42 +2.40592e-44 +1.08851e-42 +6.10823e-43 +2.20326e-44 +5.06906e-42 +2.59775e-41 +1.59946e-43 +9.19077e-41 +3.29995e-42 +1.45766e-43 +4.76757e-43 +1.7116e-44 +3.58349e-45 +7.50481e-43 +5.109e-43 +1.47018e-42 +1.78099e-40 +9.66737e-42 +1.38065e-44 +8.47274e-42 +6.60814e-42 +1.21723e-42 +1.70391e-42 +3.80543e-41 +1.97115e-44 +6.07487e-42 +9.44273e-42 +1.81821e-43 +2.70374e-43 +1.59368e-41 +9.96972e-42 +1.73473e-41 +1.92658e-45 +9.05603e-42 +1.45202e-42 +1.67817e-41 +3.17375e-41 +3.07296e-44 +1.96221e-43 +9.88078e-42 +7.24984e-41 +1.38245e-41 +2.97799e-43 +6.57678e-44 +4.07428e-42 +1.00302e-44 +1.61041e-42 +3.21292e-42 +5.10749e-43 +4.06605e-44 +3.82591e-42 +3.8075e-44 +4.48137e-43 +9.33476e-42 +1.41177e-43 +4.42322e-42 +7.68734e-42 +7.08085e-42 +1.03509e-44 +3.64889e-42 +7.40263e-42 +1.27592e-42 +6.29524e-42 +1.63496e-45 +3.41792e-43 +5.69405e-42 +3.6636e-48 +4.90412e-43 +5.67708e-41 +2.08857e-41 +4.43276e-43 +1.66299e-42 +7.04494e-42 +8.51509e-43 +1.717e-42 +2.68475e-42 +1.7489e-41 +1.69006e-41 +2.70345e-42 +2.61234e-42 +2.02161e-42 +4.55197e-43 +1.88774e-42 +1.54486e-41 +8.54031e-42 +7.74921e-43 +9.71612e-42 +1.00004e-41 +1.02752e-41 +2.31633e-43 +3.80218e-42 +6.70562e-42 +2.05273e-42 +2.01598e-43 +7.09136e-47 +6.91608e-44 +1.97013e-42 +3.78494e-41 +2.87686e-42 +2.4386e-43 +3.15414e-42 +1.82309e-41 +1.59626e-42 +2.12209e-43 +6.24076e-42 +1.62648e-43 +5.65963e-43 +3.09432e-42 +1.22753e-45 +2.15583e-44 +1.14327e-45 +3.31819e-42 +2.22983e-42 +2.49914e-42 +1.18081e-43 +2.70049e-43 +4.36045e-45 +2.79461e-46 +2.80691e-43 +7.66438e-42 +2.61181e-43 +3.76047e-43 +5.73651e-45 +1.03826e-43 +6.91348e-46 +2.29126e-42 +3.92174e-44 +1.40062e-45 +2.81889e-44 +0 +41558 +632.383 +346.477 +266.132 +223.867 +196.512 +176.867 +161.844 +149.861 +140.008 +21.4414 +0.00210161 +1.50446e-42 +8.52431e-41 +2.6046e-41 +1.62736e-41 +8.2959e-42 +3.54412e-42 +1.0021e-44 +3.06656e-40 +8.00105e-41 +7.78491e-40 +7.74683e-41 +2.81686e-43 +4.38904e-41 +9.07899e-41 +5.7181e-41 +1.24419e-40 +3.24663e-41 +1.23295e-44 +7.3398e-42 +9.93258e-42 +7.30959e-42 +1.50105e-42 +1.45484e-42 +2.07758e-41 +7.16765e-43 +1.27781e-41 +7.07643e-41 +5.2176e-42 +2.7877e-42 +4.15777e-41 +3.51542e-40 +9.66489e-41 +6.26285e-43 +7.45484e-45 +2.30435e-42 +2.99984e-43 +7.12001e-42 +6.37139e-41 +1.07467e-40 +9.23814e-41 +2.2084e-43 +1.24699e-42 +6.16786e-42 +4.64068e-42 +3.41174e-42 +1.29529e-41 +2.14067e-41 +1.40933e-42 +3.15813e-41 +6.76173e-43 +7.45553e-42 +1.81975e-41 +1.27533e-41 +3.18097e-42 +3.67626e-41 +2.12059e-42 +3.55695e-45 +1.49531e-41 +1.42365e-40 +6.09256e-44 +1.81296e-41 +2.44528e-42 +5.02799e-42 +2.84933e-45 +5.56076e-41 +1.71475e-42 +2.71312e-41 +1.07382e-41 +1.81311e-41 +8.3104e-42 +8.03694e-42 +7.40202e-43 +3.16805e-43 +5.81377e-41 +1.26965e-42 +9.64893e-43 +1.48259e-43 +6.524e-44 +1.5384e-42 +2.47061e-41 +2.19967e-41 +4.55713e-46 +4.69006e-42 +4.25705e-43 +4.00461e-41 +6.61507e-41 +1.9672e-43 +6.17709e-41 +5.96867e-41 +1.97821e-41 +9.19704e-44 +1.20499e-42 +3.12655e-43 +1.76096e-42 +2.51298e-42 +2.05455e-43 +2.34438e-42 +2.26442e-42 +3.1764e-44 +1.57966e-44 +1.51764e-44 +8.09474e-46 +6.05675e-43 +2.66403e-44 +2.34761e-41 +4.3616e-42 +8.94821e-42 +3.33927e-41 +2.97345e-41 +1.99752e-43 +2.09052e-44 +9.37252e-43 +5.77581e-43 +2.58851e-43 +2.39515e-42 +3.05985e-42 +1.33797e-42 +2.85114e-43 +3.55294e-42 +0 +7.45847e-42 +7.74828e-42 +6.3246e-43 +2.29631e-42 +2.29022e-41 +1.11039e-41 +4.80524e-44 +1.59081e-42 +8.08529e-43 +1.05671e-44 +8.1157e-44 +2.64098e-43 +9.18141e-43 +8.84995e-43 +8.25022e-42 +3.94367e-43 +2.43214e-41 +2.93045e-42 +5.89298e-42 +1.28275e-43 +4.49995e-43 +9.37173e-44 +4.29319e-46 +4.28702e-42 +3.87922e-46 +3.73872e-43 +2.47021e-42 +5.1024e-42 +5.08327e-43 +5.05298e-45 +1.91148e-41 +2.21579e-42 +6.66123e-42 +2.3877e-42 +7.3279e-43 +5.05998e-42 +1.07077e-44 +1.52541e-44 +6.29747e-43 +4.34937e-42 +5.46175e-42 +7.25299e-46 +5.87486e-42 +3.01813e-45 +5.03083e-44 +1.2821e-43 +9.66069e-42 +5.33853e-42 +41543.2 +632.243 +346.436 +266.108 +223.849 +196.498 +176.855 +161.834 +149.852 +140 +21.4403 +0.00211641 +1.7522e-40 +6.57407e-41 +2.68699e-41 +4.58382e-43 +8.4419e-41 +1.94487e-41 +7.42748e-40 +3.67777e-41 +1.20224e-40 +2.65743e-41 +5.57669e-40 +8.66953e-44 +1.97517e-40 +3.33142e-43 +6.12999e-41 +6.0979e-43 +2.12176e-41 +1.00386e-40 +6.73329e-42 +4.61559e-42 +3.02468e-42 +9.0547e-41 +1.06761e-42 +3.24168e-41 +7.54834e-42 +3.03652e-41 +1.98932e-41 +1.48287e-41 +2.75197e-41 +1.43877e-42 +3.07721e-41 +3.52079e-41 +2.30446e-40 +3.09e-40 +2.01145e-40 +4.20292e-41 +7.12911e-41 +3.607e-42 +1.67225e-42 +2.77344e-43 +3.3563e-44 +9.6593e-43 +1.72878e-41 +1.33093e-41 +2.28292e-41 +2.20729e-41 +3.42958e-45 +2.49385e-41 +2.04926e-43 +2.47698e-44 +6.4633e-43 +3.25075e-41 +5.33026e-42 +3.92513e-41 +9.74775e-43 +1.39149e-42 +8.0053e-44 +1.88537e-44 +6.79981e-42 +6.57019e-42 +2.79441e-41 +2.98371e-41 +1.57765e-40 +5.07279e-41 +4.4555e-42 +9.75138e-42 +6.06723e-42 +9.20026e-43 +5.88592e-42 +3.70922e-43 +1.17059e-42 +8.00693e-43 +1.03932e-43 +9.87991e-42 +5.76311e-42 +1.26688e-45 +1.19338e-41 +8.71128e-44 +1.14359e-41 +8.52901e-43 +6.7735e-44 +3.60062e-41 +1.65216e-41 +4.19198e-42 +1.05863e-41 +1.16331e-41 +1.6437e-41 +1.05568e-41 +3.70881e-41 +4.54668e-43 +4.73508e-44 +2.66392e-43 +1.31267e-42 +1.27827e-41 +2.2602e-41 +2.30882e-43 +0 +3.68101e-44 +4.43221e-45 +1.22871e-42 +3.05309e-43 +5.58667e-43 +6.73274e-44 +2.9544e-44 +1.57037e-41 +3.23e-42 +1.56992e-42 +5.60403e-44 +3.08659e-45 +4.09742e-44 +7.83209e-45 +3.094e-42 +1.80632e-42 +7.34236e-43 +1.04625e-41 +2.37081e-45 +3.75328e-42 +5.29489e-42 +1.35808e-43 +3.52822e-45 +7.34122e-43 +2.25615e-42 +3.15249e-42 +3.08552e-43 +3.65512e-43 +2.05254e-42 +0 +1.20982e-44 +8.02136e-43 +1.12514e-44 +1.99719e-42 +1.82344e-42 +7.78271e-42 +4.39161e-42 +1.62968e-43 +6.93902e-42 +3.06946e-42 +5.28206e-43 +1.80292e-42 +1.19496e-43 +5.88927e-44 +6.55889e-44 +3.18023e-43 +6.94993e-42 +7.93615e-42 +5.61248e-41 +1.08477e-41 +1.51686e-43 +9.98719e-43 +2.42068e-43 +5.29416e-42 +1.50837e-42 +9.67338e-42 +3.54817e-41 +8.94313e-42 +3.28363e-44 +6.92806e-44 +3.50939e-44 +1.66305e-42 +4.91954e-42 +1.37862e-44 +7.34634e-43 +3.16399e-45 +1.64764e-42 +5.04572e-43 +1.26014e-42 +9.0189e-45 +5.3431e-42 +41527.2 +632.105 +346.397 +266.084 +223.832 +196.485 +176.844 +161.825 +149.844 +139.993 +21.4361 +0.00212553 +1.04341e-40 +4.41979e-42 +1.43161e-41 +9.80776e-42 +1.59379e-43 +8.29741e-40 +3.38634e-40 +1.07384e-39 +5.62535e-42 +1.89189e-40 +3.31717e-41 +1.96765e-41 +9.08957e-43 +3.80001e-43 +1.06255e-40 +2.84235e-42 +3.37214e-41 +6.94583e-41 +2.54841e-40 +1.93942e-41 +1.99713e-49 +9.67988e-41 +6.48932e-43 +2.45781e-43 +4.78858e-40 +2.53273e-43 +1.86494e-42 +7.89129e-41 +8.14275e-42 +1.0417e-41 +1.62619e-42 +2.20512e-40 +2.89648e-41 +1.86961e-40 +4.99383e-44 +4.47129e-41 +6.18165e-42 +8.3761e-41 +3.47805e-43 +3.26971e-41 +4.69479e-44 +1.02923e-40 +2.59399e-40 +6.58669e-42 +5.02071e-41 +1.00607e-40 +1.47063e-42 +7.20329e-42 +2.83957e-41 +1.17762e-40 +1.14753e-40 +1.25799e-41 +3.52797e-42 +1.0318e-40 +2.13432e-43 +5.01352e-41 +1.51912e-41 +3.91248e-43 +2.15957e-42 +2.07235e-44 +2.65222e-42 +5.67246e-42 +3.46263e-41 +2.55571e-41 +3.22189e-41 +2.40963e-41 +5.43673e-44 +6.94992e-43 +2.96946e-49 +5.27628e-41 +2.92148e-41 +1.30753e-42 +8.60359e-43 +2.19504e-43 +1.11579e-41 +2.03817e-42 +3.30587e-41 +9.29292e-44 +3.79946e-42 +4.48226e-43 +8.81248e-42 +6.12767e-42 +1.03836e-44 +8.64134e-45 +2.1883e-41 +5.52985e-43 +2.02509e-40 +5.95778e-41 +3.95578e-42 +3.96391e-41 +2.34929e-40 +9.25289e-42 +7.56656e-42 +2.77547e-43 +1.25263e-45 +1.25246e-42 +1.4345e-43 +4.40748e-41 +4.94767e-45 +1.11583e-41 +1.25772e-40 +1.73393e-41 +2.63627e-41 +7.58059e-42 +8.22354e-42 +8.56671e-43 +2.00286e-42 +1.9276e-42 +4.85465e-42 +3.24115e-45 +5.47115e-43 +8.95105e-42 +2.63264e-42 +4.87724e-44 +4.96786e-42 +3.61112e-43 +6.67037e-44 +2.98355e-46 +0 +2.13986e-43 +3.72161e-44 +8.92667e-43 +5.25142e-42 +1.7161e-42 +1.23217e-42 +5.6356e-42 +3.61015e-46 +1.08484e-41 +2.80501e-42 +2.94343e-50 +6.26593e-43 +4.01205e-42 +1.73334e-41 +1.88678e-41 +3.28864e-44 +3.49517e-42 +8.75855e-43 +1.14695e-42 +1.03207e-41 +1.48536e-41 +3.43348e-42 +1.06302e-41 +2.39906e-44 +6.20459e-42 +6.52999e-45 +6.27197e-45 +1.81192e-42 +2.30369e-41 +9.76637e-44 +3.51319e-42 +5.51739e-42 +9.75032e-50 +4.59733e-43 +7.57152e-46 +4.03479e-42 +1.25716e-42 +2.64166e-42 +5.10812e-43 +4.5915e-42 +1.95589e-42 +1.1149e-41 +1.80146e-42 +1.72877e-42 +6.30979e-42 +4.05595e-42 +2.21597e-41 +4.94543e-42 +5.34717e-42 +41520.6 +637.363 +347.799 +266.668 +224.133 +196.661 +176.956 +161.9 +149.897 +140.031 +21.4467 +0.00212756 +0 +7.49179e-51 +3.92128e-40 +0 +0 +3.5363e-40 +0 +0 +3.18768e-40 +0 +2.97383e-40 +4.24166e-50 +0 +0 +3.82004e-50 +0 +2.41165e-40 +2.32847e-40 +0 +0 +2.09511e-40 +2.02244e-40 +0 +2.78276e-50 +0 +1.75519e-40 +1.69388e-40 +0 +0 +1.52201e-40 +0 +1.41687e-40 +0 +1.31873e-40 +1.27213e-40 +0 +1.74805e-50 +1.14165e-40 +1.10109e-40 +0 +1.51239e-50 +9.87534e-41 +9.52249e-41 +0 +8.85278e-41 +8.53514e-41 +8.22847e-41 +0 +7.64659e-41 +0 +7.10438e-41 +0 +0 +7.5139e-50 +7.2409e-50 +6.97746e-50 +5.6906e-41 +0 +0 +5.0894e-41 +4.90296e-41 +5.58018e-50 +4.54958e-41 +0 +4.2208e-41 +0 +3.91496e-41 +4.45431e-50 +0 +3.49587e-41 +3.36603e-41 +0 +0 +0 +3.41639e-50 +2.78352e-41 +0 +2.57885e-41 +2.48204e-41 +2.38873e-41 +2.29881e-41 +2.21216e-41 +2.51494e-50 +0 +0 +0 +0 +0 +0 +1.62369e-41 +1.84516e-50 +0 +1.36544e-49 +0 +1.33603e-41 +1.28473e-41 +1.23533e-41 +1.12265e-49 +0 +1.09791e-41 +1.05547e-41 +0 +9.75312e-42 +0 +9.01041e-42 +8.65989e-42 +8.32258e-42 +6.3984e-41 +7.68565e-42 +7.38518e-42 +5.67679e-41 +6.81786e-42 +6.19109e-50 +6.29277e-42 +6.04514e-42 +0 +0 +5.35757e-42 +0 +4.94186e-42 +4.74595e-42 +3.646e-41 +0 +0 +0 +0 +0 +0 +0 +3.10946e-50 +0 +2.86465e-50 +0 +2.2333e-41 +2.14321e-41 +0 +0 +1.89354e-41 +1.81677e-41 +1.74304e-41 +0 +1.5162e-49 +1.45443e-49 +1.47604e-41 +0 +0 +0 +1.18045e-49 +1.13201e-49 +1.14847e-41 +1.04086e-49 +9.97995e-50 +9.56849e-50 +9.17353e-50 +0 +8.43057e-50 +8.55016e-42 +7.7462e-50 +0 +0 +0 +6.91474e-42 +6.62634e-42 +0 +6.08411e-42 +5.82943e-42 +0 +5.35076e-42 +180.7 +689.377 +310.586 +255.464 +219.197 +193.992 +175.323 +160.814 +149.131 +139.467 +20.2683 +0.000503212 +1.79342e-43 +9.56946e-42 +5.40418e-44 +1.31921e-43 +2.47776e-41 +1.90827e-40 +5.72939e-41 +1.62022e-40 +1.29877e-40 +3.10992e-44 +2.05304e-40 +1.39047e-40 +4.55506e-41 +3.36081e-41 +1.41552e-41 +8.33844e-44 +8.87192e-42 +4.1528e-41 +1.71334e-41 +5.04493e-42 +4.79086e-41 +3.5571e-41 +0 +4.89381e-43 +2.17909e-45 +1.57805e-41 +5.22733e-41 +1.05676e-41 +1.97812e-42 +1.52172e-41 +1.72354e-42 +7.30971e-42 +3.03782e-42 +9.80432e-44 +1.17085e-40 +2.57069e-42 +1.44418e-42 +8.14887e-42 +8.6657e-41 +8.95339e-44 +9.86049e-42 +6.95358e-42 +6.26579e-41 +4.41968e-41 +2.83621e-42 +8.08042e-42 +1.02869e-42 +6.9858e-41 +1.58878e-41 +5.05189e-42 +0 +3.8316e-43 +4.47811e-42 +4.30124e-42 +1.43262e-43 +5.09542e-45 +3.13209e-43 +1.12002e-42 +1.07555e-42 +2.9869e-43 +4.54697e-42 +4.23986e-42 +0 +0 +2.20254e-41 +7.98535e-42 +3.45767e-42 +3.10832e-41 +3.89603e-41 +1.82441e-41 +3.88852e-43 +2.12331e-44 +3.37895e-43 +2.44434e-45 +2.29877e-41 +2.95842e-41 +1.72816e-44 +4.76573e-42 +2.94534e-42 +1.05163e-42 +3.44376e-41 +2.46604e-42 +1.04889e-41 +1.61686e-45 +1.23932e-44 +9.25604e-42 +5.20465e-42 +3.14334e-42 +6.90458e-42 +1.2624e-45 +8.92939e-44 +6.37205e-43 +7.09385e-44 +8.27359e-43 +1.17583e-41 +5.14459e-42 +2.15325e-42 +8.97475e-46 +2.56887e-42 +2.46237e-42 +2.26321e-42 +8.06684e-45 +2.07901e-42 +1.65846e-43 +1.9913e-42 +1.2028e-41 +1.16761e-42 +6.25399e-45 +2.48015e-42 +3.93347e-42 +3.76859e-42 +1.47656e-42 +2.61219e-43 +3.63059e-45 +5.43414e-44 +1.36513e-44 +1.45681e-42 +1.14078e-42 +2.67168e-42 +2.80354e-48 +1.25278e-43 +6.90527e-42 +9.89727e-42 +4.36635e-43 +1.24478e-42 +2.29392e-42 +2.06964e-45 +1.09253e-42 +2.01312e-42 +2.55144e-42 +2.17312e-46 +2.20755e-43 +6.53599e-45 +2.9071e-42 +4.82753e-42 +4.17068e-42 +1.25815e-42 +0 +4.01164e-44 +1.55431e-43 +1.18965e-42 +3.20296e-42 +1.18474e-41 +7.89863e-43 +7.31576e-43 +5.75243e-44 +8.63643e-46 +7.61774e-45 +4.14519e-42 +3.75092e-41 +5.6059e-43 +6.37689e-45 +7.50153e-42 +6.29849e-46 +5.1138e-42 +4.20588e-42 +4.67653e-42 +5.26741e-46 +5.34495e-43 +9.18199e-43 +1.10792e-42 +5.50381e-44 +1.20509e-42 +3.13311e-43 +2.99514e-43 +0 +1.93788e-43 +5.6363e-42 +768.292 +241.146 +256.64 +233.789 +208.775 +188.182 +171.724 +158.412 +147.436 +133.767 +16.7935 +1.41624e-43 +1.0929e-42 +6.74675e-41 +1.27096e-40 +1.11702e-41 +5.07302e-43 +1.29862e-42 +7.05404e-41 +1.76387e-41 +7.45206e-41 +2.77764e-40 +6.01681e-40 +2.94e-40 +2.17306e-40 +3.9123e-40 +1.48454e-39 +1.06493e-41 +4.43677e-42 +1.4355e-43 +1.72924e-44 +1.29769e-41 +0 +1.16523e-40 +8.83844e-42 +2.41056e-40 +2.011e-40 +1.33409e-44 +4.79588e-42 +9.63862e-42 +6.0673e-41 +5.06619e-41 +7.08133e-43 +1.93484e-41 +3.83044e-42 +8.39049e-41 +5.24783e-42 +1.66427e-41 +4.86608e-42 +2.98427e-41 +8.18197e-45 +5.83626e-43 +7.64291e-41 +8.42772e-41 +2.4107e-42 +4.93969e-41 +1.94449e-41 +2.05409e-43 +6.40187e-42 +2.56095e-41 +3.57618e-43 +2.75296e-42 +4.02896e-42 +3.98289e-44 +8.28403e-45 +1.72029e-42 +2.33605e-41 +3.21207e-41 +4.10837e-45 +9.07965e-42 +6.89542e-42 +2.27536e-41 +1.63906e-40 +4.74694e-42 +1.23363e-41 +3.31622e-42 +1.01317e-39 +3.87841e-40 +5.04536e-42 +4.48213e-41 +1.13302e-41 +5.88555e-43 +4.56974e-41 +5.24913e-42 +3.59504e-41 +1.31368e-41 +1.57852e-42 +5.26064e-44 +3.2379e-45 +2.61401e-41 +6.07283e-42 +1.06418e-43 +5.2324e-44 +9.55834e-42 +1.48567e-41 +6.2479e-42 +4.45905e-44 +1.55694e-40 +3.29217e-43 +2.32216e-41 +1.62827e-42 +3.64883e-44 +1.43487e-40 +5.63404e-41 +1.38674e-43 +4.17714e-42 +4.65636e-43 +6.98591e-45 +6.52925e-43 +1.85188e-42 +4.21417e-42 +1.70705e-42 +1.19534e-41 +3.40865e-41 +7.44435e-41 +5.67162e-42 +1.15343e-42 +3.49768e-41 +1.35408e-40 +6.01199e-42 +3.04254e-43 +1.83873e-43 +6.64098e-43 +2.82557e-42 +9.15076e-42 +5.21443e-42 +6.92314e-43 +2.46007e-41 +9.27603e-43 +6.6204e-41 +1.86207e-41 +4.27849e-42 +4.87354e-43 +3.93631e-42 +3.22821e-42 +2.8965e-41 +1.98924e-42 +3.55955e-43 +2.68858e-44 +4.83287e-41 +1.11309e-41 +3.59295e-42 +7.21047e-43 +1.25981e-44 +6.62775e-43 +1.07332e-43 +1.39813e-41 +2.33545e-43 +2.13859e-41 +5.00471e-42 +3.79611e-42 +3.21574e-41 +4.01442e-43 +7.63627e-41 +7.21163e-42 +1.32968e-42 +1.55742e-41 +1.9985e-42 +9.61009e-42 +9.20708e-42 +1.07462e-43 +7.37761e-42 +2.95542e-41 +2.11219e-43 +9.04738e-44 +6.58635e-45 +1.48487e-42 +3.35366e-41 +1.90162e-42 +1.12003e-43 +1.14208e-42 +4.05053e-44 +2.91485e-44 +1.00295e-42 +3.2505e-43 +1.04815e-43 +3.82704e-43 +5.15073e-44 +1.84503e-46 +0 +248.326 +204.807 +212.088 +206.486 +192.958 +178.517 +165.433 +154.086 +144.327 +113.911 +11.4304 +2.0438e-41 +6.84669e-43 +2.75352e-40 +3.11089e-40 +8.53358e-42 +5.31392e-41 +2.13325e-41 +3.56049e-44 +1.59206e-43 +2.70026e-41 +1.35525e-40 +1.90221e-41 +3.14307e-41 +8.55746e-45 +5.89409e-41 +1.75272e-41 +1.88045e-42 +5.42083e-42 +1.12195e-43 +1.08276e-43 +3.00482e-41 +1.00884e-43 +3.28632e-43 +3.85308e-43 +4.14072e-41 +2.36329e-42 +1.12046e-41 +1.1461e-41 +5.17896e-41 +1.33266e-41 +5.70119e-41 +1.10375e-42 +3.75732e-41 +4.1815e-41 +1.82314e-41 +1.11074e-40 +4.02079e-41 +1.53647e-42 +5.49439e-44 +9.2954e-42 +4.08352e-43 +3.15566e-45 +2.08357e-41 +1.48364e-40 +1.15968e-40 +0 +1.88194e-39 +1.60964e-39 +3.04943e-43 +7.39418e-40 +4.97589e-41 +3.32297e-42 +1.07813e-42 +1.47946e-42 +9.6089e-42 +5.17604e-43 +2.83784e-44 +3.44468e-41 +4.62712e-42 +5.83871e-41 +9.95631e-40 +4.13804e-42 +2.27245e-44 +1.20566e-41 +3.82483e-41 +1.93314e-40 +6.33498e-41 +8.78414e-43 +1.3235e-40 +2.19901e-41 +1.3463e-43 +5.08984e-42 +2.19173e-42 +1.65976e-42 +4.73544e-43 +2.75757e-49 +5.87943e-42 +1.81143e-41 +5.88532e-41 +1.1629e-42 +1.01743e-41 +1.9438e-42 +3.49111e-43 +2.76815e-43 +9.28642e-42 +4.86132e-42 +7.78334e-43 +2.76433e-42 +2.01603e-42 +7.11486e-41 +4.12503e-41 +6.02661e-41 +7.05392e-43 +2.60204e-42 +1.81147e-43 +1.48357e-41 +1.07206e-41 +2.44407e-44 +5.07747e-42 +1.05225e-41 +2.51668e-41 +1.34129e-41 +8.63092e-44 +1.5462e-43 +5.71516e-42 +7.66026e-43 +5.89184e-42 +4.45934e-43 +1.81367e-43 +6.1217e-42 +4.54274e-48 +2.68018e-42 +3.30816e-45 +3.3742e-42 +0 +4.05938e-44 +3.70915e-41 +2.9988e-43 +1.14945e-41 +1.70615e-42 +9.85224e-45 +1.01475e-42 +3.11924e-42 +2.94843e-41 +6.64193e-42 +9.18544e-44 +9.74557e-46 +3.14723e-45 +1.18854e-42 +1.85235e-43 +1.42323e-42 +6.8139e-42 +6.9305e-44 +5.83463e-45 +7.00501e-43 +8.40519e-47 +1.07413e-43 +4.25146e-42 +9.86753e-42 +1.00407e-41 +1.20503e-42 +3.3691e-44 +1.54048e-42 +3.3267e-42 +2.97929e-44 +5.58479e-44 +1.84255e-44 +1.11444e-44 +1.41915e-41 +4.61052e-42 +1.3542e-42 +3.39598e-41 +2.44368e-43 +5.32556e-42 +2.46527e-42 +7.58913e-42 +9.29365e-42 +2.82445e-41 +3.26192e-47 +1.85459e-41 +1.07849e-42 +3.66142e-45 +8.2251e-43 +1.23524e-42 +3.51061e-43 +4.5093e-42 +1.36352e-43 +2.07391e-43 +5.6281e-42 +168.223 +200.707 +181.731 +180.958 +174.956 +166.197 +156.856 +147.938 +139.786 +87.4615 +5.64163 +1.68871e-40 +1.04927e-40 +2.61832e-42 +4.53187e-41 +6.15043e-40 +7.43769e-41 +5.34476e-43 +3.408e-42 +1.71672e-41 +3.86958e-42 +1.28477e-40 +4.12319e-41 +4.37568e-43 +4.23153e-43 +1.25847e-40 +3.6057e-41 +6.0191e-45 +1.26987e-41 +1.22781e-41 +2.42701e-41 +1.76282e-44 +1.38553e-41 +0 +1.46125e-48 +3.12796e-41 +1.64139e-41 +3.27027e-40 +0 +1.07509e-43 +6.00772e-44 +1.21748e-40 +4.49257e-43 +3.46886e-45 +2.44349e-42 +3.74847e-42 +1.45954e-40 +9.21352e-42 +1.04913e-40 +1.73797e-40 +4.14271e-42 +5.17854e-41 +2.52543e-41 +6.96303e-41 +1.46067e-40 +2.28876e-45 +1.26126e-40 +5.20503e-41 +1.42024e-40 +2.63926e-40 +8.96242e-41 +1.85455e-42 +2.04254e-40 +8.85286e-43 +2.93232e-41 +1.41913e-40 +4.19689e-41 +8.7495e-42 +3.12755e-43 +3.58742e-41 +5.02235e-42 +1.30133e-45 +4.23859e-42 +1.04401e-41 +2.28338e-42 +1.76438e-44 +6.97665e-44 +6.71908e-44 +5.18769e-43 +3.20146e-41 +9.17293e-41 +5.30173e-42 +1.06673e-41 +1.02884e-41 +5.94511e-43 +5.73532e-43 +2.08141e-42 +3.28531e-42 +2.6261e-42 +3.0545e-42 +1.02438e-44 +1.38869e-42 +1.99687e-41 +1.58616e-44 +3.88435e-42 +6.83124e-44 +6.58469e-44 +5.07183e-43 +2.4761e-41 +1.03507e-42 +1.85977e-42 +5.4695e-44 +1.42378e-42 +2.08031e-43 +2.50564e-44 +2.19998e-42 +2.65045e-43 +5.47224e-42 +2.46258e-43 +7.13985e-43 +3.48074e-46 +3.66926e-42 +1.59414e-41 +2.87495e-46 +4.24313e-41 +1.92274e-41 +3.13791e-44 +1.92552e-45 +1.13916e-42 +1.14468e-43 +2.69813e-44 +7.11332e-44 +4.30327e-44 +2.33372e-42 +9.4545e-44 +2.22209e-44 +1.01511e-41 +5.39835e-42 +6.79824e-42 +2.02456e-41 +2.5402e-43 +9.74355e-42 +6.97807e-44 +9.55812e-44 +3.40203e-42 +1.67613e-42 +0 +3.06804e-45 +1.86783e-43 +9.6238e-43 +1.03799e-41 +1.50309e-42 +1.62489e-41 +1.18574e-43 +1.84929e-41 +4.21646e-41 +5.8684e-42 +1.64554e-44 +7.3269e-44 +3.63257e-44 +2.01968e-42 +1.75944e-45 +5.57368e-46 +1.32722e-43 +2.70303e-42 +7.41418e-44 +5.35562e-44 +1.39038e-42 +2.53877e-44 +1.30054e-45 +2.34211e-44 +6.92503e-42 +1.71274e-41 +6.44218e-48 +1.16325e-42 +8.20526e-45 +1.08487e-41 +1.17211e-43 +9.16062e-44 +3.4083e-43 +1.80354e-43 +7.74757e-42 +1.86758e-45 +1.49715e-42 +4.85531e-42 +5.43989e-45 +3.78044e-43 +1.37875e-42 +1.42898e-42 +3.40107e-48 +161.896 +176.9 +159.512 +159.519 +157.268 +152.628 +146.652 +140.231 +133.885 +58.2208 +1.38136 +5.28631e-41 +4.779e-43 +5.27438e-42 +4.48559e-43 +3.16783e-40 +3.836e-41 +1.37621e-42 +2.32022e-40 +1.78085e-40 +2.15613e-41 +4.08793e-42 +1.83291e-44 +3.36606e-43 +7.04104e-41 +6.00102e-41 +1.31056e-41 +1.27081e-42 +1.22865e-41 +9.36587e-43 +1.8778e-40 +5.61734e-41 +3.23797e-40 +1.60671e-42 +2.36018e-43 +2.60115e-42 +4.77434e-41 +1.71167e-42 +1.73393e-41 +6.87928e-42 +1.08895e-40 +3.39477e-42 +6.23519e-42 +1.22843e-40 +5.83702e-42 +1.6452e-43 +3.11234e-43 +2.9277e-41 +1.49242e-43 +4.9485e-42 +1.27051e-41 +1.81551e-41 +7.59083e-42 +2.89957e-41 +8.04575e-43 +5.49429e-41 +2.79918e-44 +2.15672e-43 +6.83231e-42 +5.79674e-41 +6.40522e-41 +1.29923e-41 +2.27831e-44 +3.49298e-48 +1.04628e-40 +5.41113e-41 +1.93763e-42 +1.2313e-42 +1.19021e-42 +2.14093e-41 +1.63533e-41 +1.07471e-42 +0 +1.41142e-40 +4.76589e-42 +2.02635e-43 +4.64577e-43 +5.10453e-42 +3.94577e-41 +2.43422e-41 +3.68326e-41 +5.23117e-42 +1.27341e-42 +2.33227e-41 +0 +1.64551e-48 +1.26266e-41 +3.17222e-43 +6.37173e-42 +1.24831e-43 +2.85757e-43 +2.20859e-42 +5.20609e-43 +5.3526e-42 +8.38552e-43 +9.28748e-48 +7.95144e-42 +1.14497e-40 +2.0716e-42 +7.03934e-43 +8.63311e-43 +1.30397e-43 +1.19979e-41 +1.80943e-43 +9.2097e-45 +6.52552e-48 +3.38618e-42 +1.05407e-43 +5.77333e-41 +1.46195e-43 +2.20423e-45 +7.17823e-45 +8.65758e-43 +3.29421e-43 +1.53873e-44 +1.67939e-43 +4.40519e-48 +1.3721e-44 +4.48071e-44 +4.37916e-42 +5.19593e-42 +1.80648e-41 +8.79431e-43 +4.73981e-43 +2.08116e-44 +5.50723e-44 +2.72181e-42 +1.0291e-41 +2.4878e-43 +2.70852e-41 +2.35065e-41 +1.71763e-43 +4.20111e-43 +2.07426e-43 +1.15633e-46 +1.48367e-43 +5.28719e-43 +1.15162e-46 +2.19192e-42 +9.62278e-47 +9.275e-41 +2.18005e-42 +5.51335e-45 +4.2052e-42 +1.00005e-44 +1.34136e-43 +2.13598e-41 +1.12733e-41 +3.53134e-44 +1.98063e-42 +3.75426e-43 +2.42443e-42 +1.68348e-45 +2.25094e-42 +1.44584e-41 +9.33707e-43 +1.72705e-43 +2.87848e-43 +3.03841e-45 +9.87677e-45 +2.0547e-42 +9.31585e-43 +1.67307e-43 +8.49654e-45 +1.76792e-42 +4.29027e-46 +3.52783e-44 +3.38203e-44 +1.5193e-42 +0 +2.68504e-46 +0 +1.53527e-42 +1.59656e-41 +8.50022e-43 +1.28676e-44 +4.68856e-42 +0 +1.58407e-45 +2.71814e-47 +146.874 +146.196 +146.47 +141.854 +141.209 +139.072 +135.652 +131.438 +126.864 +22.0578 +0.0120156 +5.82449e-42 +2.86197e-40 +2.31251e-42 +6.64552e-43 +7.58356e-41 +2.23769e-40 +1.37639e-40 +2.89963e-40 +1.54469e-44 +1.86684e-42 +2.50266e-41 +2.85426e-41 +6.71354e-43 +1.07369e-41 +4.03991e-41 +1.00936e-41 +6.26858e-41 +1.75142e-40 +4.19016e-40 +2.49468e-40 +2.29674e-42 +4.05085e-40 +9.25218e-41 +7.74695e-44 +1.19237e-43 +1.10686e-40 +5.73479e-41 +5.56337e-42 +2.27248e-41 +3.44079e-40 +1.47469e-43 +1.53151e-41 +4.67325e-43 +8.60855e-41 +1.30217e-43 +6.66204e-45 +4.12139e-43 +2.7165e-41 +1.5416e-41 +3.41194e-41 +2.10127e-43 +0 +1.97153e-43 +3.29614e-43 +1.34682e-40 +9.81907e-42 +9.50879e-42 +9.25326e-41 +2.55946e-41 +1.7703e-40 +2.67636e-41 +9.44391e-42 +1.14302e-42 +5.66871e-43 +1.14098e-41 +6.05039e-42 +5.08709e-41 +2.625e-41 +9.67121e-46 +1.96785e-43 +1.54996e-41 +4.97852e-42 +6.02491e-43 +9.99539e-44 +8.55876e-41 +2.45451e-41 +5.83848e-45 +1.9258e-42 +6.78762e-43 +9.08007e-42 +1.25096e-41 +8.50112e-42 +2.04073e-43 +1.01173e-41 +1.91019e-43 +2.64698e-42 +4.43985e-41 +2.99084e-41 +2.49822e-43 +4.72291e-43 +8.02168e-42 +7.7575e-42 +5.35955e-44 +2.02841e-42 +7.01791e-42 +2.47133e-44 +3.73832e-43 +1.68477e-41 +1.37255e-41 +3.75403e-46 +3.26466e-43 +6.81808e-44 +8.37428e-43 +2.03368e-41 +1.96611e-41 +4.84761e-42 +2.66582e-43 +2.5798e-43 +6.80795e-45 +8.27729e-44 +3.10046e-43 +6.0742e-42 +8.54581e-42 +3.1283e-41 +1.62497e-42 +1.67177e-41 +5.20673e-43 +1.08708e-41 +8.96985e-42 +5.09991e-42 +2.90364e-41 +2.20834e-42 +4.59805e-42 +1.86397e-44 +7.38874e-44 +1.48229e-42 +3.67459e-45 +1.03905e-45 +1.66992e-43 +7.06789e-43 +7.49192e-42 +1.20641e-42 +8.73902e-43 +1.05476e-46 +6.70803e-41 +3.09369e-41 +1.26458e-43 +3.60618e-42 +8.89912e-44 +8.59338e-44 +1.4276e-43 +7.97723e-44 +6.16197e-43 +1.30604e-41 +5.75057e-43 +1.21812e-41 +1.17632e-42 +1.01742e-41 +1.63532e-41 +8.4722e-42 +2.38497e-43 +2.87282e-44 +8.5297e-42 +2.05554e-42 +2.76884e-42 +7.66903e-42 +2.57935e-42 +2.33879e-44 +9.61161e-43 +1.73377e-43 +8.91603e-45 +3.83126e-42 +1.94436e-44 +5.81107e-48 +1.39037e-42 +8.13204e-42 +4.55484e-43 +4.39151e-43 +6.62057e-45 +4.08814e-43 +9.34935e-43 +2.03943e-42 +1.08964e-43 +5.6242e-43 +1.15356e-42 +4.13276e-44 +9.56719e-44 +2.16148e-42 +0 +132.462 +130.026 +135.537 +127.78 +127.419 +126.388 +124.524 +121.949 +71.6027 +2.26244 +5.65848e-40 +2.22688e-40 +2.92848e-41 +2.12313e-42 +4.89903e-41 +2.28032e-41 +1.04184e-41 +2.68764e-42 +4.47472e-43 +1.77961e-42 +8.66405e-41 +2.88731e-40 +3.87046e-41 +4.46886e-40 +8.93175e-41 +3.54128e-41 +3.42682e-40 +2.03378e-41 +3.23915e-41 +1.50709e-41 +1.72042e-41 +1.19605e-41 +2.08216e-40 +4.51368e-41 +9.13896e-41 +1.28122e-40 +6.49163e-49 +1.39522e-41 +1.92127e-40 +1.54272e-44 +1.90968e-45 +1.15603e-43 +1.12165e-43 +1.80749e-41 +2.89472e-41 +1.27831e-41 +5.23214e-42 +1.50416e-42 +1.06343e-42 +6.95286e-42 +1.37264e-45 +2.30073e-42 +7.66085e-41 +2.16451e-42 +7.78872e-44 +4.04154e-43 +5.85089e-43 +7.10497e-44 +5.50509e-43 +8.39521e-45 +1.26473e-43 +1.22504e-43 +4.86551e-43 +1.27378e-41 +2.45152e-42 +1.21798e-40 +2.88223e-43 +2.23453e-42 +6.31491e-42 +1.01854e-42 +7.41838e-43 +9.94119e-42 +1.5303e-41 +3.70772e-41 +8.71745e-43 +1.71926e-44 +2.07687e-42 +2.44289e-42 +1.40964e-41 +6.22781e-46 +3.22025e-41 +1.89051e-41 +1.10111e-43 +8.54255e-43 +3.28319e-42 +3.81291e-45 +5.98708e-43 +1.78356e-42 +9.11279e-44 +4.97427e-42 +7.79457e-42 +5.10636e-43 +5.13889e-42 +9.72127e-42 +1.17714e-42 +9.27082e-43 +4.35593e-43 +6.84719e-44 +5.30574e-43 +1.21813e-42 +7.87218e-45 +1.91578e-42 +7.29571e-42 +7.18388e-43 +1.47781e-42 +5.31662e-44 +4.17727e-42 +6.31775e-43 +1.78256e-42 +5.92368e-43 +6.84558e-42 +6.95364e-44 +1.61001e-45 +6.51848e-44 +6.19588e-43 +3.85074e-44 +2.15091e-41 +8.18691e-43 +4.80448e-42 +2.15958e-42 +5.19461e-44 +4.93903e-43 +2.21225e-42 +2.36994e-43 +2.72465e-41 +4.33522e-43 +1.24263e-43 +9.62134e-46 +4.7676e-43 +6.56963e-43 +3.57229e-42 +1.45846e-42 +1.12932e-41 +3.88469e-42 +3.91604e-43 +1.99831e-41 +5.72932e-45 +2.27098e-41 +3.43304e-43 +2.55018e-41 +6.28413e-43 +1.06746e-41 +4.28368e-43 +2.65243e-41 +1.20838e-42 +9.19489e-43 +5.48637e-42 +3.20915e-44 +1.32197e-42 +3.00322e-44 +6.23712e-42 +6.02995e-42 +0 +4.08514e-43 +8.52586e-44 +5.27794e-42 +2.36347e-44 +6.177e-43 +1.16828e-42 +3.34153e-43 +7.00218e-44 +2.01426e-44 +3.77891e-44 +2.00543e-42 +6.21082e-42 +1.9936e-43 +1.08328e-42 +2.33082e-41 +1.97878e-42 +8.20459e-44 +1.68632e-43 +1.04367e-41 +3.18037e-46 +3.07547e-46 +3.49544e-43 +1.56485e-42 +4.13558e-44 +1.3015e-44 +5.79784e-42 +5.61349e-42 +119.614 +120.867 +119.422 +124.248 +117.09 +116.724 +115.748 +111.476 +12.9106 +4.78647e-42 +3.70111e-41 +1.20723e-40 +9.62847e-40 +1.6054e-40 +7.93593e-45 +2.61235e-42 +7.16321e-40 +1.5622e-41 +1.18721e-41 +1.43367e-42 +8.01751e-43 +1.69976e-41 +2.93985e-41 +5.93952e-45 +2.82793e-40 +5.39234e-45 +3.03755e-41 +1.36735e-43 +2.48693e-42 +2.40183e-42 +3.3019e-42 +3.47722e-40 +2.07484e-41 +1.60249e-40 +1.61244e-41 +3.6988e-40 +3.66839e-45 +8.77398e-48 +1.15377e-41 +1.92415e-41 +6.99614e-42 +1.20799e-40 +3.07947e-40 +5.63405e-41 +4.77308e-42 +1.82833e-41 +3.21835e-43 +1.809e-42 +3.17589e-40 +4.05975e-41 +1.78268e-44 +4.64323e-43 +2.13083e-45 +1.60026e-41 +4.23514e-41 +9.14203e-42 +2.48103e-41 +2.99134e-42 +2.30735e-41 +4.35901e-44 +7.2413e-41 +3.64996e-41 +1.99468e-41 +4.77437e-43 +2.31938e-42 +1.61631e-40 +9.23483e-41 +5.90309e-42 +1.54292e-42 +6.12558e-41 +1.42724e-40 +3.39792e-41 +2.74261e-42 +3.7856e-41 +2.54658e-42 +3.51518e-41 +8.62627e-43 +2.17642e-40 +5.9267e-41 +7.70645e-43 +1.62999e-41 +5.22087e-43 +9.52574e-42 +1.14673e-42 +1.25832e-41 +4.92515e-42 +7.54233e-44 +3.65462e-41 +5.35268e-41 +3.63224e-42 +1.40239e-42 +9.0934e-41 +2.80519e-41 +3.74189e-45 +2.04458e-41 +1.45031e-43 +4.06137e-43 +2.28007e-42 +2.065e-41 +2.89786e-42 +1.78814e-43 +7.27014e-44 +1.10769e-43 +2.83267e-41 +2.77046e-42 +2.3659e-45 +7.61597e-43 +7.32803e-43 +1.31263e-43 +1.27157e-43 +4.10057e-43 +2.43082e-42 +1.2812e-42 +8.6528e-43 +8.32307e-43 +1.6649e-41 +2.98093e-47 +0 +3.76719e-44 +8.56131e-44 +4.45195e-43 +9.01764e-43 +4.87191e-42 +1.14491e-42 +4.50586e-42 +3.63426e-43 +4.163e-42 +1.04039e-41 +1.14304e-41 +1.1286e-43 +1.52536e-41 +3.89193e-41 +6.83009e-41 +9.63253e-41 +1.62701e-42 +2.40195e-42 +2.34583e-43 +4.32211e-44 +7.92842e-44 +6.06774e-43 +4.79265e-45 +2.87277e-43 +1.47663e-42 +4.13581e-45 +6.61019e-43 +9.39018e-42 +1.57535e-43 +1.48631e-42 +4.2278e-46 +3.24847e-45 +2.68798e-41 +2.99623e-45 +1.47385e-42 +2.51789e-43 +7.16387e-44 +1.09233e-43 +0 +2.41353e-45 +2.31722e-45 +0 +3.59142e-42 +4.38343e-42 +2.66186e-46 +1.34024e-42 +4.76461e-44 +1.54345e-43 +3.99973e-42 +3.43003e-42 +3.24417e-43 +4.84978e-42 +8.7339e-42 +6.77503e-43 +3.49196e-42 +5.98567e-42 +8.53335e-43 +9.22005e-45 +2.32423e-43 +2.25707e-43 +1.1011e-45 +3.89295e-42 +108.666 +110.217 +110.882 +113.875 +104.579 +108.535 +108.251 +26.0855 +0.0992887 +8.98379e-40 +1.81106e-48 +1.91257e-41 +2.811e-42 +1.45968e-41 +5.15712e-42 +3.19569e-43 +5.15094e-41 +2.73299e-41 +2.32424e-42 +7.59846e-42 +1.53065e-40 +5.15677e-43 +1.19033e-40 +1.90137e-41 +2.9981e-41 +2.3227e-43 +2.26468e-43 +9.33936e-42 +1.07975e-40 +6.89667e-43 +1.80165e-41 +5.16777e-42 +5.00296e-42 +1.14802e-41 +2.88912e-41 +1.07618e-41 +2.03364e-41 +4.25163e-42 +8.03698e-42 +3.18612e-41 +9.13654e-42 +1.007e-40 +2.4572e-40 +1.6169e-41 +3.43708e-41 +1.51371e-41 +3.9539e-43 +7.25373e-42 +0 +1.20818e-42 +3.51923e-41 +3.40741e-42 +1.19998e-41 +2.28428e-40 +3.79965e-44 +2.3446e-42 +8.39777e-41 +2.49746e-41 +6.28184e-43 +9.55591e-45 +2.48516e-43 +3.80382e-43 +1.85409e-42 +5.09275e-42 +8.01793e-42 +2.09845e-43 +5.46178e-42 +1.98805e-42 +1.92017e-41 +5.40967e-44 +2.75696e-42 +6.31529e-45 +2.05965e-41 +1.45173e-41 +9.84582e-42 +5.02341e-43 +1.81706e-44 +5.94848e-42 +8.25901e-43 +6.00079e-43 +1.56354e-41 +2.0101e-41 +6.78216e-44 +2.68965e-43 +1.38265e-42 +1.64233e-42 +7.4517e-47 +1.24516e-42 +1.20299e-42 +1.14242e-41 +1.12148e-42 +1.8401e-41 +5.26411e-42 +4.06543e-41 +2.83831e-45 +1.1222e-41 +1.69537e-43 +2.36391e-41 +6.65117e-44 +6.52447e-42 +4.95564e-43 +1.82004e-44 +1.72084e-44 +1.05588e-42 +4.29609e-43 +2.40922e-43 +1.49124e-44 +1.30243e-42 +1.2577e-42 +8.52377e-43 +1.28246e-44 +1.94127e-43 +3.28491e-42 +2.85089e-47 +9.51667e-42 +1.33759e-45 +7.52234e-42 +9.06679e-43 +3.27748e-44 +9.25239e-42 +9.49632e-41 +6.3749e-41 +7.67563e-41 +2.74195e-42 +1.8951e-41 +3.04053e-41 +7.35212e-45 +8.62902e-43 +2.72321e-41 +4.66878e-42 +4.97119e-44 +4.75756e-44 +2.93891e-42 +1.86361e-41 +6.6566e-43 +4.09988e-44 +2.12155e-43 +2.4393e-42 +1.57144e-42 +1.4894e-44 +1.43457e-41 +2.80824e-41 +2.01874e-42 +5.05404e-42 +1.87304e-42 +7.74124e-42 +1.97744e-41 +1.12045e-42 +3.14341e-42 +3.78301e-43 +1.26044e-43 +3.52155e-43 +1.38781e-42 +1.11438e-43 +2.29214e-43 +9.86313e-42 +2.90973e-43 +1.62603e-42 +4.65072e-43 +8.73163e-43 +1.45105e-42 +5.26641e-43 +3.64795e-47 +3.82473e-43 +1.079e-41 +4.42518e-44 +1.97953e-43 +5.20236e-43 +6.3115e-44 +8.18431e-42 +1.25003e-41 +1.50283e-42 +1.56753e-43 +3.30604e-43 +7.1343e-43 +6.82926e-43 +1.06767e-45 +7.49394e-43 +1.09744e-45 +0 +100.447 +101.65 +102.184 +97.2323 +102.912 +76.4645 +18.3197 +0.105466 +2.04675e-42 +1.06528e-41 +3.77072e-42 +2.92989e-41 +2.07395e-41 +2.74571e-40 +1.71775e-42 +1.89932e-41 +1.55351e-41 +8.28968e-44 +2.17391e-42 +0 +2.60232e-41 +3.77121e-41 +8.6781e-41 +6.2702e-41 +2.49565e-45 +3.40626e-40 +2.8611e-41 +4.49228e-41 +1.292e-41 +3.71577e-42 +4.28528e-40 +2.46369e-41 +2.04015e-40 +1.2204e-40 +1.48067e-41 +3.10306e-42 +5.87945e-42 +2.92071e-42 +3.54212e-43 +1.69405e-41 +3.33636e-43 +1.49769e-42 +5.94983e-42 +7.21662e-43 +2.99995e-41 +2.91216e-42 +1.36893e-41 +2.1915e-41 +0 +6.43488e-41 +3.12055e-42 +1.10308e-42 +7.798e-43 +1.15281e-45 +1.97882e-41 +2.67456e-42 +6.48155e-42 +5.86315e-44 +1.53465e-42 +4.01704e-41 +2.73487e-41 +8.99387e-46 +2.81791e-41 +2.08521e-42 +1.61913e-42 +5.21043e-43 +3.39838e-42 +4.96619e-41 +1.78234e-42 +3.6706e-42 +2.3969e-41 +1.27627e-43 +3.34311e-42 +5.39856e-41 +2.50673e-41 +1.18142e-40 +6.96972e-42 +8.58487e-42 +1.40936e-41 +3.76634e-45 +3.64775e-45 +4.30206e-43 +1.14196e-42 +2.06339e-43 +2.49758e-44 +2.4184e-41 +1.19904e-41 +2.83397e-45 +2.74451e-42 +3.32401e-43 +5.55442e-43 +4.3015e-42 +1.18395e-41 +5.04177e-43 +0 +7.49438e-43 +3.65477e-42 +1.89535e-41 +1.35837e-41 +6.57698e-43 +2.56363e-41 +7.35257e-42 +1.38885e-41 +2.2356e-42 +2.80797e-42 +3.45598e-42 +1.35265e-44 +1.95794e-42 +4.89146e-43 +8.02909e-42 +2.07985e-41 +4.42555e-43 +1.51479e-41 +1.46518e-41 +9.91809e-41 +8.20692e-43 +1.50507e-41 +5.38859e-43 +5.21874e-43 +6.74739e-42 +7.61006e-42 +1.58857e-42 +5.18253e-42 +1.34234e-41 +1.82397e-42 +1.25462e-41 +9.73602e-44 +8.3324e-46 +3.71429e-43 +6.81197e-41 +8.48961e-44 +2.67612e-42 +3.74476e-41 +1.3173e-43 +2.8946e-42 +7.11445e-44 +4.008e-43 +1.04593e-41 +4.7516e-42 +1.69931e-43 +3.06226e-44 +4.64121e-43 +3.06075e-42 +1.18242e-42 +4.60357e-41 +2.75564e-42 +8.5443e-43 +7.3713e-42 +1.4809e-42 +1.7993e-43 +3.12334e-42 +1.28019e-41 +2.79217e-45 +3.02978e-43 +3.6558e-41 +3.74343e-41 +2.01816e-41 +3.19745e-42 +2.02866e-42 +5.34971e-44 +9.28226e-42 +3.04256e-43 +8.64958e-42 +8.33471e-42 +2.04483e-43 +2.89993e-46 +3.29761e-43 +4.03045e-42 +1.77756e-43 +5.59521e-42 +2.8529e-43 +6.50126e-43 +1.2244e-45 +2.59544e-42 +1.77982e-41 +7.52737e-42 +1.32252e-43 +1.01995e-42 +1.23442e-43 +3.88196e-42 +92.7286 +90.7296 +71.3149 +52.5772 +22.2884 +2.68137 +0.00749476 +7.21692e-42 +1.89605e-40 +2.6518e-41 +1.55102e-43 +6.47198e-42 +2.44345e-41 +4.82303e-43 +2.17263e-42 +2.92246e-41 +3.21387e-41 +2.1308e-41 +9.8619e-41 +2.01686e-41 +6.21914e-42 +3.52845e-41 +7.14295e-42 +4.13737e-41 +1.32014e-41 +4.34717e-44 +3.42743e-41 +1.20745e-40 +1.53358e-40 +7.05819e-42 +1.74847e-43 +1.09459e-44 +4.46025e-42 +1.25099e-40 +4.28929e-43 +1.61766e-42 +2.88239e-41 +1.58865e-41 +7.1515e-44 +1.08649e-42 +2.2818e-43 +6.58463e-44 +6.39081e-44 +1.70636e-41 +9.18659e-41 +1.01469e-40 +6.14712e-41 +1.70653e-41 +7.67976e-41 +1.41556e-42 +1.39947e-41 +1.70139e-42 +2.06515e-42 +9.17822e-44 +8.64432e-42 +1.49139e-43 +1.30917e-40 +4.17306e-44 +7.92013e-41 +4.89538e-41 +3.06298e-43 +8.17344e-41 +1.62367e-40 +1.48151e-41 +2.48718e-41 +5.18468e-43 +1.72572e-43 +2.28052e-41 +1.02555e-40 +3.68947e-42 +7.87343e-42 +1.36812e-40 +4.23072e-43 +8.86601e-41 +1.48788e-40 +8.38764e-44 +1.23207e-41 +3.1107e-41 +3.02016e-41 +3.35099e-41 +1.94944e-42 +1.06396e-41 +6.14832e-41 +1.78486e-42 +6.52389e-42 +2.88352e-43 +1.54342e-40 +4.69556e-43 +1.69975e-44 +6.10219e-41 +2.7485e-41 +3.39154e-41 +1.49836e-41 +1.4942e-44 +3.81013e-43 +3.69751e-43 +8.16431e-42 +2.05042e-43 +1.95511e-43 +3.27806e-43 +1.95987e-42 +7.83911e-41 +7.09637e-43 +4.83264e-41 +1.03716e-40 +7.37956e-42 +1.00903e-44 +4.8766e-42 +6.73702e-42 +1.36303e-41 +1.90924e-41 +2.31453e-42 +2.2446e-42 +8.14471e-45 +1.2799e-42 +9.92183e-42 +1.95111e-43 +2.40324e-42 +1.17385e-41 +4.22224e-43 +8.82677e-41 +3.96131e-43 +7.98601e-42 +2.97909e-42 +4.6344e-44 +9.4438e-42 +2.2353e-42 +4.6771e-43 +0 +4.9534e-45 +4.80007e-45 +3.10465e-41 +1.79646e-41 +3.09793e-42 +8.90014e-43 +1.36822e-42 +8.49161e-42 +6.23422e-43 +9.98524e-43 +3.90578e-45 +5.87972e-42 +4.1196e-46 +1.34661e-42 +3.29169e-41 +1.53283e-42 +2.57879e-44 +3.57119e-43 +7.33991e-44 +1.11047e-42 +2.55137e-42 +6.74364e-44 +5.89159e-42 +1.99233e-41 +7.67871e-43 +1.37209e-41 +6.24967e-41 +6.8522e-45 +4.25743e-43 +1.22551e-43 +1.70491e-41 +2.23616e-43 +3.7342e-43 +3.30577e-47 +5.54739e-43 +1.28352e-44 +1.67953e-45 +3.16626e-43 +3.44803e-41 +4.70145e-43 +3.63007e-42 +8.24577e-44 +2.71729e-41 +4.03996e-42 +4.74183e-42 +7.67906e-42 +1.35926e-43 +5.36935e-43 +1.01229e-45 +1.52933e-41 +0 +16.8509 +11.1124 +4.75686 +1.05311 +0.014458 +2.20843e-43 +7.0475e-42 +6.59173e-41 +2.04352e-43 +5.46605e-43 +3.41013e-41 +2.95437e-40 +3.98501e-41 +0 +1.1945e-40 +9.41975e-41 +7.76899e-42 +3.86798e-41 +1.74943e-41 +0 +1.50417e-43 +1.46434e-43 +6.65828e-42 +6.48886e-42 +3.71915e-43 +1.8557e-40 +1.28716e-43 +2.20286e-41 +1.15041e-40 +8.11674e-41 +1.16188e-43 +1.56337e-42 +1.21867e-41 +1.85679e-43 +6.69601e-42 +1.79011e-41 +6.76809e-41 +7.16945e-42 +3.86315e-43 +8.12626e-41 +9.89607e-42 +1.66212e-40 +1.49152e-41 +1.29142e-40 +5.12646e-41 +2.2573e-41 +4.89487e-45 +1.60924e-41 +3.1857e-41 +2.03249e-41 +2.25622e-42 +1.47223e-42 +2.6756e-43 +8.94589e-42 +4.9573e-43 +1.62949e-42 +1.84833e-41 +4.45747e-41 +3.56787e-42 +9.53427e-42 +5.14614e-42 +3.29506e-45 +2.33914e-42 +2.27778e-42 +3.52295e-42 +5.20698e-41 +9.73684e-42 +1.10396e-40 +6.6697e-41 +1.55297e-41 +8.74917e-42 +8.27023e-41 +1.14641e-40 +1.5336e-43 +5.03018e-43 +6.22081e-42 +2.75864e-43 +4.72291e-42 +0 +2.03614e-42 +4.34968e-41 +1.05825e-40 +4.12405e-42 +3.15767e-42 +1.31744e-40 +8.86455e-43 +4.62166e-42 +8.39238e-43 +2.0053e-45 +1.03849e-46 +1.10161e-42 +1.46997e-42 +1.97774e-41 +4.78469e-43 +2.92524e-43 +6.14839e-41 +4.32913e-42 +8.03814e-44 +1.12391e-41 +9.70613e-45 +1.79476e-41 +1.96433e-41 +4.27253e-41 +4.33319e-42 +1.29145e-43 +8.22546e-45 +6.22882e-44 +9.46649e-43 +1.02373e-45 +2.45732e-42 +3.56902e-42 +3.46956e-42 +6.59029e-45 +1.3854e-42 +8.29738e-42 +5.1979e-42 +4.71479e-44 +5.73068e-45 +2.39444e-43 +1.85092e-44 +8.26712e-44 +1.10712e-42 +4.97939e-45 +1.04564e-42 +1.27455e-43 +5.72509e-43 +1.57489e-44 +2.73729e-41 +1.03393e-41 +5.10588e-46 +5.28918e-42 +1.04189e-43 +0 +1.53849e-42 +7.78268e-42 +6.72378e-42 +1.41136e-42 +4.06368e-46 +1.06669e-41 +5.99946e-42 +3.31616e-45 +1.48373e-42 +6.08164e-43 +2.24877e-44 +1.36302e-42 +1.88468e-42 +2.51085e-42 +4.0683e-43 +1.72531e-42 +3.83866e-43 +9.05498e-45 +4.74192e-43 +4.63086e-42 +6.90794e-42 +2.49446e-43 +4.24184e-42 +2.4962e-42 +3.97824e-43 +1.03075e-41 +2.2855e-42 +4.55254e-44 +3.53613e-43 +1.25619e-44 +3.30289e-43 +1.88257e-43 +1.18109e-44 +2.41185e-42 +2.97435e-42 +6.72823e-43 +1.6977e-42 +2.14089e-42 +2.6415e-42 +1.16611e-45 +3.10709e-42 +1.89774e-42 +1.07041e-42 +2.83926e-42 +6.59925e-44 +1.43145e-45 +0 +0.0081192 +1.50073e-41 +4.93273e-42 +1.47105e-43 +4.92053e-41 +4.58894e-42 +3.00158e-42 +1.87661e-41 +1.04232e-39 +1.7884e-41 +1.39669e-40 +2.6261e-44 +2.07794e-41 +3.32082e-41 +5.35087e-41 +5.13532e-42 +6.92372e-45 +1.81238e-43 +7.58717e-42 +1.75655e-42 +2.63529e-42 +9.53319e-44 +2.92284e-41 +5.807e-42 +2.54633e-41 +2.48549e-41 +1.48198e-41 +6.58941e-40 +5.1458e-42 +6.11071e-41 +4.03515e-40 +1.2929e-43 +2.00239e-40 +1.69755e-41 +1.82703e-40 +2.13357e-41 +1.52319e-40 +2.41267e-41 +3.67931e-40 +2.16238e-40 +9.38042e-41 +8.1098e-43 +1.8758e-42 +1.60622e-41 +0 +6.14284e-40 +6.54243e-41 +9.66401e-41 +1.3574e-40 +3.0708e-41 +8.27384e-42 +2.53526e-41 +5.65236e-41 +2.24213e-41 +3.42236e-43 +2.66891e-42 +5.72302e-42 +1.28741e-40 +2.91798e-40 +3.78176e-44 +1.29598e-40 +7.77847e-45 +7.59034e-45 +6.53787e-41 +1.37053e-40 +2.88882e-41 +6.99768e-43 +5.45943e-42 +7.95523e-42 +9.71538e-43 +2.31295e-43 +3.16978e-41 +0 +8.43616e-42 +1.07215e-43 +4.08704e-40 +3.50131e-41 +5.33995e-43 +1.21448e-44 +1.5772e-41 +9.91165e-42 +3.04759e-43 +1.37548e-42 +2.94591e-41 +1.63648e-40 +1.27723e-42 +9.23167e-41 +1.29437e-41 +6.08218e-43 +3.16181e-44 +3.04719e-44 +7.0462e-44 +1.51015e-40 +8.38393e-42 +1.08825e-41 +1.06181e-41 +5.33637e-41 +9.48647e-43 +7.60709e-45 +1.00358e-45 +2.41729e-42 +2.09451e-41 +2.87965e-43 +1.76483e-43 +7.9781e-43 +5.00893e-44 +2.60043e-43 +2.02093e-44 +6.14386e-41 +4.17281e-41 +1.50819e-42 +3.9034e-42 +2.56498e-41 +1.74628e-42 +8.72684e-41 +2.97376e-42 +5.46803e-42 +3.96749e-41 +1.67241e-41 +2.80296e-43 +2.1867e-42 +9.00287e-43 +1.7142e-42 +8.56083e-43 +8.48436e-42 +8.2745e-42 +5.58562e-42 +3.58037e-45 +1.4968e-43 +3.62457e-41 +3.31993e-42 +1.5899e-41 +3.59479e-41 +2.81854e-43 +0 +4.86526e-43 +3.46884e-41 +2.22365e-44 +3.01295e-45 +2.64475e-42 +3.43112e-42 +1.46628e-41 +4.22958e-42 +8.88961e-42 +3.21552e-41 +2.83432e-43 +3.81941e-42 +7.40674e-43 +4.53642e-43 +2.3793e-42 +5.65288e-44 +1.33407e-41 +9.7064e-43 +5.05005e-44 +1.16055e-43 +8.98726e-43 +3.3911e-47 +9.72743e-42 +2.53955e-41 +4.32835e-44 +1.12517e-42 +9.69279e-44 +0 +1.04702e-42 +2.40731e-42 +6.99318e-43 +4.46355e-42 +1.61013e-43 +8.08824e-44 +1.55575e-43 +7.62695e-44 +3.9828e-43 +9.30081e-45 +0 +1.43473e-42 +2.28792e-43 +9.44164e-42 +3.56948e-41 +2.61399e-41 +1.49492e-46 +9.6896e-42 +1.36817e-41 +6.48109e-41 +2.67272e-41 +3.58373e-40 +9.45618e-43 +1.22057e-41 +9.54385e-41 +6.63626e-43 +2.54878e-41 +1.3928e-42 +1.70147e-40 +7.5699e-44 +3.03594e-43 +4.92874e-41 +5.23765e-42 +4.45294e-45 +1.48276e-42 +9.27597e-41 +1.39404e-41 +2.35464e-41 +1.66492e-42 +1.97532e-42 +1.03573e-42 +4.73458e-46 +9.24986e-41 +3.50034e-41 +9.44699e-42 +4.21133e-43 +3.28971e-45 +1.50035e-40 +3.92936e-43 +1.37476e-40 +2.47254e-40 +1.71248e-41 +3.58805e-40 +3.50841e-43 +1.4044e-42 +1.35821e-40 +7.07733e-44 +7.27032e-41 +2.89997e-42 +1.10005e-41 +1.22618e-42 +5.79835e-48 +1.33433e-41 +1.97081e-40 +5.61313e-41 +3.25073e-42 +1.02659e-41 +1.30737e-43 +7.50793e-41 +1.90033e-40 +4.72913e-48 +2.27032e-41 +5.00981e-43 +3.51036e-41 +4.78506e-42 +7.19135e-43 +6.26553e-41 +2.47797e-42 +4.85684e-42 +1.06819e-41 +1.21807e-41 +7.54026e-41 +5.00321e-43 +2.50095e-41 +2.404e-42 +1.80433e-40 +2.07802e-41 +6.06654e-41 +2.19677e-42 +6.36672e-43 +8.8625e-43 +4.67038e-41 +1.23709e-41 +3.83573e-42 +8.09696e-43 +1.90875e-41 +7.7436e-43 +2.849e-42 +1.12275e-40 +9.92658e-46 +1.03352e-41 +2.57033e-44 +2.29937e-48 +5.29217e-42 +1.0796e-41 +5.5911e-44 +1.06052e-43 +1.04159e-43 +6.49e-42 +4.62647e-42 +2.12981e-42 +1.63851e-43 +3.03969e-42 +8.02227e-41 +1.85955e-40 +4.43991e-41 +1.83159e-41 +8.29237e-44 +8.14501e-44 +1.37038e-43 +1.07212e-42 +1.80781e-41 +1.30368e-42 +3.71403e-44 +4.54155e-42 +1.3537e-41 +7.25132e-43 +2.47692e-41 +2.13036e-42 +5.07803e-43 +1.21127e-41 +3.33168e-42 +2.43239e-43 +3.05581e-44 +1.10852e-41 +3.55986e-42 +1.19363e-42 +8.37103e-42 +4.15917e-43 +1.89867e-41 +2.94824e-41 +3.11369e-45 +1.0279e-44 +1.52529e-42 +9.83486e-45 +1.20252e-42 +3.48912e-43 +1.11727e-41 +4.61027e-42 +1.05835e-44 +1.31613e-42 +2.7768e-45 +1.00071e-41 +4.66799e-42 +2.93544e-43 +3.57452e-41 +7.92375e-45 +1.50195e-41 +1.56335e-42 +1.79637e-42 +8.66453e-43 +2.51781e-43 +6.72979e-43 +5.24634e-44 +2.00028e-41 +3.96911e-43 +3.3041e-46 +4.80765e-44 +2.68979e-41 +3.70231e-42 +1.13057e-41 +3.54231e-42 +1.91954e-41 +1.12539e-42 +1.89654e-43 +3.99102e-44 +3.96904e-42 +1.03185e-42 +1.13866e-44 +3.65972e-44 +1.32791e-42 +1.20246e-41 +6.25074e-42 +1.55404e-43 +7.78691e-44 +4.87946e-42 +9.32573e-42 +3.07958e-44 +1.11755e-42 +5.60368e-43 +7.33715e-42 +5.36826e-43 +2.79997e-44 +6.59489e-44 +1.19525e-41 +2.11634e-42 +3.85881e-42 +1.49534e-41 +1.76494e-41 +9.86872e-41 +5.19955e-41 +1.01066e-42 +1.6176e-41 +2.01067e-40 +9.78158e-41 +2.15898e-43 +2.44557e-40 +1.45111e-41 +2.30413e-42 +2.29332e-41 +4.60324e-42 +2.1961e-41 +9.78168e-42 +7.78376e-42 +2.95544e-41 +1.39073e-42 +5.23226e-41 +1.66567e-43 +9.1496e-41 +5.46982e-41 +6.69818e-43 +1.64495e-40 +5.12783e-41 +3.36221e-41 +5.86597e-40 +1.5095e-40 +7.35395e-43 +1.52963e-42 +3.02034e-41 +9.37934e-41 +1.14764e-41 +6.50088e-45 +9.65478e-43 +1.07643e-41 +1.80677e-42 +7.46256e-43 +1.19332e-40 +1.93071e-41 +4.55703e-43 +6.04961e-42 +2.74873e-42 +1.80292e-42 +3.34926e-42 +5.36355e-41 +4.01194e-42 +1.53334e-40 +7.17225e-43 +1.18165e-41 +1.74293e-41 +1.05202e-41 +9.387e-43 +1.57783e-43 +3.50313e-41 +3.32038e-43 +1.00858e-40 +2.15772e-41 +1.66991e-41 +1.38999e-43 +1.24246e-40 +1.41479e-40 +3.5858e-41 +3.45281e-45 +1.16111e-42 +1.53347e-44 +1.20159e-43 +2.0686e-42 +6.72563e-43 +1.56137e-42 +1.94261e-41 +5.94628e-42 +8.72616e-46 +1.82795e-42 +1.40852e-42 +7.27539e-41 +6.25751e-45 +2.28297e-41 +2.02743e-41 +3.01441e-42 +7.21554e-43 +3.61584e-43 +1.68769e-41 +4.36942e-44 +2.38801e-41 +8.14762e-44 +2.61342e-42 +6.25439e-43 +7.45553e-42 +3.08e-43 +1.27132e-40 +1.12548e-40 +1.37888e-41 +9.74125e-42 +2.53438e-41 +7.06244e-41 +3.36302e-44 +1.12303e-41 +4.01202e-45 +1.32741e-44 +1.30149e-41 +6.29498e-43 +1.87728e-40 +1.48836e-41 +7.69557e-43 +3.49334e-45 +5.69897e-43 +4.66818e-46 +4.57768e-46 +2.60175e-44 +4.40236e-46 +2.50229e-44 +6.58088e-43 +3.7352e-43 +1.50124e-42 +2.0964e-42 +2.27137e-44 +7.59432e-42 +5.04977e-41 +7.20903e-44 +1.52298e-41 +2.96587e-42 +1.06097e-42 +6.76757e-42 +1.7945e-41 +5.84232e-42 +1.9984e-42 +3.58854e-44 +4.3836e-42 +5.42173e-42 +5.31797e-42 +7.2929e-43 +4.06984e-42 +3.24997e-44 +3.135e-44 +3.61975e-46 +3.80655e-41 +3.28291e-42 +5.11444e-42 +1.83207e-42 +1.13777e-41 +1.28635e-42 +1.13959e-43 +2.26704e-42 +2.88797e-42 +1.19825e-42 +4.40639e-44 +1.26695e-41 +4.25173e-44 +1.11411e-42 +1.59871e-41 +6.32458e-44 +2.13089e-45 +1.78018e-43 +2.41824e-42 +5.89641e-44 +8.70947e-44 +6.81289e-43 +2.82879e-43 +5.25673e-42 +2.18168e-42 +3.40322e-42 +3.2922e-44 +1.52499e-43 +1.7331e-45 +2.28193e-41 +4.66916e-42 +2.46464e-42 +9.06454e-45 +1.35572e-43 +5.47181e-43 +7.6616e-43 +6.6085e-44 +8.12988e-42 +3.4289e-43 +2.10242e-45 +1.07641e-45 +4.8869e-43 +3.84149e-42 +9.42416e-42 +3.76914e-42 +5.24243e-43 +2.04756e-41 +5.11368e-42 +1.16723e-42 +1.09681e-41 +3.32548e-42 +2.14142e-42 +5.75516e-42 +8.66746e-43 +7.23087e-41 +1.79591e-40 +1.23548e-43 +2.87648e-42 +4.75524e-41 +3.57143e-41 +3.47157e-42 +2.11855e-41 +3.0766e-40 +9.16991e-41 +5.52549e-42 +0 +2.45544e-44 +1.05609e-41 +4.14291e-43 +9.07837e-43 +4.41539e-42 +3.1179e-42 +4.99751e-41 +1.09016e-41 +4.79892e-41 +7.46781e-41 +2.01937e-40 +1.03452e-40 +4.15725e-42 +3.42514e-41 +1.79947e-42 +6.36338e-41 +5.99424e-41 +6.49783e-42 +2.94868e-44 +1.1399e-41 +5.373e-43 +1.02875e-42 +1.39419e-41 +1.63944e-41 +2.12997e-42 +4.81385e-41 +5.96344e-44 +2.50899e-43 +9.53914e-42 +3.70752e-43 +3.86924e-42 +6.95252e-41 +1.61778e-42 +1.78464e-42 +1.56804e-41 +8.31943e-42 +4.04106e-41 +9.97019e-41 +1.61968e-42 +7.23141e-43 +4.13694e-42 +8.69816e-44 +1.50073e-42 +1.308e-42 +9.99254e-43 +7.84352e-42 +1.73551e-42 +5.46873e-41 +5.1872e-41 +2.0167e-45 +4.02318e-42 +3.68918e-44 +2.38368e-43 +3.23274e-42 +2.67268e-42 +3.42317e-44 +9.75393e-42 +4.22938e-45 +3.25449e-44 +4.95938e-43 +6.72889e-42 +1.42369e-41 +6.24668e-43 +8.09791e-42 +4.52521e-43 +4.56504e-46 +9.42334e-44 +2.49872e-42 +4.21257e-43 +2.11608e-43 +1.66279e-42 +1.09482e-42 +2.68682e-42 +2.11161e-41 +1.07103e-44 +8.15414e-42 +8.01846e-43 +6.30732e-42 +1.21148e-43 +9.46507e-45 +1.14927e-42 +1.83571e-41 +1.22723e-40 +3.59344e-46 +2.0473e-44 +0 +1.57488e-43 +6.20137e-41 +1.01822e-43 +3.64905e-41 +4.52041e-41 +3.74499e-41 +1.90512e-42 +7.46434e-45 +2.86065e-42 +1.08252e-42 +8.91831e-44 +1.04828e-42 +6.8794e-45 +1.44455e-42 +2.00385e-45 +5.18181e-44 +3.51531e-41 +3.0831e-41 +3.95666e-43 +1.91921e-41 +3.89855e-42 +7.37003e-43 +1.48207e-41 +2.92756e-42 +1.52053e-43 +4.43766e-44 +1.18029e-42 +6.75869e-43 +7.06024e-42 +4.23213e-44 +9.76622e-44 +1.09635e-42 +1.6481e-45 +5.98487e-42 +1.80847e-43 +1.89025e-42 +1.40034e-42 +3.80222e-43 +7.9427e-42 +1.2241e-43 +1.47334e-45 +0 +9.40328e-43 +1.69415e-42 +3.83759e-42 +6.35896e-43 +1.04934e-42 +5.09752e-43 +8.6973e-43 +1.01502e-42 +3.14159e-44 +9.19439e-45 +6.08488e-42 +5.74342e-43 +3.80203e-43 +4.86636e-44 +6.85804e-42 +1.9923e-41 +1.40862e-42 +1.66402e-44 +4.24121e-42 +1.77044e-42 +1.23256e-41 +1.47338e-45 +1.05601e-41 +2.68275e-44 +3.33305e-43 +9.66353e-43 +3.90254e-42 +1.63191e-42 +3.06325e-41 +1.37399e-41 +1.07721e-40 +2.54858e-43 +1.03463e-40 +2.28472e-40 +6.71237e-43 +2.48211e-40 +8.07946e-42 +3.06144e-41 +1.5185e-40 +1.12406e-41 +2.12081e-41 +2.07902e-41 +1.05895e-41 +1.37477e-40 +4.40964e-40 +5.40417e-41 +6.48087e-41 +3.31726e-41 +1.70597e-44 +2.8906e-44 +2.30454e-41 +4.80307e-41 +8.69738e-42 +1.74013e-41 +1.48684e-40 +1.15865e-41 +3.35647e-41 +1.7892e-42 +1.40551e-44 +1.07236e-41 +5.04213e-42 +5.84524e-41 +1.04114e-43 +3.06862e-41 +9.74321e-42 +1.82751e-40 +1.20446e-44 +6.22578e-41 +2.79025e-41 +5.82621e-42 +9.17966e-47 +4.83363e-41 +2.56307e-42 +1.98652e-40 +5.45729e-41 +6.50921e-43 +1.12266e-41 +2.33486e-42 +5.0663e-41 +5.14704e-41 +1.3732e-41 +9.13986e-45 +4.87092e-41 +6.83113e-42 +0 +3.15722e-42 +1.16804e-42 +3.04494e-42 +2.99043e-42 +1.10645e-42 +7.7892e-41 +5.91189e-42 +1.77743e-42 +2.57292e-41 +1.20759e-40 +5.5066e-42 +2.95407e-41 +9.59203e-42 +1.61418e-41 +4.2193e-43 +5.1832e-44 +1.82451e-40 +2.33681e-42 +1.46954e-40 +1.63275e-43 +4.62933e-42 +2.05243e-41 +1.26208e-43 +1.22035e-42 +7.04756e-48 +7.67543e-42 +2.00528e-42 +3.38261e-43 +1.7037e-43 +8.39917e-42 +6.95166e-44 +8.98342e-42 +4.73848e-43 +1.37119e-41 +4.01402e-43 +2.03572e-42 +3.6508e-44 +3.06096e-42 +1.55252e-41 +2.03103e-43 +5.92222e-44 +4.10875e-43 +2.73109e-46 +1.90847e-43 +1.41426e-41 +7.56134e-42 +1.61093e-44 +8.85015e-42 +6.73027e-45 +8.06574e-43 +1.5071e-41 +1.17565e-41 +3.04613e-43 +1.31603e-42 +6.61715e-42 +2.19195e-43 +0 +2.6603e-44 +9.79182e-42 +1.33358e-44 +5.60377e-43 +2.78306e-42 +3.91133e-42 +9.62972e-43 +1.64689e-41 +1.73876e-41 +2.09331e-46 +3.21114e-43 +7.86571e-42 +8.45029e-42 +3.93119e-43 +1.76584e-43 +7.14646e-43 +7.05592e-43 +3.34958e-42 +1.74564e-41 +6.80522e-43 +1.05808e-44 +6.95836e-42 +4.33179e-42 +4.28283e-45 +2.75685e-42 +5.2355e-43 +5.26301e-44 +6.21759e-43 +1.88568e-44 +0 +7.22745e-43 +2.01351e-42 +1.53524e-42 +6.66358e-42 +3.10418e-42 +2.4624e-42 +4.54769e-42 +6.75934e-43 +7.02699e-44 +1.68907e-44 +4.59546e-44 +5.44223e-43 +6.6756e-42 +1.92231e-46 +8.30361e-45 +4.35457e-43 +1.59795e-41 +6.54372e-44 +2.18509e-43 +9.12955e-44 +5.80565e-42 +2.71705e-43 +3.66252e-42 +7.82367e-42 +1.18369e-41 +3.26584e-42 +1.88202e-42 +4.2577e-44 +1.3192e-41 +4.67105e-42 +7.57428e-45 +2.87627e-42 +2.03134e-43 +3.32052e-45 +1.82797e-42 +1.16641e-46 +3.0517e-41 +3.00981e-42 +1.62566e-42 +3.33397e-41 +6.75897e-41 +3.26113e-40 +9.5827e-41 +2.99025e-41 +1.11757e-40 +0 +1.55872e-41 +1.56914e-43 +2.77286e-41 +1.50641e-43 +5.33874e-40 +6.47114e-42 +1.52637e-40 +6.34112e-41 +1.1641e-39 +1.23536e-42 +8.60862e-41 +7.06431e-41 +2.92089e-41 +3.49191e-42 +2.12017e-42 +1.56845e-41 +4.32573e-41 +7.48068e-41 +1.1148e-43 +4.07441e-41 +1.73598e-40 +1.5137e-40 +8.00858e-41 +6.94933e-42 +1.83959e-40 +2.91512e-41 +1.16419e-40 +7.45654e-43 +6.01667e-41 +0 +1.09942e-44 +3.21584e-41 +1.48382e-41 +1.29471e-42 +3.03323e-41 +1.39972e-41 +1.037e-41 +1.65747e-44 +2.26206e-41 +9.23198e-45 +1.72476e-41 +2.30145e-40 +1.22414e-42 +6.236e-41 +6.70533e-44 +1.89087e-41 +1.13328e-41 +5.06551e-43 +5.67058e-41 +2.27564e-41 +2.14138e-41 +7.78862e-42 +1.55626e-42 +7.12419e-41 +1.25991e-41 +8.95153e-41 +7.09394e-42 +1.5092e-41 +3.39341e-41 +7.10729e-41 +7.76147e-43 +1.40184e-41 +5.98429e-45 +1.26934e-42 +1.5578e-43 +2.4991e-41 +6.42234e-41 +1.3028e-42 +3.18316e-40 +1.69484e-40 +4.03102e-42 +2.8038e-42 +2.63136e-41 +1.06038e-42 +1.15988e-41 +3.68782e-42 +4.93794e-42 +9.87677e-43 +3.81404e-41 +2.82544e-43 +4.35759e-45 +8.02501e-41 +4.71395e-42 +1.22996e-41 +9.47176e-41 +9.31085e-41 +4.15291e-42 +1.43591e-42 +2.67695e-41 +2.80009e-41 +4.63891e-48 +7.89388e-44 +1.55253e-42 +2.37038e-42 +7.50977e-41 +4.88834e-41 +3.31021e-45 +1.21548e-42 +9.17543e-42 +5.53911e-43 +1.27925e-44 +1.25885e-44 +1.40341e-43 +3.72442e-42 +4.08842e-42 +7.86062e-42 +8.86965e-43 +3.83763e-44 +4.58563e-41 +5.13189e-42 +1.16374e-42 +2.30958e-42 +1.75216e-42 +4.42871e-45 +4.75589e-42 +3.45709e-43 +1.54931e-46 +6.2555e-43 +4.48144e-42 +1.96661e-41 +1.00708e-41 +1.53387e-42 +4.65211e-42 +6.38987e-41 +1.52618e-41 +3.6741e-45 +2.94584e-42 +1.28832e-41 +5.34949e-43 +2.79014e-44 +3.78497e-42 +2.46743e-42 +8.52565e-42 +3.6369e-42 +1.20494e-46 +4.87396e-43 +7.21126e-41 +1.92898e-41 +7.327e-42 +6.46521e-41 +5.65657e-42 +1.93919e-42 +2.39377e-42 +3.52864e-42 +1.38315e-44 +2.29956e-44 +7.13295e-43 +1.51106e-46 +1.35257e-43 +9.15775e-42 +1.55294e-42 +1.04682e-42 +3.18841e-42 +4.72807e-43 +7.62727e-43 +1.25123e-41 +1.72807e-41 +6.07584e-45 +1.28655e-41 +6.60522e-44 +9.0147e-44 +4.67839e-44 +7.05681e-43 +7.44066e-42 +4.75003e-42 +1.85383e-44 +5.86569e-42 +8.98815e-43 +4.88357e-43 +1.0109e-42 +2.70187e-42 +2.65157e-41 +9.74626e-40 +2.61416e-43 +5.37066e-40 +3.13606e-44 +9.1531e-43 +4.22885e-41 +2.03248e-42 +2.48916e-40 +1.03391e-40 +2.21895e-43 +2.71774e-44 +2.66298e-44 +2.60939e-47 +4.75813e-41 +6.76536e-43 +4.11945e-40 +7.03627e-41 +3.13863e-44 +5.4632e-40 +5.35423e-40 +5.50004e-50 +1.37754e-40 +2.19127e-47 +1.10109e-40 +3.81241e-41 +2.66393e-42 +1.98384e-40 +1.54377e-43 +4.45051e-41 +5.42296e-41 +0 +4.24807e-42 +2.52154e-41 +3.01146e-40 +8.85007e-41 +1.41911e-40 +7.37398e-42 +3.77467e-42 +0 +1.91218e-45 +3.39021e-42 +3.32481e-42 +1.25584e-40 +1.37144e-42 +2.6349e-41 +9.15108e-41 +1.62876e-41 +1.26949e-42 +1.27932e-44 +3.60806e-42 +2.93432e-42 +5.3026e-42 +4.32801e-41 +7.92332e-42 +1.6027e-41 +8.95464e-44 +4.82144e-42 +1.49107e-43 +5.83158e-42 +3.64508e-41 +9.91715e-43 +0 +3.66244e-42 +9.37454e-43 +8.89776e-42 +1.63101e-43 +3.73127e-44 +2.13133e-42 +4.62509e-41 +8.62913e-45 +1.94648e-41 +3.66537e-41 +2.43646e-41 +4.99132e-41 +1.2477e-48 +3.39209e-42 +5.17163e-42 +7.25497e-43 +5.42427e-43 +4.19383e-41 +3.35216e-42 +2.86185e-44 +3.49039e-45 +9.41739e-43 +2.88869e-42 +1.69926e-41 +9.41292e-42 +2.33053e-42 +6.13585e-42 +1.58476e-41 +3.51289e-42 +6.2252e-44 +4.18076e-41 +2.21314e-43 +6.2193e-41 +4.23614e-42 +9.61953e-41 +6.9128e-41 +5.03364e-43 +2.37268e-43 +2.56083e-42 +6.91082e-42 +8.49634e-43 +1.2849e-43 +2.99688e-43 +2.94744e-43 +1.85592e-41 +1.5046e-41 +1.79987e-44 +3.36155e-42 +3.39855e-47 +6.63007e-49 +1.11113e-43 +2.59256e-43 +2.8225e-41 +4.94557e-42 +5.43505e-43 +6.5771e-42 +8.19465e-46 +0 +4.42308e-41 +7.51008e-42 +6.40564e-42 +2.53711e-41 +4.28015e-43 +1.33052e-41 +1.75122e-41 +4.09074e-41 +2.75278e-43 +2.16922e-42 +1.14585e-41 +1.26682e-41 +5.53794e-42 +4.94047e-42 +2.37225e-44 +1.73384e-42 +8.2934e-43 +3.02035e-42 +6.69095e-43 +1.41827e-42 +7.17787e-43 +3.39874e-42 +1.89464e-46 +1.34568e-45 +2.47237e-41 +8.99753e-42 +2.03272e-44 +1.55644e-41 +1.26343e-42 +2.6958e-43 +4.22926e-43 +1.90363e-44 +1.09711e-43 +1.10198e-41 +8.5774e-43 +1.1628e-45 +9.19831e-42 +1.89328e-43 +8.20001e-43 +3.06251e-43 +2.41754e-42 +2.6977e-48 +1.8633e-42 +2.92797e-42 +4.45373e-43 +1.80615e-42 +2.79457e-44 +5.49437e-42 +6.96484e-42 +1.87248e-41 +1.21291e-41 +1.9297e-42 +4.2368e-44 +2.62171e-44 +6.2048e-44 +4.88964e-43 +1.12914e-05 +0.000675573 +0.00369093 +1.07994e-39 +4.30545e-41 +4.49811e-42 +3.52522e-41 +4.17424e-41 +2.86118e-41 +1.98609e-42 +1.70842e-43 +1.21728e-42 +0 +6.8887e-42 +1.29717e-43 +2.93255e-41 +2.03468e-41 +8.61809e-42 +1.06575e-41 +3.47338e-44 +3.4029e-44 +3.13874e-41 +1.54969e-40 +2.96655e-43 +8.25025e-41 +9.25397e-42 +2.34833e-41 +1.05797e-41 +2.72695e-41 +9.58978e-44 +1.91875e-42 +1.5047e-41 +2.14081e-43 +6.31041e-41 +8.33521e-41 +3.06701e-40 +4.34393e-43 +3.02888e-45 +5.39266e-42 +2.1261e-41 +4.25062e-41 +8.01668e-42 +5.44212e-50 +1.00493e-42 +5.70317e-43 +3.40361e-41 +3.56789e-42 +4.52309e-42 +5.27738e-43 +1.22682e-42 +1.88026e-47 +3.03038e-41 +3.44955e-41 +4.02853e-42 +4.70167e-43 +3.7009e-45 +5.49208e-43 +2.19049e-44 +5.44485e-44 +1.58471e-44 +9.6762e-41 +1.04547e-40 +5.58286e-42 +2.06228e-41 +2.53238e-43 +2.89611e-41 +1.11014e-43 +1.08964e-43 +4.99011e-42 +9.0455e-43 +2.11669e-41 +5.55176e-42 +1.24162e-44 +5.35114e-42 +5.25402e-42 +4.81555e-44 +5.08989e-41 +3.12102e-40 +3.32263e-41 +4.07888e-42 +1.88662e-43 +1.48092e-41 +3.86445e-42 +1.42877e-41 +2.62544e-41 +7.27247e-43 +1.02312e-41 +5.90051e-41 +5.13126e-42 +6.6765e-41 +1.63158e-41 +0 +5.91323e-42 +3.76157e-41 +2.54553e-40 +6.59769e-44 +5.3255e-46 +3.71893e-43 +2.11287e-43 +2.07825e-43 +4.17065e-42 +3.52975e-42 +6.4705e-42 +2.94582e-44 +1.90968e-43 +4.74076e-42 +2.55376e-42 +1.84673e-44 +6.23108e-42 +2.66777e-41 +1.25023e-42 +8.07812e-41 +2.31571e-42 +4.52289e-43 +1.57492e-42 +1.03993e-43 +6.17639e-42 +4.86356e-41 +2.30996e-44 +1.74593e-42 +1.91973e-41 +3.35314e-41 +7.33291e-44 +9.16834e-43 +7.22313e-42 +1.20686e-42 +3.88448e-42 +2.01629e-44 +1.58717e-43 +3.81641e-44 +1.29005e-41 +3.15709e-42 +2.13103e-43 +3.28622e-41 +6.15188e-44 +4.37391e-45 +9.04427e-42 +3.61021e-41 +2.09664e-05 +0.000278673 +0.00111509 +0.00290764 +0.00607105 +0.0110604 +0.0183744 +0.0285588 +0.0422102 +0.0599798 +0.0825786 +0.110781 +0.145431 +0.187447 +0.237827 +0.297658 +0.368118 +0.45049 +0.546163 +0.656647 +0.783576 +0.928727 +1.09402 +1.28154 +1.49355 +1.7325 +2.00102 +2.302 +2.63853 +3.01399 +3.43202 +3.89655 +4.41186 +4.98258 +5.6137 +6.31065 +7.0793 +7.92599 +8.85762 +9.88164 +11.0061 +12.2374 +13.4933 +14.6729 +15.9381 +8.46047e-41 +1.41026e-39 +1.07379e-40 +4.21595e-41 +3.59727e-40 +2.7104e-40 +7.54362e-45 +5.74089e-42 +1.07532e-40 +9.30241e-41 +2.07055e-41 +7.84284e-41 +4.14726e-41 +6.92283e-42 +2.69401e-40 +2.28779e-41 +2.29116e-42 +1.43367e-42 +6.62592e-41 +1.89338e-43 +9.78442e-45 +5.5495e-45 +2.03014e-42 +5.33694e-45 +4.0689e-42 +5.12745e-45 +3.21335e-43 +0 +1.76196e-41 +8.5877e-42 +3.70901e-44 +4.56522e-45 +1.2033e-43 +1.63068e-42 +1.15668e-43 +1.85256e-41 +2.16941e-41 +2.06747e-42 +5.86628e-42 +3.0235e-42 +8.22443e-43 +5.53217e-42 +1.61529e-41 +1.02905e-40 +7.60937e-43 +7.946e-42 +5.85559e-45 +2.65908e-47 +1.02003e-06 +1.57658e-05 +6.52465e-05 +0.00017205 +0.000360313 +0.000655804 +0.00108601 +0.00168024 +0.00246969 +0.00348758 +0.00476925 +0.00635226 +0.00827651 +0.0105844 +0.0133209 +0.0165337 +0.0202735 +0.0245938 +0.0295516 +0.035207 +0.0416237 +0.0488693 +0.057015 +0.0661366 +0.0763137 +0.0876309 +0.100177 +0.114048 +0.129341 +0.146163 +0.164625 +0.184844 +0.206945 +0.231058 +0.257321 +0.28588 +0.316889 +0.350511 +0.386916 +0.426286 +0.46881 +0.514691 +0.56414 +0.617381 +0.674649 +0.736195 +0.802278 +0.873177 +0.949184 +1.0306 +1.11776 +1.211 +1.31069 +1.41719 +1.53091 +1.65228 +1.78174 +1.91977 +2.06684 +2.2235 +2.39029 +2.56779 +2.75661 +2.9574 +3.17085 +3.39768 +3.63864 +3.89453 +4.1662 +4.45455 +4.76051 +5.08509 +5.42932 +5.79432 +6.18125 +6.59136 +7.02595 +7.48639 +7.97415 +8.49076 +9.03784 +9.61711 +10.2304 +10.8796 +11.5668 +12.2941 +13.0608 +13.7548 +14.4381 +15.1511 +15.8967 +16.6762 +17.4912 +18.3434 +19.2342 +20.1655 +21.1391 +22.1567 +23.2205 +24.3325 +25.4948 +26.7097 +27.9796 +29.3069 +30.6942 +32.1443 +33.66 +35.2443 +36.9003 +38.6312 +40.4406 +42.3321 +44.3093 +46.3763 +48.5372 +50.7964 +53.1584 +55.6282 +58.2106 +60.9111 +63.7351 +66.6886 +69.7776 +73.0088 +76.3887 +79.9247 +83.6242 +87.4951 +91.5458 +94.3805 +94.658 +94.9405 +4.62573 +4.7239 +4.82446 +4.92749 +5.03306 +5.14123 +5.25208 +5.36568 +5.4821 +5.60143 +5.72374 +5.84912 +5.97765 +6.10942 +6.24453 +6.38306 +6.52511 +6.67078 +6.82018 +6.97341 +7.13058 +7.2918 +7.45719 +7.62687 +7.80096 +7.97959 +8.16289 +8.351 +8.54406 +8.74221 +8.9456 +9.15439 +9.36873 +9.5888 +9.81475 +10.0468 +10.285 +10.5297 +10.7811 +11.0392 +11.3044 +11.5768 +11.8567 +12.1443 +12.4398 +12.7435 +13.0557 +13.3745 +13.6594 +13.9295 +14.2045 +14.4858 +14.7737 +15.0682 +15.3697 +15.6781 +15.9938 +16.3169 +16.6476 +16.9862 +17.3327 +17.6875 +18.0507 +18.4226 +18.8034 +19.1933 +19.5926 +20.0016 +20.4205 +20.8495 +21.289 +21.7393 +22.2005 +22.6731 +23.1573 +23.6535 +24.162 +24.6831 +25.2172 +25.7647 +26.3259 +26.9011 +27.4909 +28.0956 +28.7157 +29.3515 +30.0035 +30.6723 +31.3582 +32.0617 +32.7835 +33.5239 +34.2835 +35.063 +35.8629 +36.6837 +37.5261 +38.3907 +39.2783 +40.1894 +41.1248 +42.0852 +43.0713 +44.084 +45.124 +46.1922 +47.2894 +48.4165 +49.5744 +50.764 +51.9865 +53.2426 +54.5336 +55.8605 +57.2245 +58.6266 +60.0681 +61.5502 +63.0743 +64.6417 +66.2537 +67.9118 +69.6174 +71.3722 +73.1777 +75.0356 +76.9476 +78.9155 +80.941 +83.0262 +85.1731 +87.3836 +89.6599 +92.0043 +94.419 +95.1806 +95.3512 +95.524 +95.699 +95.8763 +96.0558 +96.2377 +96.422 +96.6087 +96.7978 +96.9894 +97.1836 +97.3804 +97.5799 +97.782 +97.9868 +98.1945 +98.405 +98.6184 +98.8347 +99.0541 +99.2765 +99.5021 +99.7308 +99.9628 +100.198 +100.437 +100.679 +100.924 +101.174 +101.427 +101.683 +101.944 +102.208 +102.476 +102.748 +103.025 +103.306 +103.591 +103.88 +104.174 +104.472 +104.776 +105.084 +105.397 +62.9762 +63.4606 +63.9521 +64.4505 +64.9562 +65.4691 +65.9895 +66.5174 +67.053 +67.5964 +68.1478 +68.7073 +69.2751 +69.8512 +70.436 +71.0294 +71.6317 +72.2431 +72.8636 +73.4935 +74.133 +74.7822 +75.4413 +76.1105 +76.79 +77.4799 +78.1805 +78.892 +79.6146 +80.3484 +81.0938 +81.8509 +82.62 +83.4012 +84.1949 +85.0012 +85.8205 +86.6529 +87.4988 +88.3583 +89.2318 +90.1196 +91.0219 +91.939 +92.8712 +93.8189 +94.7823 +95.7617 +96.1305 +96.2038 +96.2778 +96.3525 +96.428 +96.5042 +96.5811 +96.6589 +96.7374 +96.8167 +96.8968 +96.9777 +97.0595 +97.142 +97.2254 +97.3097 +97.3948 +97.4807 +97.5676 +97.6553 +97.744 +97.8335 +97.924 +98.0154 +98.1078 +98.2011 +98.2954 +98.3907 +98.487 +98.5843 +98.6826 +98.782 +98.8824 +98.9839 +99.0864 +99.1901 +99.2948 +99.4007 +99.5077 +99.6159 +99.7252 +99.8358 +99.9475 +100.06 +100.175 +100.29 +100.407 +100.525 +100.644 +100.765 +100.887 +101.01 +101.135 +101.261 +101.388 +101.517 +101.647 +101.779 +101.913 +102.048 +102.184 +102.322 +102.462 +102.603 +102.746 +102.89 +103.037 +103.185 +103.334 +103.486 +103.639 +103.794 +103.951 +104.11 +104.271 +104.433 +104.598 +104.765 +104.933 +105.104 +105.277 +105.452 +105.629 +105.808 +105.99 +106.174 +106.36 +106.549 +106.74 +106.933 +107.129 +107.327 +107.528 +107.732 +107.938 +108.147 +108.359 +108.574 +108.791 +109.011 +109.234 +109.461 +109.69 +109.923 +110.158 +110.397 +110.639 +110.885 +111.134 +111.386 +111.642 +111.902 +112.165 +112.433 +112.704 +112.979 +113.258 +113.541 +113.828 +114.119 +114.415 +114.716 +115.02 +115.33 +115.644 +115.963 +116.287 +116.616 +116.95 +117.29 +117.635 +117.985 +105.656 +105.708 +105.761 +105.815 +105.869 +105.923 +105.979 +106.034 +106.09 +106.147 +106.204 +106.262 +106.32 +106.379 +106.439 +106.499 +106.559 +106.62 +106.682 +106.744 +106.807 +106.87 +106.934 +106.999 +107.064 +107.13 +107.196 +107.263 +107.331 +107.399 +107.468 +107.538 +107.608 +107.679 +107.751 +107.824 +107.897 +107.97 +108.045 +108.12 +108.196 +108.273 +108.35 +108.429 +108.508 +108.587 +108.668 +108.749 +108.831 +108.914 +108.998 +109.083 +109.168 +109.254 +109.341 +109.429 +109.518 +109.608 +109.699 +109.79 +109.883 +109.976 +110.071 +110.166 +110.263 +110.36 +110.458 +110.558 +110.658 +110.759 +110.862 +110.965 +111.07 +111.175 +111.282 +111.39 +111.499 +111.609 +111.721 +111.833 +111.947 +112.062 +112.178 +112.295 +112.414 +112.533 +112.655 +112.777 +112.901 +113.026 +113.152 +113.28 +113.41 +113.54 +113.672 +113.806 +113.941 +114.078 +114.216 +114.355 +114.496 +114.639 +114.783 +114.929 +115.077 +115.226 +115.377 +115.53 +115.685 +115.841 +115.999 +116.159 +116.321 +116.484 +116.65 +116.817 +116.987 +117.158 +117.332 +117.507 +117.685 +117.865 +118.047 +118.231 +118.417 +118.606 +118.797 +118.99 +119.186 +119.384 +119.585 +119.788 +119.993 +120.202 +120.412 +120.626 +120.842 +121.061 +121.283 +121.507 +121.735 +121.966 +122.199 +122.436 +122.675 +122.918 +123.164 +123.414 +123.666 +123.923 +124.182 +124.445 +124.712 +124.983 +125.257 +125.535 +125.817 +126.103 +126.392 +126.686 +126.985 +127.287 +127.594 +127.905 +128.221 +128.542 +128.867 +129.197 +129.532 +129.872 +130.217 +130.567 +130.923 +131.284 +131.651 +132.023 +132.402 +132.786 +133.176 +133.573 +121.543 +121.603 +121.664 +121.726 +121.788 +121.851 +121.915 +121.979 +122.043 +122.109 +122.175 +122.241 +122.308 +122.376 +122.444 +122.513 +122.583 +122.653 +122.724 +122.795 +122.868 +122.941 +123.014 +123.088 +123.163 +123.239 +123.316 +123.393 +123.471 +123.549 +123.629 +123.709 +123.79 +123.872 +123.954 +124.037 +124.121 +124.206 +124.292 +124.379 +124.466 +124.554 +124.643 +124.733 +124.824 +124.916 +125.008 +125.102 +125.196 +125.292 +125.388 +125.486 +125.584 +125.683 +125.783 +125.885 +125.987 +126.09 +126.194 +126.3 +126.406 +126.514 +126.622 +126.732 +126.843 +126.955 +127.068 +127.182 +127.298 +127.414 +127.532 +127.651 +127.772 +127.893 +128.016 +128.14 +128.265 +128.392 +128.52 +128.65 +128.78 +128.913 +129.046 +129.181 +129.318 +129.455 +129.595 +129.736 +129.878 +130.022 +130.168 +130.315 +130.463 +130.614 +130.766 +130.919 +131.075 +131.232 +131.391 +131.551 +131.713 +131.878 +132.044 +132.212 +132.381 +132.553 +132.727 +132.903 +133.08 +133.26 +133.442 +133.626 +133.812 +134 +134.191 +134.383 +134.578 +134.776 +134.975 +135.177 +135.382 +135.588 +135.798 +136.01 +136.224 +136.441 +136.661 +136.883 +137.108 +137.336 +137.567 +137.8 +138.037 +138.277 +138.519 +138.765 +139.013 +139.265 +139.52 +139.779 +140.041 +140.306 +140.574 +140.847 +141.122 +141.402 +141.685 +141.972 +142.263 +142.557 +142.856 +143.159 +143.466 +143.777 +144.092 +144.412 +144.736 +145.065 +145.398 +145.737 +146.08 +146.428 +146.781 +147.139 +147.502 +147.871 +148.245 +148.624 +149.01 +149.401 +149.798 +150.201 +150.61 +151.026 +151.447 +151.876 +152.311 +152.753 +153.203 +153.659 +143.279 +143.35 +143.422 +143.494 +143.568 +143.642 +143.717 +143.792 +143.869 +143.945 +144.023 +144.101 +144.18 +144.26 +144.341 +144.422 +144.504 +144.587 +144.67 +144.755 +144.84 +144.926 +145.013 +145.1 +145.189 +145.278 +145.368 +145.459 +145.551 +145.644 +145.737 +145.832 +145.927 +146.023 +146.121 +146.219 +146.318 +146.418 +146.519 +146.621 +146.724 +146.828 +146.933 +147.039 +147.146 +147.254 +147.364 +147.474 +147.585 +147.698 +147.811 +147.926 +148.042 +148.159 +148.277 +148.397 +148.517 +148.639 +148.762 +148.886 +149.012 +149.138 +149.266 +149.396 +149.526 +149.658 +149.792 +149.926 +150.062 +150.2 +150.339 +150.479 +150.621 +150.764 +150.909 +151.055 +151.203 +151.353 +151.503 +151.656 +151.81 +151.966 +152.123 +152.283 +152.443 +152.606 +152.77 +152.936 +153.104 +153.274 +153.445 +153.619 +153.794 +153.971 +154.15 +154.332 +154.515 +154.7 +154.887 +155.076 +155.268 +155.461 +155.657 +155.855 +156.055 +156.258 +156.463 +156.67 +156.879 +157.091 +157.305 +157.522 +157.742 +157.963 +158.188 +158.415 +158.645 +158.877 +159.113 +159.351 +159.592 +159.836 +160.082 +160.332 +160.585 +160.841 +161.1 +161.362 +161.627 +161.896 +162.168 +162.443 +162.722 +163.005 +163.29 +163.58 +163.873 +164.17 +164.471 +164.775 +165.084 +165.397 +165.713 +166.034 +166.359 +166.689 +167.022 +167.361 +167.703 +168.051 +168.403 +168.76 +169.121 +169.488 +169.86 +170.237 +170.619 +171.007 +171.4 +171.799 +172.203 +172.613 +173.029 +173.451 +173.88 +174.314 +174.755 +175.203 +175.657 +176.118 +176.586 +177.061 +177.544 +178.033 +178.531 +179.036 +179.549 +180.07 +180.6 +181.138 +176.15 +176.238 +176.326 +176.416 +176.506 +176.597 +176.689 +176.782 +176.876 +176.97 +177.066 +177.162 +177.259 +177.357 +177.456 +177.556 +177.657 +177.759 +177.862 +177.965 +178.07 +178.176 +178.283 +178.39 +178.499 +178.609 +178.719 +178.831 +178.944 +179.058 +179.173 +179.289 +179.407 +179.525 +179.645 +179.765 +179.887 +180.01 +180.134 +180.26 +180.387 +180.514 +180.644 +180.774 +180.906 +181.039 +181.173 +181.308 +181.445 +181.584 +181.723 +181.864 +182.007 +182.151 +182.296 +182.443 +182.591 +182.741 +182.892 +183.044 +183.199 +183.355 +183.512 +183.671 +183.832 +183.994 +184.158 +184.323 +184.491 +184.66 +184.831 +185.003 +185.177 +185.354 +185.532 +185.711 +185.893 +186.077 +186.262 +186.45 +186.639 +186.831 +187.025 +187.22 +187.418 +187.618 +187.82 +188.024 +188.23 +188.439 +188.65 +188.863 +189.078 +189.296 +189.517 +189.739 +189.964 +190.192 +190.422 +190.655 +190.89 +191.128 +191.369 +191.612 +191.858 +192.107 +192.359 +192.614 +192.871 +193.132 +193.395 +193.662 +193.932 +194.205 +194.481 +194.76 +195.042 +195.328 +195.617 +195.91 +196.206 +196.506 +196.81 +197.117 +197.427 +197.742 +198.06 +198.383 +198.709 +199.039 +199.374 +199.712 +200.055 +200.402 +200.754 +201.11 +201.47 +201.835 +202.205 +202.579 +202.959 +203.343 +203.732 +204.127 +204.526 +204.931 +205.342 +205.758 +206.179 +206.606 +207.039 +207.478 +207.922 +208.373 +208.83 +209.294 +209.764 +210.24 +210.724 +211.214 +211.711 +212.215 +212.727 +213.246 +213.772 +214.307 +214.849 +215.399 +215.957 +216.524 +217.1 +217.684 +218.277 +218.879 +219.49 +220.111 +220.742 +221.383 +222.034 +222.695 +236.945 +237.063 +237.182 +237.302 +237.424 +237.546 +237.67 +237.795 +237.921 +238.048 +238.176 +238.306 +238.437 +238.568 +238.702 +238.836 +238.972 +239.109 +239.247 +239.387 +239.527 +239.67 +239.813 +239.958 +240.104 +240.252 +240.401 +240.551 +240.703 +240.856 +241.011 +241.167 +241.325 +241.484 +241.645 +241.808 +241.972 +242.137 +242.304 +242.473 +242.643 +242.815 +242.989 +243.164 +243.341 +243.52 +243.701 +243.883 +244.067 +244.253 +244.441 +244.631 +244.823 +245.016 +245.212 +245.409 +245.608 +245.81 +246.013 +246.218 +246.426 +246.636 +246.847 +247.061 +247.277 +247.496 +247.716 +247.939 +248.164 +248.391 +248.621 +248.853 +249.088 +249.325 +249.564 +249.806 +250.05 +250.297 +250.547 +250.799 +251.054 +251.312 +251.572 +251.835 +252.101 +252.37 +252.642 +252.916 +253.194 +253.475 +253.758 +254.045 +254.335 +254.628 +254.924 +255.224 +255.527 +255.833 +256.143 +256.456 +256.772 +257.092 +257.416 +257.743 +258.074 +258.409 +258.748 +259.09 +259.437 +259.787 +260.142 +260.5 +260.863 +261.23 +261.601 +261.977 +262.357 +262.742 +263.131 +263.524 +263.923 +264.326 +264.734 +265.147 +265.565 +265.988 +266.417 +266.85 +267.289 +267.733 +268.183 +268.639 +269.1 +269.567 +270.039 +270.518 +271.003 +271.494 +271.992 +272.495 +273.006 +273.523 +274.046 +274.577 +275.114 +275.659 +276.211 +276.77 +277.337 +277.912 +278.494 +279.084 +279.682 +280.289 +280.904 +281.527 +282.159 +282.8 +283.45 +284.11 +284.778 +285.457 +286.145 +286.843 +287.551 +288.27 +288.999 +289.739 +290.49 +291.253 +292.026 +292.812 +293.61 +294.42 +295.242 +296.078 +296.926 +297.788 +298.664 +299.553 +443.618 +443.839 +444.063 +444.288 +444.515 +444.745 +444.976 +445.21 +445.446 +445.684 +445.924 +446.167 +446.412 +446.659 +446.908 +447.16 +447.414 +447.67 +447.929 +448.19 +448.454 +448.72 +448.989 +449.26 +449.534 +449.81 +450.089 +450.371 +450.655 +450.942 +451.232 +451.525 +451.82 +452.118 +452.419 +452.723 +453.03 +453.34 +453.653 +453.969 +454.288 +454.61 +454.935 +455.263 +455.595 +455.93 +456.268 +456.609 +456.954 +457.302 +457.654 +458.009 +458.368 +458.73 +459.096 +459.466 +459.839 +460.216 +460.597 +460.981 +461.37 +461.762 +462.159 +462.559 +462.964 +463.372 +463.785 +464.202 +464.624 +465.049 +465.479 +465.914 +466.353 +466.797 +467.245 +467.698 +468.156 +468.618 +469.085 +469.558 +470.035 +470.517 +471.005 +471.498 +471.996 +472.499 +473.008 +473.522 +474.042 +474.567 +475.098 +475.635 +476.178 +476.726 +477.281 +477.842 +478.409 +478.982 +479.562 +480.148 +480.741 +481.34 +481.946 +482.559 +483.179 +483.806 +484.44 +485.081 +485.73 +486.386 +487.049 +487.721 +488.4 +489.087 +489.782 +490.485 +491.197 +491.917 +492.646 +493.383 +494.129 +494.884 +495.648 +496.421 +497.204 +497.996 +498.798 +499.609 +500.431 +501.263 +502.105 +502.958 +503.821 +504.695 +505.581 +506.477 +507.385 +508.304 +509.235 +510.179 +511.134 +512.102 +513.083 +514.076 +515.082 +516.102 +517.136 +518.183 +519.244 +520.32 +521.41 +522.515 +523.635 +524.771 +525.922 +527.089 +528.273 +529.473 +530.69 +531.925 +533.177 +534.447 +535.735 +537.042 +538.368 +539.714 +541.079 +542.465 +543.872 +545.299 +546.748 +548.22 +549.713 +551.23 +552.77 +554.334 +555.923 +557.537 +559.176 +560.842 +29686 +29700.8 +29715.8 +29730.9 +29746.1 +29761.4 +29776.9 +29792.6 +29808.4 +29824.3 +29840.4 +29856.6 +29873 +29889.5 +29906.2 +29923 +29940 +29957.2 +29974.5 +29992 +30009.6 +30027.5 +30045.4 +30063.6 +30081.9 +30100.4 +30119.1 +30137.9 +30156.9 +30176.2 +30195.5 +30215.1 +30234.9 +30254.8 +30275 +30295.3 +30315.9 +30336.6 +30357.5 +30378.7 +30400 +30421.6 +30443.3 +30465.3 +30487.5 +30509.9 +30532.5 +30555.4 +30578.5 +30601.8 +30625.3 +30649.1 +30673.1 +30697.3 +30721.8 +30746.5 +30771.5 +30796.7 +30822.2 +30847.9 +30873.9 +30900.2 +30926.7 +30953.5 +30980.6 +31007.9 +31035.6 +31063.5 +31091.7 +31120.2 +31149 +31178 +31207.4 +31237.1 +31267.1 +31297.4 +31328 +31359 +31390.3 +31421.9 +31453.8 +31486.1 +31518.7 +31551.7 +31585 +31618.7 +31652.7 +31687.1 +31721.9 +31757.1 +31792.6 +31828.5 +31864.8 +31901.6 +31938.7 +31976.2 +32014.2 +32052.5 +32091.3 +32130.5 +32170.2 +32210.3 +32250.9 +32291.9 +32333.4 +32375.3 +32417.7 +32460.6 +32504.1 +32548 +32592.4 +32637.3 +32682.7 +32728.7 +32775.2 +32822.3 +32869.9 +32918.1 +32966.8 +33016.2 +33066.1 +33116.6 +33167.7 +33219.5 +33271.9 +33324.9 +33378.5 +33432.8 +33487.8 +33543.5 +33599.9 +33656.9 +33714.7 +33773.2 +33832.4 +33892.4 +33953.2 +34014.7 +34077 +34140.1 +34204.1 +34268.8 +34334.4 +34400.9 +34468.3 +34536.5 +34605.6 +34675.7 +34746.7 +34818.7 +34891.7 +34965.6 +35040.6 +35116.5 +35193.6 +35271.7 +35350.9 +35431.2 +35512.7 +35595.3 +35679 +35764 +35850.2 +35937.7 +36026.4 +36116.5 +36207.9 +36300.6 +36394.7 +36490.2 +36587.2 +36685.6 +36785.6 +36887.1 +36990.1 +37094.8 +37201.1 +37309.1 +37418.8 +37530.2 +19728.8 +19839.1 +19955.9 +20079.4 +20209.8 +20347.9 +20494 +20649 +20813.5 +20988.2 +21174.1 +21372.1 +21583.2 +21808.8 +22050.1 +22308.8 +22586.6 +22885.4 +23207.7 +23556.1 +23933.7 +24344.2 +24791.8 +25281.6 +25385.8 +306.246 +308.09 +309.892 +311.794 +313.805 +315.93 +318.18 +320.564 +323.091 +325.775 +328.627 +331.662 +334.896 +338.347 +342.035 +345.983 +350.215 +354.762 +359.656 +364.936 +370.645 +376.836 +383.567 +390.91 +425.793 +166.519 +167.595 +168.583 +169.628 +170.732 +171.9 +173.138 +174.45 +175.843 +177.323 +178.898 +180.575 +182.365 +184.277 +186.323 +188.517 +190.873 +193.409 +196.145 +199.103 +202.31 +205.796 +209.6 +213.763 +255.243 +128.122 +128.996 +129.756 +130.56 +131.409 +132.308 +133.26 +134.27 +135.341 +136.479 +137.691 +138.981 +140.357 +141.827 +143.401 +145.088 +146.899 +148.849 +150.953 +153.227 +155.693 +158.374 +161.298 +164.5 +202.103 +107.97 +108.744 +109.386 +110.063 +110.779 +111.536 +112.339 +113.19 +114.092 +115.052 +116.072 +117.16 +118.32 +119.559 +120.885 +122.306 +123.833 +125.476 +127.248 +129.164 +131.242 +133.501 +135.965 +138.662 +168.014 +61.6817 +68.183 +75.3504 +83.443 +92.6001 +98.1227 +98.8285 +99.5768 +100.371 +101.215 +102.113 +103.069 +104.089 +105.179 +106.345 +107.595 +108.938 +110.383 +111.942 +113.627 +115.454 +117.441 +119.608 +121.98 +141.861 +4.15877 +5.42103 +7.02665 +9.06463 +11.7007 +14.9617 +18.722 +23.2091 +28.6961 +35.4021 +43.5962 +53.6102 +65.8541 +80.8368 +95.9248 +97.0523 +98.2633 +99.5665 +100.972 +102.492 +104.14 +105.932 +107.886 +110.025 +121.202 +4.03659e-42 +3.06176e-43 +2.68381e-43 +1.34613e-44 +2.39312e-43 +0.000595367 +0.0191922 +0.100932 +0.31331 +0.754083 +1.56319 +2.93943 +5.16396 +8.6498 +13.9915 +21.1949 +30.9935 +44.4722 +62.8417 +87.7037 +95.5046 +97.1474 +98.9394 +100.901 +105.402 +3.17749e-43 +1.35098e-42 +6.36162e-43 +2.00188e-42 +2.92354e-42 +5.13468e-43 +1.06287e-44 +5.36569e-44 +4.43723e-43 +5.89687e-44 +3.86192e-43 +5.97766e-44 +3.05437e-43 +1.01867e-42 +0.000182136 +0.0653307 +0.48266 +1.75723 +4.70514 +10.7289 +21.0655 +37.4348 +62.9273 +93.6369 +94.2935 +3.17749e-43 +1.27119e-43 +5.0893e-42 +4.72009e-42 +7.51396e-44 +5.13468e-43 +4.75441e-43 +5.36569e-44 +1.9959e-44 +1.885e-43 +6.38335e-44 +2.57363e-43 +3.81796e-44 +0 +3.02202e-43 +4.73588e-44 +4.86107e-45 +4.3065e-44 +3.30652e-43 +3.43929e-44 +0.0723535 +1.04029 +4.83416 +14.9125 +34.0036 +7.58361e-43 +9.61337e-44 +6.36162e-43 +1.97769e-42 +5.55562e-43 +6.94464e-44 +5.27017e-42 +1.06357e-45 +4.98856e-44 +8.54264e-45 +1.73712e-44 +6.89353e-44 +0 +2.87668e-43 +3.02202e-43 +2.29216e-42 +2.7267e-43 +2.60542e-43 +2.81125e-44 +3.43929e-44 +8.52675e-43 +8.20319e-44 +2.95817e-43 +0.00262397 +0.846666 +3.21636e-43 +1.35098e-42 +0 +1.97769e-42 +7.51396e-44 +0 +5.78345e-44 +5.96584e-44 +3.99085e-43 +4.64836e-44 +6.88491e-45 +4.06583e-44 +0 +3.59585e-44 +0 +5.108e-45 +4.50694e-44 +4.64487e-45 +2.249e-43 +2.41148e-43 +8.52675e-43 +2.05031e-43 +3.1906e-44 +7.95595e-44 +3.14099e-44 +3.17749e-43 +1.08078e-44 +6.36162e-43 +2.47212e-43 +1.33957e-45 +2.21179e-43 +1.58063e-42 +3.45765e-42 +4.98856e-44 +5.16829e-44 +7.97918e-45 +1.62672e-44 +1.63695e-42 +9.70879e-43 +0 +0 +4.50694e-44 +4.64487e-45 +2.81125e-44 +1.78298e-42 +2.33786e-43 +3.01441e-43 +0 +1.25871e-42 +2.91217e-43 +7.53183e-43 +8.64628e-44 +5.0893e-42 +7.32479e-44 +2.89752e-42 +7.80752e-45 +7.35676e-42 +5.96584e-44 +1.68364e-43 +1.27041e-42 +7.26656e-43 +4.5206e-44 +0 +1.43868e-44 +9.62481e-43 +3.22121e-44 +4.50694e-44 +1.18783e-43 +7.59037e-43 +3.38888e-42 +8.41268e-44 +0 +2.51507e-44 +1.59082e-42 +1.98077e-43 +2.58554e-41 +8.88484e-44 +6.36162e-43 +5.85983e-43 +1.05595e-45 +5.13468e-43 +2.31392e-44 +6.70711e-45 +6.2357e-45 +8.54264e-45 +3.86192e-43 +4.5206e-44 +3.05437e-43 +1.45819e-43 +1.37775e-43 +4.73588e-44 +0 +9.37549e-44 +4.13315e-44 +3.38888e-42 +8.52675e-43 +3.76801e-44 +2.51507e-44 +3.15327e-44 +1.98077e-43 +2.29853e-41 +2.36305e-42 +8.17143e-44 +5.85983e-43 +1.67446e-46 +4.05937e-42 +3.35309e-43 +8.38388e-46 +6.2357e-45 +1.64604e-43 +7.97918e-45 +1.09777e-42 +3.05437e-43 +2.87668e-43 +4.24688e-45 +9.12537e-43 +3.06549e-44 +9.37549e-44 +7.964e-43 +2.41148e-43 +4.16787e-45 +2.27964e-43 +2.51507e-44 +3.10706e-45 +3.92624e-45 +3.97186e-44 +1.7185e-43 +6.40535e-43 +2.521e-42 +2.30874e-43 +5.03116e-43 +5.29878e-42 +1.45316e-42 +5.68229e-43 +3.82129e-43 +2.32691e-43 +1.37222e-43 +1.28856e-43 +1.2136e-43 +6.73445e-46 +4.02651e-45 +1.31433e-42 +2.60542e-43 +7.964e-43 +3.43929e-44 +3.86424e-44 +1.0254e-44 +6.79069e-43 +3.65445e-44 +2.20232e-43 +1.84691e-43 +6.9289e-43 +1.2425e-42 +5.90011e-43 +2.90402e-42 +0 +8.03791e-45 +5.51373e-44 +2.13885e-42 +1.96103e-44 +2.32691e-43 +4.63124e-43 +3.05437e-43 +1.54172e-42 +3.77752e-44 +3.22121e-44 +3.06549e-44 +3.25678e-44 +6.00813e-44 +3.98592e-44 +1.05158e-44 +1.0254e-44 +1.07834e-42 +3.88383e-43 +1.98077e-43 +1.82955e-43 +3.58853e-42 +1.4877e-43 +1.71917e-46 +4.05601e-42 +3.7022e-42 +6.01063e-43 +1.66147e-42 +1.49231e-43 +1.7426e-42 +5.17618e-45 +3.42543e-44 +4.93023e-43 +1.24823e-42 +3.36354e-42 +8.40933e-44 +3.61214e-46 +2.14939e-44 +1.01527e-44 +0 +5.9133e-44 +1.64537e-44 +5.23041e-44 +2.15295e-44 +9.13151e-43 +1.75033e-41 +8.28299e-42 +6.09362e-43 +8.04806e-42 +2.14177e-43 +1.56395e-42 +8.24503e-46 +6.03425e-45 +1.49231e-43 +0 +5.17618e-45 +2.63355e-42 +0 +1.22821e-44 +9.52858e-44 +1.33537e-43 +9.75277e-45 +3.35842e-43 +3.68088e-45 +5.1132e-43 +3.21994e-45 +0 +1.93719e-45 +2.15295e-44 +2.20178e-45 +5.35845e-42 +1.45405e-45 +1.89241e-44 +7.90339e-43 +2.14177e-43 +2.43623e-44 +3.56681e-44 +2.1368e-44 +0 +2.05562e-44 +3.82713e-44 +1.51624e-44 +2.52428e-43 +1.28867e-44 +3.13178e-43 +3.89321e-43 +4.51517e-44 +9.06772e-45 +3.68088e-45 +2.96675e-45 +1.94806e-44 +2.05671e-45 +5.23041e-44 +1.30253e-43 +0 +2.64324e-46 +2.83341e-43 +1.37913e-42 +8.67313e-42 +7.20646e-43 +5.26405e-42 +7.07769e-43 +2.5457e-45 +6.90885e-46 +7.92048e-44 +1.00865e-42 +4.28179e-45 +2.21472e-42 +3.63914e-42 +3.08167e-43 +1.59466e-42 +0 +1.08952e-44 +8.44974e-45 +5.05141e-43 +3.42205e-44 +2.05671e-45 +7.85568e-45 +7.84812e-44 +1.11079e-43 +3.53926e-42 +3.53099e-44 +4.01679e-42 +4.44255e-42 +1.36656e-41 +8.26693e-44 +1.09841e-42 +2.67101e-45 +1.49231e-43 +2.21738e-43 +4.65546e-45 +1.80638e-45 +3.59413e-43 +1.28867e-44 +2.66208e-42 +2.85356e-43 +4.80776e-43 +2.46158e-43 +1.60232e-43 +3.70844e-46 +7.39163e-45 +0 +8.60543e-44 +4.94225e-44 +1.14144e-43 +2.2572e-44 +5.51986e-43 +2.36551e-45 +4.69e-44 +1.23568e-43 +2.47796e-43 +2.01436e-43 +2.67101e-45 +3.53733e-43 +5.45913e-43 +4.65546e-45 +6.71971e-44 +1.69107e-43 +7.23301e-45 +1.8677e-44 +1.9318e-45 +1.2191e-42 +1.16228e-43 +3.12953e-46 +8.28134e-45 +4.02493e-46 +2.57089e-46 +1.54975e-44 +2.8601e-44 +1.14144e-43 +2.82151e-45 +1.12159e-42 +4.43252e-42 +4.57372e-46 +1.54459e-44 +2.47957e-43 +2.02859e-42 +3.08953e-42 +5.3224e-42 +4.08316e-44 +1.99603e-43 +1.06091e-47 +1.02187e-42 +2.55842e-43 +3.36354e-45 +3.62495e-44 +2.63325e-43 +9.22066e-43 +1.34179e-44 +4.29785e-46 +2.43508e-45 +1.3163e-43 +1.03821e-44 +2.28808e-46 +3.44029e-47 +2.82503e-43 +8.62478e-45 +6.79742e-42 +5.04651e-43 +3.39347e-44 +5.06865e-43 +2.64595e-42 +7.76088e-42 +1.43198e-42 +1.73876e-42 +2.73475e-42 +7.12382e-43 +1.79189e-42 +2.11745e-43 +1.77374e-43 +2.41476e-46 +5.49361e-43 +1.22068e-43 +4.21711e-44 +7.19234e-43 +3.11834e-45 +2.05671e-45 +0 +9.81015e-45 +1.1127e-43 +5.89122e-42 +5.06296e-50 +0 +0 +0 +0 +3.37725e-42 +0 +0 +1.96247e-49 +0 +0 +0 +0 +1.72213e-42 +1.59483e-42 +0 +8.32121e-49 +7.75411e-49 +1.19737e-42 +0 +0 +1.2398e-43 +1.1715e-43 +4.30036e-48 +1.10518e-42 +4.28509e-49 +1.70199e-43 +3.97152e-44 +1.94636e-42 +2.37031e-43 +2.17643e-46 +7.30922e-43 +4.43457e-43 +8.95607e-43 +4.07404e-42 +1.13332e-43 +2.44924e-43 +1.00293e-45 +3.06136e-44 +8.49818e-44 +1.94626e-43 +7.4614e-44 +5.26105e-43 +2.14637e-43 +1.14709e-44 +1.11391e-45 +1.58419e-44 +2.10059e-43 +1.42184e-43 +9.70257e-44 +2.10433e-42 +1.30061e-41 +6.21029e-45 +1.94636e-42 +5.12987e-44 +1.92556e-43 +2.82129e-44 +9.43642e-47 +1.08805e-47 +5.97071e-43 +1.29544e-43 +6.90592e-44 +1.00293e-42 +2.01799e-43 +7.43779e-44 +1.55772e-42 +5.96912e-43 +1.12647e-42 +4.38131e-44 +3.83218e-43 +1.61333e-43 +2.57564e-43 +4.50229e-45 +1.42184e-43 +2.01783e-42 +2.16181e-47 +3.65768e-42 +9.91278e-43 +2.28702e-43 +7.09931e-43 +1.41747e-44 +2.01714e-42 +2.07148e-42 +8.06919e-43 +4.71617e-43 +1.65283e-43 +1.21378e-42 +1.38645e-44 +6.36667e-43 +6.56665e-46 +3.99762e-44 +2.58117e-44 +2.956e-45 +3.4897e-43 +8.92913e-45 +4.18684e-43 +8.11106e-45 +3.83523e-43 +1.42184e-43 +1.2998e-42 +2.10422e-42 +4.33566e-43 +2.25816e-42 +4.46683e-43 +1.21893e-43 +3.85648e-44 +4.197e-43 +4.77983e-42 +3.12937e-42 +1.26469e-42 +4.05012e-44 +5.52474e-43 +2.16633e-43 +1.29151e-44 +9.64752e-44 +1.33828e-45 +2.06494e-43 +3.28663e-45 +3.4897e-46 +2.17493e-44 +1.61057e-43 +3.99845e-43 +2.88147e-46 +0 +4.09327e-44 +5.66706e-42 +2.47057e-42 +4.30546e-42 +6.7061e-42 +4.77173e-42 +4.57213e-43 +1.60553e-42 +7.54913e-43 +2.35019e-42 +3.31708e-43 +4.76515e-45 +5.52474e-46 +6.83468e-43 +1.03321e-43 +5.68148e-44 +5.31858e-44 +2.58117e-44 +1.04676e-44 +4.1045e-45 +7.1433e-44 +4.24781e-43 +2.40328e-45 +7.77996e-45 +1.42184e-43 +3.27462e-43 +2.39261e-42 +5.12593e-45 +1.15618e-45 +1.83101e-42 +2.1035e-43 +3.66555e-42 +6.00825e-43 +3.86516e-43 +6.96353e-43 +4.11804e-44 +1.60824e-44 +1.21378e-42 +5.135e-46 +6.06815e-46 +2.85852e-44 +3.11444e-43 +4.97896e-46 +2.3648e-44 +2.48322e-44 +1.73994e-43 +2.51651e-45 +2.13767e-44 +1.84414e-44 +0 +1.10518e-42 +8.91565e-44 +1.40543e-45 +7.6037e-44 +2.31499e-43 +9.70878e-43 +1.13398e-43 +1.09502e-42 +3.09213e-42 +1.52252e-43 +2.63554e-42 +7.00582e-45 +2.82866e-43 +8.87327e-43 +4.8677e-43 +1.2366e-42 +2.45169e-42 +3.15364e-42 +7.98121e-44 +1.78673e-43 +7.49492e-44 +2.23839e-44 +3.81097e-46 +2.30517e-45 +1.13747e-42 +6.72872e-44 +9.64839e-46 +1.94804e-42 +6.52861e-42 +5.16618e-42 +2.40402e-43 +9.44712e-46 +3.0491e-43 +1.19459e-43 +2.63537e-43 +0 +1.23489e-42 +1.42098e-42 +4.02891e-43 +0 +3.53407e-43 +7.60696e-44 +8.86049e-43 +0 +1.71898e-42 +2.02763e-44 +5.98299e-44 +2.54894e-44 +2.70677e-45 +1.3545e-43 +8.4109e-45 +8.58206e-45 +1.53219e-42 +8.16077e-43 +2.06889e-42 +6.1787e-45 +5.7155e-45 +3.07006e-43 +1.89697e-43 +2.7999e-43 +0 +3.59221e-45 +0 +2.32149e-42 +1.52959e-42 +4.48329e-46 +2.38845e-44 +7.25291e-44 +3.06425e-43 +2.99133e-45 +2.68117e-44 +1.57682e-43 +6.93649e-45 +4.8356e-43 +1.3545e-43 +7.66443e-43 +2.10954e-43 +3.63186e-42 +1.13159e-41 +9.5693e-44 +6.94642e-43 +3.28994e-43 +6.06026e-43 +5.8889e-42 +7.20254e-42 +3.84126e-45 +7.75918e-43 +2.6946e-44 +2.02707e-43 +4.39226e-45 +3.53407e-43 +1.71854e-43 +3.01129e-44 +0 +1.19407e-43 +3.9391e-42 +5.02199e-43 +1.73371e-44 +0 +0 +1.3142e-43 +3.95198e-42 +5.17114e-42 +1.29409e-46 +1.04313e-41 +3.55657e-43 +1.41372e-41 +5.60355e-44 +1.19459e-43 +3.66268e-44 +5.6475e-45 +2.87377e-44 +2.996e-44 +2.35924e-42 +4.39226e-45 +3.32534e-44 +9.21029e-43 +5.53011e-43 +3.06425e-43 +3.15715e-43 +7.29634e-45 +1.16586e-42 +0 +1.36555e-43 +1.9914e-43 +1.11949e-41 +6.17497e-44 +5.67478e-44 +5.22289e-44 +1.9263e-44 +3.55657e-43 +6.84204e-42 +1.54558e-43 +2.83163e-43 +6.05403e-45 +1.08819e-43 +2.29902e-43 +9.54194e-44 +5.54003e-42 +4.03425e-42 +2.01183e-43 +2.14817e-44 +1.63855e-43 +0 +0 +2.31347e-44 +2.8111e-45 +0 +5.53758e-43 +1.9914e-43 +1.11949e-41 +2.08405e-43 +1.55093e-42 +4.7852e-42 +3.95796e-43 +2.2762e-41 +1.12394e-42 +3.0491e-43 +3.53954e-44 +0 +1.96673e-42 +4.22507e-44 +1.72455e-42 +3.16729e-42 +5.22553e-42 +1.80944e-43 +5.80007e-43 +1.82183e-43 +2.88327e-44 +1.50912e-43 +2.31976e-42 +3.82911e-42 +1.38697e-43 +2.00766e-43 +0 +5.38298e-43 +9.64839e-43 +2.00951e-43 +4.64566e-43 +1.65511e-41 +6.94642e-43 +6.84204e-42 +4.84821e-42 +0 +2.12279e-42 +3.07301e-44 +4.55705e-45 +7.27543e-43 +2.2538e-43 +6.77061e-43 +1.48749e-42 +0 +0 +1.74438e-43 +1.8864e-44 +1.82366e-44 +1.41819e-43 +0 +5.4635e-44 +1.3545e-43 +1.4534e-41 +6.86565e-44 +5.67478e-44 +5.22289e-44 +1.62493e-43 +1.5283e-41 +5.14053e-45 +4.76421e-42 +5.92391e-43 +9.3322e-43 +3.07301e-44 +2.55616e-43 +2.15568e-43 +2.98023e-43 +2.12585e-43 +1.48749e-42 +1.91076e-43 +3.01129e-44 +1.56889e-43 +2.52572e-42 +2.14494e-43 +5.6741e-44 +1.10958e-42 +2.00766e-43 +1.3545e-43 +5.38298e-43 +3.97915e-42 +1.53219e-42 +1.42743e-42 +1.70491e-43 +5.55713e-45 +5.14053e-42 +4.23768e-44 +1.13292e-43 +9.3322e-43 +3.84126e-42 +4.22507e-44 +2.6946e-44 +2.53383e-44 +6.45298e-43 +2.01183e-43 +2.73255e-42 +2.74235e-42 +2.4514e-42 +5.09327e-43 +2.14494e-43 +2.40451e-43 +1.10958e-42 +0 +2.14788e-44 +5.38298e-43 +5.07628e-43 +5.67478e-44 +5.22289e-44 +2.0828e-42 +3.95437e-43 +1.77904e-42 +2.43928e-42 +4.50242e-42 +4.19037e-42 +3.07301e-44 +4.22507e-44 +2.15568e-43 +2.2538e-43 +0 +2.01183e-43 +2.14817e-44 +2.40903e-43 +6.27705e-44 +2.39307e-44 +1.82366e-44 +0.00301571 +0.180814 +1.12171 +3.90189 +4.74393e-44 +4.82302e-44 +3.97124e-44 +5.78816e-43 +2.19744e-42 +1.88902e-41 +1.45008e-41 +1.66842e-42 +0 +3.2754e-44 +2.06532e-44 +2.39823e-42 +6.12658e-42 +0.000508451 +0.0261121 +0.15118 +0.493533 +1.23189 +2.63386 +5.09718 +9.2474 +15.8485 +25.3719 +39.1218 +57.589 +0.0142882 +0.0439764 +0.104083 +0.21119 +0.38741 +0.662069 +1.07391 +1.67396 +2.52937 +3.72847 +5.38742 +7.65926 +10.784 +14.7495 +19.2017 +24.6912 +31.6043 +40.2987 +51.2256 +64.9563 +82.218 +95.7813 +97.1878 +98.7111 +101.289 +18.1662 +20.5923 +23.3315 +26.468 +30.0649 +34.1964 +38.9494 +44.4269 +50.7508 +58.0656 +66.5434 +76.3898 +87.8513 +96.0892 +96.9704 +97.91 +98.9132 +99.986 +101.135 +102.369 +103.695 +105.124 +106.668 +108.34 +117.942 +97.3374 +97.8742 +98.365 +98.8822 +99.4275 +100.003 +100.61 +101.253 +101.932 +102.651 +103.413 +104.222 +105.08 +105.993 +106.966 +108.002 +109.109 +110.293 +111.56 +112.921 +114.384 +115.961 +117.665 +119.51 +137.832 +108.071 +108.654 +109.199 +109.773 +110.379 +111.018 +111.692 +112.405 +113.159 +113.958 +114.804 +115.702 +116.655 +117.669 +118.748 +119.899 +121.128 +122.442 +123.85 +125.361 +126.986 +128.737 +130.628 +132.677 +159.63 +120.992 +121.632 +122.242 +122.885 +123.563 +124.278 +125.033 +125.831 +126.676 +127.57 +128.517 +129.522 +130.59 +131.725 +132.933 +134.222 +135.598 +137.069 +138.646 +140.338 +142.157 +144.118 +146.236 +148.529 +182.646 +136.992 +137.703 +138.393 +139.121 +139.889 +140.698 +141.554 +142.458 +143.414 +144.426 +145.499 +146.637 +147.846 +149.131 +150.5 +151.959 +153.517 +155.184 +156.969 +158.885 +160.945 +163.166 +165.564 +168.162 +206.974 +157.606 +158.411 +159.205 +160.043 +160.926 +161.858 +162.842 +163.882 +164.982 +166.147 +167.381 +168.691 +170.082 +171.561 +173.137 +174.816 +176.609 +178.527 +180.581 +182.786 +185.158 +187.713 +190.473 +193.463 +233.824 +185.807 +186.742 +187.679 +188.667 +189.708 +190.807 +191.967 +193.194 +194.491 +195.865 +197.321 +198.866 +200.507 +202.251 +204.109 +206.09 +208.205 +210.467 +212.89 +215.491 +218.288 +221.302 +224.557 +228.082 +266.416 +228.458 +229.592 +230.745 +231.96 +233.241 +234.593 +236.02 +237.529 +239.126 +240.816 +242.608 +244.508 +246.527 +248.674 +250.96 +253.398 +256.001 +258.784 +261.766 +264.965 +268.406 +272.112 +276.114 +280.446 +312.877 +307.345 +308.852 +310.405 +312.042 +313.768 +315.589 +317.513 +319.546 +321.697 +323.975 +326.389 +328.95 +331.671 +334.564 +337.645 +340.929 +344.435 +348.183 +352.197 +356.503 +361.129 +366.109 +371.48 +377.283 +399.538 +579.857 +582.603 +585.46 +588.466 +591.631 +594.966 +598.482 +602.191 +606.106 +610.244 +614.619 +619.249 +624.155 +629.356 +634.879 +640.748 +646.993 +653.648 +660.749 +668.34 +676.467 +685.188 +694.566 +704.677 +709.963 +38041.8 +38222.9 +38414.2 +38615.8 +38828.3 +39052.5 +39289.2 +39539.3 +39803.9 +40083.9 +40380.7 +40695.4 +41029.6 +41384.9 +41763.2 +42166.3 +42596.6 +43056.7 +43549.4 +44078 +44646.2 +45258.4 +45919.5 +46635.2 +46937.8 +) +; boundaryField { @@ -33,12 +12262,499 @@ boundaryField upperWall { type epsilonWallFunction; - value uniform 14.855; + Cmu 0.09; + kappa 0.41; + E 9.8; + value nonuniform List<scalar> +223 +( +31097.4 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29678.7 +29686 +29700.8 +29715.8 +29730.9 +29746.1 +29761.4 +29776.9 +29792.6 +29808.4 +29824.3 +29840.4 +29856.6 +29873 +29889.5 +29906.2 +29923 +29940 +29957.2 +29974.5 +29992 +30009.6 +30027.5 +30045.4 +30063.6 +30081.9 +30100.4 +30119.1 +30137.9 +30156.9 +30176.2 +30195.5 +30215.1 +30234.9 +30254.8 +30275 +30295.3 +30315.9 +30336.6 +30357.5 +30378.7 +30400 +30421.6 +30443.3 +30465.3 +30487.5 +30509.9 +30532.5 +30555.4 +30578.5 +30601.8 +30625.3 +30649.1 +30673.1 +30697.3 +30721.8 +30746.5 +30771.5 +30796.7 +30822.2 +30847.9 +30873.9 +30900.2 +30926.7 +30953.5 +30980.6 +31007.9 +31035.6 +31063.5 +31091.7 +31120.2 +31149 +31178 +31207.4 +31237.1 +31267.1 +31297.4 +31328 +31359 +31390.3 +31421.9 +31453.8 +31486.1 +31518.7 +31551.7 +31585 +31618.7 +31652.7 +31687.1 +31721.9 +31757.1 +31792.6 +31828.5 +31864.8 +31901.6 +31938.7 +31976.2 +32014.2 +32052.5 +32091.3 +32130.5 +32170.2 +32210.3 +32250.9 +32291.9 +32333.4 +32375.3 +32417.7 +32460.6 +32504.1 +32548 +32592.4 +32637.3 +32682.7 +32728.7 +32775.2 +32822.3 +32869.9 +32918.1 +32966.8 +33016.2 +33066.1 +33116.6 +33167.7 +33219.5 +33271.9 +33324.9 +33378.5 +33432.8 +33487.8 +33543.5 +33599.9 +33656.9 +33714.7 +33773.2 +33832.4 +33892.4 +33953.2 +34014.7 +34077 +34140.1 +34204.1 +34268.8 +34334.4 +34400.9 +34468.3 +34536.5 +34605.6 +34675.7 +34746.7 +34818.7 +34891.7 +34965.6 +35040.6 +35116.5 +35193.6 +35271.7 +35350.9 +35431.2 +35512.7 +35595.3 +35679 +35764 +35850.2 +35937.7 +36026.4 +36116.5 +36207.9 +36300.6 +36394.7 +36490.2 +36587.2 +36685.6 +36785.6 +36887.1 +36990.1 +37094.8 +37201.1 +37309.1 +37418.8 +37530.2 +38041.8 +38222.9 +38414.2 +38615.8 +38828.3 +39052.5 +39289.2 +39539.3 +39803.9 +40083.9 +40380.7 +40695.4 +41029.6 +41384.9 +41763.2 +42166.3 +42596.6 +43056.7 +43549.4 +44078 +44646.2 +45258.4 +45919.5 +46635.2 +46937.8 +) +; } lowerWall { type epsilonWallFunction; - value uniform 14.855; + Cmu 0.09; + kappa 0.41; + E 9.8; + value nonuniform List<scalar> +250 +( +37429.9 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36320.4 +36356.1 +41615.9 +41606.2 +41595.7 +41584.1 +41571.6 +41558 +41543.2 +41527.2 +41520.6 +47306.7 +41660.9 +41660.9 +41660.9 +41660.9 +41661 +41661 +41661.1 +41661.2 +41661.2 +41661.3 +41661.4 +41661.5 +41661.6 +41661.8 +41661.9 +41662 +41662.2 +47306.7 +15089.9 +16549.9 +17510.2 +17514.7 +17519.3 +17523.9 +17528.6 +17533.3 +17538 +17542.8 +17547.6 +17552.4 +17557.3 +17562.3 +17567.2 +17572.3 +17577.3 +17582.4 +17587.6 +17592.8 +17598 +17603.3 +17608.6 +17614 +17619.4 +17624.9 +17630.4 +17636 +17641.6 +17647.2 +17652.9 +17658.7 +17664.5 +17670.4 +17676.3 +17682.2 +17688.2 +17694.3 +17700.4 +17706.6 +17712.8 +17719.1 +17725.4 +17731.8 +17738.3 +17744.8 +17751.3 +17758 +17764.6 +17771.4 +17778.2 +17785 +17791.9 +17798.9 +17806 +17813.1 +17820.2 +17827.5 +17834.8 +17842.1 +17849.5 +17857 +17864.6 +17872.2 +17879.9 +17887.7 +17895.5 +17903.4 +17911.4 +17919.4 +17927.5 +17935.7 +17944 +17952.3 +17960.7 +17969.2 +17977.8 +17986.5 +17995.2 +18004 +18012.9 +18021.8 +18030.9 +18040 +18049.2 +18058.5 +18067.9 +18077.4 +18087 +18096.6 +18106.3 +18116.2 +18126.1 +18136.1 +18146.2 +18156.4 +18166.7 +18177.1 +18187.6 +18198.2 +18208.9 +18219.7 +18230.5 +18241.5 +18252.6 +18263.8 +18275.1 +18286.6 +18298.1 +18309.7 +18321.5 +18333.3 +18345.3 +18357.4 +18369.6 +18381.9 +18394.3 +18406.9 +18419.6 +18432.4 +18445.3 +18458.3 +18471.5 +18484.8 +18498.3 +18511.8 +18525.5 +18539.4 +18553.4 +18567.5 +18581.7 +18596.1 +18610.6 +18625.3 +18640.2 +18655.1 +18670.3 +18685.5 +18701 +18716.5 +18732.3 +18748.2 +18764.3 +18780.5 +18796.9 +18813.4 +18830.2 +18847.1 +18864.1 +18881.4 +18898.8 +18916.4 +18934.2 +18952.2 +18970.4 +18988.7 +19007.3 +19026 +19044.9 +19064.1 +19083.4 +19103 +19122.7 +19142.7 +19162.8 +19183.2 +19203.9 +19224.7 +19245.7 +19267 +19288.5 +19310.3 +19332.3 +19354.5 +19377 +19399.7 +19422.7 +19445.9 +19469.4 +19728.8 +19839.1 +19955.9 +20079.4 +20209.8 +20347.9 +20494 +20649 +20813.5 +20988.2 +21174.1 +21372.1 +21583.2 +21808.8 +22050.1 +22308.8 +22586.6 +22885.4 +23207.7 +23556.1 +23933.7 +24344.2 +24791.8 +25281.6 +25385.8 +) +; } frontAndBack { diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/0/k b/tutorials/incompressible/simpleFoam/pitzDaily/0/k index 8706fab9eb53949e8983cddad6080e54d3ec7d7f..7c195813c485750e0c9e131fe712359eff1b7685 100644 --- a/tutorials/incompressible/simpleFoam/pitzDaily/0/k +++ b/tutorials/incompressible/simpleFoam/pitzDaily/0/k @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -17,7 +17,12236 @@ FoamFile dimensions [0 2 -2 0 0 0 0]; -internalField uniform 0.375; +internalField nonuniform List<scalar> +12225 +( +5.98297 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86798 +1.38433 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.758289 +0.775953 +1.96348 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.726266 +0.747554 +2.57596 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.774006 +0.787921 +3.04485 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.828432 +0.837763 +3.28431 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.882337 +0.888861 +3.25276 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.945298 +0.950041 +2.97823 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.982617 +0.986352 +2.57413 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.00725 +1.01036 +2.04694 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.04861 +1.05118 +1.48437 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09221 +1.09435 +0.420919 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.411533 +0.413311 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0.00589802 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +3.69111e-29 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +0.163463 +1.14915 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852763 +0.852767 +2.2234 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05043 +1.05044 +2.96695 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988626 +0.988628 +3.30741 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925561 +0.925562 +3.15567 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862375 +0.862376 +2.58008 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +0.807055 +1.82441 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +0.840065 +6.68646 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +9.90703 +7.68929 +8.17517 +8.48587 +8.48478 +8.48367 +8.48255 +8.48143 +8.48029 +8.47915 +8.478 +8.47684 +8.47566 +8.47448 +8.47329 +8.47209 +8.47088 +8.46966 +8.46843 +8.46719 +8.46594 +8.46468 +8.46341 +8.46213 +8.46084 +8.45954 +8.45823 +8.4569 +8.45557 +8.45422 +8.45287 +8.4515 +8.45012 +8.44873 +8.44733 +8.44592 +8.4445 +8.44306 +8.44162 +8.44016 +8.43868 +8.4372 +8.43571 +8.4342 +8.43268 +8.43115 +8.4296 +8.42804 +8.42647 +8.42489 +8.42329 +8.42168 +8.42006 +8.41842 +8.41677 +8.41511 +8.41343 +8.41174 +8.41003 +8.40831 +8.40658 +8.40483 +8.40307 +8.40129 +8.3995 +8.39769 +8.39587 +8.39403 +8.39218 +8.39031 +8.38843 +8.38653 +8.38461 +8.38268 +8.38073 +8.37877 +8.37679 +8.37479 +8.37278 +8.37075 +8.3687 +8.36664 +8.36456 +8.36246 +8.36034 +8.3582 +8.35605 +8.35388 +8.35169 +8.34948 +8.34726 +8.34501 +8.34275 +8.34046 +8.33816 +8.33584 +8.3335 +8.33114 +8.32875 +8.32635 +8.32393 +8.32149 +8.31902 +8.31654 +8.31403 +8.31151 +8.30896 +8.30639 +8.30379 +8.30118 +8.29854 +8.29588 +8.2932 +8.29049 +8.28776 +8.28501 +8.28223 +8.27943 +8.27661 +8.27376 +8.27088 +8.26799 +8.26506 +8.26211 +8.25914 +8.25614 +8.25311 +8.25006 +8.24698 +8.24387 +8.24074 +8.23758 +8.23439 +8.23117 +8.22793 +8.22466 +8.22136 +8.21802 +8.21466 +8.21128 +8.20786 +8.20441 +8.20093 +8.19741 +8.19387 +8.1903 +8.18669 +8.18306 +8.17939 +8.17568 +8.17195 +8.16818 +8.16438 +8.16054 +8.15667 +8.15276 +8.14882 +8.14485 +8.14084 +8.13679 +8.1327 +8.12858 +8.12442 +8.12022 +8.11599 +8.11172 +8.1074 +8.10305 +8.09866 +8.09423 +8.08976 +8.08524 +8.08069 +8.07609 +8.07145 +8.06677 +8.06204 +8.05728 +8.05246 +8.04761 +9.10222 +1.17247 +1.02245 +0.715459 +0.859049 +1.08356 +1.08342 +1.08327 +1.08313 +1.08298 +1.08283 +1.08268 +1.08254 +1.08238 +1.08223 +1.08208 +1.08192 +1.08177 +1.08161 +1.08145 +1.08129 +1.08113 +1.08097 +1.08081 +1.08064 +1.08048 +1.08031 +1.08014 +1.07997 +1.0798 +1.07962 +1.07945 +1.07927 +1.0791 +1.07892 +1.07874 +1.07855 +1.07837 +1.07819 +1.078 +1.07781 +1.07762 +1.07743 +1.07724 +1.07704 +1.07685 +1.07665 +1.07645 +1.07625 +1.07605 +1.07585 +1.07564 +1.07543 +1.07522 +1.07501 +1.0748 +1.07459 +1.07437 +1.07415 +1.07393 +1.07371 +1.07349 +1.07326 +1.07304 +1.07281 +1.07258 +1.07234 +1.07211 +1.07187 +1.07163 +1.07139 +1.07115 +1.07091 +1.07066 +1.07041 +1.07016 +1.06991 +1.06965 +1.06939 +1.06914 +1.06887 +1.06861 +1.06834 +1.06808 +1.06781 +1.06753 +1.06726 +1.06698 +1.0667 +1.06642 +1.06613 +1.06585 +1.06556 +1.06527 +1.06497 +1.06468 +1.06438 +1.06408 +1.06377 +1.06346 +1.06316 +1.06284 +1.06253 +1.06221 +1.06189 +1.06157 +1.06124 +1.06091 +1.06058 +1.06025 +1.05991 +1.05957 +1.05923 +1.05888 +1.05854 +1.05818 +1.05783 +1.05747 +1.05711 +1.05675 +1.05638 +1.05601 +1.05564 +1.05526 +1.05488 +1.0545 +1.05411 +1.05372 +1.05333 +1.05293 +1.05253 +1.05213 +1.05172 +1.05131 +1.05089 +1.05048 +1.05005 +1.04963 +1.0492 +1.04877 +1.04833 +1.04789 +1.04744 +1.047 +1.04654 +1.04609 +1.04563 +1.04516 +1.04469 +1.04422 +1.04374 +1.04326 +1.04278 +1.04229 +1.04179 +1.04129 +1.04079 +1.04028 +1.03977 +1.03925 +1.03873 +1.0382 +1.03767 +1.03714 +1.0366 +1.03605 +1.0355 +1.03494 +1.03438 +1.03382 +1.03325 +1.03267 +1.03209 +1.0315 +1.03091 +1.03031 +1.02971 +1.0291 +1.02848 +1.02786 +9.10222 +1.16353 +1.09744 +1.16011 +1.10486 +0.626974 +0.739909 +1.0205 +1.02036 +1.02022 +1.02008 +1.01995 +1.0198 +1.01966 +1.01952 +1.01937 +1.01923 +1.01908 +1.01893 +1.01878 +1.01863 +1.01848 +1.01833 +1.01818 +1.01802 +1.01786 +1.01771 +1.01755 +1.01739 +1.01722 +1.01706 +1.0169 +1.01673 +1.01656 +1.0164 +1.01623 +1.01605 +1.01588 +1.01571 +1.01553 +1.01535 +1.01518 +1.015 +1.01481 +1.01463 +1.01445 +1.01426 +1.01407 +1.01389 +1.01369 +1.0135 +1.01331 +1.01311 +1.01292 +1.01272 +1.01252 +1.01232 +1.01211 +1.01191 +1.0117 +1.01149 +1.01128 +1.01107 +1.01086 +1.01064 +1.01042 +1.0102 +1.00998 +1.00976 +1.00953 +1.00931 +1.00908 +1.00885 +1.00862 +1.00838 +1.00815 +1.00791 +1.00767 +1.00742 +1.00718 +1.00693 +1.00669 +1.00644 +1.00618 +1.00593 +1.00567 +1.00541 +1.00515 +1.00489 +1.00462 +1.00435 +1.00408 +1.00381 +1.00354 +1.00326 +1.00298 +1.0027 +1.00241 +1.00213 +1.00184 +1.00155 +1.00125 +1.00096 +1.00066 +1.00036 +1.00005 +0.999746 +0.999436 +0.999124 +0.99881 +0.998492 +0.998172 +0.997849 +0.997524 +0.997195 +0.996864 +0.99653 +0.996193 +0.995853 +0.995511 +0.995165 +0.994816 +0.994464 +0.994109 +0.993751 +0.99339 +0.993026 +0.992659 +0.992288 +0.991915 +0.991538 +0.991157 +0.990774 +0.990387 +0.989996 +0.989603 +0.989205 +0.988805 +0.9884 +0.987992 +0.987581 +0.987166 +0.986747 +0.986325 +0.985899 +0.985469 +0.985035 +0.984597 +0.984156 +0.98371 +0.983261 +0.982807 +0.98235 +0.981888 +0.981422 +0.980952 +0.980478 +0.98 +0.979517 +0.97903 +0.978538 +0.978042 +0.977542 +0.977037 +0.976528 +0.976013 +0.975494 +0.974971 +0.974442 +0.973909 +0.973371 +0.972828 +0.97228 +0.971727 +0.971169 +0.970605 +0.970037 +0.969463 +0.968884 +0.968305 +9.10222 +1.16354 +1.09745 +1.15469 +1.21966 +1.28522 +1.22197 +0.640646 +0.746973 +1.07233 +1.07218 +1.07204 +1.07189 +1.07174 +1.07159 +1.07144 +1.07128 +1.07113 +1.07097 +1.07082 +1.07066 +1.0705 +1.07034 +1.07018 +1.07001 +1.06985 +1.06968 +1.06952 +1.06935 +1.06918 +1.06901 +1.06883 +1.06866 +1.06848 +1.06831 +1.06813 +1.06795 +1.06777 +1.06758 +1.0674 +1.06721 +1.06702 +1.06684 +1.06664 +1.06645 +1.06626 +1.06606 +1.06587 +1.06567 +1.06547 +1.06527 +1.06506 +1.06486 +1.06465 +1.06444 +1.06423 +1.06402 +1.0638 +1.06359 +1.06337 +1.06315 +1.06293 +1.06271 +1.06248 +1.06226 +1.06203 +1.0618 +1.06157 +1.06133 +1.06109 +1.06086 +1.06062 +1.06037 +1.06013 +1.05988 +1.05964 +1.05938 +1.05913 +1.05888 +1.05862 +1.05836 +1.0581 +1.05784 +1.05757 +1.0573 +1.05703 +1.05676 +1.05649 +1.05621 +1.05593 +1.05565 +1.05537 +1.05508 +1.05479 +1.0545 +1.05421 +1.05391 +1.05361 +1.05331 +1.05301 +1.0527 +1.05239 +1.05208 +1.05176 +1.05145 +1.05113 +1.05081 +1.05048 +1.05015 +1.04982 +1.04949 +1.04915 +1.04881 +1.04847 +1.04813 +1.04778 +1.04743 +1.04707 +1.04671 +1.04635 +1.04599 +1.04562 +1.04525 +1.04488 +1.04451 +1.04413 +1.04374 +1.04336 +1.04297 +1.04258 +1.04218 +1.04178 +1.04138 +1.04097 +1.04056 +1.04014 +1.03973 +1.03931 +1.03888 +1.03845 +1.03802 +1.03758 +1.03714 +1.0367 +1.03625 +1.0358 +1.03534 +1.03488 +1.03442 +1.03395 +1.03348 +1.033 +1.03252 +1.03204 +1.03155 +1.03105 +1.03055 +1.03005 +1.02954 +1.02903 +1.02852 +1.02799 +1.02747 +1.02694 +1.0264 +1.02586 +1.02532 +1.02477 +1.02421 +1.02365 +1.02308 +1.02251 +1.02194 +1.02136 +1.02077 +1.02018 +1.01958 +1.01898 +1.01837 +1.01777 +9.10223 +1.16355 +1.09746 +1.1547 +1.21967 +1.28148 +1.33874 +1.39482 +1.30561 +0.658739 +0.780726 +0.804312 +0.806289 +0.808286 +0.810301 +0.812335 +0.814389 +0.816462 +0.818554 +0.820667 +0.822799 +0.824952 +0.827126 +0.82932 +0.831536 +0.833772 +0.83603 +0.83831 +0.840612 +0.842936 +0.845282 +0.847651 +0.850043 +0.852459 +0.854897 +0.85736 +0.859846 +0.862357 +0.864892 +0.867452 +0.870037 +0.872647 +0.875283 +0.877945 +0.880633 +0.883348 +0.886089 +0.888858 +0.891654 +0.894478 +0.89733 +0.900211 +0.90312 +0.906058 +0.909026 +0.912023 +0.91505 +0.918108 +0.921197 +0.924317 +0.927468 +0.930652 +0.933867 +0.937116 +0.940397 +0.943712 +0.947061 +0.950443 +0.953861 +0.957314 +0.960802 +0.964326 +0.967886 +0.971483 +0.975118 +0.97879 +0.9825 +0.986249 +0.990037 +0.993865 +0.997732 +1.00164 +1.00559 +1.00958 +1.01361 +1.01769 +1.02181 +1.02597 +1.03018 +1.03443 +1.03872 +1.04307 +1.04746 +1.05189 +1.05638 +1.06091 +1.06549 +1.07012 +1.0748 +1.07953 +1.08431 +1.08915 +1.09404 +1.09898 +1.10397 +1.10902 +1.10877 +1.10843 +1.10808 +1.10773 +1.10738 +1.10703 +1.10667 +1.10631 +1.10594 +1.10557 +1.1052 +1.10483 +1.10445 +1.10407 +1.10369 +1.1033 +1.10291 +1.10252 +1.10212 +1.10172 +1.10132 +1.10091 +1.1005 +1.10009 +1.09967 +1.09925 +1.09882 +1.09839 +1.09796 +1.09752 +1.09708 +1.09664 +1.09619 +1.09574 +1.09528 +1.09482 +1.09435 +1.09389 +1.09341 +1.09294 +1.09245 +1.09197 +1.09148 +1.09099 +1.09049 +1.08998 +1.08948 +1.08897 +1.08845 +1.08793 +1.0874 +1.08687 +1.08634 +1.0858 +1.08525 +1.0847 +1.08415 +1.08359 +1.08302 +1.08245 +1.08187 +1.08129 +1.08071 +1.08012 +1.07952 +1.07892 +1.07831 +1.0777 +1.07708 +1.07645 +1.07582 +1.07519 +1.07454 +1.07391 +9.10223 +1.16357 +1.09747 +1.15471 +1.21968 +1.28149 +1.33875 +1.39171 +1.44092 +1.49034 +0.576158 +0.129391 +0.129336 +0.13041 +0.131499 +0.132602 +0.13372 +0.134853 +0.136001 +0.137164 +0.138344 +0.139539 +0.14075 +0.141978 +0.143223 +0.144485 +0.145764 +0.147061 +0.148376 +0.149709 +0.15106 +0.15243 +0.153819 +0.155228 +0.156656 +0.158104 +0.159573 +0.161062 +0.162573 +0.164105 +0.165658 +0.167234 +0.168832 +0.170454 +0.172098 +0.173766 +0.175458 +0.177175 +0.178917 +0.180684 +0.182477 +0.184295 +0.186141 +0.188014 +0.189914 +0.191843 +0.1938 +0.195786 +0.197802 +0.199848 +0.201924 +0.204032 +0.206171 +0.208343 +0.210548 +0.212786 +0.215058 +0.217365 +0.219707 +0.222085 +0.2245 +0.226952 +0.229442 +0.231971 +0.234539 +0.237147 +0.239796 +0.242486 +0.245219 +0.247995 +0.250815 +0.25368 +0.256591 +0.259548 +0.262552 +0.265605 +0.268706 +0.271858 +0.275061 +0.278316 +0.281624 +0.284986 +0.288404 +0.291877 +0.295408 +0.298997 +0.302646 +0.306355 +0.310127 +0.313961 +0.31786 +0.321825 +0.325856 +0.329956 +0.334126 +0.338357 +0.341957 +0.345586 +0.349265 +0.352996 +0.35678 +0.360618 +0.36451 +0.368457 +0.37246 +0.37652 +0.380639 +0.384816 +0.389053 +0.393351 +0.397711 +0.402133 +0.40662 +0.411171 +0.415788 +0.420473 +0.425226 +0.430048 +0.43494 +0.439904 +0.444941 +0.450052 +0.455238 +0.460501 +0.465841 +0.471261 +0.476761 +0.482343 +0.488008 +0.493758 +0.499594 +0.505517 +0.51153 +0.517633 +0.523828 +0.530116 +0.5365 +0.542981 +0.549561 +0.55624 +0.563022 +0.569908 +0.576899 +0.583997 +0.591205 +0.598525 +0.605957 +0.613505 +0.62117 +0.628954 +0.63686 +0.644889 +0.653044 +0.661327 +0.669741 +0.678287 +0.686968 +0.695787 +0.704746 +0.713847 +0.723094 +0.732488 +0.742033 +0.751731 +0.761585 +0.771598 +0.781773 +0.792112 +0.80262 +0.813342 +9.10224 +1.16359 +1.09748 +1.15472 +1.2197 +1.28151 +1.33877 +1.39173 +1.44093 +1.4869 +0.457242 +0.000989947 +2.31015e-30 +9.72455e-30 +1.63405e-28 +2.08002e-29 +1.45388e-28 +4.8818e-29 +2.35473e-31 +2.05956e-28 +1.93482e-29 +1.16803e-29 +3.00755e-28 +5.81602e-29 +5.61214e-30 +1.28706e-28 +2.62972e-29 +8.68421e-29 +4.51873e-28 +3.03768e-29 +2.3969e-28 +1.96054e-28 +1.6278e-29 +2.8682e-29 +1.796e-30 +1.91672e-29 +1.53716e-29 +2.70914e-28 +1.76493e-31 +3.03161e-29 +6.45553e-29 +2.1592e-29 +3.69819e-28 +1.76812e-28 +1.53705e-28 +4.29634e-29 +4.76804e-29 +8.04899e-30 +9.26374e-29 +1.72422e-28 +6.87839e-29 +2.2196e-29 +2.95798e-29 +1.42622e-31 +3.33502e-29 +7.72244e-29 +5.25524e-30 +1.14096e-29 +6.08712e-29 +3.40893e-30 +8.68972e-30 +5.30328e-29 +3.37974e-29 +1.28917e-29 +1.84898e-28 +2.33274e-28 +3.11482e-28 +1.67423e-28 +6.99271e-29 +3.08128e-30 +4.3198e-30 +1.50085e-28 +1.928e-30 +5.21788e-31 +1.28742e-28 +1.35879e-28 +7.31649e-29 +7.76883e-29 +1.60946e-30 +3.73384e-29 +1.05273e-28 +3.63242e-29 +1.97402e-29 +2.22689e-29 +2.50448e-30 +4.26243e-29 +3.60533e-31 +1.5489e-29 +4.39982e-29 +9.88209e-29 +3.4138e-31 +8.7577e-30 +9.48683e-29 +1.82506e-28 +1.7101e-28 +3.71991e-29 +1.38779e-30 +5.21819e-30 +1.91412e-30 +2.28709e-29 +4.51034e-29 +5.60172e-29 +6.35719e-29 +3.50816e-30 +1.76598e-30 +6.10702e-29 +9.66919e-06 +3.97431e-05 +9.08923e-05 +0.000163804 +0.000259186 +0.000377765 +0.00052029 +0.000687532 +0.000880284 +0.00109936 +0.0013456 +0.00161988 +0.00192307 +0.00225609 +0.00261989 +0.00301544 +0.00344373 +0.0039058 +0.0044027 +0.00493552 +0.00550538 +0.00611344 +0.00676088 +0.00744894 +0.00817887 +0.00895197 +0.00976959 +0.0106331 +0.0115439 +0.0125035 +0.0135133 +0.014575 +0.0156901 +0.0168603 +0.0180873 +0.0193728 +0.0207186 +0.0221266 +0.0235987 +0.0251369 +0.0267432 +0.0284197 +0.0301686 +0.0319921 +0.0338926 +0.0358723 +0.0379337 +0.0400794 +0.042312 +0.0446341 +0.0470486 +0.0495582 +0.052166 +0.054875 +0.0576883 +0.0606092 +0.063641 +0.0667873 +0.0700515 +0.0734374 +0.0769487 +0.0805894 +0.0843637 +0.0882756 +0.0923295 +0.0965299 +0.100881 +0.105389 +0.110057 +0.114892 +0.119897 +0.125079 +0.130444 +0.135997 +9.10225 +1.16362 +1.0975 +1.15474 +1.21972 +1.28153 +1.33879 +1.39175 +1.44095 +1.48692 +0.457196 +0.000987503 +2.22002e-29 +6.3245e-30 +1.16331e-28 +5.82816e-29 +1.34903e-28 +1.23758e-29 +2.11775e-30 +1.96298e-29 +3.84265e-28 +3.98559e-29 +5.19877e-29 +6.43057e-28 +6.53261e-29 +2.13721e-28 +3.70832e-29 +4.90076e-29 +2.11922e-29 +2.56383e-29 +8.72868e-31 +2.99985e-29 +5.17265e-29 +8.04513e-29 +7.47576e-31 +3.40639e-28 +3.67763e-28 +2.04534e-28 +2.13685e-31 +1.63984e-28 +3.1715e-28 +2.99117e-29 +2.48123e-29 +4.27469e-30 +8.39956e-30 +3.69574e-28 +1.15346e-34 +4.03847e-30 +1.59264e-29 +1.33129e-28 +2.50137e-30 +2.46622e-28 +5.56051e-30 +1.48384e-29 +5.06253e-30 +4.99152e-30 +5.46952e-31 +1.14096e-29 +8.04367e-29 +1.32536e-28 +5.37822e-29 +5.40778e-29 +2.01055e-28 +8.33179e-30 +2.89784e-29 +1.25361e-29 +1.18908e-31 +3.15151e-29 +7.76976e-30 +2.01013e-30 +3.02251e-29 +1.15303e-29 +9.70604e-29 +4.31243e-31 +1.00847e-28 +4.36323e-29 +3.97494e-30 +3.45284e-29 +7.66231e-29 +8.39713e-30 +1.80928e-28 +5.0033e-30 +2.88218e-29 +3.17902e-29 +1.16182e-29 +6.14322e-30 +1.38564e-29 +1.42236e-30 +2.71624e-29 +1.08508e-29 +6.50006e-29 +5.956e-29 +5.58386e-30 +5.36877e-29 +6.70335e-29 +7.1781e-31 +4.06819e-33 +2.09843e-30 +7.65649e-32 +1.16153e-29 +7.45333e-30 +7.65095e-30 +2.19674e-29 +1.69785e-29 +1.76619e-30 +4.2181e-29 +1.71945e-30 +1.78112e-29 +3.73003e-29 +3.42615e-30 +1.13635e-29 +3.58449e-29 +3.84353e-29 +1.57955e-28 +1.42522e-28 +2.54071e-29 +1.62055e-29 +9.9964e-29 +1.42075e-28 +1.51861e-28 +2.28386e-28 +2.63325e-29 +1.72564e-29 +8.79831e-31 +2.17124e-31 +1.23799e-29 +2.03201e-29 +1.43376e-28 +6.98094e-29 +2.8344e-29 +1.89092e-29 +1.98556e-31 +3.41321e-29 +1.74068e-30 +1.25149e-28 +1.27461e-30 +1.45963e-28 +2.38466e-30 +6.97849e-30 +3.79305e-30 +4.53679e-31 +5.482e-30 +6.21482e-30 +6.55417e-30 +1.13824e-30 +1.11819e-29 +2.62796e-32 +8.41032e-30 +4.33278e-30 +4.25698e-29 +6.25362e-31 +1.54435e-31 +4.78423e-30 +4.2536e-29 +9.45489e-29 +1.25415e-28 +9.77174e-30 +7.44341e-30 +3.10725e-29 +2.96588e-30 +1.79653e-30 +5.96129e-30 +2.20334e-32 +2.77109e-29 +5.75271e-30 +1.02324e-28 +5.15951e-31 +2.03973e-30 +2.61276e-29 +2.95365e-29 +1.43586e-29 +7.00902e-31 +2.77143e-30 +3.04414e-31 +4.23201e-30 +2.14991e-29 +4.43952e-32 +4.12316e-32 +9.50896e-30 +0 +9.10226 +1.16365 +1.09752 +1.15476 +1.21974 +1.28155 +1.33881 +1.39177 +1.44098 +1.48695 +0.457144 +0.000984714 +2.17253e-29 +4.40792e-29 +9.97347e-31 +3.65772e-29 +2.9333e-28 +2.38774e-31 +2.353e-31 +1.96299e-29 +3.4584e-29 +2.41817e-33 +3.3606e-28 +1.10349e-29 +8.29414e-30 +5.72027e-29 +2.24166e-28 +2.59214e-29 +2.04688e-28 +1.00746e-28 +7.52595e-29 +5.2755e-30 +3.45331e-29 +1.70638e-30 +2.38634e-29 +6.85528e-30 +4.88462e-29 +6.06133e-29 +7.34493e-29 +1.16996e-29 +6.59356e-30 +1.522e-30 +1.68578e-28 +4.44397e-30 +1.06186e-28 +7.31542e-29 +7.62692e-31 +1.39751e-30 +1.18306e-28 +2.66242e-30 +2.38084e-30 +3.38962e-29 +4.89733e-29 +4.31803e-29 +7.28989e-30 +1.44255e-29 +2.52782e-28 +5.62547e-28 +8.71091e-29 +1.36357e-29 +6.69951e-30 +3.42745e-29 +6.88061e-29 +1.1152e-30 +1.95502e-30 +4.0794e-29 +2.30037e-28 +7.50771e-32 +3.12459e-30 +1.98551e-29 +1.16918e-29 +9.97516e-31 +4.37269e-31 +8.94063e-29 +2.52121e-29 +2.83501e-30 +1.53908e-29 +6.53452e-32 +5.13757e-29 +9.94997e-32 +7.45395e-29 +2.59591e-29 +1.91954e-29 +1.35488e-31 +1.80944e-28 +1.40473e-29 +9.37601e-30 +1.42255e-30 +9.12328e-30 +2.67944e-29 +7.98991e-29 +1.41501e-28 +1.44689e-29 +5.7964e-29 +4.42527e-29 +5.36109e-30 +8.18469e-30 +2.68483e-29 +2.8816e-29 +1.79152e-29 +3.10169e-29 +6.97599e-29 +7.54899e-30 +2.75026e-29 +2.93973e-29 +2.50947e-30 +2.6422e-29 +1.04354e-29 +1.81089e-30 +2.23746e-29 +3.63228e-29 +5.33812e-29 +4.83815e-29 +2.92439e-29 +3.99086e-29 +5.16741e-30 +3.8738e-32 +2.01333e-29 +4.09068e-29 +5.7847e-29 +1.67971e-28 +6.83491e-29 +2.31838e-29 +1.479e-29 +1.68142e-29 +1.33973e-30 +3.46651e-29 +1.08283e-29 +6.68072e-29 +1.36875e-29 +5.43475e-30 +5.08513e-31 +2.53875e-30 +3.1512e-32 +7.34059e-30 +3.9903e-30 +3.19699e-32 +1.91268e-29 +2.1174e-29 +1.32577e-29 +1.19715e-30 +5.91833e-29 +1.16701e-28 +4.61057e-30 +2.69407e-30 +2.31553e-29 +3.12793e-29 +2.41463e-29 +2.38495e-29 +4.05181e-31 +5.29307e-29 +2.29866e-29 +2.73934e-29 +5.10243e-29 +5.04068e-29 +2.04808e-29 +2.02344e-29 +1.47022e-30 +3.63571e-31 +6.48121e-30 +4.34365e-30 +4.92669e-32 +1.35629e-31 +4.19084e-30 +3.72753e-29 +8.35331e-30 +2.60091e-29 +2.03973e-30 +1.46983e-29 +5.38828e-29 +1.96963e-32 +2.18511e-29 +4.33036e-32 +1.38698e-29 +1.20377e-30 +1.458e-29 +2.7252e-29 +1.16334e-30 +1.80255e-30 +7.27922e-29 +9.10227 +1.16368 +1.09754 +1.15478 +1.21976 +1.28157 +1.33883 +1.3918 +1.441 +1.48698 +0.457085 +0.000981581 +2.17253e-29 +1.01197e-30 +4.1914e-30 +5.02531e-29 +3.03832e-29 +2.14862e-30 +5.46659e-28 +2.34528e-28 +1.53706e-29 +1.47829e-29 +9.24226e-29 +6.6275e-29 +8.97944e-29 +5.75094e-30 +9.78095e-29 +4.9008e-29 +0 +4.04863e-29 +2.94586e-29 +1.31187e-29 +4.56107e-29 +1.70638e-30 +1.25662e-29 +1.91673e-29 +1.88948e-29 +7.45063e-29 +1.67428e-28 +6.54832e-29 +5.80721e-29 +2.54565e-28 +2.66727e-28 +1.76812e-28 +8.39991e-30 +6.14037e-30 +4.76805e-29 +6.46156e-29 +5.88069e-29 +4.56941e-29 +8.2877e-29 +1.90666e-29 +5.78606e-33 +6.65419e-29 +1.43998e-30 +3.63882e-29 +9.81927e-29 +2.79524e-29 +6.78895e-29 +1.22722e-28 +4.86387e-29 +5.21968e-30 +1.06359e-29 +1.98258e-30 +3.78493e-29 +1.73991e-28 +7.78705e-29 +5.98477e-29 +3.49844e-29 +1.13953e-31 +2.07787e-28 +2.62836e-29 +2.2664e-29 +1.65747e-29 +1.14994e-29 +5.43547e-30 +5.36049e-30 +1.83125e-29 +1.26176e-29 +2.35287e-29 +2.56802e-29 +2.82756e-34 +2.78896e-34 +6.11952e-32 +4.5386e-30 +2.39761e-29 +2.25318e-30 +8.91536e-32 +1.403e-30 +7.07536e-29 +2.95208e-29 +7.9853e-29 +1.19821e-31 +7.77132e-29 +9.12398e-29 +4.4407e-29 +3.02391e-30 +0 +3.0626e-31 +5.26489e-29 +1.10932e-29 +2.82696e-30 +3.64059e-29 +7.1488e-29 +1.9103e-30 +2.11029e-29 +3.51293e-29 +1.82539e-29 +6.68744e-29 +0 +7.45056e-29 +4.90254e-29 +5.94714e-29 +8.48837e-29 +2.47434e-31 +1.55075e-28 +7.55823e-30 +1.44726e-29 +9.39094e-29 +1.47152e-28 +1.18573e-29 +6.10436e-30 +8.04437e-29 +2.75922e-29 +2.08532e-29 +6.27923e-34 +2.12199e-31 +6.61781e-29 +4.27572e-29 +3.12997e-29 +3.27436e-32 +4.19837e-30 +1.65802e-29 +1.00269e-29 +2.47487e-30 +1.67443e-28 +1.37741e-28 +6.61807e-32 +8.78598e-31 +1.83558e-30 +1.81316e-30 +1.00975e-29 +1.10486e-31 +4.61057e-30 +2.18825e-29 +1.12418e-30 +3.40584e-29 +4.57869e-29 +1.35628e-29 +3.46688e-29 +3.30817e-30 +2.00194e-30 +3.07619e-29 +4.35548e-29 +5.04068e-29 +1.35562e-29 +9.82789e-31 +8.29464e-30 +8.17516e-31 +3.49907e-29 +2.21594e-30 +2.64946e-30 +5.96376e-29 +1.73193e-30 +2.89335e-29 +2.414e-29 +1.51157e-33 +1.20936e-28 +1.17984e-28 +5.76023e-30 +2.4128e-29 +3.12938e-31 +4.33036e-30 +1.28615e-29 +3.00943e-31 +2.67771e-30 +1.71023e-29 +6.91322e-30 +1.51165e-29 +0 +9.10228 +1.16371 +1.09756 +1.1548 +1.21978 +1.2816 +1.33886 +1.39183 +1.44103 +1.48701 +0.45702 +0.000978106 +1.19756e-28 +1.0528e-28 +4.56549e-35 +3.08266e-29 +9.11593e-29 +5.96827e-28 +5.88251e-30 +1.18456e-28 +9.14539e-31 +1.51502e-29 +6.72382e-29 +8.75611e-31 +2.15927e-31 +8.17036e-29 +1.07076e-28 +2.68556e-29 +4.70611e-29 +4.10212e-28 +1.02602e-29 +6.60531e-29 +5.8227e-29 +4.49614e-29 +1.5818e-29 +6.23724e-29 +3.76589e-29 +5.65464e-28 +2.39014e-28 +1.78166e-30 +1.02119e-28 +2.1915e-28 +1.70706e-30 +1.99032e-28 +1.32531e-28 +5.40813e-29 +2.34402e-29 +1.39739e-30 +7.93607e-30 +2.62971e-29 +5.95209e-31 +1.90138e-28 +2.08298e-31 +5.48282e-30 +5.06243e-30 +2.48966e-29 +2.45482e-29 +3.19695e-29 +1.16457e-28 +2.65401e-28 +7.19784e-29 +5.94554e-29 +2.01055e-28 +2.15907e-29 +2.054e-28 +1.07002e-28 +1.4905e-29 +2.04164e-29 +2.88912e-30 +1.75214e-29 +1.12707e-31 +2.62838e-29 +5.66629e-30 +6.89894e-30 +5.82095e-29 +5.26082e-29 +3.89173e-29 +3.83831e-29 +1.60939e-30 +6.67082e-30 +8.28216e-30 +1.21067e-29 +2.94892e-29 +6.11952e-32 +2.50469e-30 +1.14603e-29 +8.11051e-31 +2.22233e-30 +2.96875e-29 +3.32298e-29 +8.74024e-31 +5.66001e-30 +2.17933e-29 +3.82211e-29 +4.05512e-29 +6.7484e-30 +1.25879e-30 +1.35218e-29 +2.05931e-29 +9.47602e-30 +2.98124e-31 +2.71087e-29 +1.95148e-29 +2.97935e-29 +1.9103e-30 +3.49738e-29 +1.05753e-29 +2.29775e-29 +1.492e-28 +4.30702e-32 +9.22001e-29 +5.33812e-29 +9.17151e-29 +1.44414e-28 +9.31242e-29 +6.25147e-31 +1.86638e-29 +2.47477e-29 +3.26924e-29 +4.90322e-30 +7.41043e-29 +6.10502e-30 +2.28247e-30 +1.70361e-29 +2.1776e-31 +6.72393e-30 +1.32238e-28 +4.57527e-29 +3.29973e-30 +6.3843e-30 +1.22269e-29 +1.20719e-29 +7.83565e-31 +1.93409e-31 +6.89373e-29 +3.28538e-29 +2.97882e-32 +1.24326e-30 +1.1671e-31 +1.86498e-29 +3.03969e-32 +6.29363e-30 +2.76214e-30 +7.8835e-30 +5.28037e-30 +2.66126e-30 +5.91339e-30 +2.25885e-29 +1.8006e-29 +4.96532e-30 +9.03023e-30 +1.4832e-29 +5.49389e-30 +3.57438e-29 +8.86406e-29 +5.8879e-31 +2.36769e-32 +1.99932e-29 +1.71648e-29 +2.29646e-29 +6.71945e-31 +1.97067e-29 +2.21565e-29 +9.04949e-31 +2.16389e-29 +1.20282e-29 +6.68823e-30 +3.42879e-29 +1.58071e-29 +1.24541e-31 +7.09068e-31 +6.30955e-30 +1.35169e-29 +3.04414e-31 +4.71601e-31 +1.04598e-30 +7.78098e-31 +4.08987e-32 +1.01097e-30 +0 +9.1023 +1.16375 +1.09758 +1.15483 +1.21981 +1.28163 +1.33889 +1.39186 +1.44107 +1.48704 +0.456948 +0.000974291 +4.10685e-30 +2.14122e-29 +0 +2.08001e-29 +2.29773e-28 +1.23758e-29 +1.99158e-29 +8.72861e-29 +9.14539e-31 +4.67211e-29 +4.60514e-29 +7.8805e-30 +9.88133e-29 +5.72029e-29 +2.62974e-29 +4.90078e-29 +3.59313e-30 +1.09942e-28 +1.97921e-29 +3.95077e-28 +3.87795e-29 +1.24245e-28 +2.42876e-29 +1.02608e-28 +1.22117e-29 +2.75286e-29 +1.12955e-29 +1.11354e-29 +1.12411e-28 +1.10819e-28 +2.25758e-28 +6.1854e-29 +1.23425e-28 +4.94807e-29 +3.26562e-29 +2.23583e-31 +1.08313e-28 +1.27743e-29 +9.75191e-29 +1.90666e-29 +9.47989e-29 +1.48384e-29 +2.48069e-30 +1.17356e-29 +6.37848e-29 +4.85324e-30 +1.60969e-28 +3.52505e-29 +1.34459e-29 +1.65616e-29 +5.39451e-33 +1.61039e-29 +1.53278e-29 +2.89303e-28 +2.30037e-28 +3.54756e-29 +6.43578e-29 +3.52983e-29 +3.02251e-29 +1.39023e-29 +2.95572e-30 +2.23516e-29 +4.001e-29 +1.05152e-31 +5.36079e-30 +4.24422e-29 +1.08798e-29 +3.35882e-29 +1.48832e-28 +4.09568e-29 +6.40129e-30 +4.86796e-30 +2.74007e-29 +1.59183e-29 +7.62748e-30 +3.34558e-29 +7.89189e-31 +3.11425e-30 +7.22254e-30 +1.05593e-29 +3.45582e-29 +1.18294e-28 +7.66667e-29 +4.00057e-29 +2.30449e-34 +5.05764e-32 +2.07054e-30 +5.75437e-29 +4.88447e-29 +3.06032e-29 +7.84792e-30 +3.71211e-30 +5.97974e-30 +5.89977e-30 +6.8778e-30 +9.19093e-29 +5.25052e-31 +1.05739e-30 +1.50259e-28 +7.4398e-29 +1.05729e-28 +6.41837e-29 +5.13086e-29 +1.65078e-30 +7.06082e-34 +2.77449e-29 +6.01703e-31 +2.22545e-29 +1.05764e-29 +1.07289e-28 +8.56046e-29 +2.95982e-29 +2.08532e-29 +2.19538e-30 +2.74206e-30 +1.04802e-28 +5.57612e-30 +4.45888e-29 +7.23541e-30 +9.60308e-31 +2.28487e-29 +1.00269e-29 +3.63668e-29 +5.97407e-29 +1.2591e-30 +5.76507e-30 +7.26114e-31 +4.13005e-30 +1.13809e-31 +3.08363e-30 +9.13234e-29 +5.28112e-29 +2.69407e-30 +4.87201e-34 +6.18167e-29 +3.84756e-29 +1.86904e-29 +5.74423e-32 +6.27194e-31 +1.39173e-30 +4.30598e-29 +1.54502e-30 +2.14396e-31 +1.48813e-31 +2.76747e-29 +3.69237e-31 +4.45032e-30 +1.41807e-31 +3.03378e-29 +4.92829e-30 +5.02685e-32 +1.23175e-29 +1.54055e-29 +7.9405e-30 +3.6407e-29 +4.28854e-30 +3.55641e-29 +4.68722e-29 +3.55765e-29 +2.58055e-30 +3.50759e-30 +9.20851e-30 +5.12211e-30 +4.18392e-30 +2.06335e-29 +1.42563e-29 +6.48952e-30 +0 +9.10231 +1.16379 +1.09761 +1.15486 +1.21984 +1.28166 +1.33892 +1.39189 +1.4411 +1.48708 +0.45687 +0.000970137 +1.02671e-30 +1.409e-28 +0 +2.08003e-29 +2.76714e-28 +8.70928e-28 +2.95163e-29 +2.4951e-28 +8.22935e-30 +5.63285e-30 +8.53161e-29 +7.41117e-29 +8.63232e-31 +5.31718e-30 +3.35424e-28 +1.74905e-29 +2.05982e-28 +1.69946e-29 +2.48272e-29 +2.93711e-28 +2.0009e-29 +7.2877e-30 +3.87526e-29 +1.50692e-28 +2.79247e-29 +4.33374e-28 +4.62665e-28 +1.22768e-29 +1.4518e-29 +2.70555e-30 +1.58143e-28 +2.8636e-29 +2.56656e-28 +3.55873e-28 +1.33297e-29 +8.50248e-30 +2.27844e-29 +1.43173e-28 +1.15e-28 +5.28161e-30 +1.44757e-31 +1.85353e-29 +5.96749e-29 +1.80194e-29 +2.83488e-29 +9.06443e-30 +1.32726e-28 +3.54393e-30 +3.47593e-29 +9.15282e-29 +3.39819e-30 +6.90136e-29 +4.45766e-28 +2.91669e-28 +1.71578e-28 +4.68695e-31 +3.12586e-30 +1.02591e-30 +3.32462e-29 +1.19873e-29 +8.94021e-29 +9.12344e-30 +4.86844e-29 +1.05152e-31 +2.14423e-29 +8.63203e-30 +6.18661e-29 +5.14329e-30 +3.91693e-31 +1.68169e-29 +1.97399e-29 +2.16945e-29 +1.48217e-30 +2.45718e-29 +3.60467e-31 +2.75356e-29 +1.09998e-29 +1.79369e-29 +3.98116e-29 +8.62212e-31 +7.27564e-29 +5.70956e-29 +2.50343e-29 +3.18923e-31 +1.20947e-29 +2.79399e-30 +9.6043e-30 +8.17134e-30 +4.15108e-29 +3.81299e-30 +7.42978e-29 +3.34023e-29 +4.98431e-30 +2.8558e-30 +4.09477e-29 +3.51827e-30 +6.02746e-29 +6.09136e-30 +3.88302e-29 +7.79403e-29 +2.74788e-29 +7.59073e-29 +8.74537e-29 +3.16552e-30 +2.46864e-30 +3.08346e-30 +1.98718e-29 +5.78468e-29 +1.77117e-29 +4.77693e-30 +3.42656e-29 +1.86179e-29 +2.53253e-29 +5.49315e-31 +1.63847e-29 +8.69222e-29 +6.3871e-29 +6.3843e-30 +2.60513e-30 +7.93643e-31 +2.53875e-30 +1.63701e-29 +5.16362e-30 +1.93077e-30 +4.78792e-31 +1.35986e-29 +4.90906e-30 +1.38816e-29 +2.3005e-29 +2.03897e-29 +7.51993e-30 +6.55417e-30 +2.11234e-29 +3.27893e-31 +3.78426e-30 +2.59563e-30 +2.23131e-29 +6.33096e-29 +4.22928e-30 +1.36459e-29 +2.99032e-29 +4.05346e-29 +4.3028e-29 +1.50792e-30 +9.30048e-30 +1.4719e-30 +3.64818e-31 +6.10557e-30 +2.44307e-30 +7.8827e-31 +1.9632e-31 +1.44557e-29 +1.83901e-29 +1.63717e-29 +5.16011e-29 +7.46594e-29 +1.75459e-29 +3.90706e-30 +9.53446e-30 +3.29605e-30 +2.49443e-29 +1.09589e-29 +2.71601e-29 +1.787e-29 +9.72683e-30 +4.59756e-31 +6.48339e-31 +0 +9.10233 +1.16384 +1.09764 +1.15489 +1.21987 +1.28169 +1.33896 +1.39193 +1.44114 +1.48712 +0.456785 +0.000965648 +1.02671e-30 +3.24229e-28 +8.97631e-30 +1.27398e-29 +3.87541e-28 +5.50036e-28 +4.22507e-29 +1.4843e-29 +3.51486e-29 +2.437e-29 +8.885e-31 +4.53917e-29 +1.04448e-30 +8.00446e-29 +4.97182e-29 +5.55789e-29 +4.22378e-29 +1.11829e-28 +1.78129e-30 +3.1216e-28 +1.6278e-29 +1.57248e-28 +1.77287e-28 +9.40967e-29 +7.55793e-29 +1.51535e-29 +4.747e-29 +6.96089e-31 +4.0679e-29 +3.90682e-29 +6.40413e-29 +1.36317e-28 +1.85105e-28 +2.00377e-29 +3.81217e-28 +2.70537e-29 +1.0294e-29 +6.03699e-31 +1.86658e-29 +5.86846e-33 +1.87993e-29 +4.21934e-29 +1.76402e-29 +1.49169e-28 +9.67326e-29 +5.39205e-31 +1.80003e-28 +9.98381e-29 +1.16311e-30 +3.42749e-29 +3.37973e-29 +1.78795e-31 +1.87878e-29 +9.31227e-29 +3.68073e-29 +1.18491e-28 +6.43575e-29 +5.51865e-31 +5.82599e-30 +1.39023e-29 +2.52524e-29 +5.02913e-29 +9.3142e-29 +8.69629e-29 +9.05991e-29 +5.68017e-29 +1.26188e-29 +6.5018e-29 +4.07219e-29 +5.37557e-29 +1.28919e-28 +2.52551e-29 +3.13571e-29 +2.47034e-30 +3.60731e-31 +1.84329e-29 +5.7468e-29 +1.79366e-29 +3.27804e-29 +3.03035e-30 +3.06129e-29 +6.79485e-29 +6.15645e-29 +2.46974e-29 +5.55116e-30 +3.62072e-29 +5.8325e-29 +5.26522e-29 +1.72197e-29 +3.43092e-29 +2.78733e-29 +4.58181e-30 +7.06394e-30 +2.78807e-29 +9.93155e-29 +1.1745e-28 +7.20531e-29 +1.37046e-29 +5.40937e-29 +5.04575e-29 +1.87896e-29 +1.21347e-28 +9.89735e-31 +1.65364e-30 +3.58726e-29 +5.35209e-29 +6.62647e-29 +1.47152e-28 +1.23106e-28 +6.07191e-29 +1.57258e-29 +2.8513e-30 +6.36105e-34 +1.97553e-29 +8.46316e-33 +4.9535e-29 +4.04149e-29 +2.35377e-30 +4.40205e-29 +1.14602e-29 +2.53875e-30 +1.98107e-30 +1.29146e-30 +7.00881e-32 +2.41339e-30 +5.82469e-29 +2.5276e-29 +1.83558e-30 +2.83225e-30 +1.74809e-31 +1.72634e-31 +3.34162e-31 +1.30412e-29 +5.98868e-30 +2.62989e-30 +9.37213e-30 +2.3074e-29 +1.77837e-29 +1.62657e-29 +1.30787e-29 +4.12518e-30 +3.3013e-29 +3.82892e-31 +3.95613e-29 +8.37043e-31 +2.29722e-32 +3.83583e-30 +3.79005e-30 +4.34324e-30 +1.77521e-30 +3.46195e-31 +1.7335e-30 +2.11302e-30 +2.52676e-30 +3.99567e-29 +1.65368e-30 +2.61291e-29 +7.17414e-29 +3.15141e-31 +2.81154e-29 +2.09589e-29 +3.6834e-29 +7.52357e-32 +9.83686e-30 +2.64874e-30 +4.6547e-30 +1.12344e-29 +0 +9.10235 +1.16389 +1.09767 +1.15492 +1.21991 +1.28173 +1.339 +1.39197 +1.44118 +1.48716 +0.456694 +0.000960824 +2.56678e-31 +3.84783e-28 +6.74207e-30 +3.69959e-28 +6.10386e-28 +5.05154e-28 +2.84958e-28 +7.85193e-29 +2.58072e-28 +0 +6.00516e-30 +4.41395e-29 +5.39437e-30 +8.50724e-33 +4.22719e-29 +1.71399e-28 +1.55165e-28 +2.00932e-31 +1.02602e-29 +2.44735e-29 +5.20049e-30 +1.8931e-28 +2.42876e-29 +2.39424e-29 +1.53717e-29 +1.51535e-29 +3.26446e-29 +1.47271e-29 +1.10661e-28 +8.28625e-30 +1.70706e-30 +2.36661e-31 +9.80519e-29 +4.83627e-29 +1.21713e-28 +3.58726e-29 +6.37054e-29 +1.63245e-29 +2.14871e-28 +1.21688e-28 +5.44411e-29 +1.54264e-29 +1.01001e-28 +6.79401e-30 +5.46852e-31 +9.51158e-30 +9.54669e-29 +8.81264e-30 +1.3978e-29 +2.03894e-30 +1.28675e-30 +8.07553e-32 +3.30435e-30 +4.07953e-29 +4.86829e-30 +1.19986e-30 +3.4185e-29 +2.36292e-29 +1.61824e-31 +4.98097e-29 +1.48015e-28 +5.58789e-30 +1.76963e-28 +2.74845e-28 +3.72286e-30 +1.29252e-28 +1.7074e-28 +1.14686e-28 +1.56591e-30 +5.93604e-29 +9.74812e-31 +2.52551e-29 +1.42422e-29 +1.7687e-28 +2.25292e-28 +5.69021e-30 +9.48455e-30 +4.4844e-30 +2.30956e-30 +1.62965e-30 +2.99042e-30 +1.10232e-29 +5.29655e-29 +1.54452e-30 +1.20956e-29 +3.17868e-30 +4.90105e-30 +3.05703e-31 +2.74751e-29 +1.5252e-29 +1.1609e-30 +3.59214e-29 +3.29583e-29 +8.44117e-29 +1.58905e-29 +8.51333e-30 +3.12491e-29 +6.77506e-31 +3.27229e-29 +1.81652e-29 +8.54625e-30 +2.81706e-29 +4.8497e-29 +3.51645e-29 +5.55356e-30 +6.08948e-29 +2.1157e-30 +1.07148e-29 +1.53815e-29 +1.30034e-28 +2.22841e-29 +7.91848e-30 +1.25127e-30 +3.68046e-32 +2.03201e-29 +1.69183e-29 +7.44365e-29 +6.8918e-29 +7.25492e-29 +3.17457e-32 +1.65802e-29 +2.50658e-30 +7.63854e-29 +9.12611e-29 +5.83848e-30 +6.61807e-30 +2.63528e-31 +9.29261e-30 +6.80449e-30 +4.4751e-29 +8.94934e-30 +1.72489e-31 +2.69407e-30 +1.01195e-29 +2.82044e-32 +2.59563e-32 +4.0059e-30 +3.34908e-30 +5.62826e-30 +1.80152e-29 +7.91041e-30 +4.05363e-29 +4.40534e-29 +3.7655e-31 +1.9556e-29 +1.47022e-30 +1.45262e-30 +2.71359e-30 +6.40407e-30 +0 +5.42515e-31 +6.17935e-30 +7.60688e-31 +1.52232e-29 +1.67319e-30 +7.36494e-30 +7.27931e-30 +5.76023e-30 +2.69643e-29 +1.24605e-30 +7.69841e-30 +6.86833e-30 +3.00943e-31 +1.07108e-29 +2.65278e-30 +2.62479e-29 +7.32078e-32 +0 +9.10236 +1.16394 +1.09771 +1.15495 +1.21995 +1.28177 +1.33904 +1.39201 +1.44123 +1.4872 +0.456596 +0.00095567 +2.43495e-28 +2.5907e-30 +3.98957e-30 +2.21191e-30 +5.74432e-29 +2.02062e-29 +1.95168e-28 +0 +1.27318e-28 +1.23373e-28 +1.15129e-29 +2.0766e-28 +7.30506e-29 +3.75169e-30 +3.35424e-30 +5.0289e-29 +5.50799e-30 +1.42068e-28 +6.1308e-29 +3.50323e-29 +9.82298e-29 +3.40416e-29 +2.34429e-29 +1.55931e-29 +7.55799e-29 +4.24599e-29 +2.13741e-28 +3.36847e-28 +6.59344e-30 +1.13701e-29 +8.64197e-30 +7.66787e-29 +1.37144e-29 +7.31541e-29 +4.23578e-29 +1.90201e-28 +4.11726e-29 +7.82438e-30 +2.26328e-28 +1.52643e-29 +2.52041e-29 +1.5344e-28 +3.57205e-28 +3.46633e-28 +1.19782e-28 +5.39205e-31 +1.10248e-28 +1.97307e-28 +5.29382e-30 +5.94554e-29 +1.35913e-29 +9.43906e-29 +1.03435e-29 +3.2408e-29 +3.68059e-29 +1.35453e-28 +1.73956e-28 +3.06491e-29 +5.63867e-29 +9.19236e-29 +2.5252e-29 +1.10378e-30 +3.59916e-29 +1.82685e-29 +6.35982e-29 +1.04433e-30 +1.03001e-28 +7.00019e-30 +1.22745e-29 +4.4631e-30 +2.57439e-30 +1.35488e-31 +1.04563e-28 +4.58401e-29 +2.43781e-30 +6.27335e-30 +8.75614e-29 +2.92864e-29 +2.07668e-29 +5.86685e-29 +9.73126e-34 +3.14706e-29 +2.39091e-29 +8.17376e-31 +4.68318e-29 +2.62738e-29 +3.54126e-30 +2.78481e-29 +3.22451e-29 +4.09577e-29 +2.04783e-29 +1.51486e-28 +8.861e-30 +1.44542e-29 +8.3293e-29 +7.30157e-29 +5.86772e-29 +1.52688e-29 +9.39114e-32 +1.99363e-29 +2.5405e-31 +4.91407e-31 +5.2357e-30 +1.80609e-29 +1.24939e-29 +4.52995e-29 +5.56791e-29 +8.90179e-29 +4.61188e-29 +3.14345e-29 +2.22834e-31 +6.44408e-34 +6.87941e-29 +5.08314e-29 +2.11579e-31 +4.2116e-29 +1.25449e-29 +4.2213e-29 +1.55653e-29 +9.17451e-30 +5.26869e-29 +7.73634e-29 +1.103e-29 +1.14715e-29 +2.86264e-29 +1.44342e-30 +1.53667e-29 +1.03251e-28 +4.78651e-30 +2.51725e-31 +2.76214e-32 +6.81963e-31 +1.82119e-29 +4.49865e-30 +1.05118e-29 +5.08744e-30 +3.69183e-30 +6.84756e-29 +2.56167e-29 +2.99168e-30 +2.05282e-29 +2.91948e-30 +8.59327e-31 +1.90628e-30 +3.73722e-31 +9.18887e-32 +4.00379e-29 +5.16719e-29 +9.77392e-30 +1.40297e-30 +5.47269e-31 +6.46817e-29 +8.45209e-32 +1.0107e-29 +3.3172e-31 +3.26358e-29 +5.05482e-31 +7.97062e-32 +1.59685e-30 +3.11512e-29 +1.93024e-30 +4.87619e-30 +9.10903e-30 +4.18392e-30 +5.96201e-30 +1.81772e-30 +1.51152e-29 +1.8198e-29 +9.10238 +1.164 +1.09774 +1.15499 +1.21999 +1.28181 +1.33908 +1.39206 +1.44127 +1.48725 +0.456492 +0.000950188 +2.56678e-31 +9.10728e-30 +2.49337e-29 +2.03833e-28 +1.58737e-28 +5.05154e-28 +1.18064e-28 +2.41291e-29 +8.42692e-29 +1.51501e-29 +9.09657e-30 +1.05965e-30 +2.33375e-29 +2.66787e-29 +3.22344e-29 +2.68556e-29 +3.13197e-29 +4.63894e-29 +2.85006e-31 +1.65134e-29 +2.19715e-28 +9.82796e-30 +1.13096e-28 +1.30353e-28 +7.39747e-33 +6.87778e-29 +3.07521e-29 +5.26779e-29 +1.51565e-29 +2.28998e-28 +6.66819e-31 +1.71007e-29 +1.61793e-28 +7.45283e-29 +8.16406e-30 +8.04944e-30 +2.44927e-30 +5.79793e-29 +8.2877e-29 +3.96751e-30 +2.08298e-31 +3.28769e-30 +3.80244e-30 +2.56457e-29 +7.10688e-29 +2.15721e-30 +1.43768e-29 +1.08709e-28 +1.98726e-29 +7.3439e-31 +5.03005e-31 +1.04878e-29 +9.57962e-31 +5.01441e-29 +2.74537e-29 +9.9176e-30 +1.44951e-29 +4.55811e-31 +6.25899e-29 +2.98078e-29 +1.03685e-28 +5.02913e-29 +2.44963e-30 +4.1938e-31 +6.64818e-32 +4.17731e-30 +5.2156e-30 +8.69242e-29 +5.63625e-29 +9.88588e-31 +1.02965e-29 +7.94864e-30 +1.71308e-29 +1.14611e-29 +1.76671e-29 +5.46729e-29 +1.17992e-29 +8.651e-30 +8.09469e-29 +1.34683e-28 +9.73126e-34 +3.27682e-31 +1.16377e-31 +1.27569e-30 +5.03515e-30 +7.17191e-29 +6.35069e-29 +9.47668e-30 +1.72205e-29 +1.17658e-32 +1.67643e-29 +3.59214e-29 +7.24175e-31 +1.07206e-29 +5.32617e-30 +2.77986e-30 +5.8678e-29 +1.23334e-28 +2.60865e-31 +1.02974e-28 +1.317e-29 +1.44487e-30 +1.07782e-29 +3.06329e-29 +5.55356e-30 +6.39769e-29 +7.43857e-29 +1.20124e-29 +8.7918e-30 +3.36017e-29 +6.02543e-30 +9.01012e-30 +1.95984e-30 +5.79802e-30 +1.43275e-30 +1.41439e-30 +2.23045e-29 +3.54782e-29 +2.60454e-30 +1.2007e-28 +1.31717e-29 +3.37018e-29 +3.05539e-32 +3.01682e-32 +2.33539e-29 +4.94443e-29 +2.27731e-29 +2.86809e-30 +0 +9.06209e-30 +4.41943e-31 +1.20318e-29 +2.42486e-29 +8.62089e-30 +5.91291e-30 +4.57869e-29 +1.13062e-29 +4.07036e-31 +4.02064e-31 +4.8431e-30 +6.12021e-31 +5.55572e-29 +1.61035e-29 +5.88359e-31 +2.32682e-30 +2.29722e-30 +2.26972e-30 +3.23836e-29 +1.99451e-29 +4.29329e-30 +2.3222e-32 +7.72041e-30 +6.10818e-30 +6.03499e-30 +2.21496e-32 +8.99672e-30 +9.93756e-31 +2.86942e-30 +7.8843e-30 +6.30812e-30 +4.18e-32 +8.3904e-30 +2.28139e-30 +9.11165e-31 +5.97317e-29 +2.19944e-30 +2.92831e-31 +0 +9.10241 +1.16406 +1.09778 +1.15503 +1.22003 +1.28185 +1.33913 +1.39211 +1.44132 +1.4873 +0.456381 +0.00094438 +2.56309e-28 +1.26935e-28 +9.97347e-31 +1.14656e-28 +4.27281e-30 +4.21121e-28 +2.84958e-28 +3.01405e-29 +5.42133e-29 +2.72864e-28 +3.41477e-29 +1.47192e-29 +3.75957e-29 +8.50724e-31 +2.22797e-28 +8.76919e-29 +1.72407e-29 +1.04088e-29 +1.67526e-29 +7.49501e-29 +7.87745e-30 +1.44416e-28 +1.13096e-28 +1.09682e-28 +3.66201e-29 +1.51533e-29 +9.14938e-30 +2.67533e-29 +2.98871e-29 +3.50659e-29 +3.45684e-29 +7.66787e-29 +1.41961e-28 +6.13653e-29 +1.49397e-28 +2.48471e-30 +8.81736e-31 +5.79793e-29 +2.59273e-29 +4.54453e-29 +1.13449e-30 +1.46087e-30 +1.76397e-29 +2.87516e-29 +1.71497e-29 +3.94926e-34 +2.75619e-29 +5.2425e-31 +1.98715e-29 +1.95946e-29 +1.28712e-30 +1.55449e-29 +4.13687e-29 +7.71151e-30 +1.18835e-29 +3.67457e-30 +1.18325e-30 +3.85802e-29 +1.32983e-28 +8.44229e-29 +7.16304e-29 +9.44422e-29 +4.35465e-30 +1.41079e-29 +3.97239e-29 +4.17731e-30 +1.39196e-28 +6.30029e-29 +7.68304e-31 +1.68178e-29 +2.19942e-29 +6.00948e-30 +2.50442e-30 +5.61935e-29 +8.11093e-29 +3.64107e-30 +9.4843e-30 +7.32236e-30 +3.42318e-31 +2.49027e-29 +4.16672e-29 +1.17966e-29 +2.91038e-30 +2.50129e-30 +5.55023e-30 +1.79298e-29 +1.76406e-30 +2.78481e-29 +1.08198e-31 +1.98929e-30 +1.11493e-28 +3.71211e-30 +3.66526e-30 +4.0475e-31 +1.14491e-28 +7.30157e-29 +2.07449e-29 +1.60837e-29 +6.68578e-31 +6.43581e-30 +3.90635e-29 +7.94381e-29 +6.49365e-29 +1.41049e-29 +6.48226e-29 +2.14081e-30 +9.02737e-30 +5.95921e-31 +2.97265e-29 +2.03178e-30 +2.89595e-29 +3.51933e-30 +2.27301e-31 +1.93149e-30 +8.48796e-31 +9.66047e-30 +2.11385e-30 +1.87627e-29 +8.23398e-30 +4.57138e-30 +1.80533e-29 +6.96271e-30 +1.75991e-29 +1.20673e-31 +3.44351e-29 +3.01217e-29 +1.86098e-30 +2.58128e-29 +1.9146e-29 +1.13926e-31 +2.23734e-30 +4.36457e-31 +9.72755e-30 +3.83151e-30 +4.63592e-29 +3.36394e-29 +5.025e-30 +4.07036e-31 +1.60276e-30 +3.95373e-29 +3.92337e-31 +1.63024e-29 +1.61035e-29 +1.5062e-30 +3.73722e-31 +9.19055e-30 +6.56117e-30 +1.51602e-29 +8.86376e-32 +3.15308e-30 +1.75261e-30 +1.1311e-29 +1.54762e-33 +1.69147e-30 +5.28485e-30 +3.44865e-30 +8.06999e-30 +2.87526e-30 +7.11614e-30 +9.0027e-29 +1.8518e-29 +2.07247e-29 +3.64141e-29 +5.02814e-29 +6.61847e-31 +1.04701e-29 +1.67021e-31 +0 +9.09688 +1.16372 +1.09762 +1.15492 +1.21993 +1.28177 +1.33905 +1.39203 +1.44126 +1.48724 +0.455945 +0.000939992 +2.1765e-30 +2.13994e-30 +9.44127e-29 +5.56063e-28 +1.57381e-28 +1.3505e-29 +7.54851e-29 +7.18255e-29 +1.89772e-30 +2.59685e-28 +5.87375e-28 +3.2355e-28 +1.77113e-30 +1.74086e-30 +4.82941e-28 +1.27299e-28 +6.3543e-29 +1.66384e-29 +2.22351e-28 +2.33608e-28 +6.92464e-29 +1.9018e-28 +1.49115e-30 +2.5833e-29 +3.5982e-29 +1.27317e-29 +1.33595e-29 +2.45321e-28 +9.07655e-30 +1.35159e-29 +4.98516e-29 +3.18596e-31 +2.53606e-29 +3.85994e-29 +8.1759e-30 +1.1894e-30 +1.87728e-31 +3.59927e-29 +1.9895e-29 +3.98981e-29 +7.36279e-30 +7.23419e-30 +2.30334e-28 +3.24046e-29 +1.41374e-28 +5.1719e-29 +8.82328e-30 +3.49578e-31 +2.36606e-29 +6.28626e-30 +2.33906e-30 +6.06941e-30 +6.46043e-34 +3.46723e-30 +3.20469e-28 +1.5022e-28 +8.21949e-31 +4.66448e-29 +5.33481e-29 +1.24718e-29 +2.40164e-29 +7.70478e-30 +1.75298e-28 +3.38798e-28 +7.30565e-30 +7.29155e-29 +2.75401e-30 +1.0822e-29 +2.65783e-30 +5.05502e-29 +1.25868e-30 +5.66917e-30 +5.46757e-29 +9.72558e-30 +2.29544e-29 +2.71216e-29 +8.2967e-31 +1.19757e-29 +3.2117e-29 +3.14539e-30 +3.09589e-30 +8.4315e-30 +1.86322e-29 +8.13321e-30 +5.19463e-29 +1.2569e-30 +2.77453e-30 +4.73116e-31 +1.67302e-29 +3.37576e-29 +6.24232e-29 +1.10122e-29 +5.04382e-29 +2.2018e-29 +1.22204e-33 +5.32405e-29 +2.08576e-29 +3.5575e-30 +6.20926e-30 +0 +5.99328e-30 +9.42132e-31 +4.52851e-29 +1.07339e-28 +6.82424e-31 +1.77255e-29 +7.75802e-29 +2.23301e-30 +6.86076e-30 +3.18939e-31 +2.11106e-30 +3.84685e-29 +1.15903e-29 +3.83261e-30 +7.43422e-31 +4.38472e-29 +8.78488e-30 +4.40284e-30 +1.03826e-29 +7.48339e-29 +4.53676e-29 +4.45573e-29 +6.79098e-30 +2.27175e-29 +2.82322e-29 +6.19574e-31 +3.73393e-30 +3.29974e-31 +6.08406e-30 +3.18164e-29 +1.24951e-30 +2.18362e-30 +4.83203e-29 +1.18636e-29 +1.29044e-29 +1.14266e-30 +7.77548e-31 +6.87327e-30 +1.0833e-29 +2.47591e-29 +3.14786e-29 +2.55454e-29 +1.36545e-30 +2.2162e-30 +3.87933e-29 +1.05504e-29 +8.39258e-30 +3.67164e-29 +1.32066e-29 +7.94359e-30 +2.18361e-31 +2.36467e-30 +9.45001e-32 +1.53985e-29 +6.46514e-30 +2.24858e-29 +4.23207e-30 +2.12304e-30 +5.3207e-30 +7.34636e-31 +5.12922e-30 +2.38034e-30 +1.93717e-30 +8.36335e-30 +1.5137e-30 +4.11891e-30 +5.25901e-33 +5.16362e-33 +9.09572 +1.16357 +1.09754 +1.15484 +1.21986 +1.28169 +1.33898 +1.39196 +1.44118 +1.48716 +0.455992 +0.000946353 +3.91163e-29 +8.18661e-30 +2.38416e-28 +4.09987e-29 +3.05966e-28 +3.39931e-29 +5.20365e-30 +1.20193e-29 +6.26999e-29 +1.97367e-29 +1.68885e-29 +1.11945e-29 +6.73537e-30 +8.3645e-29 +1.28385e-28 +7.10834e-31 +4.45974e-29 +1.49067e-29 +8.2367e-30 +4.12801e-30 +4.61299e-30 +8.67269e-29 +9.51982e-29 +4.97916e-29 +5.43384e-30 +6.58918e-30 +3.42346e-29 +2.05929e-29 +3.4473e-29 +8.10782e-30 +2.40883e-29 +1.47937e-30 +7.11382e-29 +2.0589e-29 +0 +2.31141e-29 +3.51253e-29 +2.07188e-28 +6.19944e-29 +2.94614e-29 +1.81319e-29 +5.87004e-29 +2.72756e-30 +1.65527e-28 +6.05117e-29 +1.32494e-29 +1.45857e-29 +9.35241e-29 +8.50568e-30 +4.09471e-29 +4.55566e-29 +1.02681e-30 +4.12929e-29 +1.59083e-31 +1.39923e-30 +8.07429e-29 +6.33157e-30 +1.47777e-31 +8.12318e-30 +1.23373e-28 +1.56183e-28 +8.88355e-29 +1.77365e-29 +2.962e-31 +2.06817e-30 +2.48623e-29 +7.00594e-30 +2.75542e-31 +1.58669e-29 +3.81515e-29 +1.52861e-29 +6.53389e-29 +4.7038e-30 +1.2049e-29 +1.67589e-29 +1.39199e-29 +5.95028e-29 +6.35484e-31 +0 +7.90906e-30 +5.75251e-29 +6.01837e-30 +2.30706e-30 +5.43596e-29 +8.01423e-31 +1.39686e-30 +8.7625e-29 +0 +8.39022e-32 +4.27682e-29 +3.17315e-29 +1.0656e-28 +6.18764e-30 +2.99742e-29 +4.13569e-30 +4.62205e-30 +3.42567e-29 +1.73597e-30 +7.31159e-32 +1.50384e-29 +1.6405e-30 +1.60942e-30 +5.69142e-31 +8.47574e-29 +3.21305e-29 +1.1678e-29 +2.70187e-29 +1.43444e-30 +6.90008e-31 +1.78753e-29 +1.21765e-29 +1.27535e-29 +2.75536e-29 +1.47604e-29 +9.81891e-30 +2.07963e-30 +3.25798e-29 +6.25151e-30 +6.00897e-29 +1.45158e-28 +4.46305e-30 +6.99835e-31 +4.39301e-29 +2.73565e-29 +7.4528e-29 +1.46191e-29 +1.83429e-29 +8.75587e-30 +3.66741e-29 +3.03133e-30 +2.34874e-30 +1.43951e-29 +4.27007e-30 +6.7851e-30 +6.65332e-30 +5.62564e-30 +5.51384e-30 +2.87922e-31 +5.27302e-29 +3.14953e-29 +1.08868e-29 +3.83234e-29 +4.18638e-29 +6.39565e-30 +6.42131e-29 +1.09297e-31 +6.71695e-31 +3.40389e-29 +1.13576e-29 +6.3114e-29 +1.19806e-29 +2.94299e-30 +4.66222e-30 +3.94266e-30 +2.28606e-30 +1.81526e-30 +8.78936e-30 +7.75315e-31 +6.84028e-30 +6.70536e-30 +1.07319e-29 +3.36083e-30 +7.07486e-31 +2.31212e-30 +6.74301e-31 +1.8806e-29 +6.53149e-31 +5.16802e-33 +9.09445 +1.16342 +1.09745 +1.15476 +1.21978 +1.28162 +1.3389 +1.39188 +1.44109 +1.48708 +0.456047 +0.000953303 +2.29878e-28 +2.63507e-28 +1.0896e-28 +2.87521e-30 +2.21331e-29 +5.8653e-29 +3.29307e-30 +1.1995e-28 +6.56349e-31 +2.08633e-28 +1.20394e-28 +2.86992e-29 +8.77429e-29 +1.24042e-28 +8.46066e-31 +1.00448e-28 +1.10922e-30 +5.55955e-31 +4.22333e-29 +1.67878e-29 +1.42089e-29 +2.67391e-29 +1.02089e-28 +2.31858e-28 +1.47679e-28 +1.50142e-29 +2.70663e-30 +1.18067e-30 +5.27972e-29 +1.39346e-29 +5.0855e-29 +4.29145e-31 +5.26761e-29 +7.18052e-29 +0 +1.33554e-29 +1.14099e-33 +1.46907e-29 +3.17416e-29 +1.36789e-31 +2.79638e-29 +2.26758e-29 +7.61491e-29 +7.47164e-29 +1.12588e-29 +3.36256e-30 +2.38362e-28 +1.63872e-29 +3.58585e-30 +6.43784e-30 +1.91028e-31 +5.74785e-31 +3.35069e-29 +1.46094e-29 +4.42305e-32 +4.41826e-32 +1.53298e-30 +4.01214e-29 +1.5238e-28 +1.00421e-30 +1.3715e-28 +3.13091e-30 +3.79101e-30 +6.87374e-29 +4.21488e-29 +3.64141e-32 +2.55671e-29 +3.74562e-29 +1.02036e-28 +2.11705e-30 +0 +9.19399e-30 +3.39715e-29 +1.22918e-31 +1.45199e-29 +2.99507e-32 +4.15503e-30 +1.62885e-29 +1.77448e-30 +1.0874e-29 +1.94384e-29 +7.34055e-29 +6.40512e-29 +4.64435e-29 +2.46432e-30 +5.43182e-30 +8.80635e-29 +2.32007e-30 +1.78309e-29 +2.69766e-30 +4.62455e-29 +3.09109e-30 +1.27756e-28 +3.45989e-29 +6.32675e-29 +1.97736e-32 +3.25802e-29 +1.28406e-29 +1.25849e-29 +2.91928e-29 +1.14572e-30 +7.00964e-30 +5.56551e-30 +4.04083e-29 +1.64925e-30 +1.61616e-30 +1.83076e-29 +3.9739e-30 +3.80156e-31 +6.10311e-29 +2.82655e-29 +1.43046e-30 +4.54206e-30 +3.57169e-29 +3.23028e-29 +1.52461e-29 +1.01281e-29 +1.26883e-30 +8.33381e-29 +2.73188e-30 +3.43744e-30 +1.97681e-30 +8.95168e-30 +5.32298e-29 +3.20848e-33 +1.71637e-31 +1.76628e-29 +3.46242e-29 +6.45134e-31 +5.1184e-29 +4.87447e-29 +6.08878e-31 +6.2699e-30 +2.04644e-30 +1.88233e-29 +1.25796e-29 +3.71619e-29 +5.64998e-30 +1.38498e-30 +8.72398e-30 +7.84442e-31 +2.49094e-30 +3.00844e-30 +2.94569e-32 +3.94847e-29 +1.49406e-29 +3.19699e-29 +9.74509e-31 +2.14863e-30 +2.59654e-30 +0 +8.97907e-30 +4.11601e-30 +3.08139e-32 +5.97237e-30 +1.46327e-30 +3.77801e-30 +6.32407e-30 +4.19825e-30 +3.01911e-30 +7.52306e-31 +1.93044e-29 +1.96597e-32 +6.23437e-30 +3.06838e-31 +1.65884e-31 +2.21027e-29 +1.80777e-29 +9.09307 +1.16325 +1.09736 +1.15468 +1.2197 +1.28153 +1.33881 +1.39179 +1.44101 +1.48699 +0.456098 +0.00096037 +4.14365e-29 +5.94516e-30 +3.04987e-28 +2.00814e-28 +2.51553e-28 +1.7251e-29 +3.20036e-30 +6.64335e-29 +1.0723e-28 +6.39533e-29 +2.96587e-30 +2.79583e-29 +1.25873e-29 +5.92531e-29 +6.87287e-31 +7.85862e-29 +3.42637e-29 +5.0211e-29 +1.4695e-28 +9.98258e-32 +2.99887e-29 +1.53725e-30 +1.98084e-29 +5.91464e-30 +1.53179e-29 +1.45817e-28 +8.11102e-29 +2.13826e-30 +1.88707e-29 +2.23945e-29 +1.63346e-28 +7.60212e-29 +6.08199e-29 +4.38189e-29 +7.45991e-32 +8.06628e-30 +1.72331e-29 +1.33091e-28 +2.08619e-30 +8.94404e-30 +2.38682e-28 +2.26282e-28 +2.69389e-30 +1.4059e-31 +3.98338e-29 +1.13643e-28 +1.33549e-31 +1.09216e-28 +1.27316e-29 +9.37344e-30 +1.35922e-30 +1.9243e-29 +3.13563e-29 +1.03688e-28 +2.89089e-29 +4.92265e-30 +6.24828e-29 +6.24907e-30 +1.76093e-29 +7.67015e-30 +1.1934e-32 +6.98215e-31 +4.23874e-29 +6.70504e-31 +1.05006e-29 +1.94543e-29 +1.66687e-30 +9.65471e-31 +6.05683e-31 +5.93447e-31 +3.63053e-30 +1.42261e-29 +6.82913e-30 +1.9201e-30 +2.00732e-29 +1.73311e-29 +8.02923e-31 +2.29188e-29 +1.97606e-30 +1.08656e-30 +5.79381e-30 +4.89357e-30 +1.02058e-30 +1.87709e-29 +1.31632e-29 +6.65886e-31 +2.50692e-29 +1.02208e-29 +8.10623e-30 +3.52819e-30 +2.01803e-29 +1.58848e-29 +3.31476e-30 +9.22798e-29 +5.51555e-29 +6.99986e-30 +1.02359e-29 +4.97164e-29 +8.10926e-32 +1.90757e-29 +1.02809e-29 +6.86244e-31 +3.65157e-30 +3.06468e-29 +3.0002e-29 +1.32233e-28 +1.09447e-28 +3.09504e-29 +6.55372e-30 +4.00918e-31 +3.93552e-31 +3.25077e-29 +1.44499e-29 +7.78405e-30 +2.19043e-29 +2.98214e-29 +9.3229e-30 +2.85581e-29 +2.11301e-29 +5.16909e-30 +4.09786e-30 +9.70377e-30 +6.40759e-30 +2.66506e-30 +7.24383e-30 +1.47016e-29 +2.83968e-30 +5.05611e-32 +3.82188e-31 +3.80726e-31 +6.86783e-30 +4.86968e-31 +8.74917e-32 +9.50896e-33 +1.0752e-29 +8.18761e-30 +1.42367e-29 +8.70261e-31 +0 +6.5261e-30 +2.6376e-30 +7.96122e-33 +7.00689e-30 +1.75411e-29 +6.70034e-32 +1.54042e-29 +5.99487e-30 +3.81163e-29 +5.51263e-29 +8.63132e-30 +4.39972e-30 +2.80682e-30 +3.88647e-30 +3.90854e-31 +6.87721e-30 +1.46949e-31 +2.93735e-32 +1.07483e-29 +7.81477e-31 +1.43439e-29 +1.99314e-29 +2.0272e-32 +1.79776e-31 +4.95756e-30 +1.70341e-31 +1.67833e-31 +9.56434e-30 +0 +9.09157 +1.16308 +1.09727 +1.15459 +1.21961 +1.28145 +1.33873 +1.39171 +1.44093 +1.48691 +0.456134 +0.000967076 +2.70576e-30 +4.65289e-29 +3.90696e-29 +1.03692e-28 +2.64259e-29 +2.02771e-29 +7.95293e-29 +5.32135e-29 +9.04787e-31 +4.46451e-29 +1.6536e-28 +5.17932e-29 +1.5894e-28 +2.56592e-29 +5.93236e-29 +7.55194e-29 +4.45218e-29 +2.72566e-31 +2.3227e-29 +1.1616e-31 +2.7355e-29 +2.18741e-29 +1.01754e-28 +7.8155e-29 +1.05078e-29 +8.07354e-29 +3.26994e-29 +3.15733e-28 +2.4236e-30 +2.14149e-31 +5.36131e-29 +1.78785e-29 +1.42999e-28 +1.19891e-28 +3.62579e-30 +1.11194e-29 +9.08196e-30 +1.06741e-29 +4.94205e-31 +6.27492e-30 +4.26904e-30 +4.66048e-31 +1.74986e-29 +5.20137e-29 +1.7473e-30 +1.20769e-28 +1.31439e-29 +1.64244e-30 +3.61896e-30 +3.93841e-31 +1.38864e-31 +4.89718e-30 +3.78974e-30 +7.66713e-30 +1.87713e-28 +2.69107e-29 +3.41278e-31 +2.46454e-29 +2.0882e-29 +6.76031e-30 +8.45963e-30 +6.70896e-29 +4.32712e-31 +1.97429e-29 +2.64922e-29 +1.90319e-30 +2.47949e-30 +3.75538e-29 +2.74689e-29 +3.97382e-29 +9.18143e-32 +2.57639e-29 +7.60388e-30 +3.88697e-29 +5.94431e-29 +5.81778e-31 +2.00239e-30 +2.73053e-29 +1.03103e-28 +3.41574e-29 +2.64444e-30 +9.66188e-31 +1.5127e-29 +2.75799e-31 +8.14725e-30 +1.29118e-29 +3.789e-30 +7.01189e-31 +1.45058e-29 +6.71139e-31 +3.47264e-30 +2.62898e-29 +1.60779e-30 +1.59788e-29 +2.30978e-29 +2.18664e-29 +2.81647e-31 +1.40549e-29 +2.25239e-29 +6.97593e-30 +2.02175e-29 +8.22982e-32 +2.89886e-30 +1.89089e-29 +1.40926e-33 +3.68774e-30 +8.7593e-29 +4.4973e-29 +3.44748e-30 +8.32362e-30 +2.17924e-29 +5.32736e-30 +8.50288e-30 +1.14548e-29 +3.99542e-29 +3.9053e-29 +1.1508e-29 +1.12479e-29 +9.48094e-30 +3.50902e-30 +9.05762e-30 +3.67828e-29 +2.47762e-29 +5.00293e-30 +2.70011e-29 +2.75252e-29 +2.80272e-29 +2.23659e-30 +1.44458e-29 +2.10869e-29 +9.57797e-30 +2.03881e-30 +1.01595e-32 +9.99139e-31 +9.31929e-30 +6.68485e-29 +1.19949e-29 +2.31462e-30 +1.27538e-29 +4.10763e-29 +8.09945e-30 +2.10974e-30 +2.01007e-29 +1.76693e-30 +4.05737e-30 +1.2592e-29 +6.79842e-32 +4.59334e-31 +6.48363e-32 +1.31923e-29 +1.01212e-29 +1.09206e-29 +1.42727e-30 +2.4775e-30 +1.58273e-31 +2.53474e-32 +2.54218e-30 +2.30518e-29 +2.42296e-30 +3.08945e-30 +1.90028e-31 +1.30995e-30 +4.63643e-32 +1.03063e-29 +6.84497e-31 +7.42334e-32 +5.49252e-31 +0 +9.08993 +1.16291 +1.09718 +1.15451 +1.21954 +1.28138 +1.33865 +1.39163 +1.44085 +1.48683 +0.456147 +0.000972943 +7.78584e-30 +1.14857e-28 +5.21051e-29 +3.8081e-29 +2.43012e-29 +1.37845e-29 +2.7563e-31 +2.69662e-28 +1.10108e-28 +5.01828e-28 +1.07763e-28 +2.54818e-30 +7.37846e-29 +1.19787e-28 +8.80145e-29 +1.4779e-28 +6.03497e-29 +3.16483e-31 +2.23963e-29 +2.74006e-29 +2.23348e-29 +7.77409e-30 +7.61372e-30 +4.48151e-29 +4.74939e-30 +3.24113e-29 +1.01452e-28 +1.78388e-29 +1.17458e-29 +7.11693e-29 +2.95373e-28 +1.24887e-28 +4.34078e-30 +2.26297e-31 +1.03455e-29 +2.65737e-30 +2.19469e-29 +9.45966e-29 +1.3404e-28 +1.21183e-28 +2.16656e-30 +6.87006e-30 +1.99439e-29 +1.64984e-29 +1.34391e-29 +3.27063e-29 +4.57178e-29 +7.45409e-30 +5.92479e-29 +4.56834e-30 +2.26311e-29 +4.10262e-29 +3.23693e-29 +1.2826e-29 +6.55627e-29 +9.78793e-30 +1.38178e-31 +3.59921e-29 +1.6168e-28 +9.18162e-31 +4.0924e-29 +1.07631e-29 +1.7404e-29 +1.19183e-31 +8.63924e-29 +8.49544e-30 +5.35425e-29 +2.88629e-29 +4.09262e-29 +2.43295e-29 +2.37928e-29 +4.85236e-30 +2.7558e-30 +8.89934e-29 +6.95304e-30 +5.79036e-30 +1.66111e-30 +9.61012e-31 +7.9025e-30 +5.03024e-29 +4.65541e-29 +3.51167e-32 +1.66152e-29 +3.35577e-30 +6.94106e-29 +9.69935e-29 +2.00579e-30 +9.26635e-29 +9.05672e-29 +4.33744e-29 +1.20823e-30 +6.71492e-30 +2.73168e-30 +8.64741e-30 +1.09609e-29 +2.06474e-30 +1.0465e-29 +1.02257e-29 +5.94762e-31 +3.73331e-31 +3.63496e-31 +5.15056e-32 +4.24502e-30 +5.28947e-31 +4.86187e-29 +1.58301e-29 +2.5559e-29 +6.14923e-29 +5.69149e-29 +2.02635e-30 +4.5001e-31 +5.67924e-30 +4.11271e-30 +2.40854e-30 +1.06155e-29 +1.24983e-29 +7.20029e-30 +2.56881e-30 +1.38074e-29 +0 +2.2637e-29 +2.32197e-29 +4.36926e-30 +1.03214e-29 +4.7823e-29 +2.95146e-29 +7.83784e-31 +8.081e-30 +5.14655e-30 +2.85555e-31 +1.11157e-30 +2.44097e-30 +5.60177e-30 +5.46613e-30 +2.42119e-29 +3.18899e-30 +4.97789e-29 +1.21434e-29 +1.93468e-29 +1.50828e-30 +3.48223e-30 +1.22349e-30 +3.37473e-32 +1.56491e-29 +3.15415e-32 +3.07752e-30 +1.08362e-29 +1.75753e-29 +3.77701e-30 +1.74616e-31 +4.23935e-29 +1.00787e-29 +2.09937e-29 +1.05935e-29 +4.81991e-30 +1.74777e-29 +2.88083e-31 +3.64735e-31 +4.35676e-30 +1.58005e-29 +1.83911e-29 +4.78701e-32 +1.93071e-29 +1.23845e-31 +8.08127e-31 +1.50776e-30 +2.68983e-29 +1.81134e-29 +9.08816 +1.16274 +1.09709 +1.15443 +1.21946 +1.28131 +1.33859 +1.39156 +1.44078 +1.48676 +0.456127 +0.000977505 +1.85685e-28 +9.65923e-29 +5.31981e-29 +3.52537e-30 +1.14116e-28 +4.28858e-29 +4.86348e-28 +6.55807e-29 +1.44449e-28 +5.28073e-29 +4.01763e-28 +1.16158e-30 +2.0112e-28 +2.84974e-30 +9.21919e-29 +4.26422e-30 +4.54483e-29 +1.28086e-28 +2.11448e-29 +1.64388e-29 +1.24024e-29 +1.19574e-28 +6.19433e-30 +6.02883e-29 +2.28185e-29 +5.7717e-29 +4.35368e-29 +3.57922e-29 +5.40524e-29 +7.55755e-30 +5.82314e-29 +6.37009e-29 +2.22894e-28 +2.71035e-28 +2.03575e-28 +7.16837e-29 +1.01955e-28 +1.39471e-29 +8.35449e-30 +2.52192e-30 +6.17012e-31 +5.79451e-30 +3.96472e-29 +3.33035e-29 +4.77214e-29 +4.66616e-29 +1.34859e-31 +5.06174e-29 +2.06119e-30 +5.03888e-31 +4.43291e-30 +6.04007e-29 +1.80947e-29 +6.84892e-29 +5.82983e-30 +7.39103e-30 +1.10147e-30 +4.20066e-31 +2.12839e-29 +2.0802e-29 +5.46067e-29 +5.70459e-29 +1.73138e-28 +8.12614e-29 +1.60565e-29 +2.70664e-29 +1.97263e-29 +5.60944e-30 +1.93314e-29 +3.06131e-30 +6.5865e-30 +5.11325e-30 +1.31084e-30 +2.73037e-29 +1.90615e-29 +6.94292e-32 +3.09675e-29 +1.16531e-30 +3.00999e-29 +5.33317e-30 +9.8536e-31 +6.46603e-29 +3.84669e-29 +1.5417e-29 +2.85901e-29 +3.04451e-29 +3.83355e-29 +2.85369e-29 +6.59491e-29 +3.5063e-30 +7.76135e-31 +2.45509e-30 +7.10923e-30 +3.24192e-29 +4.74042e-29 +2.23176e-30 +0 +6.56192e-31 +1.60005e-31 +6.80276e-30 +2.68872e-30 +4.02243e-30 +9.81403e-31 +5.66716e-31 +3.71867e-29 +1.29575e-29 +8.01011e-30 +8.68399e-31 +1.25711e-31 +7.0479e-31 +2.33868e-31 +1.25912e-29 +8.79528e-30 +4.82625e-30 +2.83668e-29 +1.05435e-31 +1.43217e-29 +1.80146e-29 +1.56676e-30 +1.37433e-31 +4.82575e-30 +1.02007e-29 +1.27494e-29 +2.70773e-30 +3.03147e-30 +9.57738e-30 +0 +3.12511e-31 +5.11939e-30 +2.97753e-31 +9.40443e-30 +8.85077e-30 +2.32884e-29 +1.59026e-29 +1.76924e-30 +2.15734e-29 +1.25245e-29 +3.87485e-30 +8.78424e-30 +1.43865e-30 +8.97623e-31 +9.64435e-31 +2.76286e-30 +2.1596e-29 +2.35935e-29 +8.69272e-29 +2.90589e-29 +1.68661e-30 +5.92491e-30 +2.30327e-30 +1.80129e-29 +7.79936e-30 +2.69218e-29 +6.40308e-29 +2.55493e-29 +6.08072e-31 +1.00029e-30 +6.35634e-31 +8.32383e-30 +1.71528e-29 +3.40943e-31 +4.82799e-30 +1.27803e-31 +8.27232e-30 +3.75839e-30 +6.91828e-30 +2.56934e-31 +1.81238e-29 +9.08624 +1.16258 +1.09701 +1.15437 +1.2194 +1.28125 +1.33853 +1.39151 +1.44072 +1.4867 +0.456065 +0.000980311 +1.31428e-28 +1.59706e-29 +3.49625e-29 +2.71706e-29 +1.74317e-30 +5.23618e-28 +2.88098e-28 +6.2184e-28 +1.87565e-29 +1.95426e-28 +6.12207e-29 +4.32201e-29 +5.56436e-30 +3.11106e-30 +1.33031e-28 +1.18988e-29 +6.18951e-29 +1.002e-28 +2.38359e-28 +4.28057e-29 +2.02608e-34 +1.25016e-28 +4.4448e-30 +2.32676e-30 +3.62959e-28 +2.37381e-30 +8.98455e-30 +1.09098e-28 +2.40012e-29 +2.82844e-29 +8.20037e-30 +2.16442e-28 +5.59285e-29 +1.93889e-28 +8.04159e-31 +7.47036e-29 +1.99736e-29 +1.13522e-28 +2.93276e-30 +6.06353e-29 +7.71726e-31 +1.30235e-28 +2.41193e-28 +2.08368e-29 +8.07042e-29 +1.28274e-28 +7.66871e-30 +2.21177e-29 +5.51934e-29 +1.4247e-28 +1.40032e-28 +3.20752e-29 +1.37426e-29 +1.30452e-28 +2.11783e-30 +8.06272e-29 +3.63732e-29 +3.17216e-30 +9.90751e-30 +4.47399e-31 +1.13621e-29 +1.88611e-29 +6.29975e-29 +5.1451e-29 +6.00427e-29 +4.94712e-29 +8.5103e-31 +4.65271e-30 +2.6394e-34 +8.34202e-29 +5.62499e-29 +7.09065e-30 +5.36421e-30 +2.15782e-30 +2.96102e-29 +9.53262e-30 +6.10815e-29 +1.21662e-30 +1.44389e-29 +3.4731e-30 +2.52999e-29 +1.98571e-29 +2.82239e-31 +2.49713e-31 +4.63935e-29 +3.99511e-30 +2.04495e-28 +9.04571e-29 +1.48323e-29 +6.89395e-29 +2.25776e-28 +2.61359e-29 +2.28552e-29 +2.52315e-30 +6.89076e-32 +6.89016e-30 +1.625e-30 +7.39911e-29 +1.72181e-31 +2.96108e-29 +1.48859e-28 +3.97258e-29 +5.25266e-29 +2.28834e-29 +2.41597e-29 +5.34887e-30 +9.42221e-30 +9.18469e-30 +1.70017e-29 +1.29873e-31 +3.96678e-30 +2.55644e-29 +1.13061e-29 +7.91593e-31 +1.7265e-29 +3.0071e-30 +9.75333e-31 +2.64774e-32 +0 +2.1215e-30 +6.61008e-31 +5.49767e-30 +1.79159e-29 +8.49991e-30 +6.81553e-30 +1.87793e-29 +3.00656e-32 +2.906e-29 +1.17944e-29 +5.65312e-35 +4.3422e-30 +1.49726e-29 +3.97169e-29 +4.20276e-29 +6.08691e-31 +1.36573e-29 +5.42843e-30 +6.49753e-30 +2.81099e-29 +3.58322e-29 +1.34961e-29 +2.8669e-29 +4.93264e-31 +2.0023e-29 +2.0717e-31 +2.01677e-31 +8.81345e-30 +4.80104e-29 +1.2576e-30 +1.37042e-29 +1.85158e-29 +1.25622e-34 +3.53229e-30 +4.92615e-32 +1.50291e-29 +6.90738e-30 +1.13319e-29 +3.78931e-30 +1.63816e-29 +9.27433e-30 +2.95943e-29 +8.77949e-30 +8.54171e-30 +2.02486e-29 +1.50816e-29 +4.67838e-29 +1.7213e-29 +1.8133e-29 +9.08574 +1.16904 +1.09997 +1.15606 +1.2205 +1.28201 +1.33909 +1.39194 +1.44106 +1.48698 +0.456215 +0.000980935 +0 +2.27044e-35 +3.17691e-28 +0 +0 +2.96541e-28 +0 +0 +2.76717e-28 +0 +2.64198e-28 +7.21235e-35 +0 +0 +6.72612e-35 +0 +2.29754e-28 +2.2444e-28 +0 +0 +2.09182e-28 +2.04316e-28 +0 +5.44549e-35 +0 +1.85896e-28 +1.81541e-28 +0 +0 +1.69043e-28 +0 +1.61166e-28 +0 +1.53635e-28 +1.49994e-28 +0 +3.99413e-35 +1.39554e-28 +1.36228e-28 +0 +3.62656e-35 +1.26693e-28 +1.23657e-28 +0 +1.17789e-28 +1.14955e-28 +1.12184e-28 +0 +1.06831e-28 +0 +1.01719e-28 +0 +0 +1.05592e-34 +1.03018e-34 +1.00504e-34 +8.7732e-29 +0 +0 +8.14386e-29 +7.94374e-29 +8.65934e-35 +7.55731e-29 +0 +7.18868e-29 +0 +6.83709e-29 +7.45143e-35 +0 +6.34e-29 +6.18203e-29 +0 +0 +0 +6.24354e-35 +5.44648e-29 +0 +5.17611e-29 +5.04574e-29 +4.91848e-29 +4.79426e-29 +4.67301e-29 +5.09024e-35 +0 +0 +0 +0 +0 +0 +3.80237e-29 +4.14071e-35 +0 +1.57242e-34 +0 +3.33886e-29 +3.25283e-29 +3.1689e-29 +1.38001e-34 +0 +2.9293e-29 +2.85332e-29 +0 +2.70696e-29 +0 +2.56773e-29 +2.5007e-29 +2.43533e-29 +9.48638e-29 +2.30944e-29 +2.24885e-29 +8.759e-29 +2.13215e-29 +9.28034e-35 +2.02122e-29 +1.96784e-29 +0 +0 +1.81565e-29 +0 +1.72047e-29 +1.67469e-29 +6.52025e-29 +0 +0 +0 +0 +0 +0 +0 +5.86375e-35 +0 +5.5518e-35 +0 +4.70274e-29 +4.57541e-29 +0 +0 +4.21278e-29 +4.09814e-29 +3.98649e-29 +0 +1.68613e-34 +1.64002e-34 +3.56821e-29 +0 +0 +0 +1.42698e-34 +1.38767e-34 +3.01855e-29 +1.31214e-34 +1.27587e-34 +1.24055e-34 +1.20618e-34 +0 +1.14014e-34 +2.47953e-29 +1.07757e-34 +0 +0 +0 +2.1523e-29 +2.09203e-29 +0 +1.97629e-29 +1.92075e-29 +0 +1.81411e-29 +0.267896 +1.30657 +1.04313 +1.13652 +1.21099 +1.27638 +1.33533 +1.38921 +1.43897 +1.48531 +0.439909 +0.000375163 +1.88585e-30 +2.67287e-29 +8.47629e-31 +1.53672e-30 +5.03994e-29 +1.96553e-28 +8.81303e-29 +1.76239e-28 +1.52081e-28 +5.86434e-31 +2.06372e-28 +1.59158e-28 +7.56337e-29 +6.17564e-29 +3.47001e-29 +1.13182e-30 +2.54135e-29 +7.11127e-29 +3.94108e-29 +1.74431e-29 +7.82219e-29 +6.41382e-29 +0 +3.68257e-30 +9.96712e-32 +3.73078e-29 +8.29035e-29 +2.85565e-29 +9.34445e-30 +3.64146e-29 +8.52445e-30 +2.2335e-29 +1.24383e-29 +1.26085e-30 +1.41924e-28 +1.1128e-29 +7.57646e-30 +2.40133e-29 +1.16124e-28 +1.1868e-30 +2.72679e-29 +2.16036e-29 +9.35484e-29 +7.41276e-29 +1.18817e-29 +2.38786e-29 +6.04286e-30 +1.00584e-28 +3.74767e-29 +1.74591e-29 +0 +3.12829e-30 +1.61107e-29 +1.56837e-29 +1.62358e-30 +1.75593e-31 +2.73491e-30 +6.39543e-30 +6.225e-30 +2.64972e-30 +1.62755e-29 +1.55341e-29 +0 +0 +4.65945e-29 +2.36909e-29 +1.35594e-29 +5.86232e-29 +6.81503e-29 +4.10961e-29 +3.15919e-30 +4.54703e-31 +2.87678e-30 +1.07604e-31 +4.7942e-29 +5.67231e-29 +3.96378e-31 +1.67934e-29 +1.21845e-29 +6.13236e-30 +6.27684e-29 +1.0824e-29 +2.84145e-29 +8.16897e-32 +3.17571e-31 +2.61418e-29 +1.78093e-29 +1.27247e-29 +2.15019e-29 +6.92656e-32 +1.18468e-30 +4.39109e-30 +1.01619e-30 +5.22615e-30 +3.06631e-29 +1.7672e-29 +9.88816e-30 +5.5174e-32 +1.11228e-29 +1.08132e-29 +1.0222e-29 +2.38518e-31 +9.65956e-30 +1.79001e-30 +9.38593e-30 +3.11302e-29 +6.57532e-30 +2.01291e-31 +1.08652e-29 +1.47765e-29 +1.43606e-29 +7.6893e-30 +2.4232e-30 +1.40078e-31 +8.50759e-31 +3.38715e-31 +7.62059e-30 +6.4742e-30 +1.14176e-29 +1.17903e-33 +1.48469e-30 +2.15034e-29 +2.73357e-29 +3.41296e-30 +6.86197e-30 +1.03143e-29 +9.6305e-32 +6.29034e-30 +9.45438e-30 +1.10724e-29 +2.14343e-32 +2.166e-30 +2.07297e-31 +1.20789e-29 +1.69383e-29 +1.53647e-29 +6.91101e-30 +0 +6.94919e-31 +1.71426e-30 +6.65782e-30 +1.28851e-29 +3.08177e-29 +5.06704e-30 +4.81459e-30 +8.83663e-31 +5.37785e-32 +2.29582e-31 +1.5302e-29 +6.64475e-29 +4.03165e-30 +2.03919e-31 +2.27241e-29 +4.35723e-32 +1.76014e-29 +1.5451e-29 +1.65832e-29 +3.86768e-32 +3.90555e-30 +5.60201e-30 +6.34929e-30 +8.58015e-31 +6.71529e-30 +2.7355e-30 +2.65459e-30 +0 +1.98581e-30 +1.87809e-29 +1.24946 +0.734744 +0.971222 +1.10452 +1.19484 +1.26707 +1.32938 +1.3851 +1.43595 +1.45097 +0.388878 +1.61118e-30 +6.29177e-30 +9.82764e-29 +1.49902e-28 +2.96319e-29 +3.77193e-30 +7.05843e-30 +1.01238e-28 +4.01819e-29 +1.05012e-28 +2.52447e-28 +4.22633e-28 +2.62191e-28 +2.14338e-28 +3.17205e-28 +7.71697e-28 +2.87034e-29 +1.60115e-29 +1.62576e-30 +3.96543e-31 +3.27466e-29 +0 +1.41469e-28 +2.53495e-29 +2.29685e-28 +2.03545e-28 +3.33562e-31 +1.68642e-29 +2.68573e-29 +9.15623e-29 +8.11908e-29 +4.71118e-30 +4.27382e-29 +1.45173e-29 +1.13652e-28 +1.79077e-29 +3.86547e-29 +1.70283e-29 +5.7053e-29 +2.40782e-31 +4.14136e-30 +1.06797e-28 +1.13988e-28 +1.06614e-29 +7.98337e-29 +4.28802e-29 +2.06443e-30 +2.04452e-29 +5.15213e-29 +2.98767e-30 +1.1648e-29 +1.50146e-29 +6.91595e-31 +2.42781e-31 +8.51374e-30 +4.8459e-29 +5.99206e-29 +1.52113e-31 +2.58087e-29 +2.14829e-29 +4.76159e-29 +1.77603e-28 +1.67492e-29 +3.16599e-29 +1.31871e-29 +5.98191e-28 +3.15371e-28 +1.74441e-29 +7.48243e-29 +2.99143e-29 +4.16464e-30 +7.57961e-29 +1.79106e-29 +6.45935e-29 +3.3015e-29 +8.03932e-30 +8.32553e-31 +1.29786e-31 +5.22305e-29 +1.97385e-29 +1.33167e-30 +8.29571e-31 +2.6708e-29 +3.58373e-29 +2.0116e-29 +7.45671e-31 +1.7162e-28 +2.82731e-30 +4.82667e-29 +8.20738e-30 +6.52362e-31 +1.62528e-28 +8.71497e-29 +1.58873e-30 +1.53806e-29 +3.56246e-30 +2.16705e-31 +4.46301e-30 +8.94254e-30 +1.54713e-29 +8.47002e-30 +3.10013e-29 +6.2341e-29 +1.04939e-28 +1.88592e-29 +6.522e-30 +6.3422e-29 +1.56368e-28 +1.96064e-29 +2.68253e-30 +1.91749e-30 +4.51379e-30 +1.1852e-29 +2.59432e-29 +1.78316e-29 +4.64075e-30 +5.01593e-29 +5.64019e-30 +9.70456e-29 +4.16598e-29 +1.56284e-29 +3.67239e-30 +1.47835e-29 +1.29527e-29 +5.59288e-29 +9.37944e-30 +2.9784e-30 +5.32192e-31 +7.86785e-29 +2.95625e-29 +1.39109e-29 +4.76828e-30 +3.21063e-31 +4.50779e-30 +1.33928e-30 +3.44153e-29 +2.24888e-30 +4.56882e-29 +1.73502e-29 +1.44304e-29 +5.99662e-29 +3.22702e-30 +1.06735e-28 +2.21348e-29 +7.17054e-30 +3.6982e-29 +9.40854e-30 +2.68043e-29 +2.60496e-29 +1.34037e-30 +2.24731e-29 +5.66846e-29 +2.10317e-30 +1.19509e-30 +2.08361e-31 +7.71813e-30 +6.16687e-29 +9.10196e-30 +1.37786e-30 +6.47913e-30 +6.99403e-31 +5.61647e-31 +5.94165e-30 +2.80341e-30 +1.31826e-30 +3.1258e-30 +8.20916e-31 +1.92186e-32 +0 +0.763795 +0.766885 +0.929771 +1.06886 +1.17124 +1.25138 +1.31845 +1.37712 +1.42988 +1.31409 +0.300903 +4.43281e-29 +4.60652e-30 +2.50983e-28 +2.72255e-28 +2.47632e-29 +8.38165e-29 +4.56122e-29 +6.41789e-31 +1.74191e-30 +5.33732e-29 +1.56458e-28 +4.22564e-29 +5.90594e-29 +2.48094e-31 +8.98112e-29 +4.00124e-29 +9.03428e-30 +1.82991e-29 +1.37944e-30 +1.34712e-30 +5.73146e-29 +1.28509e-30 +2.82396e-30 +3.13996e-30 +7.09746e-29 +1.05212e-29 +2.96927e-29 +3.0144e-29 +8.23913e-29 +3.33323e-29 +8.78408e-29 +6.33333e-30 +6.6523e-29 +7.144e-29 +4.10771e-29 +1.37023e-28 +6.95975e-29 +7.8959e-30 +8.57036e-31 +2.62159e-29 +3.26395e-30 +1.27579e-31 +4.49012e-29 +1.6619e-28 +1.41019e-28 +0 +9.03906e-28 +8.14463e-28 +2.68657e-30 +4.84893e-28 +8.02232e-29 +1.3205e-29 +6.23498e-30 +7.69936e-30 +2.68021e-29 +3.82283e-30 +5.51711e-31 +6.27796e-29 +1.64662e-29 +8.92478e-29 +5.91269e-28 +1.52844e-29 +4.75754e-31 +3.11795e-29 +6.73175e-29 +1.98257e-28 +9.42359e-29 +5.439e-30 +1.54005e-28 +4.65448e-29 +1.55769e-30 +1.75464e-29 +1.00056e-29 +8.31285e-30 +3.60268e-30 +2.5123e-34 +1.93171e-29 +4.09009e-29 +8.97221e-29 +6.55763e-30 +2.78435e-29 +9.23606e-30 +2.9401e-30 +2.51872e-30 +2.6199e-29 +1.70172e-29 +5.01761e-30 +1.16801e-29 +9.46347e-30 +1.01819e-28 +7.07952e-29 +9.11524e-29 +4.69901e-30 +1.12183e-29 +1.89848e-30 +3.58034e-29 +2.88313e-29 +4.99415e-31 +1.7518e-29 +2.84751e-29 +5.09258e-29 +3.3476e-29 +1.15813e-30 +1.7083e-30 +1.89556e-29 +4.96457e-30 +1.93443e-29 +3.46125e-30 +1.90002e-30 +1.98442e-29 +1.62654e-33 +1.14418e-29 +1.31657e-31 +1.33403e-29 +0 +7.00421e-31 +6.59531e-29 +2.65675e-30 +3.02026e-29 +8.46701e-30 +2.72527e-31 +5.98815e-30 +1.26596e-29 +5.65953e-29 +2.09531e-29 +1.20722e-30 +5.82896e-32 +1.27352e-31 +6.65366e-30 +1.92694e-30 +7.50303e-30 +2.13133e-29 +1.00053e-30 +1.92189e-31 +4.67727e-30 +1.13785e-32 +1.33995e-30 +1.55625e-29 +2.72809e-29 +2.75991e-29 +6.71509e-30 +6.1858e-31 +7.90965e-30 +1.32148e-29 +5.69895e-31 +8.66411e-31 +4.1368e-31 +2.95862e-31 +3.47594e-29 +1.64268e-29 +7.2584e-30 +6.21865e-29 +2.31783e-30 +1.80841e-29 +1.08217e-29 +2.29006e-29 +2.62126e-29 +5.49974e-29 +6.0539e-33 +4.15481e-29 +6.23636e-30 +1.4087e-31 +5.20571e-30 +6.82686e-30 +2.95104e-30 +1.61855e-29 +1.57095e-30 +2.07769e-30 +1.87626e-29 +0.706963 +0.881645 +0.927649 +1.04636 +1.14887 +1.23335 +1.30446 +1.36621 +1.42122 +1.11557 +0.187927 +1.81171e-28 +1.3192e-28 +1.12651e-29 +7.53768e-29 +4.28867e-28 +1.04876e-28 +3.90545e-30 +1.34293e-29 +3.94626e-29 +1.4616e-29 +1.50986e-28 +7.07742e-29 +3.41783e-30 +3.34235e-30 +1.48918e-28 +6.47211e-29 +1.96219e-31 +3.2277e-29 +3.15603e-29 +4.97088e-29 +4.0166e-31 +3.42081e-29 +0 +7.63606e-34 +5.88699e-29 +3.82996e-29 +2.81476e-28 +0 +1.34076e-30 +9.09618e-31 +1.45667e-28 +3.47842e-30 +1.35887e-31 +1.07579e-29 +1.43094e-29 +1.64386e-28 +2.60617e-29 +1.31909e-28 +1.84678e-28 +1.52959e-29 +8.23868e-29 +5.10438e-29 +1.00366e-28 +1.6447e-28 +1.02988e-31 +1.49138e-28 +8.26675e-29 +1.61421e-28 +2.43991e-28 +1.1876e-28 +8.95115e-30 +2.05668e-28 +5.46733e-30 +5.63889e-29 +1.61337e-28 +7.16151e-29 +2.51792e-29 +2.73226e-30 +6.45022e-29 +1.7391e-29 +7.06824e-32 +1.5531e-29 +2.83263e-29 +1.02826e-29 +4.01896e-31 +1.00496e-30 +9.80075e-31 +3.82856e-30 +5.97885e-29 +1.20612e-28 +1.80301e-29 +2.87358e-29 +2.80511e-29 +4.19269e-30 +4.09347e-30 +9.667e-30 +1.3105e-29 +1.12874e-29 +1.24838e-29 +2.79701e-31 +7.38113e-30 +4.36468e-29 +3.74355e-31 +1.46532e-29 +9.90952e-31 +9.66963e-31 +3.77134e-30 +5.03769e-29 +6.06782e-30 +8.96792e-30 +8.54446e-31 +7.50496e-30 +2.08196e-30 +5.07768e-31 +1.00307e-29 +2.4468e-30 +1.84146e-29 +2.32977e-30 +4.73709e-30 +2.93427e-32 +1.41071e-29 +3.7561e-29 +2.58309e-32 +7.21401e-29 +4.25598e-29 +5.89947e-31 +9.17808e-32 +6.46809e-30 +1.39801e-30 +5.33451e-31 +1.01805e-30 +7.28202e-31 +1.04332e-29 +1.23068e-30 +4.68699e-31 +2.7801e-29 +1.82485e-29 +2.12806e-29 +4.40494e-29 +2.37847e-30 +2.70519e-29 +1.0051e-30 +1.23966e-30 +1.34136e-29 +8.3674e-30 +0 +1.25206e-31 +1.93766e-30 +5.7803e-30 +2.82172e-29 +7.78113e-30 +3.80425e-29 +1.43124e-30 +4.1469e-29 +7.18376e-29 +1.9293e-29 +3.83641e-31 +1.03832e-30 +6.50422e-31 +9.47489e-30 +8.64243e-32 +4.01619e-32 +1.54293e-30 +1.15068e-29 +1.04655e-30 +8.42544e-31 +7.38713e-30 +5.12234e-31 +7.06539e-32 +4.85427e-31 +2.15444e-29 +3.94016e-29 +2.05309e-33 +6.55896e-30 +2.41239e-31 +2.90606e-29 +1.42025e-30 +1.20504e-30 +2.89342e-30 +1.89294e-30 +2.32183e-29 +8.99301e-32 +7.76061e-30 +1.70032e-29 +1.8342e-31 +3.10038e-30 +7.34588e-30 +7.52321e-30 +1.34111e-33 +0.814462 +0.936572 +0.947853 +1.04106 +1.13397 +1.21711 +1.28973 +1.35357 +1.41055 +0.865411 +0.0735513 +8.35259e-29 +3.62474e-30 +1.7968e-29 +3.47482e-30 +2.75567e-28 +6.74485e-29 +7.33686e-30 +2.23909e-28 +1.87703e-28 +4.59376e-29 +1.51608e-29 +4.12237e-31 +2.86946e-30 +1.01114e-28 +9.08942e-29 +3.29628e-29 +6.9573e-30 +3.15746e-29 +5.67656e-30 +1.94455e-28 +8.69775e-29 +2.7962e-28 +8.13476e-30 +2.26473e-30 +1.12158e-29 +7.80419e-29 +8.48527e-30 +3.97259e-29 +2.14494e-29 +1.35225e-28 +1.33945e-29 +2.00887e-29 +1.46539e-28 +1.92241e-29 +1.78046e-30 +2.7234e-30 +5.63296e-29 +1.66845e-30 +1.72201e-29 +3.22878e-29 +4.09624e-29 +2.2904e-29 +5.59682e-29 +5.12976e-30 +8.57026e-29 +5.46688e-31 +2.13263e-30 +2.13516e-29 +8.88196e-29 +9.49312e-29 +3.27725e-29 +4.76571e-31 +1.36516e-33 +1.3167e-28 +8.48356e-29 +9.2165e-30 +6.81233e-30 +6.65991e-30 +4.57216e-29 +3.82053e-29 +6.22178e-30 +0 +1.60752e-28 +1.67938e-29 +2.0458e-30 +3.55706e-30 +1.75802e-29 +6.87291e-29 +4.98072e-29 +6.56459e-29 +1.78698e-29 +6.96678e-30 +4.84067e-29 +0 +8.26518e-34 +3.21547e-29 +2.75822e-30 +2.03809e-29 +1.48115e-30 +2.57267e-30 +1.00569e-29 +3.83761e-30 +1.81452e-29 +5.27318e-30 +2.6201e-33 +2.36238e-29 +1.39824e-28 +9.63658e-30 +4.69253e-30 +5.37647e-30 +1.52486e-30 +3.10783e-29 +1.89706e-30 +2.60545e-31 +2.07076e-33 +1.33719e-29 +1.32322e-30 +8.85803e-29 +1.64567e-30 +1.00436e-31 +2.20664e-31 +5.38663e-30 +2.82849e-30 +3.66855e-31 +1.80504e-30 +1.59354e-33 +3.39867e-31 +7.48085e-31 +1.58725e-29 +1.77894e-29 +4.08264e-29 +5.44319e-30 +3.6049e-30 +4.48666e-31 +8.58371e-31 +1.156e-29 +2.80559e-29 +2.34565e-30 +5.3482e-29 +4.86606e-29 +1.83234e-30 +3.32631e-30 +2.07792e-30 +1.40747e-32 +1.66192e-30 +3.87736e-30 +1.40365e-32 +1.00062e-29 +1.24524e-32 +1.21505e-28 +9.97006e-30 +1.85067e-31 +1.54494e-29 +2.75254e-31 +1.55387e-30 +4.56511e-29 +2.9814e-29 +6.38282e-31 +9.35238e-30 +3.08604e-30 +1.07019e-29 +8.39185e-32 +1.0185e-29 +3.51938e-29 +5.66491e-30 +1.83903e-30 +2.5852e-30 +1.24399e-31 +2.72979e-31 +9.5841e-30 +5.65633e-30 +1.80051e-30 +2.46915e-31 +8.67017e-30 +3.3732e-32 +6.37859e-31 +6.2016e-31 +7.83699e-30 +0 +2.46804e-32 +0 +7.89178e-30 +3.7599e-29 +5.32116e-30 +3.25626e-31 +1.66116e-29 +0 +8.05815e-32 +5.36086e-33 +0.887491 +0.938828 +0.999701 +1.04993 +1.12919 +1.20615 +1.27695 +1.34102 +1.399 +0.463646 +0.00311087 +1.91966e-29 +2.57531e-28 +1.03699e-29 +4.51584e-30 +1.06243e-28 +2.18568e-28 +1.58081e-28 +2.59786e-28 +3.67802e-31 +8.99063e-30 +5.07366e-29 +5.53836e-29 +4.5466e-30 +2.88606e-29 +6.9818e-29 +2.7696e-29 +9.35762e-29 +1.85629e-28 +3.32052e-28 +2.34997e-28 +1.03227e-29 +3.24651e-28 +1.21306e-28 +1.07764e-30 +1.43657e-30 +1.36704e-28 +8.81856e-29 +1.86185e-29 +4.75758e-29 +2.91178e-28 +1.65521e-30 +3.65707e-29 +3.57107e-30 +1.15613e-28 +1.52346e-30 +2.09954e-31 +3.28409e-30 +5.3587e-29 +3.6731e-29 +6.23812e-29 +2.09592e-30 +0 +2.00873e-30 +2.82959e-30 +1.55809e-28 +2.71915e-29 +2.66156e-29 +1.21315e-28 +5.15013e-29 +1.86961e-28 +5.30577e-29 +2.64944e-29 +6.48268e-30 +4.06171e-30 +3.00542e-29 +1.96898e-29 +8.1414e-29 +5.23768e-29 +5.79927e-32 +2.00623e-30 +3.68638e-29 +1.72897e-29 +4.23013e-30 +1.27718e-30 +1.15167e-28 +5.00837e-29 +1.92273e-31 +9.17896e-30 +4.57999e-30 +2.58095e-29 +3.19557e-29 +2.47004e-29 +2.05546e-30 +2.77393e-29 +1.96685e-30 +1.13471e-29 +7.43529e-29 +5.71367e-29 +2.35219e-30 +3.59633e-30 +2.37627e-29 +2.32381e-29 +8.42956e-31 +9.50217e-30 +2.17366e-29 +5.03123e-31 +3.07731e-30 +3.89714e-29 +3.39942e-29 +3.08592e-32 +2.81154e-30 +9.89678e-31 +5.26847e-30 +4.41816e-29 +4.31974e-29 +1.69852e-29 +2.45625e-30 +2.40313e-30 +2.13009e-31 +1.12628e-30 +2.71646e-30 +1.97414e-29 +2.47869e-29 +5.88741e-29 +8.19627e-30 +3.87707e-29 +3.83792e-30 +2.91e-29 +2.56002e-29 +1.75696e-29 +5.60206e-29 +1.00561e-29 +1.63972e-29 +4.16881e-31 +1.04416e-30 +7.70919e-30 +1.41208e-31 +6.08338e-32 +1.79825e-30 +4.70521e-30 +2.27047e-29 +6.72021e-30 +5.42036e-30 +1.3238e-32 +9.79e-29 +5.84392e-29 +1.494e-30 +1.3945e-29 +1.182e-30 +1.15477e-30 +1.61978e-30 +1.09889e-30 +4.29404e-30 +3.2887e-29 +4.10072e-30 +3.13939e-29 +6.60801e-30 +2.78432e-29 +3.82052e-29 +2.46443e-29 +2.28056e-30 +5.56235e-31 +2.47557e-29 +9.58671e-30 +1.16928e-29 +2.30611e-29 +1.1153e-29 +4.84969e-31 +5.77542e-30 +1.8438e-30 +2.54977e-31 +1.45194e-29 +4.28783e-31 +1.91671e-33 +7.3871e-30 +2.39802e-29 +3.51049e-30 +3.42606e-30 +2.09082e-31 +3.2664e-30 +5.66988e-30 +9.53656e-30 +1.35283e-30 +4.04042e-30 +6.52247e-30 +7.08836e-31 +1.24044e-30 +9.91334e-30 +0 +0.949893 +0.977509 +1.05806 +1.07232 +1.13601 +1.2027 +1.26787 +1.32936 +0.988855 +0.102197 +4.05682e-28 +2.17864e-28 +5.63397e-29 +9.79575e-30 +7.93949e-29 +4.76852e-29 +2.8287e-29 +1.1463e-29 +3.46921e-30 +8.70836e-30 +1.16109e-28 +2.59049e-28 +6.78517e-29 +3.46618e-28 +1.18489e-28 +6.39478e-29 +2.90389e-28 +4.4183e-29 +6.02569e-29 +3.61809e-29 +3.95192e-29 +3.10136e-29 +2.08319e-28 +7.51749e-29 +1.20314e-28 +1.50707e-28 +4.44586e-34 +3.43675e-29 +1.97445e-28 +3.67489e-31 +9.12766e-32 +1.40723e-30 +1.37919e-30 +4.08416e-29 +5.59059e-29 +3.24199e-29 +1.7872e-29 +7.78481e-30 +6.17815e-30 +2.16021e-29 +7.32414e-32 +1.03347e-29 +1.06964e-28 +9.92259e-30 +1.08151e-30 +3.24154e-30 +4.14827e-30 +1.01725e-30 +3.98317e-30 +2.44948e-31 +1.49412e-30 +1.46269e-30 +3.66836e-30 +3.23432e-29 +1.07814e-29 +1.45706e-28 +2.58745e-30 +1.01355e-29 +2.02596e-29 +6.00304e-30 +4.85951e-30 +2.74165e-29 +3.65514e-29 +6.59362e-29 +5.41143e-30 +3.95015e-31 +9.65292e-30 +1.07561e-29 +3.46039e-29 +4.32457e-32 +6.00223e-29 +4.20829e-29 +1.3623e-30 +5.33881e-30 +1.30994e-29 +1.44729e-31 +4.2124e-30 +8.72122e-30 +1.20085e-30 +1.72798e-29 +2.33121e-29 +3.78844e-30 +1.7659e-29 +2.70106e-29 +6.61105e-30 +5.63808e-30 +3.40753e-30 +9.92493e-31 +3.88642e-30 +6.76365e-30 +2.34666e-31 +9.1471e-30 +2.23065e-29 +4.75655e-30 +7.69364e-30 +8.38448e-31 +1.53809e-29 +4.36611e-30 +8.71799e-30 +4.18261e-30 +2.13793e-29 +1.00275e-30 +8.14589e-32 +9.6047e-31 +4.30977e-30 +6.76211e-31 +4.58636e-29 +5.18959e-30 +1.68843e-29 +9.90754e-30 +8.25571e-31 +3.70522e-30 +1.0068e-29 +2.27097e-30 +5.3694e-29 +3.39672e-30 +1.47666e-30 +5.77932e-32 +3.61898e-30 +4.4814e-30 +1.38575e-29 +7.62632e-30 +2.98491e-29 +1.4654e-29 +3.17408e-30 +4.36679e-29 +1.89869e-31 +4.75548e-29 +2.90741e-30 +5.13768e-29 +4.3506e-30 +2.87489e-29 +3.36975e-30 +5.2741e-29 +6.72753e-30 +5.60726e-30 +1.84463e-29 +5.98843e-31 +7.14278e-30 +5.72943e-31 +2.00929e-29 +1.96454e-29 +0 +3.2648e-30 +1.14871e-30 +1.79761e-29 +4.88375e-31 +4.30102e-30 +6.57787e-30 +2.8555e-30 +1.00741e-30 +4.38998e-31 +6.67776e-31 +9.43029e-30 +2.00364e-29 +2.02369e-30 +6.25481e-30 +4.83866e-29 +9.34655e-30 +1.11967e-30 +1.81e-30 +2.83201e-29 +2.76294e-32 +2.70184e-32 +2.94253e-30 +7.99284e-30 +7.09159e-31 +3.28107e-31 +1.9138e-29 +1.87302e-29 +0.988319 +1.02622 +1.06239 +1.13882 +1.14874 +1.20771 +1.26734 +1.30437 +0.32635 +1.68421e-29 +6.58579e-29 +1.44848e-28 +5.78217e-28 +1.75163e-28 +2.35931e-31 +1.1248e-29 +4.74742e-28 +3.70576e-29 +3.08605e-29 +7.53968e-30 +5.11775e-30 +3.92023e-29 +5.64853e-29 +1.94485e-31 +2.55485e-28 +1.82349e-31 +5.773e-29 +1.57389e-30 +1.0885e-29 +1.06352e-29 +1.31491e-29 +2.9323e-28 +4.47758e-29 +1.74951e-28 +3.78479e-29 +3.05558e-28 +1.41049e-31 +2.52261e-33 +3.02784e-29 +4.25806e-29 +2.16916e-29 +1.44909e-28 +2.70419e-28 +8.71498e-29 +1.68107e-29 +4.1155e-29 +2.78489e-30 +8.80396e-30 +2.76034e-28 +7.00464e-29 +4.0467e-31 +3.55576e-30 +9.81942e-32 +3.76571e-29 +7.20496e-29 +2.59267e-29 +5.04437e-29 +1.23111e-29 +4.80612e-29 +7.34476e-31 +1.03022e-28 +6.52496e-29 +4.36149e-29 +3.6224e-30 +1.03905e-29 +1.75956e-28 +1.21154e-28 +1.93689e-29 +7.91798e-30 +9.21476e-29 +1.61951e-28 +6.22101e-29 +1.16188e-29 +6.68563e-29 +1.10584e-29 +6.36333e-29 +5.37363e-30 +2.14559e-28 +9.01422e-29 +4.98451e-30 +3.81221e-29 +3.84487e-30 +2.66472e-29 +6.49672e-30 +3.20809e-29 +1.71659e-29 +1.05858e-30 +6.53051e-29 +8.42236e-29 +1.40121e-29 +7.42958e-30 +1.19914e-28 +5.47471e-29 +1.42927e-31 +4.43394e-29 +1.63692e-30 +3.25213e-30 +1.02727e-29 +4.4634e-29 +1.20532e-29 +1.88215e-30 +1.03295e-30 +1.36772e-30 +5.51041e-29 +1.16973e-29 +1.05289e-31 +4.94542e-30 +4.81997e-30 +1.53161e-30 +1.4995e-30 +3.27302e-30 +1.07207e-29 +6.99514e-30 +5.38465e-30 +5.24697e-30 +3.86645e-29 +5.70104e-33 +0 +6.66394e-31 +1.1519e-30 +3.45742e-30 +5.53496e-30 +1.70419e-29 +6.48984e-30 +1.61772e-29 +3.01993e-30 +1.53458e-29 +2.82607e-29 +3.00903e-29 +1.38488e-30 +3.64727e-29 +6.81025e-29 +9.9084e-29 +1.24608e-28 +8.20313e-30 +1.06356e-29 +2.25554e-30 +7.30326e-31 +1.0944e-30 +4.25015e-30 +1.68566e-31 +2.58178e-30 +7.68954e-30 +1.52789e-31 +4.49982e-30 +2.63938e-29 +1.7297e-30 +7.7231e-30 +3.34038e-32 +1.30069e-31 +5.32113e-29 +1.23245e-31 +7.67987e-30 +2.36452e-30 +1.02286e-30 +1.35505e-30 +0 +1.06698e-31 +1.0384e-31 +0 +1.39069e-29 +1.58829e-29 +2.45382e-32 +7.20843e-30 +7.79359e-31 +1.70627e-30 +1.49419e-29 +1.34871e-29 +2.79977e-30 +1.69903e-29 +2.51492e-29 +4.57433e-30 +1.36489e-29 +1.95492e-29 +5.33497e-30 +2.6074e-31 +2.24167e-30 +2.19828e-30 +6.32321e-32 +1.46748e-29 +1.01323 +1.04789 +1.08868 +1.15512 +1.13261 +1.21352 +1.26922 +0.515456 +0.0127151 +5.5211e-28 +8.81064e-34 +4.24096e-29 +1.18112e-29 +3.54181e-29 +1.77007e-29 +2.7718e-30 +8.20938e-29 +5.38036e-29 +1.04049e-29 +2.29194e-29 +1.69682e-28 +3.81333e-30 +1.43493e-28 +4.22439e-29 +5.7229e-29 +2.24069e-30 +2.20322e-30 +2.62985e-29 +1.34462e-28 +4.62891e-30 +4.07537e-29 +1.77251e-29 +1.73462e-29 +3.01776e-29 +5.58337e-29 +2.89052e-29 +4.41811e-29 +1.55629e-29 +2.37929e-29 +5.95974e-29 +2.59164e-29 +1.28353e-28 +2.32638e-28 +3.79176e-29 +6.26872e-29 +3.62867e-29 +3.1945e-30 +2.22208e-29 +0 +6.72676e-30 +6.36821e-29 +1.34277e-29 +3.10815e-29 +2.21591e-28 +6.70216e-31 +1.04656e-29 +1.13718e-28 +5.06662e-29 +4.34955e-30 +2.67035e-31 +2.34399e-30 +3.11315e-30 +8.94966e-30 +1.75531e-29 +2.37553e-29 +2.09404e-30 +1.83911e-29 +9.37571e-30 +4.25219e-29 +8.48204e-31 +1.16593e-29 +2.02604e-31 +4.45568e-29 +3.52894e-29 +2.72408e-29 +3.7473e-30 +4.09857e-31 +1.94681e-29 +5.22001e-30 +4.21883e-30 +3.70788e-29 +4.38394e-29 +9.86199e-31 +2.47087e-30 +7.35973e-30 +8.25454e-30 +1.05008e-32 +6.86333e-30 +6.7075e-30 +3.00795e-29 +6.40098e-30 +4.13314e-29 +1.79447e-29 +7.01116e-29 +1.18876e-31 +2.97235e-29 +1.81647e-30 +4.88436e-29 +9.7346e-31 +2.07054e-29 +3.71352e-30 +4.10305e-31 +3.95257e-31 +6.14887e-30 +3.37625e-30 +2.29599e-30 +3.59267e-31 +7.07223e-30 +6.90934e-30 +5.33098e-30 +3.24899e-31 +1.98812e-30 +1.31039e-29 +5.53401e-33 +2.66303e-29 +7.19895e-32 +2.27661e-29 +5.55506e-30 +6.07313e-31 +2.6135e-29 +1.23431e-28 +9.46314e-29 +1.07101e-28 +1.16169e-29 +4.2151e-29 +5.77678e-29 +2.24213e-31 +5.37478e-30 +5.36752e-29 +1.65649e-29 +8.01727e-31 +7.7859e-31 +1.21668e-29 +4.16828e-29 +4.52086e-30 +7.05072e-31 +2.10938e-30 +1.07456e-29 +8.01527e-30 +3.58971e-31 +3.50107e-29 +5.47867e-29 +9.47196e-30 +1.74641e-29 +9.01053e-30 +2.32056e-29 +4.33633e-29 +6.39706e-30 +1.27249e-29 +3.10178e-30 +1.49073e-30 +2.95717e-30 +7.378e-30 +1.37322e-30 +2.22099e-30 +2.72728e-29 +2.60388e-30 +8.19982e-30 +3.55958e-30 +5.4173e-30 +7.60047e-30 +3.86719e-30 +6.52257e-33 +3.12454e-30 +2.89557e-29 +7.41891e-31 +2.01416e-30 +3.83577e-30 +9.40029e-31 +2.40828e-29 +3.19399e-29 +7.78024e-30 +1.72397e-30 +2.83525e-30 +4.73464e-30 +4.5987e-30 +6.19455e-32 +4.89245e-30 +6.30917e-32 +0 +1.05302 +1.08173 +1.11533 +1.11577 +1.19816 +1.01985 +0.409329 +0.0132371 +9.55936e-30 +2.87096e-29 +1.4366e-29 +5.63578e-29 +4.47629e-29 +2.50509e-28 +8.50537e-30 +4.22135e-29 +3.692e-29 +1.1274e-30 +9.9513e-30 +0 +5.20746e-29 +6.66868e-29 +1.16235e-28 +9.35923e-29 +1.09104e-31 +2.89227e-28 +5.54722e-29 +7.49372e-29 +3.26508e-29 +1.42261e-29 +3.37059e-28 +5.02084e-29 +2.05507e-28 +1.459e-28 +3.57568e-29 +1.26158e-29 +1.93172e-29 +1.21165e-29 +2.96867e-30 +3.91144e-29 +2.85256e-30 +7.76247e-30 +1.9471e-29 +4.77099e-30 +5.72526e-29 +1.20929e-29 +3.39343e-29 +4.64388e-29 +0 +9.5224e-29 +1.26631e-29 +6.33077e-30 +5.02391e-30 +6.51967e-32 +4.33834e-29 +1.14258e-29 +2.06145e-29 +8.94966e-31 +7.88967e-30 +6.95542e-29 +5.38283e-29 +5.52523e-32 +5.49125e-29 +9.67875e-30 +8.17664e-30 +3.83974e-30 +1.3404e-29 +8.01189e-29 +8.71726e-30 +1.41105e-29 +4.92969e-29 +1.50319e-30 +1.32583e-29 +8.47042e-29 +5.07916e-29 +1.42776e-28 +2.1637e-29 +2.48623e-29 +3.45992e-29 +1.43549e-31 +1.40519e-31 +3.37938e-30 +6.47867e-30 +2.07065e-30 +5.06678e-31 +4.95912e-29 +3.10652e-29 +1.18754e-31 +1.16242e-29 +2.84551e-30 +4.00693e-30 +1.56843e-29 +3.08042e-29 +3.75643e-30 +0 +4.89264e-30 +1.407e-29 +4.21547e-29 +3.37597e-29 +4.48474e-30 +5.15573e-29 +2.24222e-29 +3.42628e-29 +1.01387e-29 +1.18027e-29 +1.3555e-29 +3.36649e-31 +9.2808e-30 +3.68139e-30 +2.37774e-29 +4.48477e-29 +3.44375e-30 +3.6304e-29 +3.5507e-29 +1.27059e-28 +5.19804e-30 +3.61485e-29 +3.92678e-30 +3.84382e-30 +2.11743e-29 +2.29427e-29 +8.0734e-30 +1.77588e-29 +3.34935e-29 +8.85246e-30 +3.2018e-29 +1.25499e-30 +5.25089e-32 +3.0641e-30 +9.89087e-29 +1.14545e-30 +1.14303e-29 +6.63746e-29 +1.53524e-30 +1.20442e-29 +1.01815e-30 +3.22358e-30 +2.83609e-29 +1.67602e-29 +1.81929e-30 +5.80427e-31 +3.55473e-30 +1.25008e-29 +6.63081e-30 +7.61698e-29 +1.16556e-29 +5.33954e-30 +2.24603e-29 +7.70437e-30 +1.88997e-30 +1.26706e-29 +3.24516e-29 +1.17584e-31 +2.67502e-30 +6.53192e-29 +6.63589e-29 +4.39566e-29 +1.28703e-29 +9.50296e-30 +8.41924e-31 +2.61912e-29 +2.68254e-30 +2.49871e-29 +2.4377e-29 +2.05822e-30 +2.59803e-32 +2.83043e-30 +1.50183e-29 +1.87472e-30 +1.86895e-29 +2.56987e-30 +4.45025e-30 +6.78685e-32 +1.11994e-29 +4.04238e-29 +2.27762e-29 +1.53929e-30 +6.00859e-30 +1.47015e-30 +1.46472e-29 +1.09536 +1.09565 +0.953245 +0.799021 +0.465099 +0.114452 +0.00227104 +2.21456e-29 +1.95713e-28 +5.27326e-29 +1.71185e-30 +2.05942e-29 +4.9933e-29 +3.64697e-30 +9.94741e-30 +5.62624e-29 +5.9943e-29 +4.55772e-29 +1.26579e-28 +4.39376e-29 +2.00542e-29 +6.37934e-29 +2.1994e-29 +7.09364e-29 +3.31233e-29 +7.33146e-31 +6.25698e-29 +1.44866e-28 +1.69899e-28 +2.18197e-29 +1.85421e-30 +2.92339e-31 +1.60679e-29 +1.48327e-28 +3.37269e-30 +8.17168e-30 +5.5747e-29 +3.74747e-29 +1.02169e-30 +6.26716e-30 +2.2143e-30 +9.66957e-31 +9.47887e-31 +3.93036e-29 +1.20732e-28 +1.29005e-28 +9.23635e-29 +3.93062e-29 +1.0714e-28 +7.47604e-30 +3.44373e-29 +8.45127e-30 +9.61658e-30 +1.20659e-30 +2.4977e-29 +1.66768e-30 +1.52892e-28 +7.13438e-31 +1.09364e-28 +7.93555e-29 +2.69452e-30 +1.11684e-28 +1.76489e-28 +3.57703e-29 +5.05271e-29 +3.82708e-30 +1.83808e-30 +4.7688e-29 +1.29924e-28 +1.41589e-29 +2.3469e-29 +1.57448e-28 +3.34192e-30 +1.17907e-28 +1.66506e-28 +1.13626e-30 +3.16332e-29 +5.86531e-29 +5.75094e-29 +6.1636e-29 +9.25391e-30 +2.8686e-29 +9.23755e-29 +8.72546e-30 +2.07041e-29 +2.58822e-30 +1.70625e-28 +3.58243e-30 +3.92021e-31 +9.19129e-29 +5.40069e-29 +6.21323e-29 +3.6041e-29 +3.59743e-31 +3.11659e-30 +3.05486e-30 +2.40436e-29 +2.06197e-30 +1.99756e-30 +2.81923e-30 +9.28689e-30 +1.08617e-28 +4.71784e-30 +7.86761e-29 +1.30903e-28 +2.24771e-29 +2.769e-31 +1.70529e-29 +2.11526e-29 +3.38368e-29 +4.23604e-29 +1.0376e-29 +1.01659e-29 +2.40051e-31 +6.99043e-30 +2.73809e-29 +1.99484e-30 +1.06394e-29 +3.06287e-29 +3.33745e-30 +1.17558e-28 +3.19849e-30 +2.36922e-29 +1.22774e-29 +7.65094e-31 +2.64942e-29 +1.01378e-29 +3.57304e-30 +0 +1.72315e-31 +1.6874e-31 +5.85771e-29 +4.06753e-29 +1.26018e-29 +5.48678e-30 +7.3084e-30 +2.4682e-29 +4.32754e-30 +5.92414e-30 +1.4707e-31 +1.93178e-29 +3.28314e-32 +7.23126e-30 +6.09068e-29 +7.88345e-30 +5.17602e-31 +2.98489e-30 +1.03955e-30 +6.35901e-30 +1.10722e-29 +9.82462e-31 +1.93438e-29 +4.35806e-29 +4.97254e-30 +3.39867e-29 +9.33879e-29 +2.1393e-31 +3.35597e-30 +1.46307e-30 +3.92814e-29 +2.18468e-30 +3.07504e-30 +6.10803e-33 +4.00355e-30 +3.25078e-31 +8.37872e-32 +2.75476e-30 +6.28203e-29 +3.58542e-30 +1.40065e-29 +1.12341e-30 +5.35973e-29 +1.5042e-29 +1.67372e-29 +2.30812e-29 +1.56767e-30 +3.91742e-30 +5.97846e-32 +3.65359e-29 +0 +0.386145 +0.295297 +0.167726 +0.061381 +0.00351932 +2.16659e-30 +2.17976e-29 +9.67652e-29 +2.05734e-30 +3.96432e-30 +6.23592e-29 +2.63045e-28 +6.9184e-29 +0 +1.43828e-28 +1.22766e-28 +2.3261e-29 +6.78227e-29 +3.99623e-29 +0 +1.67719e-30 +1.64745e-30 +2.09875e-29 +2.063e-29 +3.06677e-30 +1.92926e-28 +1.51173e-30 +4.65991e-29 +1.40267e-28 +1.11166e-28 +1.41198e-30 +7.98779e-30 +3.14034e-29 +1.93002e-30 +2.10667e-29 +4.05795e-29 +9.84835e-29 +2.20484e-29 +3.14543e-30 +1.11253e-28 +2.73335e-29 +1.79265e-28 +3.59312e-29 +1.51506e-28 +8.18336e-29 +4.73637e-29 +1.70954e-31 +3.77978e-29 +5.95922e-29 +4.41643e-29 +1.02009e-29 +7.67426e-30 +2.46226e-30 +2.55546e-29 +3.71435e-30 +8.21146e-30 +4.14545e-29 +7.45495e-29 +1.3846e-29 +2.66631e-29 +1.76756e-29 +1.31309e-31 +1.04494e-29 +1.02658e-29 +1.37296e-29 +8.26881e-29 +2.70395e-29 +1.36465e-28 +9.75268e-29 +3.69114e-29 +2.51785e-29 +1.12564e-28 +1.39941e-28 +1.699e-30 +3.75067e-30 +2.00578e-29 +2.51294e-30 +1.66927e-29 +0 +9.52631e-30 +7.33428e-29 +1.32671e-28 +1.525e-29 +1.27633e-29 +1.53535e-28 +5.47214e-30 +1.64532e-29 +5.27606e-30 +9.42988e-32 +1.31015e-32 +6.32515e-30 +7.66641e-30 +4.33677e-29 +3.62762e-30 +2.61313e-30 +9.23762e-29 +1.57514e-29 +1.10448e-30 +2.97537e-29 +2.69826e-31 +4.06496e-29 +4.31713e-29 +7.2473e-29 +1.57613e-29 +1.51509e-30 +2.41635e-31 +9.31801e-31 +5.71714e-30 +6.02343e-32 +1.07984e-29 +1.3849e-29 +1.35905e-29 +2.08444e-31 +7.36948e-30 +2.43041e-29 +1.77939e-29 +7.73916e-31 +1.89899e-31 +2.28659e-30 +4.14933e-31 +1.12535e-30 +6.34622e-30 +1.72917e-31 +6.10907e-30 +1.50184e-30 +4.0886e-30 +3.72579e-31 +5.386e-29 +2.81436e-29 +3.7882e-32 +1.80016e-29 +1.31301e-30 +0 +7.90284e-30 +2.32884e-29 +2.11249e-29 +7.46124e-30 +3.25336e-32 +2.87349e-29 +1.95792e-29 +1.31869e-31 +7.71418e-30 +4.25664e-30 +4.72442e-31 +7.28987e-30 +9.04784e-30 +1.09547e-29 +3.25583e-30 +8.53031e-30 +3.13213e-30 +2.57619e-31 +3.60597e-30 +1.64751e-29 +2.15089e-29 +2.34983e-30 +1.5539e-29 +1.0912e-29 +3.2076e-30 +2.8086e-29 +1.0289e-29 +7.56058e-31 +2.96532e-30 +3.20446e-31 +2.83345e-30 +1.94784e-30 +3.07544e-31 +1.06648e-29 +1.22644e-29 +4.55324e-30 +8.43906e-30 +9.8503e-30 +1.13315e-29 +6.56972e-32 +1.26267e-29 +9.0896e-30 +6.20516e-30 +1.18902e-29 +9.68387e-31 +7.53187e-32 +0 +0.00239549 +3.60789e-29 +1.71835e-29 +1.65249e-30 +7.9627e-29 +1.63755e-29 +1.23392e-29 +4.18763e-29 +6.09613e-28 +4.05536e-29 +1.59632e-28 +5.23915e-31 +4.48204e-29 +6.12656e-29 +8.42046e-29 +1.76508e-29 +2.15416e-31 +1.89912e-30 +2.28967e-29 +8.63295e-30 +1.13137e-29 +1.2375e-30 +5.62673e-29 +1.91582e-29 +5.1325e-29 +5.05042e-29 +3.57779e-29 +4.49039e-28 +1.76748e-29 +9.19985e-29 +3.23812e-28 +1.51622e-30 +2.02964e-28 +3.91683e-29 +1.90934e-28 +4.56168e-29 +1.69131e-28 +4.95129e-29 +3.04483e-28 +2.13636e-28 +1.22424e-28 +5.15695e-30 +9.01938e-30 +3.77506e-29 +0 +4.28515e-28 +9.62821e-29 +1.24879e-28 +1.56624e-28 +5.81505e-29 +2.42581e-29 +5.11762e-29 +8.73386e-29 +4.71512e-29 +2.90137e-30 +1.14097e-29 +1.8973e-29 +1.51193e-28 +2.6088e-28 +6.68111e-31 +1.51863e-28 +2.328e-31 +2.29031e-31 +9.62373e-29 +1.57633e-28 +5.58298e-29 +4.674e-30 +1.83859e-29 +2.36313e-29 +5.81691e-30 +2.23441e-30 +5.93935e-29 +0 +2.45744e-29 +1.33831e-30 +3.26582e-28 +6.34658e-29 +3.90311e-30 +3.13313e-31 +3.72945e-29 +2.73621e-29 +2.68549e-30 +7.33423e-30 +5.6563e-29 +1.77417e-28 +6.9807e-30 +1.21127e-28 +3.26908e-29 +4.25689e-30 +5.92939e-31 +5.78522e-31 +1.01163e-30 +1.68164e-28 +2.44728e-29 +2.9121e-29 +2.86474e-29 +8.40524e-29 +5.72518e-30 +2.29368e-31 +5.94413e-32 +1.06808e-29 +4.50583e-29 +2.5859e-30 +1.86576e-30 +5.10097e-30 +8.05779e-31 +2.41592e-30 +4.39967e-31 +9.23309e-29 +7.13409e-29 +7.79872e-30 +1.4701e-29 +5.15754e-29 +8.59928e-30 +1.1667e-28 +1.22628e-29 +1.84052e-29 +6.89811e-29 +3.87807e-29 +2.53979e-30 +9.99031e-30 +5.52892e-30 +8.49365e-30 +5.34642e-30 +2.46679e-29 +2.42594e-29 +1.86681e-29 +1.38783e-31 +1.67172e-30 +6.49467e-29 +1.31969e-29 +3.74944e-29 +6.45905e-29 +2.54919e-30 +0 +3.66823e-30 +6.30728e-29 +4.68918e-31 +1.23703e-31 +1.13408e-29 +1.34899e-29 +3.55248e-29 +1.5509e-29 +2.54473e-29 +5.99635e-29 +2.55869e-30 +1.44894e-29 +4.85442e-30 +3.50102e-30 +1.05686e-29 +8.73439e-31 +3.33558e-29 +5.81333e-30 +8.10183e-31 +1.4109e-30 +5.52252e-30 +6.2127e-33 +2.7022e-29 +5.12338e-29 +7.31029e-31 +6.41502e-30 +1.25127e-30 +0 +6.11445e-30 +1.06514e-29 +4.672e-30 +1.60758e-29 +1.75506e-30 +1.10906e-30 +1.71532e-30 +1.06648e-30 +3.21005e-30 +2.62261e-31 +0 +7.54338e-30 +2.21827e-30 +2.64901e-29 +6.42869e-29 +5.22302e-29 +1.67031e-32 +2.69519e-29 +3.39219e-29 +9.56794e-29 +5.30096e-29 +2.99187e-28 +5.71299e-30 +3.1436e-29 +1.23842e-28 +4.51164e-30 +5.1358e-29 +7.3957e-30 +1.82083e-28 +1.06116e-30 +2.67864e-30 +7.97156e-29 +1.78845e-29 +1.60503e-31 +7.71079e-30 +1.21514e-28 +3.43481e-29 +4.87157e-29 +8.33005e-30 +9.33565e-30 +6.07039e-30 +3.60225e-32 +1.21286e-28 +6.34541e-29 +2.65002e-29 +3.3317e-30 +1.31167e-31 +1.67436e-28 +3.18127e-30 +1.57956e-28 +2.33605e-28 +3.93976e-29 +2.99427e-28 +2.9498e-30 +7.43669e-30 +1.56686e-28 +1.01461e-30 +1.03297e-28 +1.20591e-29 +2.9331e-29 +6.79344e-30 +1.91391e-33 +3.33601e-29 +2.00824e-28 +8.6934e-29 +1.30129e-29 +2.80103e-29 +1.52751e-30 +1.05536e-28 +1.96007e-28 +1.67073e-33 +4.75457e-29 +3.74053e-30 +6.35751e-29 +1.68388e-29 +4.75985e-30 +9.35459e-29 +1.08588e-29 +1.70068e-29 +2.87619e-29 +3.13931e-29 +1.05838e-28 +3.73725e-30 +5.07134e-29 +1.06417e-29 +1.89349e-28 +4.48215e-29 +9.15546e-29 +1.0021e-29 +4.38864e-30 +5.47129e-30 +7.6905e-29 +3.1719e-29 +1.45306e-29 +5.15151e-30 +4.23532e-29 +5.00051e-30 +1.19174e-29 +1.38009e-28 +5.90091e-32 +2.81361e-29 +5.16471e-31 +1.03306e-33 +1.80084e-29 +2.89663e-29 +8.67064e-31 +1.32862e-30 +1.31276e-30 +2.06324e-29 +1.64647e-29 +9.81626e-30 +1.77563e-30 +1.24434e-29 +1.10302e-28 +1.93193e-28 +7.43536e-29 +4.12039e-29 +1.12764e-30 +1.11424e-30 +1.57621e-30 +6.21178e-30 +4.08465e-29 +7.07674e-30 +6.6011e-31 +1.62626e-29 +3.36822e-29 +4.78627e-30 +5.0388e-29 +9.81796e-30 +3.77442e-30 +3.12762e-29 +1.3228e-29 +2.31069e-30 +5.79612e-31 +2.94815e-29 +1.38253e-29 +6.67266e-30 +2.44477e-29 +3.30413e-30 +4.22039e-29 +5.65929e-29 +1.26445e-31 +2.80341e-31 +7.85757e-30 +2.72206e-31 +6.70576e-30 +2.93898e-30 +2.96364e-29 +1.64262e-29 +2.8585e-31 +7.12174e-30 +1.17152e-31 +2.75375e-29 +1.6563e-29 +2.6192e-30 +6.43474e-29 +2.35689e-31 +3.60985e-29 +7.98774e-30 +8.76294e-30 +5.38951e-30 +2.36448e-30 +4.55394e-30 +8.31043e-31 +4.36964e-29 +3.20269e-30 +2.83414e-32 +7.84045e-31 +5.32351e-29 +1.41917e-29 +2.98711e-29 +1.37798e-29 +4.25126e-29 +6.41587e-30 +1.95746e-30 +6.92536e-31 +1.48654e-29 +6.05523e-30 +3.00134e-31 +6.53659e-31 +7.16415e-30 +3.11243e-29 +2.01221e-29 +1.71406e-30 +1.08134e-30 +1.70595e-29 +2.62729e-29 +5.82614e-31 +6.38602e-30 +4.03059e-30 +2.23909e-29 +3.91689e-30 +5.46791e-31 +9.67961e-31 +3.09997e-29 +9.77484e-30 +1.45889e-29 +3.59926e-29 +4.01982e-29 +1.26637e-28 +8.26095e-29 +5.97204e-30 +3.79285e-29 +2.03523e-28 +1.2589e-28 +2.13412e-30 +2.31903e-28 +3.52792e-29 +1.03448e-29 +4.78662e-29 +1.64095e-29 +4.65037e-29 +2.71224e-29 +2.32905e-29 +5.6685e-29 +7.38834e-30 +8.29556e-29 +1.7952e-30 +1.20408e-28 +8.54479e-29 +4.53967e-30 +1.78028e-28 +8.18481e-29 +6.17736e-29 +4.1554e-28 +1.68116e-28 +4.83133e-30 +7.87245e-30 +5.75118e-29 +1.22415e-28 +3.0171e-29 +2.06554e-31 +5.7927e-30 +2.89097e-29 +8.79672e-30 +4.87878e-30 +1.43734e-28 +4.26774e-29 +3.51162e-30 +1.96881e-29 +1.16361e-29 +8.78422e-30 +1.32745e-29 +8.43375e-29 +1.49723e-29 +1.69881e-28 +4.75141e-30 +3.07641e-29 +3.98632e-29 +2.84709e-29 +5.68509e-30 +1.73152e-30 +6.34878e-29 +2.84344e-30 +1.28488e-28 +4.59603e-29 +3.87419e-29 +1.59121e-30 +1.47653e-28 +1.61008e-28 +6.44827e-29 +1.35467e-31 +6.5509e-30 +3.66018e-31 +1.44396e-30 +9.62729e-30 +4.55206e-30 +7.98099e-30 +4.28525e-29 +1.94633e-29 +5.41504e-32 +8.86535e-30 +7.45123e-30 +1.03345e-28 +2.01367e-31 +4.77221e-29 +4.40911e-29 +1.23743e-29 +4.77052e-30 +3.00972e-30 +3.90164e-29 +7.35646e-31 +4.91749e-29 +1.11448e-30 +1.1251e-29 +4.33687e-30 +2.26311e-29 +2.7045e-30 +1.49931e-28 +1.38233e-28 +3.40987e-29 +2.70476e-29 +5.11644e-29 +1.01319e-28 +6.17835e-31 +2.97381e-29 +1.49725e-31 +3.32448e-31 +3.28106e-29 +4.35561e-30 +1.94419e-28 +3.58805e-29 +4.97982e-30 +1.36525e-31 +4.07615e-30 +3.56849e-32 +3.52222e-32 +5.20671e-31 +3.4317e-32 +5.07315e-31 +4.48651e-30 +3.07559e-30 +7.77475e-30 +9.71336e-30 +4.75603e-31 +2.29111e-29 +8.10153e-29 +1.02716e-30 +3.64348e-29 +1.22411e-29 +6.16862e-30 +2.12165e-29 +4.06457e-29 +1.92358e-29 +9.40822e-30 +6.45156e-31 +1.58833e-29 +1.83011e-29 +1.80669e-29 +4.80455e-30 +1.5116e-29 +6.0391e-31 +5.89583e-31 +3.01188e-32 +6.71028e-29 +1.30986e-29 +1.76029e-29 +8.87867e-30 +2.99977e-29 +7.0139e-30 +1.39386e-30 +1.02335e-29 +1.20258e-29 +6.68988e-30 +7.39789e-31 +3.22274e-29 +7.22376e-31 +6.37291e-30 +3.76327e-29 +9.41327e-31 +9.81958e-32 +1.87656e-30 +1.06836e-29 +8.98347e-31 +1.16515e-30 +4.59135e-30 +2.55536e-30 +1.79279e-29 +9.97502e-30 +1.34167e-29 +6.0913e-31 +1.69264e-30 +8.55596e-32 +4.77076e-29 +1.65658e-29 +1.08199e-29 +2.578e-31 +1.56495e-30 +3.9671e-30 +4.96515e-30 +9.69292e-31 +2.39759e-29 +2.90506e-30 +9.73193e-32 +6.22833e-32 +3.6791e-30 +1.45452e-29 +2.64574e-29 +1.4362e-29 +3.85544e-30 +4.43824e-29 +1.76012e-29 +6.5739e-30 +2.92735e-29 +1.32116e-29 +9.8519e-30 +1.9044e-29 +5.39073e-30 +1.02923e-28 +1.8876e-28 +1.47099e-30 +1.19939e-29 +7.78338e-29 +6.43103e-29 +1.35958e-29 +4.54024e-29 +2.70251e-28 +1.20586e-28 +1.85339e-29 +0 +5.00963e-31 +2.85444e-29 +3.29551e-30 +5.55979e-30 +1.596e-29 +1.26559e-29 +8.04554e-29 +2.91549e-29 +7.83096e-29 +1.05159e-28 +2.0411e-28 +1.30681e-28 +1.53317e-29 +6.2542e-29 +8.77302e-30 +9.45173e-29 +9.08258e-29 +2.0649e-29 +5.65984e-31 +3.00352e-29 +3.9192e-30 +6.04308e-30 +3.43506e-29 +3.82693e-29 +9.81676e-30 +7.8472e-29 +9.05143e-31 +2.35895e-30 +2.66722e-29 +3.06038e-30 +1.46152e-29 +1.00265e-28 +8.17208e-30 +8.72474e-30 +3.71498e-29 +2.43472e-29 +6.98312e-29 +1.27503e-28 +8.17848e-30 +4.77751e-30 +1.52817e-29 +1.16414e-30 +7.77297e-30 +7.09236e-30 +5.92703e-30 +2.34096e-29 +8.5639e-30 +8.54366e-29 +8.24786e-29 +9.46557e-32 +1.50003e-29 +6.57163e-31 +2.27973e-30 +1.29648e-29 +1.14205e-29 +6.2518e-31 +2.70711e-29 +1.55085e-31 +6.0447e-31 +3.71539e-30 +2.11356e-29 +3.48335e-29 +4.3333e-30 +2.3913e-29 +3.49525e-30 +3.51573e-32 +1.22797e-30 +1.09194e-29 +3.33235e-30 +2.10576e-30 +8.32297e-30 +6.29915e-30 +1.14607e-29 +4.53032e-29 +2.8813e-31 +2.40236e-29 +5.11815e-30 +2.02434e-29 +1.45188e-30 +2.6534e-31 +6.50631e-30 +4.12656e-29 +1.46444e-28 +2.99727e-32 +4.43786e-31 +0 +1.72936e-30 +9.29061e-29 +1.29305e-30 +6.52388e-29 +7.52497e-29 +6.63773e-29 +9.11312e-30 +2.26489e-31 +1.19499e-29 +6.25188e-30 +1.1837e-30 +6.11934e-30 +2.14496e-31 +7.57775e-30 +9.42532e-32 +8.24215e-31 +6.36348e-29 +5.83057e-29 +3.19599e-30 +4.25077e-29 +1.46889e-29 +4.83837e-30 +3.57792e-29 +1.21355e-29 +1.68934e-30 +7.43285e-31 +6.62286e-30 +4.56696e-30 +2.18239e-29 +7.20154e-31 +1.25758e-30 +6.30499e-30 +8.27385e-32 +1.95474e-29 +1.89639e-30 +9.06566e-30 +7.42235e-30 +3.11227e-30 +2.36065e-29 +1.46194e-30 +7.6781e-32 +0 +5.69166e-30 +8.42728e-30 +1.45353e-29 +4.38507e-30 +6.12347e-30 +3.78407e-30 +5.40309e-30 +5.98921e-30 +5.90408e-31 +2.60256e-31 +1.97646e-29 +4.09732e-30 +3.11217e-30 +7.90415e-31 +2.14052e-29 +4.35802e-29 +7.4516e-30 +3.86507e-31 +1.55374e-29 +8.6784e-30 +3.16416e-29 +7.67825e-32 +2.85429e-29 +5.31423e-31 +2.85067e-30 +5.7962e-30 +1.46989e-29 +8.2196e-30 +5.80552e-29 +3.4018e-29 +1.34252e-28 +2.3837e-30 +1.30691e-28 +2.21619e-28 +4.54608e-30 +2.34207e-28 +2.38767e-29 +5.80323e-29 +1.68783e-28 +2.97563e-29 +4.54346e-29 +4.48358e-29 +2.85959e-29 +1.57957e-28 +3.43548e-28 +8.47628e-29 +9.56772e-29 +6.12218e-29 +3.92978e-31 +5.58528e-31 +4.80223e-29 +7.83548e-29 +2.50791e-29 +3.98205e-29 +1.66429e-28 +3.03636e-29 +6.17032e-29 +8.73961e-30 +3.45362e-31 +2.88368e-29 +1.74366e-29 +8.93143e-29 +1.31238e-30 +5.8123e-29 +2.70513e-29 +1.90967e-28 +3.11588e-31 +9.31498e-29 +5.45526e-29 +1.92004e-29 +1.20671e-32 +7.86868e-29 +1.11061e-29 +2.0189e-28 +8.53173e-29 +4.45388e-30 +2.97316e-29 +1.04366e-29 +8.1192e-29 +8.20524e-29 +3.4005e-29 +2.59226e-31 +7.90909e-29 +2.13492e-29 +0 +1.27621e-29 +6.57694e-30 +1.24577e-29 +1.23086e-29 +6.34368e-30 +1.08155e-28 +1.93882e-29 +8.70124e-30 +5.16817e-29 +1.44877e-28 +1.84916e-29 +5.66674e-29 +2.67707e-29 +3.78752e-29 +3.3359e-30 +8.24362e-31 +1.90759e-28 +1.04424e-29 +1.65135e-28 +1.77146e-30 +1.64714e-29 +4.44527e-29 +1.49203e-30 +6.77186e-30 +2.17978e-33 +2.30739e-29 +9.42982e-30 +2.87886e-30 +1.82242e-30 +2.45025e-29 +1.00256e-30 +2.5626e-29 +3.60423e-30 +3.39717e-29 +3.2268e-30 +9.52498e-30 +6.52596e-31 +1.25014e-29 +3.69043e-29 +2.04894e-30 +9.00968e-31 +3.27737e-30 +2.49619e-32 +1.96567e-30 +3.46794e-29 +2.28447e-29 +3.78242e-31 +2.53719e-29 +2.11385e-31 +5.13825e-30 +3.6181e-29 +3.066e-29 +2.68464e-30 +7.12137e-30 +2.0901e-29 +2.15579e-30 +0 +5.28453e-31 +2.71412e-29 +3.33476e-31 +4.03063e-30 +1.17328e-29 +1.47209e-29 +5.78267e-30 +3.8385e-29 +3.97997e-29 +2.09062e-32 +2.78073e-30 +2.34537e-29 +2.46018e-29 +3.18226e-30 +1.86647e-30 +4.74002e-30 +4.6999e-30 +1.32754e-29 +3.99046e-29 +4.5879e-30 +2.85802e-31 +2.16134e-29 +1.57579e-29 +1.56389e-31 +1.1659e-29 +3.85205e-30 +8.32803e-31 +4.31984e-30 +4.20111e-31 +0 +4.77576e-30 +9.45559e-30 +7.89169e-30 +2.09986e-29 +1.26188e-29 +1.08133e-29 +1.62772e-29 +4.56726e-30 +1.00979e-30 +3.90378e-31 +7.60803e-31 +3.95279e-30 +2.10239e-29 +1.97516e-32 +2.43163e-31 +3.40683e-30 +3.76209e-29 +9.62947e-31 +2.15129e-30 +1.20232e-30 +1.91552e-29 +2.48762e-30 +1.40899e-29 +2.33701e-29 +3.07996e-29 +1.30532e-29 +9.03933e-30 +7.23052e-31 +3.31076e-29 +1.65703e-29 +2.28707e-31 +1.19933e-29 +2.04915e-30 +1.31985e-31 +8.86542e-30 +1.41565e-32 +5.79092e-29 +1.23617e-29 +8.19858e-30 +6.14272e-29 +9.8395e-29 +2.80951e-28 +1.24178e-28 +5.71291e-29 +1.37584e-28 +0 +3.70025e-29 +1.72516e-30 +5.43256e-29 +1.67886e-30 +3.90252e-28 +2.05924e-29 +1.69366e-28 +9.42968e-29 +6.56214e-28 +6.8273e-30 +1.15613e-28 +1.01337e-28 +5.62423e-29 +1.36488e-29 +9.78662e-30 +3.71563e-29 +7.30734e-29 +1.0528e-28 +1.37357e-30 +7.02149e-29 +1.84536e-28 +1.68427e-28 +1.10177e-28 +2.15947e-29 +1.91808e-28 +5.61682e-29 +1.41385e-28 +4.87616e-30 +9.10522e-29 +0 +2.93198e-31 +5.99674e-29 +3.58074e-29 +7.04425e-30 +5.76752e-29 +3.44414e-29 +2.81992e-29 +3.85494e-31 +4.74303e-29 +2.60965e-31 +3.95858e-29 +2.227e-28 +6.78591e-30 +9.32517e-29 +9.78737e-31 +4.20883e-29 +2.99188e-29 +3.76821e-30 +8.75262e-29 +4.76199e-29 +4.5728e-29 +2.33002e-29 +7.96355e-30 +1.01908e-28 +3.21079e-29 +1.18664e-28 +2.18933e-29 +3.62146e-29 +6.21551e-29 +1.01747e-28 +5.00821e-30 +3.44762e-29 +1.95461e-31 +6.9519e-30 +1.71683e-30 +5.06884e-29 +9.51002e-29 +7.07355e-30 +2.76455e-28 +1.81609e-28 +1.50197e-29 +1.1791e-29 +5.24613e-29 +6.16634e-30 +3.03852e-29 +1.41546e-29 +1.71956e-29 +5.88116e-30 +6.71908e-29 +2.55335e-30 +1.58204e-31 +1.10327e-28 +1.66716e-29 +3.15971e-29 +1.23218e-28 +1.21818e-28 +1.5321e-29 +7.54751e-30 +5.30656e-29 +5.46807e-29 +1.64942e-33 +1.09122e-30 +7.95084e-30 +1.05422e-29 +1.05553e-28 +7.92794e-29 +1.31711e-31 +6.75385e-30 +2.59899e-29 +3.99957e-30 +3.24357e-31 +3.20899e-31 +1.60144e-30 +1.42482e-29 +1.5162e-29 +2.34436e-29 +5.47424e-30 +6.74676e-31 +7.59717e-29 +1.76429e-29 +6.56078e-30 +1.03611e-29 +8.61856e-30 +1.5992e-31 +1.67703e-29 +2.92097e-30 +1.71058e-32 +4.33738e-30 +1.61187e-29 +4.32047e-29 +2.76543e-29 +7.887e-30 +1.65254e-29 +9.47794e-29 +3.64858e-29 +1.41195e-31 +1.21859e-29 +3.25889e-29 +3.90776e-30 +5.45511e-31 +1.44022e-29 +1.0828e-29 +2.47479e-29 +1.40241e-29 +1.44665e-32 +3.6726e-30 +1.02737e-28 +4.26519e-29 +2.23702e-29 +9.55229e-29 +1.88259e-29 +9.22145e-30 +1.06114e-29 +1.37444e-29 +3.4169e-31 +4.79531e-31 +4.73404e-30 +1.68231e-32 +1.56252e-30 +2.59565e-29 +7.95223e-30 +6.11366e-30 +1.2846e-29 +3.59895e-30 +4.95031e-30 +3.19604e-29 +3.96363e-29 +1.9745e-31 +3.2559e-29 +9.68971e-31 +1.19221e-30 +7.69928e-31 +4.7003e-30 +2.2601e-29 +1.67565e-29 +4.15368e-31 +1.9287e-29 +5.52289e-30 +3.67743e-30 +5.97298e-30 +1.15035e-29 +5.27297e-29 +5.82923e-28 +2.42442e-30 +3.91806e-28 +5.89715e-31 +5.59025e-30 +7.19782e-29 +9.51488e-30 +2.34651e-28 +1.30629e-28 +2.17346e-30 +5.36033e-31 +5.28808e-31 +5.21689e-33 +7.78652e-29 +4.56997e-30 +3.28306e-28 +1.01068e-28 +5.90037e-31 +3.96294e-28 +3.91007e-28 +8.57624e-35 +1.58169e-28 +4.64355e-33 +1.36228e-28 +6.71717e-29 +1.13955e-29 +2.01708e-28 +1.70651e-30 +7.44719e-29 +8.49592e-29 +0 +1.55542e-29 +5.09914e-29 +2.66423e-28 +1.17765e-28 +1.61336e-28 +2.24657e-29 +1.4376e-29 +0 +9.13562e-32 +1.33825e-29 +1.32098e-29 +1.48711e-28 +7.31987e-30 +5.25084e-29 +1.20421e-28 +3.81029e-29 +6.95246e-30 +3.24369e-31 +1.39498e-29 +1.21541e-29 +1.80321e-29 +7.3099e-29 +2.35681e-29 +3.76953e-29 +1.18691e-30 +1.6924e-29 +1.66744e-30 +1.92122e-29 +6.51915e-29 +5.89717e-30 +0 +1.40896e-29 +5.68006e-30 +2.54628e-29 +1.77021e-30 +6.62151e-31 +9.82094e-30 +7.6407e-29 +2.49477e-31 +4.29094e-29 +6.54332e-29 +4.98378e-29 +8.03889e-29 +6.87269e-34 +1.33875e-29 +1.77339e-29 +4.78788e-30 +3.94409e-30 +7.15803e-29 +1.32822e-29 +5.54818e-31 +1.36449e-31 +5.69735e-30 +1.20278e-29 +3.91946e-29 +2.64364e-29 +1.04237e-29 +1.98748e-29 +3.74135e-29 +1.37034e-29 +9.3144e-31 +7.14315e-29 +2.16966e-30 +9.30851e-29 +1.5525e-29 +1.24496e-28 +9.98823e-29 +3.75239e-30 +2.27272e-30 +1.10996e-29 +2.15149e-29 +5.31954e-30 +1.50996e-30 +2.65562e-30 +2.62633e-30 +4.1568e-29 +3.6141e-29 +4.07267e-31 +1.3307e-29 +6.22179e-33 +4.50884e-34 +1.37055e-30 +2.41104e-30 +5.4972e-29 +1.72133e-29 +3.94932e-30 +2.08166e-29 +5.19286e-32 +0 +7.41656e-29 +2.27413e-29 +2.04532e-29 +5.1201e-29 +3.3679e-30 +3.32967e-29 +3.99895e-29 +7.04024e-29 +2.50939e-30 +9.93699e-30 +3.01397e-29 +3.22252e-29 +1.85617e-29 +1.72014e-29 +4.89583e-31 +8.5584e-30 +5.23449e-30 +1.23906e-29 +4.5364e-30 +7.48557e-30 +4.7539e-30 +1.34049e-29 +1.95616e-32 +7.22791e-32 +5.03263e-29 +2.56528e-29 +4.41676e-31 +3.69664e-29 +6.93034e-30 +2.47464e-30 +3.34115e-30 +4.22774e-31 +1.359e-30 +2.93654e-29 +5.35332e-30 +6.55726e-32 +2.6033e-29 +1.95522e-30 +5.19512e-30 +2.69425e-30 +1.06816e-29 +1.14916e-33 +8.97927e-30 +1.21366e-29 +3.45835e-30 +8.79473e-30 +5.46089e-31 +1.84642e-29 +2.16269e-29 +4.18148e-29 +3.13045e-29 +9.19135e-30 +7.20684e-31 +5.23331e-31 +9.29405e-31 +3.68048e-30 +2.98459e-05 +0.000456563 +0.00141626 +6.24195e-28 +7.28448e-29 +1.61587e-29 +6.37544e-29 +7.13572e-29 +5.54731e-29 +9.36955e-30 +1.82579e-30 +6.76053e-30 +0 +2.1469e-29 +1.51956e-30 +5.63919e-29 +4.4196e-29 +2.49264e-29 +2.87182e-29 +6.31279e-31 +6.2271e-31 +5.90051e-29 +1.71086e-28 +2.63767e-30 +1.12382e-28 +2.61379e-29 +4.86286e-29 +2.85782e-29 +5.37244e-29 +1.24239e-30 +9.15654e-30 +3.61426e-29 +2.12213e-30 +9.39921e-29 +1.13152e-28 +2.69689e-28 +3.40127e-30 +1.24139e-31 +1.82357e-29 +4.55102e-29 +7.2225e-29 +2.37528e-29 +8.51592e-35 +5.94944e-30 +4.07815e-30 +6.22796e-29 +1.38461e-29 +1.62185e-29 +3.87256e-30 +6.7958e-30 +4.19306e-33 +5.76392e-29 +6.28388e-29 +1.50136e-29 +3.58554e-30 +1.41881e-31 +3.9769e-30 +4.64244e-31 +8.51877e-31 +3.74127e-31 +1.24984e-28 +1.31602e-28 +1.8662e-29 +4.45948e-29 +2.37359e-30 +5.59238e-29 +1.36974e-30 +1.35282e-30 +1.73165e-29 +5.54636e-30 +4.53758e-29 +1.85926e-29 +3.17964e-31 +1.81419e-29 +1.79217e-29 +7.84904e-31 +8.14439e-29 +2.72846e-28 +6.12878e-29 +1.51384e-29 +1.95064e-30 +3.57608e-29 +1.46031e-29 +3.49162e-29 +5.23827e-29 +4.79558e-30 +2.7947e-29 +8.98764e-29 +1.76415e-29 +9.75929e-29 +3.81468e-29 +0 +1.93911e-29 +6.65731e-29 +2.3818e-28 +9.68235e-31 +3.89607e-32 +3.06665e-30 +2.10362e-30 +2.08058e-30 +1.53646e-29 +1.37472e-29 +2.0591e-29 +5.65618e-31 +1.9665e-30 +1.67347e-29 +1.10791e-29 +4.14306e-31 +2.00799e-29 +5.29442e-29 +6.88197e-30 +1.10814e-28 +1.03795e-29 +3.49406e-30 +8.0271e-30 +1.31136e-30 +1.99622e-29 +7.90113e-29 +4.80975e-31 +8.59814e-30 +4.25154e-29 +6.16624e-29 +1.03889e-30 +5.59646e-30 +2.21583e-29 +6.72189e-30 +1.46535e-29 +4.39294e-31 +1.73834e-30 +6.72186e-31 +3.26179e-29 +1.27618e-29 +2.11566e-30 +6.08393e-29 +9.24112e-31 +1.58599e-31 +2.57416e-29 +6.4775e-29 +4.50888e-05 +0.000252998 +0.000637667 +0.00120803 +0.00197346 +0.00294375 +0.00412917 +0.00554047 +0.00718893 +0.00908635 +0.0112451 +0.0136782 +0.0163993 +0.0194225 +0.0227629 +0.0264361 +0.0304587 +0.0348479 +0.0396218 +0.0447996 +0.0504011 +0.0564475 +0.0629608 +0.0699641 +0.0774818 +0.0855396 +0.0941645 +0.103385 +0.11323 +0.123732 +0.134923 +0.146838 +0.159515 +0.172991 +0.187306 +0.202505 +0.218632 +0.235734 +0.253862 +0.273069 +0.29341 +0.314904 +0.335699 +0.353777 +0.372536 +1.14283e-28 +7.45738e-28 +1.33967e-28 +7.18318e-29 +2.9994e-28 +2.48356e-28 +2.2809e-31 +1.90125e-29 +1.34094e-28 +1.21745e-28 +4.4714e-29 +1.08651e-28 +7.10494e-29 +2.15398e-29 +2.47354e-28 +4.77893e-29 +1.0306e-29 +7.53967e-30 +9.70994e-29 +1.95529e-30 +2.71275e-31 +1.85875e-31 +9.50758e-30 +1.81098e-31 +1.51137e-29 +1.76328e-31 +2.78201e-30 +0 +4.01528e-29 +2.48678e-29 +6.59516e-31 +1.6319e-31 +1.44533e-30 +8.21545e-30 +1.40776e-30 +4.15178e-29 +4.61261e-29 +9.62378e-30 +1.92883e-29 +1.23992e-29 +5.20543e-30 +1.85488e-29 +3.78925e-29 +1.3022e-28 +4.94256e-30 +2.3613e-29 +1.92649e-31 +5.28292e-33 +6.00888e-06 +3.72846e-05 +9.61075e-05 +0.000183438 +0.000300266 +0.000447612 +0.000626531 +0.000838108 +0.00108346 +0.00136375 +0.00168017 +0.00203394 +0.00242634 +0.00285867 +0.00333228 +0.00384857 +0.00440898 +0.00501499 +0.00566813 +0.00636999 +0.00712218 +0.00792641 +0.00878441 +0.00969796 +0.0106689 +0.0116992 +0.0127908 +0.0139458 +0.0151662 +0.0164543 +0.0178122 +0.0192423 +0.020747 +0.0223289 +0.0239903 +0.0257341 +0.0275629 +0.0294795 +0.0314869 +0.0335882 +0.0357864 +0.0380847 +0.0404865 +0.0429954 +0.0456147 +0.0483483 +0.0511999 +0.0541736 +0.0572734 +0.0605035 +0.0638684 +0.0673726 +0.0710207 +0.0748177 +0.0787686 +0.0828786 +0.0871531 +0.0915978 +0.0962183 +0.101021 +0.106011 +0.111197 +0.116583 +0.122178 +0.127988 +0.134021 +0.140285 +0.146788 +0.153537 +0.160542 +0.167812 +0.175355 +0.183182 +0.191303 +0.199727 +0.208466 +0.217532 +0.226935 +0.236688 +0.246803 +0.257294 +0.268174 +0.279457 +0.291158 +0.303292 +0.315876 +0.328876 +0.339904 +0.350337 +0.361015 +0.371968 +0.383202 +0.394726 +0.406546 +0.418669 +0.431103 +0.443855 +0.456933 +0.470345 +0.484099 +0.498205 +0.51267 +0.527504 +0.542715 +0.558313 +0.574309 +0.590711 +0.607531 +0.624778 +0.642464 +0.6606 +0.679197 +0.698267 +0.717822 +0.737875 +0.758438 +0.779526 +0.80115 +0.823327 +0.846069 +0.869392 +0.893311 +0.917842 +0.943001 +0.968806 +0.995272 +1.02242 +1.05026 +1.07883 +1.09727 +1.09566 +1.09404 +0.164629 +0.16695 +0.169311 +0.171713 +0.174157 +0.176644 +0.179173 +0.181748 +0.184367 +0.187033 +0.189746 +0.192507 +0.195317 +0.198177 +0.201088 +0.204051 +0.207067 +0.210138 +0.213264 +0.216446 +0.219686 +0.222985 +0.226344 +0.229765 +0.233248 +0.236795 +0.240408 +0.244087 +0.247835 +0.251652 +0.25554 +0.259501 +0.263536 +0.267647 +0.271835 +0.276103 +0.280451 +0.284882 +0.289397 +0.293998 +0.298688 +0.303468 +0.30834 +0.313306 +0.318368 +0.323529 +0.32879 +0.334121 +0.338647 +0.342792 +0.346977 +0.351226 +0.355539 +0.359918 +0.364362 +0.368875 +0.373456 +0.378107 +0.38283 +0.387624 +0.392493 +0.397436 +0.402455 +0.407552 +0.412728 +0.417984 +0.423322 +0.428742 +0.434247 +0.439839 +0.445517 +0.451285 +0.457144 +0.463095 +0.469139 +0.475279 +0.481517 +0.487853 +0.494291 +0.500831 +0.507475 +0.514226 +0.521085 +0.528054 +0.535135 +0.542331 +0.549643 +0.557073 +0.564625 +0.572299 +0.580098 +0.588024 +0.596081 +0.604269 +0.612593 +0.621053 +0.629654 +0.638396 +0.647284 +0.65632 +0.665506 +0.674845 +0.684341 +0.693996 +0.703814 +0.713797 +0.723949 +0.734273 +0.744771 +0.755449 +0.766308 +0.777354 +0.788588 +0.800015 +0.811639 +0.823464 +0.835493 +0.847731 +0.860182 +0.872849 +0.885738 +0.898853 +0.912198 +0.925778 +0.939597 +0.953661 +0.967975 +0.982543 +0.997371 +1.01246 +1.02783 +1.04347 +1.05939 +1.0756 +1.0921 +1.0957 +1.09472 +1.09373 +1.09273 +1.09172 +1.0907 +1.08967 +1.08863 +1.08757 +1.08651 +1.08544 +1.08435 +1.08326 +1.08215 +1.08103 +1.0799 +1.07876 +1.0776 +1.07644 +1.07526 +1.07407 +1.07286 +1.07165 +1.07042 +1.06917 +1.06792 +1.06665 +1.06536 +1.06407 +1.06276 +1.06143 +1.06009 +1.05874 +1.05737 +1.05598 +1.05458 +1.05317 +1.05173 +1.05029 +1.04882 +1.04734 +1.04585 +1.04433 +1.0428 +1.04125 +0.854693 +0.858571 +0.862492 +0.866455 +0.870461 +0.87451 +0.878604 +0.882743 +0.886927 +0.891157 +0.895433 +0.899757 +0.904128 +0.908547 +0.913016 +0.917534 +0.922103 +0.926722 +0.931393 +0.936117 +0.940893 +0.945723 +0.950608 +0.955548 +0.960543 +0.965596 +0.970705 +0.975873 +0.9811 +0.986387 +0.991734 +0.997143 +1.00261 +1.00815 +1.01375 +1.01941 +1.02514 +1.03093 +1.0368 +1.04273 +1.04873 +1.0548 +1.06095 +1.06716 +1.07345 +1.07981 +1.08625 +1.09277 +1.09461 +1.09419 +1.09377 +1.09335 +1.09292 +1.09249 +1.09205 +1.09161 +1.09117 +1.09072 +1.09027 +1.08982 +1.08936 +1.0889 +1.08843 +1.08796 +1.08748 +1.087 +1.08652 +1.08603 +1.08554 +1.08504 +1.08454 +1.08403 +1.08352 +1.08301 +1.08249 +1.08197 +1.08144 +1.0809 +1.08036 +1.07982 +1.07927 +1.07872 +1.07816 +1.0776 +1.07703 +1.07645 +1.07588 +1.07529 +1.0747 +1.07411 +1.07351 +1.0729 +1.07229 +1.07167 +1.07105 +1.07042 +1.06979 +1.06915 +1.0685 +1.06785 +1.06719 +1.06652 +1.06585 +1.06518 +1.06449 +1.0638 +1.06311 +1.0624 +1.06169 +1.06098 +1.06025 +1.05952 +1.05879 +1.05804 +1.05729 +1.05653 +1.05577 +1.055 +1.05422 +1.05343 +1.05263 +1.05183 +1.05102 +1.0502 +1.04937 +1.04854 +1.04769 +1.04684 +1.04598 +1.04512 +1.04424 +1.04335 +1.04246 +1.04156 +1.04064 +1.03972 +1.03879 +1.03785 +1.0369 +1.03594 +1.03497 +1.034 +1.03301 +1.03201 +1.031 +1.02998 +1.02895 +1.02791 +1.02686 +1.0258 +1.02473 +1.02364 +1.02255 +1.02144 +1.02032 +1.01919 +1.01805 +1.0169 +1.01573 +1.01455 +1.01336 +1.01215 +1.01094 +1.0097 +1.00846 +1.0072 +1.00593 +1.00465 +1.00335 +1.00203 +1.0007 +0.99936 +0.998002 +0.996628 +0.995239 +0.993834 +0.992413 +0.990976 +0.989523 +0.988055 +1.05031 +1.05004 +1.04978 +1.04951 +1.04924 +1.04897 +1.0487 +1.04842 +1.04815 +1.04787 +1.04758 +1.0473 +1.04701 +1.04672 +1.04643 +1.04614 +1.04584 +1.04554 +1.04524 +1.04493 +1.04463 +1.04432 +1.044 +1.04369 +1.04337 +1.04305 +1.04273 +1.0424 +1.04207 +1.04174 +1.0414 +1.04107 +1.04073 +1.04038 +1.04004 +1.03969 +1.03934 +1.03898 +1.03862 +1.03826 +1.0379 +1.03753 +1.03716 +1.03678 +1.03641 +1.03603 +1.03564 +1.03525 +1.03486 +1.03447 +1.03407 +1.03367 +1.03327 +1.03286 +1.03245 +1.03203 +1.03161 +1.03119 +1.03076 +1.03033 +1.0299 +1.02946 +1.02902 +1.02858 +1.02813 +1.02767 +1.02721 +1.02675 +1.02629 +1.02582 +1.02534 +1.02487 +1.02438 +1.0239 +1.0234 +1.02291 +1.02241 +1.0219 +1.0214 +1.02088 +1.02036 +1.01984 +1.01931 +1.01878 +1.01824 +1.0177 +1.01715 +1.0166 +1.01604 +1.01548 +1.01491 +1.01434 +1.01376 +1.01318 +1.01259 +1.01199 +1.01139 +1.01079 +1.01018 +1.00956 +1.00894 +1.00831 +1.00768 +1.00704 +1.00639 +1.00574 +1.00508 +1.00441 +1.00374 +1.00307 +1.00238 +1.00169 +1.001 +1.00029 +0.999583 +0.998866 +0.998142 +0.997411 +0.996674 +0.995929 +0.995177 +0.994418 +0.993651 +0.992877 +0.992095 +0.991306 +0.990509 +0.989704 +0.988891 +0.98807 +0.987241 +0.986404 +0.985559 +0.984705 +0.983842 +0.982971 +0.982092 +0.981203 +0.980306 +0.979399 +0.978483 +0.977558 +0.976624 +0.97568 +0.974726 +0.973763 +0.97279 +0.971806 +0.970813 +0.969809 +0.968795 +0.96777 +0.966734 +0.965688 +0.96463 +0.963562 +0.962482 +0.961391 +0.960288 +0.959173 +0.958046 +0.956907 +0.955756 +0.954593 +0.953416 +0.952227 +0.951025 +0.94981 +0.948581 +0.947339 +0.946083 +0.944813 +0.943528 +0.94223 +0.940916 +0.939588 +0.938245 +0.936886 +0.935512 +0.934124 +0.988507 +0.988257 +0.988009 +0.987758 +0.987506 +0.987251 +0.986994 +0.986735 +0.986473 +0.98621 +0.985944 +0.985676 +0.985406 +0.985133 +0.984859 +0.984581 +0.984302 +0.98402 +0.983736 +0.983449 +0.98316 +0.982868 +0.982574 +0.982277 +0.981978 +0.981676 +0.981372 +0.981065 +0.980756 +0.980443 +0.980129 +0.979811 +0.979491 +0.979168 +0.978842 +0.978513 +0.978182 +0.977847 +0.97751 +0.97717 +0.976827 +0.976481 +0.976132 +0.97578 +0.975424 +0.975066 +0.974705 +0.97434 +0.973973 +0.973602 +0.973228 +0.97285 +0.972469 +0.972085 +0.971698 +0.971307 +0.970913 +0.970515 +0.970114 +0.969709 +0.969301 +0.968889 +0.968473 +0.968054 +0.967631 +0.967204 +0.966773 +0.966339 +0.965901 +0.965459 +0.965012 +0.964562 +0.964108 +0.96365 +0.963188 +0.962721 +0.96225 +0.961775 +0.961296 +0.960813 +0.960325 +0.959832 +0.959336 +0.958834 +0.958328 +0.957818 +0.957303 +0.956783 +0.956258 +0.955729 +0.955194 +0.954655 +0.954111 +0.953562 +0.953008 +0.952448 +0.951884 +0.951314 +0.950739 +0.950158 +0.949572 +0.948981 +0.948384 +0.947782 +0.947174 +0.94656 +0.94594 +0.945315 +0.944683 +0.944046 +0.943403 +0.942753 +0.942097 +0.941435 +0.940767 +0.940093 +0.939411 +0.938724 +0.938029 +0.937328 +0.936621 +0.935906 +0.935184 +0.934456 +0.93372 +0.932977 +0.932227 +0.93147 +0.930705 +0.929932 +0.929152 +0.928364 +0.927568 +0.926765 +0.925953 +0.925133 +0.924305 +0.923469 +0.922624 +0.921771 +0.920909 +0.920039 +0.919159 +0.918271 +0.917373 +0.916467 +0.915551 +0.914625 +0.91369 +0.912745 +0.911791 +0.910826 +0.909852 +0.908867 +0.907872 +0.906866 +0.90585 +0.904822 +0.903784 +0.902735 +0.901675 +0.900603 +0.899519 +0.898424 +0.897317 +0.896198 +0.895067 +0.893923 +0.892767 +0.891597 +0.890415 +0.88922 +0.888011 +0.886789 +0.885553 +0.884303 +0.883039 +0.88176 +0.880467 +0.879159 +0.925448 +0.925216 +0.924983 +0.924748 +0.924512 +0.924273 +0.924033 +0.92379 +0.923545 +0.923299 +0.92305 +0.922799 +0.922546 +0.922291 +0.922033 +0.921774 +0.921512 +0.921248 +0.920982 +0.920714 +0.920443 +0.92017 +0.919895 +0.919617 +0.919337 +0.919054 +0.918769 +0.918482 +0.918192 +0.9179 +0.917605 +0.917308 +0.917008 +0.916706 +0.9164 +0.916093 +0.915782 +0.915469 +0.915154 +0.914835 +0.914514 +0.91419 +0.913863 +0.913534 +0.913201 +0.912866 +0.912527 +0.912186 +0.911842 +0.911495 +0.911144 +0.910791 +0.910435 +0.910075 +0.909712 +0.909346 +0.908977 +0.908605 +0.908229 +0.90785 +0.907468 +0.907082 +0.906693 +0.906301 +0.905905 +0.905505 +0.905102 +0.904695 +0.904285 +0.903871 +0.903453 +0.903032 +0.902607 +0.902178 +0.901745 +0.901308 +0.900868 +0.900423 +0.899974 +0.899521 +0.899065 +0.898604 +0.898139 +0.897669 +0.897196 +0.896718 +0.896235 +0.895749 +0.895257 +0.894762 +0.894262 +0.893757 +0.893247 +0.892733 +0.892214 +0.891691 +0.891162 +0.890629 +0.89009 +0.889547 +0.888998 +0.888445 +0.887886 +0.887322 +0.886752 +0.886178 +0.885598 +0.885012 +0.884421 +0.883824 +0.883222 +0.882614 +0.882 +0.88138 +0.880755 +0.880123 +0.879485 +0.878842 +0.878192 +0.877535 +0.876873 +0.876204 +0.875528 +0.874846 +0.874157 +0.873462 +0.872759 +0.87205 +0.871334 +0.870611 +0.86988 +0.869143 +0.868398 +0.867646 +0.866886 +0.866118 +0.865343 +0.86456 +0.863769 +0.862971 +0.862164 +0.861349 +0.860525 +0.859694 +0.858853 +0.858004 +0.857147 +0.85628 +0.855405 +0.85452 +0.853627 +0.852724 +0.851811 +0.850889 +0.849958 +0.849016 +0.848064 +0.847103 +0.846131 +0.845149 +0.844156 +0.843152 +0.842138 +0.841113 +0.840076 +0.839029 +0.837969 +0.836899 +0.835816 +0.834721 +0.833615 +0.832496 +0.831364 +0.83022 +0.829062 +0.827892 +0.826709 +0.825511 +0.824301 +0.823076 +0.862269 +0.862053 +0.861837 +0.861618 +0.861398 +0.861175 +0.860951 +0.860725 +0.860497 +0.860267 +0.860036 +0.859802 +0.859566 +0.859328 +0.859089 +0.858847 +0.858603 +0.858357 +0.858109 +0.857859 +0.857607 +0.857352 +0.857096 +0.856837 +0.856576 +0.856313 +0.856047 +0.85578 +0.85551 +0.855237 +0.854963 +0.854686 +0.854406 +0.854124 +0.85384 +0.853553 +0.853264 +0.852973 +0.852678 +0.852382 +0.852082 +0.851781 +0.851476 +0.851169 +0.850859 +0.850547 +0.850231 +0.849913 +0.849593 +0.849269 +0.848943 +0.848614 +0.848282 +0.847947 +0.847609 +0.847268 +0.846924 +0.846577 +0.846227 +0.845874 +0.845517 +0.845158 +0.844796 +0.84443 +0.844061 +0.843689 +0.843313 +0.842934 +0.842552 +0.842166 +0.841777 +0.841384 +0.840988 +0.840588 +0.840185 +0.839778 +0.839368 +0.838953 +0.838535 +0.838113 +0.837688 +0.837258 +0.836825 +0.836388 +0.835946 +0.835501 +0.835052 +0.834598 +0.83414 +0.833679 +0.833213 +0.832742 +0.832268 +0.831788 +0.831305 +0.830817 +0.830325 +0.829828 +0.829326 +0.82882 +0.828309 +0.827793 +0.827272 +0.826747 +0.826216 +0.825681 +0.82514 +0.824595 +0.824044 +0.823488 +0.822927 +0.82236 +0.821788 +0.821211 +0.820628 +0.820039 +0.819445 +0.818845 +0.81824 +0.817628 +0.817011 +0.816387 +0.815758 +0.815122 +0.814481 +0.813833 +0.813178 +0.812517 +0.81185 +0.811176 +0.810496 +0.809809 +0.809114 +0.808413 +0.807705 +0.80699 +0.806268 +0.805539 +0.804802 +0.804058 +0.803306 +0.802546 +0.801779 +0.801004 +0.800221 +0.79943 +0.798631 +0.797824 +0.797008 +0.796184 +0.795352 +0.79451 +0.79366 +0.792801 +0.791933 +0.791056 +0.790169 +0.789273 +0.788368 +0.787452 +0.786527 +0.785592 +0.784647 +0.783692 +0.782726 +0.78175 +0.780763 +0.779766 +0.778757 +0.777737 +0.776706 +0.775663 +0.774609 +0.773542 +0.772464 +0.771374 +0.770271 +0.769156 +0.768027 +0.766886 +0.806955 +0.806753 +0.806551 +0.806346 +0.80614 +0.805932 +0.805722 +0.80551 +0.805297 +0.805082 +0.804865 +0.804646 +0.804426 +0.804203 +0.803979 +0.803752 +0.803524 +0.803294 +0.803062 +0.802828 +0.802592 +0.802354 +0.802114 +0.801872 +0.801627 +0.801381 +0.801133 +0.800882 +0.800629 +0.800374 +0.800117 +0.799858 +0.799597 +0.799333 +0.799067 +0.798799 +0.798528 +0.798255 +0.79798 +0.797702 +0.797422 +0.79714 +0.796855 +0.796567 +0.796277 +0.795985 +0.79569 +0.795392 +0.795092 +0.794789 +0.794484 +0.794176 +0.793865 +0.793551 +0.793235 +0.792916 +0.792594 +0.79227 +0.791942 +0.791612 +0.791278 +0.790942 +0.790603 +0.79026 +0.789915 +0.789567 +0.789215 +0.788861 +0.788503 +0.788142 +0.787778 +0.78741 +0.787039 +0.786665 +0.786288 +0.785907 +0.785523 +0.785135 +0.784744 +0.784349 +0.783951 +0.783549 +0.783143 +0.782734 +0.782321 +0.781904 +0.781484 +0.781059 +0.780631 +0.780199 +0.779763 +0.779323 +0.778878 +0.77843 +0.777977 +0.777521 +0.77706 +0.776595 +0.776125 +0.775651 +0.775173 +0.77469 +0.774203 +0.773711 +0.773215 +0.772714 +0.772208 +0.771698 +0.771182 +0.770662 +0.770137 +0.769606 +0.769071 +0.768531 +0.767985 +0.767434 +0.766878 +0.766317 +0.76575 +0.765178 +0.7646 +0.764017 +0.763428 +0.762833 +0.762232 +0.761626 +0.761014 +0.760395 +0.759771 +0.75914 +0.758503 +0.75786 +0.75721 +0.756554 +0.755892 +0.755223 +0.754547 +0.753864 +0.753174 +0.752478 +0.751774 +0.751064 +0.750346 +0.74962 +0.748888 +0.748148 +0.7474 +0.746644 +0.745881 +0.74511 +0.74433 +0.743543 +0.742747 +0.741943 +0.741131 +0.74031 +0.73948 +0.738642 +0.737794 +0.736938 +0.736072 +0.735197 +0.734312 +0.733418 +0.732515 +0.731601 +0.730677 +0.729744 +0.7288 +0.727845 +0.72688 +0.725904 +0.724917 +0.72392 +0.722911 +0.72189 +0.720858 +0.719814 +0.718758 +0.71769 +0.839961 +0.839751 +0.83954 +0.839327 +0.839112 +0.838896 +0.838678 +0.838457 +0.838235 +0.838011 +0.837786 +0.837558 +0.837328 +0.837097 +0.836863 +0.836628 +0.83639 +0.83615 +0.835909 +0.835665 +0.83542 +0.835172 +0.834922 +0.83467 +0.834416 +0.834159 +0.833901 +0.83364 +0.833377 +0.833111 +0.832844 +0.832574 +0.832302 +0.832027 +0.83175 +0.831471 +0.83119 +0.830905 +0.830619 +0.83033 +0.830038 +0.829744 +0.829448 +0.829148 +0.828847 +0.828542 +0.828235 +0.827925 +0.827613 +0.827298 +0.82698 +0.826659 +0.826336 +0.826009 +0.82568 +0.825348 +0.825013 +0.824675 +0.824334 +0.82399 +0.823643 +0.823293 +0.82294 +0.822584 +0.822224 +0.821862 +0.821496 +0.821127 +0.820754 +0.820378 +0.819999 +0.819617 +0.819231 +0.818842 +0.818449 +0.818052 +0.817652 +0.817249 +0.816842 +0.816431 +0.816016 +0.815598 +0.815176 +0.81475 +0.81432 +0.813886 +0.813448 +0.813006 +0.812561 +0.812111 +0.811657 +0.811198 +0.810736 +0.810269 +0.809798 +0.809323 +0.808843 +0.808359 +0.807871 +0.807377 +0.80688 +0.806377 +0.80587 +0.805358 +0.804841 +0.80432 +0.803793 +0.803262 +0.802725 +0.802184 +0.801637 +0.801085 +0.800528 +0.799965 +0.799398 +0.798824 +0.798246 +0.797661 +0.797071 +0.796476 +0.795874 +0.795267 +0.794654 +0.794035 +0.79341 +0.792778 +0.792141 +0.791497 +0.790847 +0.790191 +0.789528 +0.788859 +0.788182 +0.7875 +0.78681 +0.786113 +0.78541 +0.784699 +0.783982 +0.783257 +0.782524 +0.781785 +0.781037 +0.780282 +0.77952 +0.778749 +0.777971 +0.777185 +0.77639 +0.775587 +0.774776 +0.773957 +0.773129 +0.772292 +0.771446 +0.770592 +0.769728 +0.768855 +0.767973 +0.767082 +0.766181 +0.76527 +0.76435 +0.763419 +0.762479 +0.761528 +0.760566 +0.759595 +0.758612 +0.757619 +0.756614 +0.755599 +0.754572 +0.753533 +0.752483 +0.751421 +0.750347 +0.749261 +0.748162 +0.747051 +6.48071 +6.4791 +6.47747 +6.47583 +6.47417 +6.4725 +6.47081 +6.46911 +6.4674 +6.46567 +6.46393 +6.46217 +6.4604 +6.45862 +6.45681 +6.455 +6.45316 +6.45132 +6.44945 +6.44757 +6.44568 +6.44376 +6.44184 +6.43989 +6.43793 +6.43595 +6.43396 +6.43194 +6.42991 +6.42787 +6.4258 +6.42372 +6.42162 +6.4195 +6.41737 +6.41521 +6.41304 +6.41085 +6.40864 +6.40641 +6.40416 +6.40189 +6.3996 +6.39729 +6.39496 +6.39261 +6.39025 +6.38786 +6.38544 +6.38301 +6.38056 +6.37809 +6.37559 +6.37307 +6.37053 +6.36797 +6.36538 +6.36278 +6.36015 +6.35749 +6.35482 +6.35211 +6.34939 +6.34664 +6.34387 +6.34107 +6.33825 +6.3354 +6.33253 +6.32963 +6.3267 +6.32375 +6.32077 +6.31777 +6.31474 +6.31168 +6.30859 +6.30548 +6.30234 +6.29917 +6.29597 +6.29274 +6.28948 +6.2862 +6.28288 +6.27953 +6.27616 +6.27275 +6.26931 +6.26584 +6.26233 +6.2588 +6.25523 +6.25163 +6.248 +6.24433 +6.24063 +6.23689 +6.23312 +6.22932 +6.22547 +6.2216 +6.21769 +6.21374 +6.20975 +6.20572 +6.20166 +6.19756 +6.19342 +6.18924 +6.18503 +6.18077 +6.17647 +6.17213 +6.16775 +6.16332 +6.15886 +6.15435 +6.1498 +6.1452 +6.14056 +6.13588 +6.13115 +6.12637 +6.12155 +6.11668 +6.11176 +6.10679 +6.10178 +6.09671 +6.0916 +6.08643 +6.08122 +6.07595 +6.07063 +6.06525 +6.05982 +6.05434 +6.0488 +6.04321 +6.03756 +6.03185 +6.02609 +6.02026 +6.01438 +6.00843 +6.00243 +5.99636 +5.99023 +5.98403 +5.97778 +5.97145 +5.96506 +5.95861 +5.95208 +5.94549 +5.93883 +5.93209 +5.92529 +5.91841 +5.91145 +5.90443 +5.89732 +5.89014 +5.88289 +5.87555 +5.86813 +5.86063 +5.85305 +5.84539 +5.83764 +5.8298 +5.82188 +5.81386 +5.80576 +5.79756 +5.78928 +5.78089 +5.77241 +5.76384 +8.05809 +8.03547 +8.0119 +7.98724 +7.96141 +7.93435 +7.906 +7.87626 +7.84507 +7.81234 +7.77796 +7.74184 +7.70386 +7.6639 +7.62183 +7.5775 +7.53074 +7.48138 +7.42923 +7.37406 +7.31563 +7.25367 +7.18787 +7.11788 +6.96416 +1.04674 +1.04409 +1.04099 +1.03774 +1.03434 +1.03077 +1.02703 +1.02311 +1.01898 +1.01465 +1.0101 +1.00531 +1.00026 +0.994945 +0.989339 +0.983421 +0.977167 +0.97055 +0.963543 +0.956111 +0.948217 +0.93982 +0.930872 +0.921318 +0.951525 +0.980274 +0.978078 +0.975211 +0.97221 +0.969067 +0.965776 +0.962326 +0.958708 +0.954914 +0.950932 +0.946749 +0.942355 +0.937735 +0.932874 +0.927755 +0.922361 +0.916673 +0.910667 +0.90432 +0.897606 +0.890492 +0.882947 +0.87493 +0.866397 +0.951371 +1.0301 +1.02804 +1.02502 +1.02187 +1.01857 +1.01511 +1.01148 +1.00768 +1.00369 +0.999502 +0.995106 +0.990487 +0.98563 +0.980521 +0.975141 +0.969472 +0.963493 +0.957182 +0.950512 +0.943457 +0.935985 +0.928059 +0.919641 +0.910685 +1.01922 +1.08667 +1.08475 +1.08157 +1.07824 +1.07476 +1.07111 +1.06728 +1.06327 +1.05906 +1.05464 +1.05001 +1.04513 +1.04001 +1.03462 +1.02894 +1.02296 +1.01665 +1.01 +1.00296 +0.995518 +0.987636 +0.979277 +0.9704 +0.960957 +1.06561 +0.855268 +0.908403 +0.964365 +1.02483 +1.09023 +1.12419 +1.12017 +1.11596 +1.11154 +1.10691 +1.10204 +1.09693 +1.09155 +1.08589 +1.07994 +1.07366 +1.06704 +1.06005 +1.05267 +1.04486 +1.03659 +1.02782 +1.01851 +1.0086 +1.08828 +0.153354 +0.182996 +0.217546 +0.257802 +0.305628 +0.358659 +0.413016 +0.472446 +0.539229 +0.614241 +0.698471 +0.79304 +0.899222 +1.01847 +1.12697 +1.12042 +1.11352 +1.10623 +1.09852 +1.09038 +1.08175 +1.0726 +1.06288 +1.05255 +1.09537 +1.50336e-29 +2.69381e-30 +2.46729e-30 +3.35566e-31 +2.28575e-30 +0.000419671 +0.00425079 +0.012855 +0.0273549 +0.0491283 +0.0798718 +0.121683 +0.177164 +0.249875 +0.343535 +0.446996 +0.567615 +0.711104 +0.88094 +1.08119 +1.12333 +1.11383 +1.10374 +1.09301 +1.09792 +2.76127e-30 +7.2469e-30 +4.3863e-30 +9.41916e-30 +1.21244e-29 +3.80243e-30 +2.86663e-31 +8.43599e-31 +3.4498e-30 +8.98395e-31 +3.14476e-30 +9.06582e-31 +2.68947e-30 +6.00355e-30 +0.000190539 +0.00961903 +0.0364878 +0.0863518 +0.166508 +0.288464 +0.445776 +0.641151 +0.887347 +1.13042 +1.1081 +2.76127e-30 +1.4992e-30 +1.75452e-29 +1.6686e-29 +1.05592e-30 +3.80243e-30 +3.6123e-30 +8.43599e-31 +4.36326e-31 +1.94952e-30 +9.47149e-31 +2.39929e-30 +6.72368e-31 +0 +2.67045e-30 +7.76223e-31 +1.70166e-31 +7.28566e-31 +2.83553e-30 +6.27141e-31 +0.0102966 +0.0608818 +0.169538 +0.357702 +0.604626 +4.9314e-30 +1.24443e-30 +4.3863e-30 +9.34312e-30 +4.00751e-30 +1.00189e-30 +1.79585e-29 +6.17871e-32 +8.03593e-31 +2.47807e-31 +3.97745e-31 +9.96966e-31 +0 +2.58413e-30 +2.67045e-30 +1.0309e-29 +2.49351e-30 +2.41901e-30 +5.48259e-31 +6.27141e-31 +5.33222e-30 +1.11954e-30 +2.6327e-30 +0.00112813 +0.0530714 +2.78374e-30 +7.2469e-30 +0 +9.34312e-30 +1.05592e-30 +0 +8.86837e-31 +9.05386e-31 +3.21437e-30 +7.6663e-31 +2.14611e-31 +7.01163e-31 +0 +6.46031e-31 +0 +1.75881e-31 +7.51001e-31 +1.65083e-31 +2.19304e-30 +2.29743e-30 +5.33222e-30 +2.06189e-30 +5.96533e-31 +1.09693e-30 +5.90333e-31 +2.76127e-30 +2.89876e-31 +4.3863e-30 +2.33578e-30 +7.20602e-32 +2.16878e-30 +8.04649e-30 +1.35594e-29 +8.03593e-31 +8.2278e-31 +2.36787e-31 +3.8071e-31 +8.2365e-30 +5.81428e-30 +0 +0 +7.51001e-31 +1.65083e-31 +5.48259e-31 +8.71935e-30 +2.25043e-30 +2.66597e-30 +0 +6.91306e-30 +2.60534e-30 +4.90893e-30 +1.1595e-30 +1.75452e-29 +1.03812e-30 +1.20523e-29 +2.33379e-31 +2.24307e-29 +9.05386e-31 +1.80809e-30 +6.95582e-30 +4.79298e-30 +7.52518e-31 +0 +3.50775e-31 +5.7807e-30 +6.00342e-31 +7.51001e-31 +1.43292e-30 +4.93433e-30 +1.3379e-29 +1.13852e-30 +0 +5.09041e-31 +8.08102e-30 +2.015e-30 +5.18505e-29 +1.18073e-30 +4.3863e-30 +4.1525e-30 +6.14914e-32 +3.80243e-30 +4.81525e-31 +2.109e-31 +2.00898e-31 +2.47807e-31 +3.14476e-30 +7.52518e-31 +2.68947e-30 +1.64284e-30 +1.58186e-30 +7.76223e-31 +0 +1.22381e-30 +7.08882e-31 +1.3379e-29 +5.33222e-30 +6.66491e-31 +5.09041e-31 +5.91871e-31 +2.015e-30 +4.79387e-29 +1.05205e-29 +1.11665e-30 +4.1525e-30 +1.8015e-32 +1.50901e-29 +2.86209e-30 +5.2725e-32 +2.00898e-31 +1.78107e-30 +2.36787e-31 +6.31047e-30 +2.68947e-30 +2.58413e-30 +1.55513e-31 +5.57896e-30 +5.80835e-31 +1.22381e-30 +5.09495e-30 +2.29743e-30 +1.53578e-31 +2.21291e-30 +5.09041e-31 +1.26266e-31 +1.47583e-31 +6.90318e-31 +1.83296e-30 +4.40637e-30 +1.09842e-29 +2.2317e-30 +3.75116e-30 +1.80234e-29 +7.60784e-30 +4.06819e-30 +3.12267e-30 +2.2434e-30 +1.57762e-30 +1.51283e-30 +1.45357e-30 +4.55604e-32 +1.50085e-31 +7.11523e-30 +2.41901e-30 +5.09495e-30 +6.27141e-31 +6.7779e-31 +2.79886e-31 +4.58137e-30 +6.53031e-31 +2.16259e-30 +1.92317e-30 +4.64332e-30 +6.85359e-30 +4.17151e-30 +1.20703e-29 +0 +2.37948e-31 +8.59046e-31 +9.84402e-30 +4.3123e-31 +2.2434e-30 +3.54964e-30 +2.68947e-30 +7.91389e-30 +6.67612e-31 +6.00342e-31 +5.80835e-31 +6.04754e-31 +9.0966e-31 +6.91946e-31 +2.84631e-31 +2.79886e-31 +6.23576e-30 +3.15665e-30 +2.015e-30 +1.9111e-30 +1.38994e-29 +1.66493e-30 +1.83343e-32 +1.50818e-29 +1.41914e-29 +4.22344e-30 +8.31854e-30 +1.66837e-30 +8.5872e-30 +1.77443e-31 +6.25455e-31 +3.70081e-30 +6.87461e-30 +1.33122e-29 +1.13822e-30 +3.00766e-32 +4.58419e-31 +2.7804e-31 +0 +9.00063e-31 +3.83615e-31 +8.2936e-31 +4.58925e-31 +5.58146e-30 +3.99759e-29 +2.4276e-29 +4.26223e-30 +2.38148e-29 +2.12276e-30 +7.98977e-30 +5.21412e-32 +1.96548e-31 +1.66837e-30 +0 +1.77443e-31 +1.13087e-29 +0 +3.15671e-31 +1.2371e-30 +1.54925e-30 +2.7069e-31 +2.86512e-30 +1.41369e-31 +3.79182e-30 +1.29306e-31 +0 +9.21512e-32 +4.58925e-31 +1.00362e-31 +1.81584e-29 +7.61095e-32 +4.21111e-31 +5.06907e-30 +2.12276e-30 +4.98347e-31 +6.42548e-31 +4.56628e-31 +0 +4.44988e-31 +6.73444e-31 +3.63271e-31 +2.36852e-30 +3.25947e-31 +2.73472e-30 +3.16173e-30 +7.51915e-31 +2.57861e-31 +1.41369e-31 +1.22435e-31 +4.29327e-31 +9.59037e-32 +8.2936e-31 +1.52374e-30 +0 +2.44237e-32 +2.55815e-30 +7.34723e-30 +2.50324e-29 +4.76651e-30 +1.79445e-29 +4.70956e-30 +1.10558e-31 +4.63436e-32 +1.09367e-30 +5.96412e-30 +1.56364e-31 +1.00755e-29 +1.40298e-29 +2.70547e-30 +8.09402e-30 +0 +2.91436e-31 +2.46008e-31 +3.76121e-30 +6.25043e-31 +9.59037e-32 +2.34338e-31 +1.087e-30 +1.37027e-30 +1.37719e-29 +6.38239e-31 +1.49844e-29 +1.60253e-29 +3.38952e-29 +1.12534e-30 +6.3129e-30 +1.14157e-31 +1.66837e-30 +2.17243e-30 +1.65334e-31 +8.79546e-32 +2.99766e-30 +3.25947e-31 +1.13903e-29 +2.57026e-30 +3.63927e-30 +2.32914e-30 +1.74939e-30 +3.06088e-32 +2.25016e-31 +0 +1.15585e-30 +7.98613e-31 +1.39537e-30 +4.73624e-31 +3.99029e-30 +1.05278e-31 +7.71202e-31 +1.47115e-30 +2.33946e-30 +2.03772e-30 +1.14157e-31 +2.96599e-30 +3.96097e-30 +1.65334e-31 +9.80137e-31 +1.8134e-30 +2.21785e-31 +4.17437e-31 +9.19803e-32 +6.76724e-30 +1.4123e-30 +2.73342e-32 +2.42728e-31 +3.23265e-32 +2.39759e-32 +3.68605e-31 +5.54592e-31 +1.39537e-30 +1.18406e-31 +6.40142e-30 +1.60012e-29 +3.52019e-32 +3.67786e-31 +2.34048e-30 +9.50273e-30 +1.25791e-29 +1.80769e-29 +7.03154e-31 +2.02534e-30 +2.86311e-33 +6.01614e-30 +2.38983e-30 +1.33122e-31 +6.49513e-31 +2.43621e-30 +5.61773e-30 +3.34844e-31 +3.37717e-32 +1.07332e-31 +1.53446e-30 +2.82213e-31 +2.21837e-32 +6.27262e-33 +2.5531e-30 +2.49393e-31 +2.12789e-29 +3.75878e-30 +6.21559e-31 +3.76976e-30 +1.13442e-29 +2.32448e-29 +7.53374e-30 +8.57459e-30 +1.15966e-29 +4.73e-30 +8.74838e-30 +2.10667e-30 +1.87203e-30 +2.29951e-32 +3.97763e-30 +1.45922e-30 +7.1845e-31 +4.76028e-30 +1.26571e-31 +9.59037e-32 +0 +2.7175e-31 +1.37184e-30 +1.9343e-29 +8.11563e-35 +0 +0 +0 +0 +1.33484e-29 +0 +0 +2.00257e-34 +0 +0 +0 +0 +8.51982e-30 +8.0946e-30 +0 +5.24619e-34 +5.00504e-34 +6.6866e-30 +0 +0 +1.47442e-30 +1.41976e-30 +1.56816e-33 +6.33883e-30 +3.37049e-34 +1.8212e-30 +6.90278e-31 +9.24419e-30 +2.2712e-30 +2.1456e-32 +4.81172e-30 +3.44842e-30 +5.50974e-30 +1.51264e-29 +1.38874e-30 +2.32135e-30 +5.94155e-32 +5.80313e-31 +1.14623e-30 +1.99153e-30 +1.05099e-30 +3.86457e-30 +2.1258e-30 +3.01613e-31 +6.37215e-32 +3.74046e-31 +2.09546e-30 +1.61542e-30 +1.25211e-30 +9.73783e-30 +3.27957e-29 +2.00352e-31 +9.24419e-30 +8.18697e-31 +1.97738e-30 +5.49563e-31 +1.22911e-32 +2.91174e-33 +4.20472e-30 +1.5182e-30 +9.98161e-31 +5.94155e-30 +2.04016e-30 +1.04877e-30 +7.96854e-30 +4.20397e-30 +6.41995e-30 +7.36979e-31 +3.1286e-30 +1.75739e-30 +2.40054e-30 +1.61687e-31 +1.61542e-30 +9.46911e-30 +4.60184e-33 +1.40774e-29 +5.89544e-30 +2.21768e-30 +4.71915e-30 +3.47319e-31 +9.46694e-30 +9.63622e-30 +5.13972e-30 +3.59291e-30 +1.78596e-30 +6.74757e-30 +3.42233e-31 +4.38862e-30 +4.48004e-32 +6.93298e-31 +5.17922e-31 +1.22139e-31 +2.9393e-30 +2.55226e-31 +3.31877e-30 +2.39389e-31 +3.13026e-30 +1.61542e-30 +7.06271e-30 +9.73749e-30 +3.39696e-30 +1.02068e-29 +3.46513e-30 +1.45783e-30 +6.76883e-31 +3.32413e-30 +1.68265e-29 +1.26869e-29 +6.93492e-30 +6.99355e-31 +3.99264e-30 +2.13896e-30 +3.26426e-31 +1.24737e-30 +7.20142e-32 +2.07169e-30 +1.31085e-31 +2.9393e-32 +4.62044e-31 +1.75538e-30 +3.21845e-30 +2.58699e-32 +0 +7.04314e-31 +1.88491e-29 +1.08372e-29 +1.5694e-29 +2.10879e-29 +1.68075e-29 +3.51937e-30 +8.13078e-30 +4.91644e-30 +1.04823e-29 +2.84156e-30 +1.67921e-31 +3.99264e-32 +4.60113e-30 +1.3057e-30 +8.76383e-31 +8.38654e-31 +5.17922e-31 +2.8376e-31 +1.52017e-31 +1.02091e-30 +3.35091e-30 +1.06395e-31 +2.32829e-31 +1.61542e-30 +2.81726e-30 +1.0608e-29 +1.76293e-31 +6.53235e-32 +8.87523e-30 +2.0974e-30 +1.40976e-29 +4.22232e-30 +3.14652e-30 +4.65878e-30 +7.07152e-31 +3.77821e-31 +6.74757e-30 +3.80259e-32 +4.25034e-32 +5.54388e-31 +2.72462e-30 +3.72516e-32 +4.88558e-31 +5.04734e-31 +1.84817e-30 +1.09711e-31 +4.56751e-31 +4.13919e-31 +0 +6.33883e-30 +1.18346e-30 +7.44032e-32 +1.06431e-30 +2.23573e-30 +5.81428e-30 +1.38928e-30 +6.29991e-30 +1.25861e-29 +1.69081e-30 +1.13144e-29 +2.17116e-31 +2.55529e-30 +5.47573e-30 +3.66946e-30 +6.83186e-30 +1.07819e-29 +1.27525e-29 +1.09926e-30 +1.88116e-30 +1.05414e-30 +4.70988e-31 +3.11705e-32 +1.0348e-31 +6.46168e-30 +9.81012e-31 +5.79014e-32 +9.24951e-30 +2.07141e-29 +1.77215e-29 +2.29269e-30 +5.70934e-32 +2.68638e-30 +1.43836e-30 +2.43752e-30 +0 +6.82557e-30 +7.49512e-30 +3.23478e-30 +0 +2.96417e-30 +1.06462e-30 +5.47047e-30 +0 +8.50941e-30 +4.4094e-31 +9.0712e-31 +5.13601e-31 +1.15174e-31 +1.564e-30 +2.45253e-31 +2.48569e-31 +7.88124e-30 +5.17853e-30 +9.62819e-30 +1.99672e-31 +1.89564e-31 +2.69867e-30 +1.95776e-30 +2.53794e-30 +0 +1.39089e-31 +0 +1.03968e-29 +7.87234e-30 +3.47363e-32 +4.91809e-31 +1.03132e-30 +2.69527e-30 +1.23111e-31 +5.31214e-31 +1.73077e-30 +2.15681e-31 +3.65331e-30 +1.564e-30 +4.96637e-30 +2.10142e-30 +1.40111e-29 +2.9889e-29 +1.24062e-30 +4.65115e-30 +2.82604e-30 +4.24665e-30 +1.93379e-29 +2.21162e-29 +1.45446e-31 +5.00722e-30 +5.32986e-31 +2.04628e-30 +1.59042e-31 +2.96417e-30 +1.83298e-30 +5.73968e-31 +0 +1.43793e-30 +1.47905e-29 +3.7466e-30 +3.97226e-31 +0 +0 +1.53283e-30 +1.48228e-29 +1.77328e-29 +1.51715e-32 +2.83103e-29 +2.97673e-30 +3.46707e-29 +8.6835e-31 +1.43836e-30 +6.54011e-31 +1.88057e-31 +5.56358e-31 +5.72023e-31 +1.05092e-29 +1.59042e-31 +6.13212e-31 +5.61352e-30 +3.99523e-30 +2.69527e-30 +2.74947e-30 +2.23078e-31 +6.56875e-30 +0 +1.5725e-30 +2.02221e-30 +2.96756e-29 +9.26423e-31 +8.75693e-31 +8.28565e-31 +4.26123e-31 +2.97673e-30 +2.13719e-29 +1.70784e-30 +2.55708e-30 +1.96977e-31 +1.35163e-30 +2.22543e-30 +1.23826e-30 +1.85664e-29 +1.50278e-29 +2.03601e-30 +4.58246e-31 +1.77566e-30 +0 +0 +4.81463e-31 +1.18115e-31 +0 +3.99883e-30 +2.02221e-30 +2.96756e-29 +2.08445e-30 +7.94538e-30 +1.68391e-29 +3.19669e-30 +4.76277e-29 +6.41033e-30 +2.68638e-30 +6.39269e-31 +0 +9.30855e-30 +7.19353e-31 +8.52778e-30 +1.27892e-29 +1.78569e-29 +1.89707e-30 +4.12422e-30 +1.90571e-30 +5.57583e-31 +1.68087e-30 +1.03916e-29 +1.45139e-29 +1.5889e-30 +2.0332e-30 +0 +3.92405e-30 +5.79014e-30 +2.03445e-30 +3.557e-30 +3.85128e-29 +4.65115e-30 +2.13719e-29 +1.69866e-29 +0 +9.7947e-30 +5.81784e-31 +1.62995e-31 +4.79688e-30 +2.19615e-30 +4.57234e-30 +7.72721e-30 +0 +0 +1.85131e-30 +4.20218e-31 +4.10848e-31 +1.61266e-30 +0 +8.53821e-31 +1.564e-30 +3.53164e-29 +9.94276e-31 +8.75693e-31 +8.28565e-31 +1.7658e-30 +3.65195e-29 +1.76627e-31 +1.67899e-29 +4.18272e-30 +5.66294e-30 +5.81784e-31 +2.38843e-30 +2.13195e-30 +2.64577e-30 +2.11223e-30 +7.72721e-30 +1.96724e-30 +5.73968e-31 +1.72497e-30 +1.09979e-29 +2.12486e-30 +8.75623e-31 +6.35562e-30 +2.0332e-30 +1.564e-30 +3.92405e-30 +1.48906e-29 +7.88124e-30 +7.51777e-30 +1.82328e-30 +1.86046e-31 +1.76627e-29 +7.20783e-31 +1.38841e-30 +5.66294e-30 +1.45446e-29 +7.19353e-31 +5.32986e-31 +5.1157e-31 +4.42819e-30 +2.03601e-30 +1.15904e-29 +1.16181e-29 +1.07811e-29 +3.78196e-30 +2.12486e-30 +2.293e-30 +6.35562e-30 +0 +4.58204e-31 +3.92405e-30 +3.77355e-30 +8.75693e-31 +8.28565e-31 +9.6713e-30 +3.19476e-30 +8.70648e-30 +1.07455e-29 +1.6169e-29 +1.5413e-29 +5.81784e-31 +7.19353e-31 +2.13195e-30 +2.19615e-30 +0 +2.03601e-30 +4.58246e-31 +2.29587e-30 +9.36605e-31 +4.92443e-31 +4.10848e-31 +0.00123779 +0.0189615 +0.0640187 +0.146973 +7.77103e-31 +7.85716e-31 +6.90246e-31 +4.11857e-30 +1.0023e-29 +4.20608e-29 +3.52626e-29 +8.34175e-30 +0 +6.07057e-31 +4.46386e-31 +1.06246e-29 +1.98548e-29 +0.000377762 +0.00521932 +0.0168287 +0.0370337 +0.0681449 +0.113096 +0.175633 +0.261256 +0.371897 +0.500371 +0.655847 +0.832421 +0.00349171 +0.0073881 +0.0131212 +0.0210298 +0.0315137 +0.0450459 +0.0621866 +0.0836018 +0.110085 +0.142585 +0.182238 +0.230415 +0.28945 +0.355224 +0.419039 +0.489977 +0.570802 +0.66281 +0.767483 +0.886525 +1.0219 +1.1135 +1.10544 +1.09691 +1.09453 +0.404678 +0.437508 +0.472727 +0.511063 +0.552818 +0.598329 +0.647968 +0.702148 +0.761333 +0.826036 +0.896832 +0.974365 +1.05936 +1.1133 +1.10824 +1.10292 +1.09733 +1.09144 +1.08523 +1.07869 +1.07179 +1.0645 +1.05679 +1.04864 +1.08843 +1.1074 +1.1053 +1.10254 +1.09966 +1.09664 +1.09348 +1.09018 +1.08672 +1.0831 +1.07931 +1.07533 +1.07115 +1.06678 +1.06218 +1.05735 +1.05227 +1.04693 +1.04131 +1.03539 +1.02915 +1.02257 +1.01561 +1.00825 +1.00047 +1.07917 +1.05406 +1.05197 +1.04934 +1.0466 +1.04373 +1.04072 +1.03758 +1.03429 +1.03084 +1.02723 +1.02344 +1.01947 +1.0153 +1.01093 +1.00633 +1.0015 +0.996415 +0.991066 +0.98543 +0.979488 +0.973218 +0.966596 +0.959593 +0.952179 +1.05645 +1.00027 +0.998221 +0.99573 +0.993125 +0.9904 +0.98755 +0.984566 +0.981442 +0.97817 +0.974742 +0.971148 +0.967378 +0.963423 +0.95927 +0.954907 +0.950321 +0.945497 +0.940419 +0.93507 +0.92943 +0.923479 +0.917192 +0.910543 +0.903505 +1.01713 +0.945732 +0.943732 +0.941376 +0.938913 +0.936337 +0.933642 +0.930821 +0.927867 +0.924773 +0.921531 +0.918133 +0.914568 +0.910828 +0.906901 +0.902775 +0.898438 +0.893876 +0.889074 +0.884015 +0.87868 +0.873051 +0.867104 +0.860814 +0.854154 +0.962141 +0.890132 +0.888198 +0.885981 +0.883662 +0.881238 +0.8787 +0.876045 +0.873265 +0.870352 +0.867301 +0.864101 +0.860746 +0.857224 +0.853527 +0.849643 +0.84556 +0.841264 +0.836742 +0.831978 +0.826955 +0.821652 +0.816051 +0.810126 +0.803851 +0.894558 +0.833388 +0.831535 +0.829459 +0.827288 +0.825017 +0.822641 +0.820155 +0.817551 +0.814824 +0.811966 +0.80897 +0.805827 +0.802529 +0.799066 +0.795428 +0.791603 +0.787579 +0.783343 +0.778879 +0.774171 +0.769202 +0.76395 +0.758394 +0.752509 +0.818568 +0.776527 +0.774764 +0.772829 +0.770806 +0.76869 +0.766476 +0.764159 +0.761732 +0.75919 +0.756527 +0.753734 +0.750804 +0.74773 +0.744502 +0.741109 +0.737542 +0.733789 +0.729838 +0.725673 +0.721279 +0.716639 +0.711734 +0.706542 +0.701038 +0.739564 +0.726747 +0.725067 +0.723256 +0.721363 +0.719383 +0.717311 +0.715142 +0.712871 +0.710492 +0.707999 +0.705384 +0.702642 +0.699762 +0.696738 +0.69356 +0.690217 +0.686698 +0.68299 +0.67908 +0.674952 +0.670588 +0.665969 +0.66107 +0.655865 +0.668253 +0.760284 +0.758434 +0.756471 +0.754414 +0.752259 +0.749999 +0.747629 +0.745141 +0.742529 +0.739785 +0.7369 +0.733865 +0.73067 +0.727305 +0.723758 +0.720015 +0.716062 +0.711886 +0.707467 +0.702789 +0.697832 +0.692573 +0.686991 +0.681061 +0.671203 +5.76919 +5.75537 +5.74098 +5.72594 +5.71021 +5.69374 +5.67651 +5.65846 +5.63956 +5.61976 +5.59899 +5.57721 +5.55434 +5.53034 +5.50512 +5.47861 +5.45072 +5.42135 +5.39042 +5.3578 +5.32338 +5.28702 +5.24857 +5.20787 +5.13021 +) +; boundaryField { @@ -33,12 +12262,493 @@ boundaryField upperWall { type kqRWallFunction; - value uniform 0.375; + value nonuniform List<scalar> +223 +( +6.68646 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48152 +6.48071 +6.4791 +6.47747 +6.47583 +6.47417 +6.4725 +6.47081 +6.46911 +6.4674 +6.46567 +6.46393 +6.46217 +6.4604 +6.45862 +6.45681 +6.455 +6.45316 +6.45132 +6.44945 +6.44757 +6.44568 +6.44376 +6.44184 +6.43989 +6.43793 +6.43595 +6.43396 +6.43194 +6.42991 +6.42787 +6.4258 +6.42372 +6.42162 +6.4195 +6.41737 +6.41521 +6.41304 +6.41085 +6.40864 +6.40641 +6.40416 +6.40189 +6.3996 +6.39729 +6.39496 +6.39261 +6.39025 +6.38786 +6.38544 +6.38301 +6.38056 +6.37809 +6.37559 +6.37307 +6.37053 +6.36797 +6.36538 +6.36278 +6.36015 +6.35749 +6.35482 +6.35211 +6.34939 +6.34664 +6.34387 +6.34107 +6.33825 +6.3354 +6.33253 +6.32963 +6.3267 +6.32375 +6.32077 +6.31777 +6.31474 +6.31168 +6.30859 +6.30548 +6.30234 +6.29917 +6.29597 +6.29274 +6.28948 +6.2862 +6.28288 +6.27953 +6.27616 +6.27275 +6.26931 +6.26584 +6.26233 +6.2588 +6.25523 +6.25163 +6.248 +6.24433 +6.24063 +6.23689 +6.23312 +6.22932 +6.22547 +6.2216 +6.21769 +6.21374 +6.20975 +6.20572 +6.20166 +6.19756 +6.19342 +6.18924 +6.18503 +6.18077 +6.17647 +6.17213 +6.16775 +6.16332 +6.15886 +6.15435 +6.1498 +6.1452 +6.14056 +6.13588 +6.13115 +6.12637 +6.12155 +6.11668 +6.11176 +6.10679 +6.10178 +6.09671 +6.0916 +6.08643 +6.08122 +6.07595 +6.07063 +6.06525 +6.05982 +6.05434 +6.0488 +6.04321 +6.03756 +6.03185 +6.02609 +6.02026 +6.01438 +6.00843 +6.00243 +5.99636 +5.99023 +5.98403 +5.97778 +5.97145 +5.96506 +5.95861 +5.95208 +5.94549 +5.93883 +5.93209 +5.92529 +5.91841 +5.91145 +5.90443 +5.89732 +5.89014 +5.88289 +5.87555 +5.86813 +5.86063 +5.85305 +5.84539 +5.83764 +5.8298 +5.82188 +5.81386 +5.80576 +5.79756 +5.78928 +5.78089 +5.77241 +5.76384 +5.76919 +5.75537 +5.74098 +5.72594 +5.71021 +5.69374 +5.67651 +5.65846 +5.63956 +5.61976 +5.59899 +5.57721 +5.55434 +5.53034 +5.50512 +5.47861 +5.45072 +5.42135 +5.39042 +5.3578 +5.32338 +5.28702 +5.24857 +5.20787 +5.13021 +) +; } lowerWall { type kqRWallFunction; - value uniform 0.375; + value nonuniform List<scalar> +250 +( +5.98297 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86414 +5.86798 +9.09688 +9.09572 +9.09445 +9.09307 +9.09157 +9.08993 +9.08816 +9.08624 +9.08574 +9.90703 +9.10222 +9.10222 +9.10222 +9.10223 +9.10223 +9.10224 +9.10225 +9.10226 +9.10227 +9.10228 +9.1023 +9.10231 +9.10233 +9.10235 +9.10236 +9.10238 +9.10241 +9.90703 +7.68929 +8.17517 +8.48587 +8.48478 +8.48367 +8.48255 +8.48143 +8.48029 +8.47915 +8.478 +8.47684 +8.47566 +8.47448 +8.47329 +8.47209 +8.47088 +8.46966 +8.46843 +8.46719 +8.46594 +8.46468 +8.46341 +8.46213 +8.46084 +8.45954 +8.45823 +8.4569 +8.45557 +8.45422 +8.45287 +8.4515 +8.45012 +8.44873 +8.44733 +8.44592 +8.4445 +8.44306 +8.44162 +8.44016 +8.43868 +8.4372 +8.43571 +8.4342 +8.43268 +8.43115 +8.4296 +8.42804 +8.42647 +8.42489 +8.42329 +8.42168 +8.42006 +8.41842 +8.41677 +8.41511 +8.41343 +8.41174 +8.41003 +8.40831 +8.40658 +8.40483 +8.40307 +8.40129 +8.3995 +8.39769 +8.39587 +8.39403 +8.39218 +8.39031 +8.38843 +8.38653 +8.38461 +8.38268 +8.38073 +8.37877 +8.37679 +8.37479 +8.37278 +8.37075 +8.3687 +8.36664 +8.36456 +8.36246 +8.36034 +8.3582 +8.35605 +8.35388 +8.35169 +8.34948 +8.34726 +8.34501 +8.34275 +8.34046 +8.33816 +8.33584 +8.3335 +8.33114 +8.32875 +8.32635 +8.32393 +8.32149 +8.31902 +8.31654 +8.31403 +8.31151 +8.30896 +8.30639 +8.30379 +8.30118 +8.29854 +8.29588 +8.2932 +8.29049 +8.28776 +8.28501 +8.28223 +8.27943 +8.27661 +8.27376 +8.27088 +8.26799 +8.26506 +8.26211 +8.25914 +8.25614 +8.25311 +8.25006 +8.24698 +8.24387 +8.24074 +8.23758 +8.23439 +8.23117 +8.22793 +8.22466 +8.22136 +8.21802 +8.21466 +8.21128 +8.20786 +8.20441 +8.20093 +8.19741 +8.19387 +8.1903 +8.18669 +8.18306 +8.17939 +8.17568 +8.17195 +8.16818 +8.16438 +8.16054 +8.15667 +8.15276 +8.14882 +8.14485 +8.14084 +8.13679 +8.1327 +8.12858 +8.12442 +8.12022 +8.11599 +8.11172 +8.1074 +8.10305 +8.09866 +8.09423 +8.08976 +8.08524 +8.08069 +8.07609 +8.07145 +8.06677 +8.06204 +8.05728 +8.05246 +8.04761 +8.05809 +8.03547 +8.0119 +7.98724 +7.96141 +7.93435 +7.906 +7.87626 +7.84507 +7.81234 +7.77796 +7.74184 +7.70386 +7.6639 +7.62183 +7.5775 +7.53074 +7.48138 +7.42923 +7.37406 +7.31563 +7.25367 +7.18787 +7.11788 +6.96416 +) +; } frontAndBack { diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/0/nuTilda b/tutorials/incompressible/simpleFoam/pitzDaily/0/nuTilda index be7ac0223a2e57d8151e9e89bff3773340dc5a5a..e116c8515b3fda310592397f29705ea6ba4b0eb4 100644 --- a/tutorials/incompressible/simpleFoam/pitzDaily/0/nuTilda +++ b/tutorials/incompressible/simpleFoam/pitzDaily/0/nuTilda @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,41 +10,12268 @@ FoamFile version 2.0; format ascii; class volScalarField; + location "0"; object nuTilda; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 2 -1 0 0 0 0]; -internalField uniform 0; +internalField nonuniform List<scalar> +12225 +( +8.6071e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.5212e-05 +8.52399e-05 +0.000128466 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.50795e-05 +9.61806e-05 +0.000267359 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000162603 +0.000164969 +0.000450704 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000247055 +0.000249266 +0.000663247 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000345956 +0.000347899 +0.000887272 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000459888 +0.000461585 +0.00110081 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000593431 +0.000594918 +0.00124802 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.000716859 +0.00071822 +0.00133223 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000833363 +0.000834646 +0.00136689 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000978336 +0.000979537 +0.0013417 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.0011509 +0.00115203 +0.000824859 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.00081561 +0.000817369 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +9.98102e-05 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +7.89587e-18 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00052545 +0.00121104 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.00104324 +0.0013678 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940151 +0.000940152 +0.00125408 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.000723913 +0.00101747 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.000538246 +0.00072704 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000380067 +0.000442461 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000247463 +0.000211043 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000143208 +0.000129393 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000127395 +0.000186727 +0.000352637 +0.000363446 +0.000370122 +0.00036993 +0.000369737 +0.000369542 +0.000369346 +0.000369149 +0.00036895 +0.000368749 +0.000368547 +0.000368343 +0.000368138 +0.000367931 +0.000367723 +0.000367513 +0.000367301 +0.000367088 +0.000366873 +0.000366656 +0.000366438 +0.000366218 +0.000365997 +0.000365773 +0.000365548 +0.000365321 +0.000365093 +0.000364863 +0.00036463 +0.000364397 +0.000364161 +0.000363924 +0.000363684 +0.000363443 +0.0003632 +0.000362955 +0.000362709 +0.00036246 +0.000362209 +0.000361957 +0.000361703 +0.000361446 +0.000361188 +0.000360927 +0.000360665 +0.000360401 +0.000360134 +0.000359866 +0.000359596 +0.000359323 +0.000359048 +0.000358772 +0.000358493 +0.000358212 +0.000357929 +0.000357643 +0.000357356 +0.000357066 +0.000356774 +0.00035648 +0.000356183 +0.000355885 +0.000355584 +0.00035528 +0.000354975 +0.000354667 +0.000354356 +0.000354044 +0.000353728 +0.000353411 +0.000353091 +0.000352768 +0.000352443 +0.000352116 +0.000351786 +0.000351454 +0.000351119 +0.000350781 +0.000350441 +0.000350098 +0.000349753 +0.000349405 +0.000349054 +0.000348701 +0.000348345 +0.000347986 +0.000347625 +0.000347261 +0.000346894 +0.000346524 +0.000346151 +0.000345776 +0.000345397 +0.000345016 +0.000344632 +0.000344245 +0.000343854 +0.000343461 +0.000343065 +0.000342666 +0.000342264 +0.000341859 +0.000341451 +0.000341039 +0.000340625 +0.000340207 +0.000339786 +0.000339362 +0.000338935 +0.000338504 +0.000338071 +0.000337633 +0.000337193 +0.000336749 +0.000336302 +0.000335851 +0.000335397 +0.00033494 +0.000334479 +0.000334015 +0.000333547 +0.000333075 +0.0003326 +0.000332121 +0.000331639 +0.000331153 +0.000330663 +0.00033017 +0.000329673 +0.000329172 +0.000328667 +0.000328158 +0.000327646 +0.00032713 +0.000326609 +0.000326085 +0.000325557 +0.000325025 +0.000324489 +0.000323949 +0.000323404 +0.000322856 +0.000322303 +0.000321747 +0.000321186 +0.000320621 +0.000320051 +0.000319477 +0.000318899 +0.000318317 +0.00031773 +0.000317139 +0.000316543 +0.000315943 +0.000315338 +0.000314729 +0.000314115 +0.000313497 +0.000312874 +0.000312246 +0.000311613 +0.000310976 +0.000310334 +0.000309687 +0.000309035 +0.000308379 +0.000307717 +0.00030705 +0.000306379 +0.000305702 +0.000305021 +0.000304334 +0.000303642 +0.000302945 +0.000302243 +0.000301535 +0.000300822 +0.000300104 +0.00029938 +0.000178982 +0.00019322 +0.000301822 +0.000322411 +0.000353126 +0.000396413 +0.000396205 +0.000395995 +0.000395783 +0.000395569 +0.000395354 +0.000395138 +0.000394919 +0.000394699 +0.000394477 +0.000394254 +0.000394029 +0.000393802 +0.000393573 +0.000393343 +0.00039311 +0.000392876 +0.000392641 +0.000392403 +0.000392164 +0.000391922 +0.000391679 +0.000391434 +0.000391187 +0.000390938 +0.000390688 +0.000390435 +0.00039018 +0.000389924 +0.000389665 +0.000389405 +0.000389142 +0.000388878 +0.000388611 +0.000388343 +0.000388072 +0.000387799 +0.000387524 +0.000387247 +0.000386968 +0.000386687 +0.000386404 +0.000386118 +0.00038583 +0.00038554 +0.000385248 +0.000384954 +0.000384657 +0.000384358 +0.000384057 +0.000383753 +0.000383447 +0.000383139 +0.000382828 +0.000382515 +0.0003822 +0.000381882 +0.000381562 +0.000381239 +0.000380914 +0.000380586 +0.000380256 +0.000379923 +0.000379588 +0.00037925 +0.000378909 +0.000378566 +0.000378221 +0.000377872 +0.000377521 +0.000377167 +0.000376811 +0.000376452 +0.00037609 +0.000375725 +0.000375358 +0.000374988 +0.000374615 +0.000374239 +0.00037386 +0.000373478 +0.000373093 +0.000372706 +0.000372315 +0.000371922 +0.000371525 +0.000371126 +0.000370723 +0.000370317 +0.000369909 +0.000369497 +0.000369082 +0.000368663 +0.000368242 +0.000367817 +0.00036739 +0.000366958 +0.000366524 +0.000366086 +0.000365645 +0.000365201 +0.000364753 +0.000364302 +0.000363847 +0.000363389 +0.000362927 +0.000362462 +0.000361994 +0.000361521 +0.000361045 +0.000360566 +0.000360083 +0.000359596 +0.000359106 +0.000358612 +0.000358114 +0.000357612 +0.000357106 +0.000356597 +0.000356084 +0.000355566 +0.000355045 +0.00035452 +0.000353991 +0.000353458 +0.000352921 +0.00035238 +0.000351835 +0.000351285 +0.000350732 +0.000350174 +0.000349612 +0.000349046 +0.000348475 +0.000347901 +0.000347321 +0.000346738 +0.00034615 +0.000345557 +0.000344961 +0.000344359 +0.000343753 +0.000343143 +0.000342528 +0.000341908 +0.000341283 +0.000340654 +0.00034002 +0.000339382 +0.000338738 +0.00033809 +0.000337437 +0.000336778 +0.000336115 +0.000335447 +0.000334774 +0.000334096 +0.000333413 +0.000332724 +0.000332031 +0.000331332 +0.000330628 +0.000329919 +0.000329204 +0.000328484 +0.000327759 +0.000327028 +0.000326291 +0.00032555 +0.000324802 +0.000324049 +0.000323291 +0.000322526 +0.000321756 +0.000320981 +0.000178982 +0.000192482 +0.000312695 +0.000451804 +0.000569066 +0.000502569 +0.000545708 +0.000640583 +0.00064024 +0.000639895 +0.000639547 +0.000639197 +0.000638843 +0.000638487 +0.000638129 +0.000637767 +0.000637403 +0.000637036 +0.000636666 +0.000636293 +0.000635917 +0.000635539 +0.000635157 +0.000634773 +0.000634386 +0.000633995 +0.000633602 +0.000633206 +0.000632806 +0.000632404 +0.000631998 +0.00063159 +0.000631178 +0.000630763 +0.000630344 +0.000629923 +0.000629498 +0.00062907 +0.000628639 +0.000628205 +0.000627767 +0.000627326 +0.000626881 +0.000626433 +0.000625981 +0.000625527 +0.000625068 +0.000624606 +0.000624141 +0.000623671 +0.000623199 +0.000622722 +0.000622242 +0.000621759 +0.000621271 +0.00062078 +0.000620285 +0.000619787 +0.000619284 +0.000618778 +0.000618268 +0.000617753 +0.000617235 +0.000616713 +0.000616187 +0.000615657 +0.000615123 +0.000614585 +0.000614042 +0.000613496 +0.000612945 +0.00061239 +0.000611831 +0.000611267 +0.000610699 +0.000610127 +0.000609551 +0.00060897 +0.000608384 +0.000607794 +0.0006072 +0.000606601 +0.000605997 +0.000605389 +0.000604776 +0.000604159 +0.000603537 +0.00060291 +0.000602278 +0.000601641 +0.000601 +0.000600354 +0.000599702 +0.000599046 +0.000598385 +0.000597718 +0.000597047 +0.000596371 +0.000595689 +0.000595002 +0.00059431 +0.000593612 +0.00059291 +0.000592202 +0.000591488 +0.000590769 +0.000590045 +0.000589315 +0.000588579 +0.000587838 +0.000587092 +0.000586339 +0.000585581 +0.000584817 +0.000584047 +0.000583272 +0.00058249 +0.000581703 +0.000580909 +0.00058011 +0.000579304 +0.000578493 +0.000577675 +0.000576851 +0.000576021 +0.000575184 +0.000574341 +0.000573492 +0.000572636 +0.000571774 +0.000570905 +0.00057003 +0.000569148 +0.000568259 +0.000567363 +0.000566461 +0.000565552 +0.000564636 +0.000563713 +0.000562783 +0.000561846 +0.000560903 +0.000559951 +0.000558993 +0.000558028 +0.000557055 +0.000556074 +0.000555087 +0.000554092 +0.000553089 +0.000552079 +0.000551061 +0.000550036 +0.000549003 +0.000547962 +0.000546913 +0.000545856 +0.000544792 +0.000543719 +0.000542638 +0.000541549 +0.000540452 +0.000539347 +0.000538233 +0.000537111 +0.000535981 +0.000534842 +0.000533695 +0.000532539 +0.000531374 +0.0005302 +0.000529018 +0.000527827 +0.000526627 +0.000525418 +0.0005242 +0.000522973 +0.000521737 +0.000520491 +0.000519238 +0.000178982 +0.000192484 +0.000312697 +0.000450747 +0.000597902 +0.000753053 +0.000871165 +0.000710569 +0.000766914 +0.000918445 +0.000917946 +0.000917443 +0.000916936 +0.000916425 +0.00091591 +0.000915391 +0.000914868 +0.000914341 +0.00091381 +0.000913275 +0.000912736 +0.000912193 +0.000911645 +0.000911094 +0.000910538 +0.000909977 +0.000909413 +0.000908844 +0.000908271 +0.000907693 +0.000907111 +0.000906524 +0.000905933 +0.000905338 +0.000904737 +0.000904132 +0.000903523 +0.000902909 +0.00090229 +0.000901666 +0.000901038 +0.000900404 +0.000899766 +0.000899123 +0.000898475 +0.000897822 +0.000897164 +0.000896501 +0.000895833 +0.00089516 +0.000894481 +0.000893797 +0.000893108 +0.000892414 +0.000891715 +0.00089101 +0.000890299 +0.000889584 +0.000888862 +0.000888136 +0.000887403 +0.000886665 +0.000885922 +0.000885172 +0.000884417 +0.000883656 +0.00088289 +0.000882117 +0.000881338 +0.000880554 +0.000879763 +0.000878967 +0.000878164 +0.000877355 +0.00087654 +0.000875719 +0.000874892 +0.000874058 +0.000873218 +0.000872371 +0.000871518 +0.000870658 +0.000869792 +0.000868919 +0.000868039 +0.000867153 +0.00086626 +0.00086536 +0.000864453 +0.00086354 +0.000862619 +0.000861691 +0.000860756 +0.000859815 +0.000858865 +0.000857909 +0.000856945 +0.000855974 +0.000854996 +0.00085401 +0.000853017 +0.000852016 +0.000851007 +0.000849991 +0.000848967 +0.000847935 +0.000846895 +0.000845847 +0.000844792 +0.000843728 +0.000842656 +0.000841576 +0.000840488 +0.000839392 +0.000838287 +0.000837174 +0.000836052 +0.000834922 +0.000833783 +0.000832635 +0.000831479 +0.000830314 +0.00082914 +0.000827958 +0.000826766 +0.000825565 +0.000824355 +0.000823136 +0.000821908 +0.00082067 +0.000819423 +0.000818167 +0.000816901 +0.000815625 +0.00081434 +0.000813045 +0.00081174 +0.000810426 +0.000809101 +0.000807766 +0.000806422 +0.000805067 +0.000803702 +0.000802326 +0.00080094 +0.000799544 +0.000798137 +0.00079672 +0.000795291 +0.000793852 +0.000792403 +0.000790942 +0.00078947 +0.000787987 +0.000786493 +0.000784988 +0.000783471 +0.000781943 +0.000780403 +0.000778852 +0.000777289 +0.000775715 +0.000774128 +0.00077253 +0.000770919 +0.000769297 +0.000767662 +0.000766015 +0.000764356 +0.000762684 +0.000761 +0.000759303 +0.000757594 +0.000755871 +0.000754136 +0.000752388 +0.000750626 +0.000748852 +0.000747064 +0.000745267 +0.000178982 +0.000192486 +0.000312699 +0.00045075 +0.000597906 +0.000751958 +0.000911842 +0.00107812 +0.00118677 +0.000925529 +0.00100711 +0.00102172 +0.00102248 +0.00102324 +0.00102401 +0.00102479 +0.00102557 +0.00102636 +0.00102715 +0.00102795 +0.00102875 +0.00102956 +0.00103038 +0.00103119 +0.00103202 +0.00103285 +0.00103369 +0.00103453 +0.00103538 +0.00103623 +0.00103709 +0.00103795 +0.00103882 +0.0010397 +0.00104058 +0.00104147 +0.00104236 +0.00104326 +0.00104417 +0.00104508 +0.001046 +0.00104692 +0.00104785 +0.00104879 +0.00104973 +0.00105068 +0.00105163 +0.00105259 +0.00105356 +0.00105453 +0.00105551 +0.0010565 +0.00105749 +0.00105849 +0.00105949 +0.0010605 +0.00106152 +0.00106255 +0.00106358 +0.00106461 +0.00106566 +0.00106671 +0.00106776 +0.00106883 +0.0010699 +0.00107098 +0.00107206 +0.00107315 +0.00107425 +0.00107535 +0.00107646 +0.00107758 +0.00107871 +0.00107984 +0.00108098 +0.00108212 +0.00108327 +0.00108443 +0.0010856 +0.00108677 +0.00108795 +0.00108914 +0.00109034 +0.00109154 +0.00109275 +0.00109396 +0.00109519 +0.00109642 +0.00109766 +0.0010989 +0.00110015 +0.00110141 +0.00110268 +0.00110396 +0.00110524 +0.00110653 +0.00110782 +0.00110913 +0.00111044 +0.00111176 +0.00111308 +0.00111441 +0.00111576 +0.0011171 +0.00111846 +0.00111982 +0.00111849 +0.00111711 +0.00111572 +0.00111431 +0.0011129 +0.00111147 +0.00111003 +0.00110858 +0.00110712 +0.00110565 +0.00110417 +0.00110268 +0.00110118 +0.00109966 +0.00109813 +0.0010966 +0.00109505 +0.00109348 +0.00109191 +0.00109032 +0.00108873 +0.00108712 +0.00108549 +0.00108386 +0.00108221 +0.00108055 +0.00107888 +0.0010772 +0.0010755 +0.00107379 +0.00107206 +0.00107033 +0.00106858 +0.00106682 +0.00106504 +0.00106325 +0.00106145 +0.00105963 +0.0010578 +0.00105596 +0.0010541 +0.00105223 +0.00105034 +0.00104844 +0.00104653 +0.0010446 +0.00104265 +0.00104069 +0.00103872 +0.00103673 +0.00103473 +0.00103271 +0.00103068 +0.00102863 +0.00102657 +0.00102449 +0.00102239 +0.00102028 +0.00101815 +0.00101601 +0.00101385 +0.00101168 +0.00100948 +0.00100728 +0.00100505 +0.00100281 +0.00100055 +0.000998279 +0.000995987 +0.000993678 +0.000991352 +0.000989008 +0.000986647 +0.000984277 +0.000178982 +0.000192488 +0.000312702 +0.000450755 +0.000597912 +0.000751966 +0.000911851 +0.00107692 +0.00124675 +0.00142267 +0.000981517 +0.000467492 +0.000467392 +0.000469329 +0.000471284 +0.000473257 +0.000475247 +0.000477256 +0.000479283 +0.000481329 +0.000483394 +0.000485478 +0.000487581 +0.000489703 +0.000491845 +0.000494007 +0.000496189 +0.000498391 +0.000500614 +0.000502857 +0.000505122 +0.000507407 +0.000509714 +0.000512043 +0.000514393 +0.000516765 +0.00051916 +0.000521577 +0.000524017 +0.00052648 +0.000528966 +0.000531476 +0.00053401 +0.000536568 +0.00053915 +0.000541757 +0.000544388 +0.000547045 +0.000549727 +0.000552435 +0.000555169 +0.000557929 +0.000560716 +0.00056353 +0.00056637 +0.000569239 +0.000572135 +0.000575059 +0.000578012 +0.000580993 +0.000584004 +0.000587044 +0.000590114 +0.000593214 +0.000596344 +0.000599505 +0.000602697 +0.000605921 +0.000609177 +0.000612465 +0.000615786 +0.00061914 +0.000622527 +0.000625948 +0.000629403 +0.000632893 +0.000636418 +0.000639978 +0.000643575 +0.000647207 +0.000650877 +0.000654583 +0.000658328 +0.00066211 +0.000665931 +0.000669791 +0.000673691 +0.00067763 +0.00068161 +0.000685632 +0.000689694 +0.000693799 +0.000697946 +0.000702137 +0.000706371 +0.000710649 +0.000714972 +0.00071934 +0.000723754 +0.000728215 +0.000732723 +0.000737278 +0.000741882 +0.000746534 +0.000751237 +0.000755978 +0.000759187 +0.000762378 +0.000765589 +0.000768819 +0.00077207 +0.00077534 +0.000778631 +0.000781942 +0.000785273 +0.000788624 +0.000791995 +0.000795387 +0.000798799 +0.000802232 +0.000805686 +0.00080916 +0.000812654 +0.00081617 +0.000819706 +0.000823263 +0.000826841 +0.00083044 +0.00083406 +0.0008377 +0.000841362 +0.000845045 +0.00084875 +0.000852475 +0.000856222 +0.00085999 +0.000863779 +0.000867589 +0.000871421 +0.000875275 +0.000879149 +0.000883046 +0.000886963 +0.000890902 +0.000894863 +0.000898845 +0.000902848 +0.000906874 +0.00091092 +0.000914988 +0.000919078 +0.000923189 +0.000927322 +0.000931476 +0.000935652 +0.000939849 +0.000944067 +0.000948307 +0.000952569 +0.000956851 +0.000961156 +0.000965481 +0.000969828 +0.000974195 +0.000978584 +0.000982994 +0.000987425 +0.000991877 +0.00099635 +0.00100084 +0.00100536 +0.00100989 +0.00101445 +0.00101903 +0.00102362 +0.00102824 +0.00103288 +0.00103753 +0.00104221 +0.00104693 +0.000178982 +0.000192491 +0.000312706 +0.00045076 +0.000597919 +0.000751974 +0.000911861 +0.00107694 +0.00124677 +0.00142104 +0.000874384 +4.0891e-05 +1.97534e-18 +4.05281e-18 +1.66133e-17 +5.92727e-18 +1.56706e-17 +9.08054e-18 +6.30655e-19 +1.86513e-17 +5.71665e-18 +4.4417e-18 +2.25387e-17 +9.91139e-18 +3.07883e-18 +1.47442e-17 +6.66464e-18 +1.21112e-17 +2.76268e-17 +7.16296e-18 +2.01209e-17 +1.81974e-17 +5.24351e-18 +6.96027e-18 +1.74171e-18 +5.68985e-18 +5.09543e-18 +2.13913e-17 +5.4599e-19 +7.1558e-18 +1.04421e-17 +6.03904e-18 +2.49929e-17 +1.72813e-17 +1.61126e-17 +8.51866e-18 +8.97411e-18 +3.68716e-18 +1.25088e-17 +1.70655e-17 +1.07787e-17 +6.12293e-18 +7.06837e-18 +4.90812e-19 +7.50535e-18 +1.14209e-17 +2.97933e-18 +4.38992e-18 +1.01398e-17 +2.39956e-18 +3.83111e-18 +9.46442e-18 +7.5555e-18 +4.66635e-18 +1.76721e-17 +1.98497e-17 +2.29371e-17 +1.68162e-17 +1.08679e-17 +2.28133e-18 +2.70118e-18 +1.59217e-17 +1.80458e-18 +9.3879e-19 +1.47463e-17 +1.51495e-17 +1.11166e-17 +1.14551e-17 +1.64878e-18 +7.94144e-18 +1.33346e-17 +7.83284e-18 +5.77428e-18 +6.13297e-18 +2.05675e-18 +8.48497e-18 +7.80359e-19 +5.11486e-18 +8.62063e-18 +1.29195e-17 +7.59348e-19 +3.84607e-18 +1.26585e-17 +1.75574e-17 +1.69954e-17 +7.92662e-18 +1.53103e-18 +2.9688e-18 +1.79807e-18 +6.21531e-18 +8.72824e-18 +9.72707e-18 +1.03623e-17 +2.43423e-18 +1.72709e-18 +1.01563e-17 +4.04126e-06 +8.19318e-06 +1.23904e-05 +1.66335e-05 +2.09232e-05 +2.52599e-05 +2.96445e-05 +3.40775e-05 +3.85597e-05 +4.30915e-05 +4.76739e-05 +5.23073e-05 +5.69926e-05 +6.17305e-05 +6.65217e-05 +7.13669e-05 +7.6267e-05 +8.12226e-05 +8.62345e-05 +9.13036e-05 +9.64307e-05 +0.000101617 +0.000106862 +0.000112168 +0.000117535 +0.000122965 +0.000128458 +0.000134014 +0.000139636 +0.000145324 +0.000151079 +0.000156901 +0.000162793 +0.000168754 +0.000174787 +0.000180891 +0.000187069 +0.000193321 +0.000199648 +0.000206052 +0.000212534 +0.000219095 +0.000225735 +0.000232457 +0.000239262 +0.000246151 +0.000253125 +0.000260185 +0.000267333 +0.000274571 +0.0002819 +0.000289321 +0.000296835 +0.000304445 +0.000312152 +0.000319956 +0.000327861 +0.000335868 +0.000343978 +0.000352193 +0.000360514 +0.000368944 +0.000377485 +0.000386137 +0.000394904 +0.000403787 +0.000412788 +0.000421909 +0.000431153 +0.00044052 +0.000450014 +0.000459637 +0.00046939 +0.000479277 +0.000178982 +0.000192494 +0.00031271 +0.000450766 +0.000597927 +0.000751984 +0.000911873 +0.00107695 +0.00124678 +0.00142106 +0.000874346 +4.08405e-05 +6.1235e-18 +3.2684e-18 +1.40174e-17 +9.92173e-18 +1.5095e-17 +4.57202e-18 +1.89129e-18 +5.75811e-18 +2.54763e-17 +8.2048e-18 +9.3707e-18 +3.29569e-17 +1.05042e-17 +1.89996e-17 +7.91426e-18 +9.09816e-18 +5.98287e-18 +6.58061e-18 +1.21422e-18 +7.11823e-18 +9.34713e-18 +1.1657e-17 +1.1237e-18 +2.39866e-17 +2.49233e-17 +1.85868e-17 +6.00771e-19 +1.66427e-17 +2.31448e-17 +7.10791e-18 +6.47374e-18 +2.68704e-18 +3.7666e-18 +2.49846e-17 +1.3958e-20 +2.61174e-18 +5.18656e-18 +1.49954e-17 +2.05547e-18 +2.04097e-17 +3.06464e-18 +5.00628e-18 +2.92419e-18 +2.90361e-18 +9.61161e-19 +4.38992e-18 +1.1656e-17 +1.49619e-17 +9.53105e-18 +9.55721e-18 +1.8428e-17 +3.75138e-18 +6.99614e-18 +4.60154e-18 +4.48154e-19 +7.29593e-18 +3.62264e-18 +1.84261e-18 +7.14506e-18 +4.41309e-18 +1.28039e-17 +8.53459e-19 +1.30513e-17 +8.58471e-18 +2.59112e-18 +7.63677e-18 +1.13763e-17 +3.76606e-18 +1.74813e-17 +2.90703e-18 +6.97721e-18 +7.32771e-18 +4.42987e-18 +3.22121e-18 +4.83778e-18 +1.54998e-18 +6.77338e-18 +4.28107e-18 +1.0478e-17 +1.003e-17 +3.07106e-18 +9.52268e-18 +1.06406e-17 +1.1011e-18 +8.28938e-20 +1.88265e-18 +3.59614e-19 +4.42932e-18 +3.54811e-18 +3.59484e-18 +6.09132e-18 +5.35514e-18 +1.72719e-18 +8.44073e-18 +1.70418e-18 +5.4849e-18 +7.93739e-18 +2.40561e-18 +4.38104e-18 +7.781e-18 +8.05725e-18 +1.63339e-17 +1.55154e-17 +6.55087e-18 +5.23182e-18 +1.2994e-17 +1.5491e-17 +1.60156e-17 +1.96407e-17 +6.6691e-18 +5.3988e-18 +1.21905e-18 +6.05585e-19 +4.57278e-18 +5.85847e-18 +1.55618e-17 +1.08587e-17 +6.91914e-18 +5.65142e-18 +5.79113e-19 +7.59282e-18 +1.71467e-18 +1.4539e-17 +1.46727e-18 +1.57015e-17 +2.00694e-18 +3.43323e-18 +2.53114e-18 +8.75379e-19 +3.04293e-18 +3.23993e-18 +3.32721e-18 +1.38656e-18 +4.34589e-18 +2.10684e-19 +3.76902e-18 +2.70523e-18 +8.47954e-18 +1.02775e-18 +5.10734e-19 +2.84268e-18 +8.47617e-18 +1.26372e-17 +1.45545e-17 +4.06263e-18 +3.54575e-18 +7.24453e-18 +2.2382e-18 +1.74197e-18 +3.17316e-18 +1.92913e-19 +6.84143e-18 +3.11715e-18 +1.31465e-17 +9.33525e-19 +1.85613e-18 +6.64311e-18 +7.06319e-18 +4.92468e-18 +1.08805e-18 +2.16358e-18 +7.17057e-19 +2.67359e-18 +6.02604e-18 +2.73835e-19 +2.63898e-19 +4.00763e-18 +0 +0.000178982 +0.000192498 +0.000312715 +0.000450773 +0.000597936 +0.000751996 +0.000911887 +0.00107697 +0.0012468 +0.00142108 +0.000874303 +4.07828e-05 +6.05765e-18 +8.62857e-18 +1.29791e-18 +7.86008e-18 +2.22587e-17 +6.35061e-19 +6.30424e-19 +5.75812e-18 +7.64292e-18 +6.39094e-20 +2.38249e-17 +4.31724e-18 +3.74289e-18 +9.82947e-18 +1.94584e-17 +6.61685e-18 +1.85938e-17 +1.30447e-17 +1.12746e-17 +2.98506e-18 +7.63729e-18 +1.6977e-18 +6.34875e-18 +3.40278e-18 +9.08316e-18 +1.01183e-17 +1.11382e-17 +4.44537e-18 +3.3372e-18 +1.60335e-18 +1.68742e-17 +2.73973e-18 +1.33923e-17 +1.11158e-17 +1.135e-18 +1.53638e-18 +1.41359e-17 +2.12061e-18 +2.00533e-18 +7.56654e-18 +9.09497e-18 +8.54013e-18 +3.50899e-18 +4.93613e-18 +2.06631e-17 +3.08249e-17 +1.21298e-17 +4.79911e-18 +3.3639e-18 +7.60865e-18 +1.07804e-17 +1.37246e-18 +1.81718e-18 +8.3008e-18 +1.97115e-17 +3.56103e-19 +2.2973e-18 +5.79106e-18 +4.44388e-18 +1.29802e-18 +8.59402e-19 +1.22887e-17 +6.52569e-18 +2.18826e-18 +5.09861e-18 +3.32222e-19 +9.31538e-18 +4.09952e-19 +1.12206e-17 +6.62165e-18 +5.69404e-18 +4.7838e-19 +1.74821e-17 +4.871e-18 +3.97952e-18 +1.55009e-18 +3.92552e-18 +6.72735e-18 +1.1617e-17 +1.54597e-17 +4.94356e-18 +9.89466e-18 +8.64553e-18 +3.00918e-18 +3.71811e-18 +6.73411e-18 +6.97651e-18 +5.50088e-18 +7.23803e-18 +1.08549e-17 +3.5708e-18 +6.81566e-18 +7.04653e-18 +2.05879e-18 +6.68043e-18 +4.19832e-18 +1.74891e-18 +6.14752e-18 +7.8327e-18 +9.49546e-18 +9.03986e-18 +7.02812e-18 +8.21022e-18 +2.95432e-18 +2.55794e-19 +5.83148e-18 +8.31226e-18 +9.88467e-18 +1.68437e-17 +1.07445e-17 +6.25769e-18 +4.9981e-18 +5.32918e-18 +1.50428e-18 +7.65188e-18 +4.27663e-18 +1.06227e-17 +4.80822e-18 +3.02978e-18 +9.26771e-19 +2.07077e-18 +2.30706e-19 +3.52117e-18 +2.59612e-18 +2.32377e-19 +5.68385e-18 +5.98031e-18 +4.73213e-18 +1.42199e-18 +9.99818e-18 +1.40397e-17 +2.79061e-18 +2.13317e-18 +6.25385e-18 +7.26859e-18 +6.38627e-18 +6.3469e-18 +8.27268e-19 +9.4553e-18 +6.23102e-18 +6.80212e-18 +9.28347e-18 +9.22712e-18 +5.88159e-18 +5.8461e-18 +1.57584e-18 +7.8364e-19 +3.30864e-18 +2.70863e-18 +2.88469e-19 +4.78627e-19 +2.66056e-18 +7.93473e-18 +3.75622e-18 +6.62803e-18 +1.85613e-18 +4.98258e-18 +9.53997e-18 +1.82396e-19 +6.07517e-18 +2.70448e-19 +4.84013e-18 +1.42591e-18 +4.9625e-18 +6.78455e-18 +1.40177e-18 +1.74488e-18 +1.10883e-17 +0.000178982 +0.000192502 +0.00031272 +0.000450781 +0.000597946 +0.000752009 +0.000911903 +0.00107699 +0.00124682 +0.0014211 +0.000874253 +4.07178e-05 +6.05765e-18 +1.30739e-18 +2.66073e-18 +9.21304e-18 +7.16372e-18 +1.90503e-18 +3.03865e-17 +1.9903e-17 +5.09527e-18 +4.9969e-18 +1.24943e-17 +1.05803e-17 +1.23153e-17 +3.11667e-18 +1.28532e-17 +9.09819e-18 +0 +8.26944e-18 +7.05387e-18 +4.70724e-18 +8.77718e-18 +1.6977e-18 +4.60705e-18 +5.68986e-18 +5.64928e-18 +1.12181e-17 +1.68165e-17 +1.05169e-17 +9.90388e-18 +2.07358e-17 +2.12254e-17 +1.72813e-17 +3.76668e-18 +3.22047e-18 +8.97412e-18 +1.0447e-17 +9.96634e-18 +8.7852e-18 +1.18315e-17 +5.6749e-18 +9.88583e-20 +1.06015e-17 +1.55955e-18 +7.83974e-18 +1.28784e-17 +6.87118e-18 +1.07084e-17 +1.43973e-17 +9.06385e-18 +2.96923e-18 +4.23846e-18 +1.82994e-18 +7.99559e-18 +1.71429e-17 +1.14685e-17 +1.00542e-17 +7.68704e-18 +4.38717e-19 +1.8734e-17 +6.66291e-18 +6.18714e-18 +5.29108e-18 +4.40717e-18 +3.02998e-18 +3.00901e-18 +5.56154e-18 +4.61647e-18 +6.30407e-18 +6.58599e-18 +2.18538e-20 +2.17041e-20 +3.215e-19 +2.76874e-18 +6.36372e-18 +1.95083e-18 +3.88053e-19 +1.5394e-18 +1.09319e-17 +7.06132e-18 +1.16136e-17 +4.49871e-19 +1.14569e-17 +1.24141e-17 +8.66059e-18 +2.25999e-18 +0 +7.19228e-19 +9.4301e-18 +4.32863e-18 +2.18515e-18 +7.84166e-18 +1.09885e-17 +1.79627e-18 +5.97026e-18 +7.70294e-18 +5.55264e-18 +1.0628e-17 +0 +1.1218e-17 +9.09981e-18 +1.00225e-17 +1.19739e-17 +6.46474e-19 +1.61843e-17 +3.57299e-18 +4.94418e-18 +1.25944e-17 +1.57654e-17 +4.47521e-18 +3.21101e-18 +1.16565e-17 +6.82676e-18 +5.93483e-18 +3.25668e-20 +5.98678e-19 +1.05725e-17 +8.49819e-18 +7.27096e-18 +2.35171e-19 +2.66294e-18 +5.29196e-18 +4.11533e-18 +2.04455e-18 +1.68173e-17 +1.52529e-17 +3.34339e-19 +1.2182e-18 +1.76079e-18 +1.75001e-18 +4.12979e-18 +4.31991e-19 +2.79061e-18 +6.07954e-18 +1.37797e-18 +7.58462e-18 +8.79412e-18 +4.78627e-18 +7.65228e-18 +2.36382e-18 +1.83885e-18 +7.20822e-18 +8.57708e-18 +9.22712e-18 +4.7851e-18 +1.2884e-18 +3.743e-18 +1.17509e-18 +7.68773e-18 +1.93464e-18 +2.11544e-18 +1.00365e-17 +1.71036e-18 +6.99072e-18 +6.38543e-18 +5.05285e-20 +1.42922e-17 +1.41167e-17 +3.11919e-18 +6.38384e-18 +7.27028e-19 +2.70448e-18 +4.66087e-18 +7.12957e-19 +2.12669e-18 +5.37464e-18 +3.41713e-18 +5.05297e-18 +0 +0.000178982 +0.000192507 +0.000312726 +0.000450789 +0.000597958 +0.000752023 +0.000911921 +0.00107701 +0.00124685 +0.00142113 +0.000874199 +4.06457e-05 +1.42223e-17 +1.33351e-17 +8.78143e-21 +7.2158e-18 +1.24086e-17 +3.17502e-17 +3.15212e-18 +1.41449e-17 +1.24286e-18 +5.0586e-18 +1.06569e-17 +1.21612e-18 +6.03913e-19 +1.17474e-17 +1.34483e-17 +6.73502e-18 +8.91564e-18 +2.63224e-17 +4.16294e-18 +1.05625e-17 +9.91708e-18 +8.71448e-18 +5.16889e-18 +1.0264e-17 +7.97546e-18 +3.09047e-17 +2.00924e-17 +1.73474e-18 +1.31334e-17 +1.92394e-17 +1.69803e-18 +1.83351e-17 +1.49617e-17 +9.55752e-18 +6.29219e-18 +1.53632e-18 +3.66121e-18 +6.66463e-18 +1.00267e-18 +1.79207e-17 +5.9315e-19 +3.04315e-18 +2.92416e-18 +6.48473e-18 +6.43919e-18 +7.34834e-18 +1.40251e-17 +2.11726e-17 +1.10261e-17 +1.00211e-17 +1.8428e-17 +6.03885e-18 +1.86261e-17 +1.34437e-17 +5.0175e-18 +5.87234e-18 +2.20905e-18 +5.44009e-18 +4.36312e-19 +6.66294e-18 +3.09365e-18 +3.4136e-18 +9.91559e-18 +9.42646e-18 +8.10761e-18 +8.05178e-18 +1.64874e-18 +3.35669e-18 +3.74019e-18 +4.52205e-18 +7.05753e-18 +3.21499e-19 +2.05683e-18 +4.39966e-18 +1.17043e-18 +1.93743e-18 +7.08123e-18 +7.49179e-18 +1.21502e-18 +3.09194e-18 +6.06713e-18 +8.03477e-18 +8.27606e-18 +3.37615e-18 +1.45814e-18 +4.77903e-18 +5.8977e-18 +4.00069e-18 +7.09611e-19 +6.76669e-18 +5.74121e-18 +7.09385e-18 +1.79627e-18 +7.68587e-18 +4.22638e-18 +6.22979e-18 +1.58747e-17 +2.69718e-19 +1.24792e-17 +9.49546e-18 +1.24464e-17 +1.5618e-17 +1.25416e-17 +1.02757e-18 +5.61463e-18 +6.46531e-18 +7.43096e-18 +2.87781e-18 +1.11878e-17 +3.21118e-18 +1.96347e-18 +5.36422e-18 +6.06472e-19 +3.37003e-18 +1.49451e-17 +8.79084e-18 +2.36081e-18 +3.28381e-18 +4.54443e-18 +4.51554e-18 +1.15043e-18 +5.71557e-19 +1.07907e-17 +7.44928e-18 +2.24307e-19 +1.44912e-18 +4.43993e-19 +5.61252e-18 +2.26588e-19 +3.26041e-18 +2.15996e-18 +3.64906e-18 +2.98644e-18 +2.12014e-18 +3.16039e-18 +6.17682e-18 +5.5148e-18 +2.89598e-18 +3.90545e-18 +5.0052e-18 +3.04622e-18 +7.77002e-18 +1.2236e-17 +9.97245e-19 +1.99979e-19 +5.81116e-18 +5.38444e-18 +6.22803e-18 +1.06534e-18 +5.76938e-18 +6.11748e-18 +1.23633e-18 +6.0456e-18 +4.50736e-18 +3.36107e-18 +7.61013e-18 +5.16711e-18 +4.58646e-19 +1.09437e-18 +3.26453e-18 +4.77816e-18 +7.17057e-19 +8.92501e-19 +1.32918e-18 +1.14641e-18 +2.62831e-19 +1.30675e-18 +0 +0.000178982 +0.000192512 +0.000312732 +0.000450799 +0.00059797 +0.000752039 +0.00091194 +0.00107703 +0.00124687 +0.00142116 +0.000874139 +4.05664e-05 +2.63376e-18 +6.01385e-18 +0 +5.92727e-18 +1.97002e-17 +4.57202e-18 +5.79991e-18 +1.21421e-17 +1.24286e-18 +8.88338e-18 +8.81948e-18 +3.64837e-18 +1.2919e-17 +9.82948e-18 +6.66466e-18 +9.09817e-18 +2.46353e-18 +1.36271e-17 +5.78186e-18 +2.58323e-17 +8.09325e-18 +1.44864e-17 +6.40493e-18 +1.31647e-17 +4.5416e-18 +6.81889e-18 +4.36792e-18 +4.33685e-18 +1.37793e-17 +1.36814e-17 +1.95274e-17 +1.02213e-17 +1.44386e-17 +9.14197e-18 +7.42685e-18 +6.14527e-19 +1.35258e-17 +4.64504e-18 +1.28341e-17 +5.6749e-18 +1.26539e-17 +5.00628e-18 +2.04695e-18 +4.4522e-18 +1.03796e-17 +2.86311e-18 +1.64889e-17 +7.71622e-18 +4.76559e-18 +5.289e-18 +9.54548e-20 +5.21539e-18 +5.08816e-18 +2.21054e-17 +1.97115e-17 +7.74081e-18 +1.04261e-17 +7.72145e-18 +7.14506e-18 +4.8458e-18 +2.23436e-18 +6.14434e-18 +8.22065e-18 +4.21435e-19 +3.0091e-18 +8.46682e-18 +4.28678e-18 +7.53208e-18 +1.58551e-17 +8.31734e-18 +3.28818e-18 +2.86744e-18 +6.80303e-18 +5.18526e-18 +3.58932e-18 +7.51723e-18 +1.15455e-18 +2.2935e-18 +3.49274e-18 +4.22318e-18 +7.64007e-18 +1.41352e-17 +1.13796e-17 +8.2202e-18 +1.97292e-20 +2.92278e-19 +1.87009e-18 +9.85872e-18 +9.08302e-18 +7.1896e-18 +3.64082e-18 +2.50399e-18 +3.17807e-18 +3.15674e-18 +3.40837e-18 +1.24595e-17 +9.41722e-19 +1.33641e-18 +1.5931e-17 +1.12099e-17 +1.33634e-17 +1.0412e-17 +9.30929e-18 +1.66981e-18 +3.45342e-20 +6.84562e-18 +1.00812e-18 +6.13099e-18 +4.2266e-18 +1.34617e-17 +1.20246e-17 +7.07057e-18 +5.93483e-18 +1.92564e-18 +2.15209e-18 +1.33047e-17 +3.06894e-18 +8.6783e-18 +3.49585e-18 +1.27358e-18 +6.21231e-18 +4.11533e-18 +7.83744e-18 +1.00452e-17 +1.45831e-18 +3.1205e-18 +1.10745e-18 +2.64119e-18 +4.38439e-19 +2.28219e-18 +1.24197e-17 +9.44463e-18 +2.13317e-18 +2.86864e-20 +1.02182e-17 +8.06148e-18 +5.61863e-18 +3.11485e-19 +1.02925e-18 +1.5332e-18 +8.52821e-18 +1.61543e-18 +6.01769e-19 +5.01352e-19 +6.83697e-18 +7.89722e-19 +2.74168e-18 +4.89408e-19 +7.15837e-18 +2.88516e-18 +2.91387e-19 +4.56124e-18 +5.10105e-18 +3.66223e-18 +7.84177e-18 +2.69139e-18 +7.75046e-18 +8.89773e-18 +7.75181e-18 +2.08775e-18 +2.43403e-18 +3.94381e-18 +2.94135e-18 +2.65836e-18 +5.90348e-18 +4.9071e-18 +3.31076e-18 +0 +0.000178983 +0.000192517 +0.00031274 +0.000450809 +0.000597984 +0.000752056 +0.000911961 +0.00107705 +0.0012469 +0.00142119 +0.000874073 +4.04798e-05 +1.31688e-18 +1.54268e-17 +0 +5.92729e-18 +2.16191e-17 +3.83542e-17 +7.06077e-18 +2.05289e-17 +3.72824e-18 +3.08451e-18 +1.20043e-17 +1.11883e-17 +1.2075e-18 +2.99683e-18 +2.38023e-17 +5.43529e-18 +1.86525e-17 +5.35768e-18 +6.47569e-18 +2.22732e-17 +5.81346e-18 +3.50846e-18 +8.09044e-18 +1.59539e-17 +6.86777e-18 +2.70553e-17 +2.79547e-17 +4.55369e-18 +4.95194e-18 +2.13771e-18 +1.63435e-17 +6.95469e-18 +2.08208e-17 +2.45171e-17 +4.74495e-18 +3.78961e-18 +6.20355e-18 +1.55508e-17 +1.39371e-17 +2.98679e-18 +4.94473e-19 +5.59527e-18 +1.00396e-17 +5.51686e-18 +6.91973e-18 +3.91284e-18 +1.49727e-17 +2.44661e-18 +7.66226e-18 +1.24337e-17 +2.39577e-18 +1.07966e-17 +2.74394e-17 +2.21956e-17 +1.70236e-17 +8.89748e-19 +2.29777e-18 +1.31636e-18 +7.49363e-18 +4.49968e-18 +1.22884e-17 +3.92555e-18 +9.0681e-18 +4.21435e-19 +6.01806e-18 +3.81837e-18 +1.02223e-17 +2.94742e-18 +8.13382e-19 +5.3296e-18 +5.77424e-18 +6.05336e-18 +1.58224e-18 +6.44229e-18 +7.80287e-19 +6.81975e-18 +4.31036e-18 +5.50421e-18 +8.20023e-18 +1.20678e-18 +1.10856e-17 +9.82026e-18 +6.50263e-18 +7.33946e-19 +4.51981e-18 +2.17237e-18 +4.02768e-18 +3.71508e-18 +8.37341e-18 +2.53778e-18 +1.12024e-17 +7.51121e-18 +2.90151e-18 +2.19627e-18 +8.31642e-18 +2.43773e-18 +1.00899e-17 +3.20759e-18 +8.09853e-18 +1.14737e-17 +6.81272e-18 +1.1323e-17 +1.21538e-17 +2.3123e-18 +2.04198e-18 +2.28213e-18 +5.79348e-18 +9.88465e-18 +5.46955e-18 +2.84051e-18 +7.60765e-18 +5.60773e-18 +6.54032e-18 +9.63235e-19 +5.26067e-18 +1.21168e-17 +1.03866e-17 +3.28381e-18 +2.09766e-18 +1.1578e-18 +2.07077e-18 +5.25832e-18 +2.95324e-18 +1.80587e-18 +8.99281e-19 +4.79257e-18 +2.87953e-18 +4.84218e-18 +6.23351e-18 +5.8685e-18 +3.56393e-18 +3.32721e-18 +5.97316e-18 +7.44197e-19 +2.52821e-18 +2.09384e-18 +6.13906e-18 +1.03409e-17 +2.67273e-18 +4.8009e-18 +7.10691e-18 +8.27436e-18 +8.52506e-18 +1.59592e-18 +3.96346e-18 +1.57674e-18 +7.84982e-19 +3.21133e-18 +2.03137e-18 +1.15388e-18 +5.75842e-19 +4.9413e-18 +5.57332e-18 +5.25859e-18 +9.33579e-18 +1.12296e-17 +5.44389e-18 +2.5689e-18 +4.01301e-18 +2.35949e-18 +6.49093e-18 +4.30234e-18 +6.7731e-18 +5.49394e-18 +4.05329e-18 +8.81222e-19 +1.04646e-18 +0 +0.000178983 +0.000192523 +0.000312747 +0.00045082 +0.000597999 +0.000752075 +0.000911983 +0.00107708 +0.00124693 +0.00142123 +0.000874002 +4.0386e-05 +1.31688e-18 +2.34017e-17 +3.89377e-18 +4.63876e-18 +2.55847e-17 +3.04801e-17 +8.44771e-18 +5.00705e-18 +7.70506e-18 +6.41578e-18 +1.22504e-18 +8.75608e-18 +1.32822e-18 +1.16275e-17 +9.16388e-18 +9.68895e-18 +8.44641e-18 +1.37436e-17 +1.73456e-18 +2.2962e-17 +5.24351e-18 +1.62972e-17 +1.73045e-17 +1.26069e-17 +1.12986e-17 +5.05915e-18 +8.95429e-18 +1.08431e-18 +8.28908e-18 +8.12331e-18 +1.04004e-17 +1.51739e-17 +1.7682e-17 +5.81762e-18 +2.53751e-17 +6.75981e-18 +4.1698e-18 +1.00979e-18 +5.61493e-18 +9.95597e-20 +5.63499e-18 +8.44197e-18 +5.45849e-18 +1.58731e-17 +1.27823e-17 +9.5433e-19 +1.74366e-17 +1.29858e-17 +1.40163e-18 +7.60869e-18 +7.55549e-18 +5.4954e-19 +5.63326e-18 +1.25415e-17 +7.88476e-18 +1.4147e-17 +1.04261e-17 +9.65469e-19 +3.13694e-18 +4.8458e-18 +6.53089e-18 +9.21655e-18 +1.25428e-17 +1.21196e-17 +1.23704e-17 +9.79495e-18 +4.61669e-18 +1.04794e-17 +8.29346e-18 +9.5287e-18 +1.47564e-17 +6.53125e-18 +7.27762e-18 +2.04268e-18 +7.80573e-19 +5.5798e-18 +9.85223e-18 +5.50417e-18 +7.44096e-18 +2.26239e-18 +7.19074e-18 +1.0713e-17 +1.01973e-17 +6.45873e-18 +3.06206e-18 +7.82022e-18 +9.92542e-18 +9.4304e-18 +5.39304e-18 +7.61249e-18 +6.86145e-18 +2.78189e-18 +3.45418e-18 +6.86236e-18 +1.29518e-17 +1.40847e-17 +1.10318e-17 +4.81121e-18 +9.55862e-18 +9.23176e-18 +5.63352e-18 +1.43165e-17 +1.29295e-18 +1.67125e-18 +7.784e-18 +9.50787e-18 +1.05794e-17 +1.57654e-17 +1.44199e-17 +1.01271e-17 +5.1538e-18 +2.19454e-18 +3.27783e-20 +5.77648e-18 +1.19561e-19 +9.14698e-18 +8.26213e-18 +1.9939e-18 +8.62281e-18 +4.39965e-18 +2.07077e-18 +1.82924e-18 +1.47694e-18 +3.44068e-19 +2.01899e-18 +9.91877e-18 +6.53396e-18 +1.76079e-18 +2.1872e-18 +5.4338e-19 +5.39989e-19 +7.51277e-19 +4.69333e-18 +3.18044e-18 +2.10761e-18 +3.9787e-18 +6.24285e-18 +5.48065e-18 +5.24152e-18 +4.70006e-18 +2.63963e-18 +7.4673e-18 +8.04193e-19 +8.17442e-18 +1.18904e-18 +1.9698e-19 +2.54537e-18 +2.53014e-18 +2.7085e-18 +1.7316e-18 +7.64685e-19 +1.71113e-18 +1.88918e-18 +2.06587e-18 +8.21517e-18 +1.67127e-18 +6.6433e-18 +1.1008e-17 +7.29582e-19 +6.89118e-18 +5.94985e-18 +7.88763e-18 +3.56479e-19 +4.07615e-18 +2.11515e-18 +2.80393e-18 +4.35608e-18 +0 +0.000178983 +0.00019253 +0.000312756 +0.000450832 +0.000598015 +0.000752095 +0.000912008 +0.00107711 +0.00124697 +0.00142127 +0.000873926 +4.0285e-05 +6.5844e-19 +2.54935e-17 +3.37457e-18 +2.49976e-17 +3.21088e-17 +2.92101e-17 +2.19388e-17 +1.15162e-17 +2.08782e-17 +0 +3.18481e-18 +8.63447e-18 +3.01851e-18 +1.19872e-19 +8.44982e-18 +1.70147e-17 +1.61889e-17 +5.82568e-19 +4.16294e-18 +6.42938e-18 +2.96376e-18 +1.78817e-17 +6.40493e-18 +6.35924e-18 +5.09545e-18 +5.05915e-18 +7.42553e-18 +4.98746e-18 +1.36716e-17 +3.74111e-18 +1.69803e-18 +6.32244e-19 +1.28691e-17 +9.03809e-18 +1.43381e-17 +7.78401e-18 +1.03731e-17 +5.25099e-18 +1.90507e-17 +1.43366e-17 +9.58926e-18 +5.10451e-18 +1.30613e-17 +3.38754e-18 +9.61073e-19 +4.00819e-18 +1.26984e-17 +3.85811e-18 +4.85897e-18 +1.85577e-18 +1.47424e-18 +3.69324e-19 +2.36246e-18 +8.30093e-18 +2.86754e-18 +1.4236e-18 +7.59871e-18 +6.31752e-18 +5.22809e-19 +9.17231e-18 +1.58116e-17 +3.07217e-18 +1.72887e-17 +2.1546e-17 +2.50761e-18 +1.47754e-17 +1.6982e-17 +1.3918e-17 +1.62632e-18 +1.00131e-17 +1.28316e-18 +6.53125e-18 +4.90467e-18 +1.72842e-17 +1.95072e-17 +3.10017e-18 +4.00249e-18 +2.75216e-18 +1.97509e-18 +1.65909e-18 +2.24744e-18 +4.31495e-18 +9.45841e-18 +1.61517e-18 +4.51998e-18 +2.3171e-18 +2.87718e-18 +7.18574e-19 +6.81227e-18 +5.07557e-18 +1.4003e-18 +7.7893e-18 +7.46112e-18 +1.19405e-17 +5.18072e-18 +3.79203e-18 +7.26508e-18 +1.06974e-18 +7.43443e-18 +5.53913e-18 +3.79935e-18 +6.89795e-18 +9.05064e-18 +7.7068e-18 +3.06272e-18 +1.01417e-17 +1.89038e-18 +4.25415e-18 +5.09707e-18 +1.482e-17 +6.13506e-18 +3.65715e-18 +1.45377e-18 +2.49329e-19 +5.85847e-18 +5.34564e-18 +1.12128e-17 +1.07892e-17 +1.10698e-17 +2.3156e-19 +5.29196e-18 +2.05761e-18 +1.13587e-17 +1.24155e-17 +3.1403e-18 +3.34339e-18 +6.67168e-19 +3.96178e-18 +3.39015e-18 +8.69407e-18 +3.88792e-18 +5.39762e-19 +2.13317e-18 +4.1343e-18 +2.18263e-19 +2.09384e-19 +2.60119e-18 +2.3784e-18 +3.08325e-18 +5.51621e-18 +3.65528e-18 +8.27454e-18 +8.62603e-18 +7.97504e-19 +5.74726e-18 +1.57584e-18 +1.56638e-18 +2.14089e-18 +3.28889e-18 +0 +9.57255e-19 +3.23067e-18 +1.13351e-18 +5.07078e-18 +1.6811e-18 +3.52701e-18 +3.50644e-18 +3.11919e-18 +6.74864e-18 +1.45074e-18 +3.60597e-18 +3.40602e-18 +7.12957e-19 +4.25337e-18 +2.11676e-18 +6.65839e-18 +3.51642e-19 +0 +0.000178983 +0.000192537 +0.000312765 +0.000450845 +0.000598032 +0.000752117 +0.000912034 +0.00107714 +0.001247 +0.00142131 +0.000873844 +4.01768e-05 +2.028e-17 +2.09185e-18 +2.59588e-18 +1.93288e-18 +9.85011e-18 +5.84203e-18 +1.81562e-17 +0 +1.46645e-17 +1.44355e-17 +4.40974e-18 +1.87283e-17 +1.11079e-17 +2.5173e-18 +2.38023e-18 +9.21633e-18 +3.05013e-18 +1.54906e-17 +1.01761e-17 +7.69229e-18 +1.28808e-17 +7.58275e-18 +6.29256e-18 +5.13202e-18 +1.12986e-17 +8.46859e-18 +1.90005e-17 +2.38527e-17 +3.33716e-18 +4.38231e-18 +3.82057e-18 +1.13804e-17 +4.81293e-18 +1.11158e-17 +8.45841e-18 +1.79237e-17 +8.33923e-18 +3.63535e-18 +1.9552e-17 +5.07762e-18 +6.52465e-18 +1.60987e-17 +2.45629e-17 +2.41967e-17 +1.42239e-17 +9.5433e-19 +1.3646e-17 +1.82554e-17 +2.99024e-18 +1.00211e-17 +4.79129e-18 +1.26266e-17 +4.1798e-18 +7.39857e-18 +7.88462e-18 +1.51257e-17 +1.71412e-17 +7.19499e-18 +9.7591e-18 +1.24605e-17 +6.53085e-18 +1.36541e-18 +7.79691e-18 +5.55486e-18 +1.03644e-17 +1.32813e-18 +1.31899e-17 +3.43856e-18 +4.55327e-18 +2.74562e-18 +2.08525e-18 +4.7838e-19 +1.32896e-17 +8.79922e-18 +2.02919e-18 +3.25515e-18 +1.21612e-17 +7.03323e-18 +5.92252e-18 +9.95461e-18 +4.05421e-20 +7.29078e-18 +6.35482e-18 +1.17499e-18 +8.8939e-18 +6.66167e-18 +2.44568e-18 +6.85835e-18 +7.37996e-18 +8.31744e-18 +5.88124e-18 +1.59959e-17 +3.86868e-18 +4.94104e-18 +1.18611e-17 +1.11053e-17 +9.95534e-18 +5.07836e-18 +3.98273e-19 +5.80289e-18 +6.55061e-19 +9.1105e-19 +2.97378e-18 +5.5232e-18 +4.59379e-18 +8.74719e-18 +9.69768e-18 +1.2262e-17 +8.82593e-18 +7.2866e-18 +6.13497e-19 +3.29915e-20 +1.07795e-17 +9.2659e-18 +5.97803e-19 +8.43423e-18 +4.60315e-18 +8.44393e-18 +5.12743e-18 +3.93653e-18 +9.4335e-18 +1.14311e-17 +4.31627e-18 +4.40181e-18 +6.95353e-18 +1.56142e-18 +5.09462e-18 +1.32059e-17 +2.84336e-18 +6.52055e-19 +2.15996e-19 +1.07325e-18 +5.54625e-18 +2.75653e-18 +4.21368e-18 +2.93137e-18 +2.49714e-18 +1.07545e-17 +6.57784e-18 +2.24791e-18 +5.8884e-18 +2.22062e-18 +1.20476e-18 +1.79438e-18 +7.94504e-19 +3.93961e-19 +8.22352e-18 +9.3422e-18 +4.06309e-18 +1.53938e-18 +9.6144e-19 +1.04523e-17 +3.77836e-19 +4.13175e-18 +7.48527e-19 +7.42452e-18 +9.24005e-19 +3.66917e-19 +1.6423e-18 +7.25369e-18 +1.80562e-18 +2.86987e-18 +3.92245e-18 +2.65836e-18 +3.17335e-18 +1.75221e-18 +5.05275e-18 +5.54414e-18 +0.000178983 +0.000192544 +0.000312774 +0.000450859 +0.00059805 +0.00075214 +0.000912062 +0.00107717 +0.00124704 +0.00142135 +0.000873756 +4.00614e-05 +6.5844e-19 +3.92208e-18 +6.48955e-18 +1.85549e-17 +1.63742e-17 +2.92101e-17 +1.41215e-17 +6.38399e-18 +1.19304e-17 +5.05859e-18 +3.91977e-18 +1.33784e-18 +6.2784e-18 +6.71281e-18 +7.37872e-18 +6.73502e-18 +7.27329e-18 +8.85179e-18 +6.93823e-19 +5.28129e-18 +1.92642e-17 +4.0743e-18 +1.38212e-17 +1.48382e-17 +1.1178e-19 +1.07782e-17 +7.20707e-18 +9.43269e-18 +5.05966e-18 +1.9667e-17 +1.06127e-18 +5.37438e-18 +1.65311e-17 +1.12197e-17 +3.71343e-18 +3.68727e-18 +2.03395e-18 +9.89596e-18 +1.18315e-17 +2.58869e-18 +5.9315e-19 +2.3565e-18 +2.53427e-18 +6.58157e-18 +1.09562e-17 +1.90883e-18 +4.92779e-18 +1.35505e-17 +5.79361e-18 +1.11374e-18 +9.21739e-19 +4.20886e-18 +1.27203e-18 +9.20305e-18 +6.80961e-18 +4.09284e-18 +4.94803e-18 +8.77433e-19 +1.02819e-17 +7.09556e-18 +1.32337e-17 +9.21655e-18 +2.0341e-18 +8.41638e-19 +3.35099e-19 +2.65626e-18 +2.96807e-18 +1.21169e-17 +9.75701e-18 +1.2922e-18 +4.17028e-18 +3.66411e-18 +5.37911e-18 +4.39982e-18 +5.46266e-18 +9.60965e-18 +4.46425e-18 +3.82256e-18 +1.16929e-17 +1.50827e-17 +4.05421e-20 +7.43958e-19 +4.43359e-19 +1.46789e-18 +2.91627e-18 +1.10062e-17 +1.0357e-17 +4.00083e-18 +5.39318e-18 +1.40972e-19 +5.32126e-18 +7.7893e-18 +1.10597e-18 +4.25531e-18 +2.99936e-18 +2.16687e-18 +9.95541e-18 +1.44332e-17 +6.63788e-19 +1.31882e-17 +4.71644e-18 +1.5622e-18 +4.26673e-18 +7.19309e-18 +3.06272e-18 +1.03952e-17 +1.1209e-17 +4.5044e-18 +3.85355e-18 +7.5336e-18 +3.19018e-18 +3.9011e-18 +1.81942e-18 +3.1294e-18 +1.55563e-18 +1.54563e-18 +6.13787e-18 +7.7411e-18 +2.09743e-18 +1.4241e-17 +4.71675e-18 +7.54481e-18 +2.27172e-19 +2.25734e-19 +6.28061e-18 +9.1386e-18 +6.20201e-18 +2.20099e-18 +0 +3.91233e-18 +8.63982e-19 +4.50804e-18 +6.39977e-18 +3.81591e-18 +3.16026e-18 +8.79412e-18 +4.36999e-18 +8.29159e-19 +8.2408e-19 +2.86011e-18 +1.01673e-18 +9.68705e-18 +5.21533e-18 +9.9688e-19 +1.98245e-18 +1.9698e-18 +1.95798e-18 +7.39579e-18 +5.80416e-18 +2.69288e-18 +1.98048e-19 +3.61112e-18 +3.21202e-18 +3.19271e-18 +1.93421e-19 +3.8982e-18 +1.29557e-18 +2.2015e-18 +3.64925e-18 +3.26416e-18 +2.65711e-19 +3.76455e-18 +1.96301e-18 +1.24057e-18 +1.00444e-17 +1.92743e-18 +7.03283e-19 +0 +0.000178984 +0.000192552 +0.000312785 +0.000450874 +0.00059807 +0.000752164 +0.000912092 +0.00107721 +0.00124708 +0.0014214 +0.000873663 +3.99388e-05 +2.08067e-17 +1.46424e-17 +1.29791e-18 +1.39162e-17 +2.68645e-18 +2.66701e-17 +2.19388e-17 +7.13505e-18 +9.56917e-18 +2.14682e-17 +7.59455e-18 +4.98613e-18 +7.96876e-18 +1.19872e-18 +1.93989e-17 +1.21703e-17 +5.39633e-18 +4.19298e-18 +5.31941e-18 +1.12514e-17 +3.64766e-18 +1.56182e-17 +1.38212e-17 +1.3611e-17 +7.86469e-18 +5.05913e-18 +3.93113e-18 +6.72218e-18 +7.10499e-18 +7.69599e-18 +7.64119e-18 +1.13804e-17 +1.54848e-17 +1.01808e-17 +1.58852e-17 +2.04861e-18 +1.22037e-18 +9.89596e-18 +6.6176e-18 +8.76125e-18 +1.38427e-18 +1.57082e-18 +5.45843e-18 +6.96871e-18 +5.38207e-18 +2.58273e-20 +6.82301e-18 +9.41002e-19 +5.79344e-18 +5.75293e-18 +1.47445e-18 +5.12407e-18 +8.35906e-18 +3.60904e-18 +4.48016e-18 +2.49129e-18 +1.41371e-18 +8.07242e-18 +1.49872e-17 +1.19413e-17 +1.09994e-17 +1.263e-17 +2.71205e-18 +4.8815e-18 +8.1912e-18 +2.65626e-18 +1.53333e-17 +1.03158e-17 +1.13917e-18 +5.32974e-18 +6.09503e-18 +3.18596e-18 +2.05672e-18 +9.74237e-18 +1.17046e-17 +2.47991e-18 +4.00243e-18 +3.5168e-18 +7.6039e-19 +6.48552e-18 +8.38916e-18 +4.46375e-18 +2.21716e-18 +2.05543e-18 +3.0618e-18 +5.50312e-18 +1.72615e-18 +6.85835e-18 +4.27496e-19 +1.83303e-18 +1.37229e-17 +2.50399e-18 +2.48813e-18 +8.26828e-19 +1.39062e-17 +1.11053e-17 +5.91939e-18 +5.21213e-18 +1.06267e-18 +3.29703e-18 +8.12283e-18 +1.15834e-17 +1.04729e-17 +4.88097e-18 +1.04637e-17 +1.90156e-18 +3.90483e-18 +1.00327e-18 +7.08587e-18 +1.85251e-18 +6.99386e-18 +2.4381e-18 +6.19616e-19 +1.80621e-18 +1.19736e-18 +4.03944e-18 +1.88955e-18 +5.62949e-18 +3.72929e-18 +2.77872e-18 +5.52205e-18 +3.42934e-18 +5.45213e-18 +4.51468e-19 +7.62645e-18 +7.13282e-18 +1.77293e-18 +6.60297e-18 +5.68671e-18 +4.38665e-19 +1.94396e-18 +8.58603e-19 +4.05344e-18 +2.54394e-18 +8.8489e-18 +7.53782e-18 +2.91333e-18 +8.29159e-19 +1.64534e-18 +8.17194e-18 +8.1405e-19 +5.24744e-18 +5.21533e-18 +1.59501e-18 +7.94504e-19 +3.93997e-18 +3.32899e-18 +5.06028e-18 +3.86928e-19 +2.30775e-18 +1.72054e-18 +4.37091e-18 +5.11275e-20 +1.69026e-18 +2.98771e-18 +2.41349e-18 +3.69197e-18 +2.20374e-18 +3.46692e-18 +1.23313e-17 +5.59266e-18 +5.91652e-18 +7.84253e-18 +9.21564e-18 +1.05731e-18 +4.2053e-18 +5.31138e-19 +0 +0.000178965 +0.000192537 +0.000312774 +0.000450864 +0.000598059 +0.000752153 +0.000912079 +0.0010772 +0.00124707 +0.00142138 +0.000873254 +3.98459e-05 +1.91735e-18 +1.90117e-18 +1.26281e-17 +3.06467e-17 +1.63041e-17 +4.77604e-18 +1.12915e-17 +1.10144e-17 +1.79035e-18 +2.09433e-17 +3.14977e-17 +2.33772e-17 +1.7296e-18 +1.71476e-18 +2.85607e-17 +1.46634e-17 +1.03599e-17 +5.30124e-18 +1.93795e-17 +1.98639e-17 +1.08148e-17 +1.79227e-17 +1.58702e-18 +6.60556e-18 +7.79586e-18 +4.6373e-18 +4.75026e-18 +2.03558e-17 +3.91545e-18 +4.77798e-18 +9.17617e-18 +7.33571e-19 +6.54488e-18 +8.07443e-18 +3.71612e-18 +1.41738e-18 +5.63101e-19 +7.79702e-18 +5.79688e-18 +8.20914e-18 +3.52649e-18 +3.49556e-18 +1.97243e-17 +7.39818e-18 +1.54527e-17 +9.34645e-18 +3.86044e-18 +7.68411e-19 +6.32171e-18 +3.2585e-18 +1.98766e-18 +3.20181e-18 +3.30333e-20 +2.41999e-18 +2.32656e-17 +1.59289e-17 +1.17827e-18 +8.87612e-18 +9.49252e-18 +4.58972e-18 +6.36906e-18 +3.60746e-18 +1.72072e-17 +2.39217e-17 +3.51278e-18 +1.10977e-17 +2.15677e-18 +4.27539e-18 +2.11878e-18 +9.24024e-18 +1.45807e-18 +3.09443e-18 +9.6099e-18 +4.05303e-18 +6.22665e-18 +6.7683e-18 +1.18379e-18 +4.4975e-18 +7.36528e-18 +2.30494e-18 +2.28673e-18 +3.77376e-18 +5.60988e-18 +3.7064e-18 +9.36697e-18 +1.45704e-18 +2.16479e-18 +8.93934e-19 +5.31585e-18 +7.55105e-18 +1.02682e-17 +4.31279e-18 +9.22999e-18 +6.09833e-18 +4.54322e-20 +9.48294e-18 +5.93545e-18 +2.45129e-18 +3.23848e-18 +0 +3.18166e-18 +1.26147e-18 +8.7458e-18 +1.34648e-17 +1.07362e-18 +5.47168e-18 +1.14471e-17 +1.94208e-18 +3.40414e-18 +7.33965e-19 +1.88831e-18 +8.06073e-18 +4.42454e-18 +2.5443e-18 +1.12057e-18 +8.60582e-18 +3.85203e-18 +2.72702e-18 +4.18768e-18 +1.12427e-17 +8.75376e-18 +8.67523e-18 +3.38679e-18 +6.19444e-18 +6.90548e-18 +1.02298e-18 +2.51134e-18 +7.46555e-19 +3.20567e-18 +7.33073e-18 +1.45275e-18 +1.92048e-18 +9.03413e-18 +4.47641e-18 +4.66864e-18 +1.38925e-18 +1.146e-18 +3.40724e-18 +4.27756e-18 +6.4668e-18 +7.29171e-18 +6.56867e-18 +1.51866e-18 +1.93476e-18 +8.09469e-18 +4.2214e-18 +3.76504e-18 +7.87502e-18 +4.72298e-18 +3.66294e-18 +6.07309e-19 +1.99851e-18 +3.99519e-19 +5.09989e-18 +3.30454e-18 +6.16277e-18 +2.67361e-18 +1.89366e-18 +2.99782e-18 +1.11393e-18 +2.94339e-18 +2.00512e-18 +1.80886e-18 +3.75848e-18 +1.59898e-18 +2.63762e-18 +9.42484e-20 +9.33897e-20 +0.000178961 +0.000192524 +0.000312759 +0.000450843 +0.000598032 +0.000752119 +0.000912039 +0.00107715 +0.00124701 +0.00142132 +0.000873285 +3.99805e-05 +8.12832e-18 +3.71855e-18 +2.00673e-17 +8.3216e-18 +2.27331e-17 +7.57735e-18 +2.96467e-18 +4.50568e-18 +1.02909e-17 +5.77377e-18 +5.34094e-18 +4.34835e-18 +3.37289e-18 +1.18862e-17 +1.47258e-17 +1.09574e-18 +8.67913e-18 +5.01778e-18 +3.72991e-18 +2.64053e-18 +2.79134e-18 +1.21032e-17 +1.26805e-17 +9.17064e-18 +3.02953e-18 +3.33609e-18 +7.60421e-18 +5.89767e-18 +7.63064e-18 +3.70061e-18 +6.3786e-18 +1.58074e-18 +1.09616e-17 +5.89712e-18 +0 +6.24827e-18 +7.7025e-18 +1.8707e-17 +1.02329e-17 +7.05421e-18 +5.53405e-18 +9.95732e-18 +2.14639e-18 +1.67208e-17 +1.01098e-17 +4.73064e-18 +4.96346e-18 +1.25685e-17 +3.79032e-18 +8.31636e-18 +8.77197e-18 +1.31694e-18 +8.3514e-18 +5.18362e-19 +1.53733e-18 +1.16781e-17 +3.27022e-18 +4.99603e-19 +3.70412e-18 +1.44355e-17 +1.6242e-17 +1.22494e-17 +5.47337e-18 +7.07317e-19 +1.86902e-18 +6.48026e-18 +3.43997e-18 +6.82206e-19 +5.17687e-18 +8.02745e-18 +5.08125e-18 +1.05053e-17 +2.81868e-18 +4.51126e-18 +5.3204e-18 +4.84887e-18 +1.00251e-17 +1.03603e-18 +0 +3.65497e-18 +9.85713e-18 +3.18831e-18 +1.97402e-18 +9.58208e-18 +1.16346e-18 +1.53602e-18 +1.21657e-17 +0 +3.76451e-19 +8.49928e-18 +7.32094e-18 +1.34159e-17 +3.23284e-18 +7.11533e-18 +2.64299e-18 +2.79408e-18 +7.60666e-18 +1.71235e-18 +3.51421e-19 +5.03991e-18 +1.6646e-18 +1.64875e-18 +9.80465e-19 +1.19649e-17 +7.36682e-18 +4.44126e-18 +6.75545e-18 +1.55655e-18 +1.07956e-18 +5.49476e-18 +4.53507e-18 +4.64127e-18 +6.82199e-18 +4.99311e-18 +4.07243e-18 +1.8742e-18 +7.41815e-18 +3.24948e-18 +1.00745e-17 +1.56582e-17 +2.7456e-18 +1.08722e-18 +8.61396e-18 +6.79755e-18 +1.12197e-17 +4.96915e-18 +5.56617e-18 +3.84566e-18 +7.87048e-18 +2.26276e-18 +1.99177e-18 +4.93093e-18 +2.68559e-18 +3.38532e-18 +3.35229e-18 +3.08253e-18 +3.05175e-18 +6.97364e-19 +9.43738e-18 +7.29364e-18 +4.28817e-18 +8.04552e-18 +8.40893e-18 +3.28673e-18 +1.04144e-17 +4.2966e-19 +1.06514e-18 +7.58245e-18 +4.3799e-18 +1.03249e-17 +4.49842e-18 +2.22955e-18 +2.8062e-18 +2.58057e-18 +1.96501e-18 +1.75102e-18 +3.85301e-18 +1.14435e-18 +3.39906e-18 +3.36537e-18 +4.25755e-18 +2.38257e-18 +1.09315e-18 +1.97618e-18 +1.06721e-18 +5.63599e-18 +1.05034e-18 +9.34295e-20 +0.000178956 +0.000192509 +0.000312743 +0.000450821 +0.000598004 +0.000752084 +0.000911996 +0.0010771 +0.00124695 +0.00142125 +0.000873321 +4.0127e-05 +1.97047e-17 +2.10968e-17 +1.35661e-17 +2.20372e-18 +6.11424e-18 +9.95329e-18 +2.35843e-18 +1.42338e-17 +1.0529e-18 +1.87721e-17 +1.42602e-17 +6.96237e-18 +1.21738e-17 +1.44746e-17 +1.19543e-18 +1.30255e-17 +1.36877e-18 +9.69039e-19 +8.44596e-18 +5.32498e-18 +4.89893e-18 +6.72039e-18 +1.31314e-17 +1.97894e-17 +1.57936e-17 +5.03585e-18 +2.13814e-18 +1.41216e-18 +9.44337e-18 +4.85142e-18 +9.26806e-18 +8.5138e-19 +9.43253e-18 +1.10128e-17 +0 +4.74953e-18 +4.38998e-20 +4.98131e-18 +7.32211e-18 +4.80671e-19 +6.87257e-18 +6.18874e-18 +1.13411e-17 +1.12339e-17 +4.36081e-18 +2.38318e-18 +2.0065e-17 +5.26106e-18 +2.46103e-18 +3.29755e-18 +5.68029e-19 +9.85314e-19 +7.52296e-18 +4.9675e-18 +2.73327e-19 +2.73179e-19 +1.60912e-18 +8.23208e-18 +1.6043e-17 +1.30237e-18 +1.52202e-17 +2.29962e-18 +2.53046e-18 +1.0775e-17 +8.43751e-18 +2.48003e-19 +6.57147e-18 +7.95396e-18 +1.3128e-17 +1.89098e-18 +0 +3.9407e-18 +7.57493e-18 +4.55647e-19 +4.95226e-18 +2.24918e-19 +2.64916e-18 +5.24521e-18 +1.73124e-18 +4.28565e-18 +5.72996e-18 +1.11349e-17 +1.04012e-17 +8.85695e-18 +2.04019e-18 +3.02897e-18 +1.21961e-17 +1.97958e-18 +5.48792e-18 +2.13459e-18 +8.83805e-18 +2.28495e-18 +1.46897e-17 +7.64457e-18 +1.03374e-17 +1.82753e-19 +7.4182e-18 +4.65709e-18 +4.61048e-18 +7.02198e-18 +1.39111e-18 +3.44088e-18 +3.06601e-18 +8.26146e-18 +1.66903e-18 +1.6522e-18 +5.5608e-18 +2.59078e-18 +8.01314e-19 +1.01531e-17 +6.90955e-18 +1.55439e-18 +2.7698e-18 +7.76709e-18 +7.38655e-18 +5.07459e-18 +4.13604e-18 +1.46394e-18 +1.18643e-17 +2.14809e-18 +2.40957e-18 +1.82727e-18 +3.88843e-18 +9.48198e-18 +7.36158e-20 +5.38427e-19 +5.462e-18 +7.64736e-18 +1.04387e-18 +9.29798e-18 +9.07372e-18 +1.01411e-18 +3.25426e-18 +1.85918e-18 +5.63858e-18 +4.60952e-18 +7.92266e-18 +3.08919e-18 +1.52948e-18 +3.83865e-18 +1.15107e-18 +2.05118e-18 +2.2542e-18 +2.23057e-19 +8.1665e-18 +5.0235e-18 +7.34839e-18 +1.28296e-18 +1.90503e-18 +2.09421e-18 +0 +3.89437e-18 +2.6367e-18 +2.28137e-19 +3.17611e-18 +1.57211e-18 +2.52612e-18 +3.26829e-18 +2.6629e-18 +2.25819e-18 +1.12725e-18 +5.71018e-18 +1.82226e-19 +3.24502e-18 +7.19907e-19 +5.29327e-19 +6.11005e-18 +5.52577e-18 +0.000178952 +0.000192495 +0.000312727 +0.000450798 +0.000597974 +0.000752047 +0.000911952 +0.00107705 +0.0012469 +0.00142118 +0.000873353 +4.02755e-05 +8.36591e-18 +3.16886e-18 +2.26967e-17 +1.8417e-17 +2.06128e-17 +5.39795e-18 +2.32499e-18 +1.05929e-17 +1.3458e-17 +1.03933e-17 +2.23819e-18 +6.87191e-18 +4.61093e-18 +1.00041e-17 +1.07743e-18 +1.15211e-17 +7.60744e-18 +9.20918e-18 +1.57546e-17 +4.10623e-19 +7.11706e-18 +1.61136e-18 +5.78424e-18 +3.16072e-18 +5.08652e-18 +1.56937e-17 +1.17047e-17 +1.90043e-18 +5.64567e-18 +6.15024e-18 +1.66102e-17 +1.13315e-17 +1.01355e-17 +8.60305e-18 +3.54967e-19 +3.69112e-18 +5.39515e-18 +1.49933e-17 +1.87715e-18 +3.88677e-18 +2.00785e-17 +1.955e-17 +2.1331e-18 +4.87303e-19 +8.20253e-18 +1.38546e-17 +4.74944e-19 +1.3582e-17 +4.63727e-18 +3.97897e-18 +1.51519e-18 +5.70109e-18 +7.27753e-18 +1.32338e-17 +6.98775e-18 +2.88351e-18 +1.02731e-17 +3.24885e-18 +5.45372e-18 +3.59935e-18 +1.41976e-19 +1.08597e-18 +8.46136e-18 +1.0642e-18 +4.21143e-18 +5.73231e-18 +1.67793e-18 +1.277e-18 +1.01145e-18 +1.00118e-18 +2.47632e-18 +4.9019e-18 +3.39629e-18 +1.80088e-18 +5.82277e-18 +5.41047e-18 +1.16455e-18 +6.22183e-18 +1.82693e-18 +1.35472e-18 +3.12827e-18 +2.87498e-18 +1.31294e-18 +5.63073e-18 +4.71522e-18 +1.06053e-18 +6.50717e-18 +4.15494e-18 +3.70025e-18 +2.44117e-18 +5.83829e-18 +5.17979e-18 +2.36618e-18 +1.24846e-17 +9.65197e-18 +3.43848e-18 +4.15801e-18 +9.16371e-18 +3.70094e-19 +5.67625e-18 +4.16713e-18 +1.07662e-18 +2.48349e-18 +7.19473e-18 +7.11863e-18 +1.49448e-17 +1.35964e-17 +7.23027e-18 +3.3271e-18 +8.22905e-19 +8.1531e-19 +7.40995e-18 +4.94031e-18 +3.62597e-18 +6.08256e-18 +7.09718e-18 +3.96823e-18 +6.94523e-18 +5.9741e-18 +2.9548e-18 +2.63087e-18 +4.04848e-18 +3.2898e-18 +2.12166e-18 +3.49789e-18 +4.98315e-18 +2.19006e-18 +2.92234e-19 +8.03452e-19 +8.01914e-19 +3.4059e-18 +9.06926e-19 +3.84419e-19 +1.26733e-19 +4.26153e-18 +3.71878e-18 +4.90372e-18 +1.2124e-18 +0 +3.32008e-18 +2.1107e-18 +1.15961e-19 +3.4402e-18 +5.44315e-18 +3.36411e-19 +5.10083e-18 +3.18208e-18 +8.02375e-18 +9.64941e-18 +3.81821e-18 +2.72605e-18 +2.17736e-18 +2.56212e-18 +8.1251e-19 +3.40822e-18 +4.98201e-19 +2.22741e-19 +4.26081e-18 +1.14889e-18 +4.92215e-18 +5.80217e-18 +1.85042e-19 +5.51045e-19 +2.89372e-18 +5.36391e-19 +5.32427e-19 +4.01929e-18 +0 +0.000178946 +0.00019248 +0.00031271 +0.000450776 +0.000597945 +0.000752011 +0.000911909 +0.001077 +0.00124684 +0.00142112 +0.000873372 +4.04159e-05 +2.1378e-18 +8.86509e-18 +8.12347e-18 +1.32341e-17 +6.68092e-18 +5.85227e-18 +1.159e-17 +9.48053e-18 +1.23622e-18 +8.68378e-18 +1.67124e-17 +9.35315e-18 +1.63847e-17 +6.58329e-18 +1.001e-17 +1.12941e-17 +8.67177e-18 +6.78512e-19 +6.26352e-18 +4.42945e-19 +6.79736e-18 +6.07836e-18 +1.31098e-17 +1.14895e-17 +4.21286e-18 +1.16776e-17 +7.43175e-18 +2.30931e-17 +2.02326e-18 +6.01422e-19 +9.51606e-18 +5.49525e-18 +1.55413e-17 +1.42303e-17 +2.4747e-18 +4.33373e-18 +3.91662e-18 +4.24607e-18 +9.1364e-19 +3.25556e-18 +2.68526e-18 +8.87231e-19 +5.43656e-18 +9.37304e-18 +1.71793e-18 +1.42823e-17 +4.71177e-18 +1.66559e-18 +2.47237e-18 +8.15609e-19 +4.84302e-19 +2.87604e-18 +2.53004e-18 +3.59864e-18 +1.78061e-17 +6.74193e-18 +7.59235e-19 +6.45193e-18 +5.93892e-18 +3.37913e-18 +3.78005e-18 +1.06451e-17 +8.54912e-19 +5.77467e-18 +6.6893e-18 +1.79293e-18 +2.04646e-18 +7.96432e-18 +6.81149e-18 +8.19267e-18 +3.93801e-19 +6.59671e-18 +3.58376e-18 +8.10265e-18 +1.00201e-17 +9.91289e-19 +1.83906e-18 +6.79118e-18 +1.31965e-17 +7.59563e-18 +2.11344e-18 +1.27748e-18 +5.05474e-18 +6.82524e-19 +3.7096e-18 +4.66998e-18 +2.52979e-18 +1.08828e-18 +4.94986e-18 +1.0647e-18 +2.42187e-18 +6.6637e-18 +1.64792e-18 +5.1951e-18 +6.24607e-18 +6.07729e-18 +6.89722e-19 +4.87231e-18 +6.16799e-18 +3.4326e-18 +5.84367e-18 +3.72835e-19 +2.21276e-18 +5.65139e-18 +4.87885e-20 +2.49575e-18 +1.21634e-17 +8.71561e-18 +2.41309e-18 +3.74954e-18 +6.067e-18 +2.9997e-18 +3.7897e-18 +4.39862e-18 +8.21491e-18 +8.12173e-18 +4.40881e-18 +4.35871e-18 +4.00173e-18 +2.43453e-18 +3.91137e-18 +7.88214e-18 +6.46903e-18 +2.90693e-18 +6.75324e-18 +6.81847e-18 +6.88037e-18 +1.94364e-18 +4.93961e-18 +5.96799e-18 +4.02215e-18 +1.85571e-18 +1.30996e-19 +1.29908e-18 +3.96747e-18 +1.06259e-17 +4.50112e-18 +1.97725e-18 +4.64132e-18 +8.32946e-18 +3.6987e-18 +1.88771e-18 +5.82676e-18 +1.72755e-18 +2.61785e-18 +4.61179e-18 +3.38864e-19 +8.80818e-19 +3.30926e-19 +4.72043e-18 +4.13465e-18 +4.29482e-18 +1.55265e-18 +2.04564e-18 +5.17041e-19 +2.06913e-19 +2.07217e-18 +6.23984e-18 +2.023e-18 +2.28435e-18 +5.6654e-19 +1.48747e-18 +2.79842e-19 +4.17227e-18 +1.07525e-18 +3.54096e-19 +9.6318e-19 +0 +0.000178941 +0.000192466 +0.000312695 +0.000450755 +0.000597919 +0.000751979 +0.00091187 +0.00107695 +0.00124679 +0.00142106 +0.000873371 +4.05383e-05 +3.62639e-18 +1.39284e-17 +9.38127e-18 +8.02002e-18 +6.40672e-18 +4.82522e-18 +6.82315e-19 +2.13418e-17 +1.36374e-17 +2.91138e-17 +1.34914e-17 +2.07461e-18 +1.11636e-17 +1.42242e-17 +1.21927e-17 +1.57995e-17 +1.00962e-17 +7.31133e-19 +6.15049e-18 +6.80303e-18 +6.14204e-18 +3.62365e-18 +3.58608e-18 +8.7003e-18 +2.83231e-18 +7.39895e-18 +1.30904e-17 +5.48915e-18 +4.45414e-18 +1.0964e-17 +2.23361e-17 +1.45238e-17 +2.70773e-18 +6.18245e-19 +4.1802e-18 +2.11859e-18 +6.08847e-18 +1.26404e-17 +1.50466e-17 +1.43068e-17 +1.91297e-18 +3.40645e-18 +5.80398e-18 +5.27888e-18 +4.76438e-18 +7.43254e-18 +8.78748e-18 +3.54829e-18 +1.00036e-17 +2.7778e-18 +6.18264e-18 +8.32438e-18 +7.39415e-18 +4.65445e-18 +1.05233e-17 +4.066e-18 +4.83104e-19 +7.79696e-18 +1.65253e-17 +1.24532e-18 +8.31401e-18 +4.26374e-18 +5.42183e-18 +4.48672e-19 +1.20798e-17 +3.78804e-18 +9.5098e-18 +6.98219e-18 +8.31424e-18 +6.41045e-18 +6.33935e-18 +2.86285e-18 +2.15747e-18 +1.22603e-17 +3.42696e-18 +3.12734e-18 +1.67503e-18 +1.27405e-18 +3.65346e-18 +9.21756e-18 +8.86749e-18 +2.43545e-19 +5.29754e-18 +2.38077e-18 +1.08277e-17 +1.27995e-17 +1.84062e-18 +1.25105e-17 +1.23682e-17 +8.55931e-18 +1.42856e-18 +3.36777e-18 +2.14801e-18 +3.82177e-18 +4.30273e-18 +1.86747e-18 +4.20427e-18 +4.15592e-18 +1.00229e-18 +7.94088e-19 +7.83558e-19 +2.9495e-19 +2.6777e-18 +9.45209e-19 +9.06199e-18 +5.17087e-18 +6.57042e-18 +1.01914e-17 +9.80471e-18 +1.85003e-18 +8.71832e-19 +3.09718e-18 +2.63564e-18 +2.01696e-18 +4.2344e-18 +4.5946e-18 +3.48736e-18 +2.08299e-18 +4.82922e-18 +0 +6.18346e-18 +6.26253e-18 +2.7166e-18 +4.17533e-18 +8.98753e-18 +7.06058e-18 +1.15059e-18 +3.69449e-18 +2.94836e-18 +6.9449e-19 +1.37022e-18 +2.0305e-18 +3.07599e-18 +3.03852e-18 +6.39494e-18 +2.32086e-18 +9.16948e-18 +4.5289e-18 +5.71645e-18 +1.59611e-18 +2.42522e-18 +1.43754e-18 +2.38749e-19 +5.14122e-18 +2.30814e-19 +2.27993e-18 +4.27819e-18 +5.44845e-18 +2.52578e-18 +5.4308e-19 +8.46197e-18 +4.12595e-18 +5.95479e-18 +4.23001e-18 +2.85326e-18 +5.43331e-18 +6.97559e-19 +7.84893e-19 +2.71271e-18 +5.16603e-18 +5.57347e-18 +2.8435e-19 +5.71058e-18 +4.57363e-19 +1.16832e-18 +1.59584e-18 +6.74037e-18 +5.53123e-18 +0.000178935 +0.000192453 +0.000312682 +0.000450737 +0.000597896 +0.000751951 +0.000911837 +0.00107691 +0.00124674 +0.00142101 +0.000873341 +4.06332e-05 +1.77096e-17 +1.2773e-17 +9.47916e-18 +2.44019e-18 +1.38834e-17 +8.51095e-18 +2.86613e-17 +1.05247e-17 +1.56199e-17 +9.44428e-18 +2.60499e-17 +1.4007e-18 +1.8431e-17 +2.19394e-18 +1.24787e-17 +2.68375e-18 +8.76154e-18 +1.47086e-17 +5.97618e-18 +5.26935e-18 +4.57693e-18 +1.42115e-17 +3.23459e-18 +1.00911e-17 +6.20819e-18 +9.87355e-18 +8.57531e-18 +7.77528e-18 +9.55496e-18 +3.57283e-18 +9.91746e-18 +1.03728e-17 +1.94031e-17 +2.13961e-17 +1.85432e-17 +1.10035e-17 +1.31228e-17 +4.85359e-18 +3.75648e-18 +2.0639e-18 +1.02087e-18 +3.12846e-18 +8.18329e-18 +7.5001e-18 +8.97797e-18 +8.87772e-18 +4.77267e-19 +9.24638e-18 +1.86587e-18 +9.22548e-19 +2.73632e-18 +1.01005e-17 +5.52838e-18 +1.07556e-17 +3.13797e-18 +3.53325e-18 +1.36398e-18 +8.42326e-19 +5.9958e-18 +5.92753e-18 +9.60383e-18 +9.81598e-18 +1.71009e-17 +1.17156e-17 +5.20771e-18 +6.7614e-18 +5.77225e-18 +3.07809e-18 +5.71417e-18 +2.27392e-18 +3.33541e-18 +2.9388e-18 +1.48798e-18 +6.79098e-18 +5.67414e-18 +3.42447e-19 +7.23227e-18 +1.40295e-18 +7.13025e-18 +3.00133e-18 +1.29009e-18 +1.04506e-17 +8.06057e-18 +5.10295e-18 +6.94912e-18 +7.17101e-18 +8.04678e-18 +6.94265e-18 +1.05542e-17 +2.43358e-18 +1.14496e-18 +2.03636e-18 +3.46524e-18 +7.39985e-18 +8.94809e-18 +1.94153e-18 +0 +1.05278e-18 +5.19862e-19 +3.38972e-18 +2.13105e-18 +2.60655e-18 +1.28749e-18 +9.78373e-19 +7.92529e-18 +4.67824e-18 +3.67825e-18 +1.2111e-18 +4.60795e-19 +1.09107e-18 +6.28503e-19 +4.61163e-18 +3.85431e-18 +2.85513e-18 +6.92192e-18 +4.22001e-19 +4.91834e-18 +5.51612e-18 +1.62676e-18 +4.818e-19 +2.85499e-18 +4.15085e-18 +4.64051e-18 +2.13857e-18 +2.26281e-18 +4.02203e-18 +0 +7.26531e-19 +2.94056e-18 +7.09169e-19 +3.98555e-18 +3.86645e-18 +6.27179e-18 +5.1827e-18 +1.72868e-18 +6.03644e-18 +4.59941e-18 +2.55829e-18 +3.85189e-18 +1.55883e-18 +1.23131e-18 +1.27632e-18 +2.16023e-18 +6.0396e-18 +6.31274e-18 +1.21171e-17 +7.00586e-18 +1.68783e-18 +3.16346e-18 +1.97239e-18 +5.51587e-18 +3.62954e-18 +6.74332e-18 +1.03996e-17 +6.56918e-18 +1.01344e-18 +1.29983e-18 +1.03616e-18 +3.74958e-18 +5.38257e-18 +7.58862e-19 +2.85565e-18 +4.64615e-19 +3.73797e-18 +2.51955e-18 +3.41838e-18 +6.58768e-19 +5.53281e-18 +0.000178928 +0.000192443 +0.000312671 +0.000450723 +0.000597879 +0.00075193 +0.000911812 +0.00107688 +0.00124671 +0.00142097 +0.000873274 +4.06915e-05 +1.48993e-17 +5.19376e-18 +7.68463e-18 +6.77441e-18 +1.7159e-18 +2.97392e-17 +2.20593e-17 +3.24086e-17 +5.62857e-18 +1.81682e-17 +1.01688e-17 +8.54406e-18 +3.0657e-18 +2.29232e-18 +1.49899e-17 +4.48305e-18 +1.02247e-17 +1.30094e-17 +2.00649e-17 +8.503e-18 +1.84991e-20 +1.45313e-17 +2.73998e-18 +1.98243e-18 +2.476e-17 +2.00237e-18 +3.89556e-18 +1.35747e-17 +6.36705e-18 +6.91186e-18 +3.72168e-18 +1.91202e-17 +9.71937e-18 +1.80967e-17 +1.16545e-18 +1.12329e-17 +5.80831e-18 +1.38472e-17 +2.22567e-18 +1.01201e-17 +1.1417e-18 +1.48315e-17 +2.01839e-17 +5.93249e-18 +1.16753e-17 +1.47194e-17 +3.59901e-18 +6.11212e-18 +9.65529e-18 +1.55125e-17 +1.53793e-17 +7.36049e-18 +4.81788e-18 +1.48438e-17 +1.89133e-18 +1.16698e-17 +7.83813e-18 +2.31472e-18 +4.09076e-18 +8.69299e-19 +4.38078e-18 +5.64424e-18 +1.03153e-17 +9.32221e-18 +1.00705e-17 +9.14109e-18 +1.19893e-18 +2.80333e-18 +2.11142e-20 +1.18702e-17 +9.74726e-18 +3.46071e-18 +3.01006e-18 +1.9091e-18 +7.072e-18 +4.01262e-18 +1.01573e-17 +1.4335e-18 +4.93843e-18 +2.42204e-18 +6.53703e-18 +5.79135e-18 +6.90447e-19 +6.49444e-19 +8.85218e-18 +2.59768e-18 +1.8585e-17 +1.23607e-17 +5.00525e-18 +1.07909e-17 +1.95281e-17 +6.64417e-18 +6.21318e-18 +2.0644e-18 +3.41158e-19 +3.41143e-18 +1.65672e-18 +1.11792e-17 +5.39281e-19 +7.07208e-18 +1.58566e-17 +8.1914e-18 +9.41914e-18 +6.21702e-18 +6.38804e-18 +3.00575e-18 +3.98931e-18 +3.93871e-18 +5.3588e-18 +4.68361e-19 +2.58846e-18 +6.57112e-18 +4.36997e-18 +1.15631e-18 +5.40013e-18 +2.2537e-18 +1.28351e-18 +2.11475e-19 +0 +1.89297e-18 +1.05663e-18 +3.04727e-18 +5.50098e-18 +3.78904e-18 +3.3929e-18 +5.63198e-18 +2.2535e-19 +7.00599e-18 +4.46333e-18 +9.7716e-21 +2.70817e-18 +5.02887e-18 +8.19048e-18 +8.42537e-18 +1.01396e-18 +4.80291e-18 +3.02802e-18 +3.3128e-18 +6.89051e-18 +7.77962e-18 +4.77448e-18 +6.9587e-18 +9.1277e-19 +5.81548e-18 +5.91542e-19 +5.83646e-19 +3.85829e-18 +9.00512e-18 +1.45745e-18 +4.81115e-18 +5.59233e-18 +1.45665e-20 +2.44259e-18 +2.88453e-19 +5.03835e-18 +3.41569e-18 +4.37496e-18 +2.52989e-18 +5.26017e-18 +3.95788e-18 +7.07011e-18 +3.85085e-18 +3.79834e-18 +5.84817e-18 +5.04714e-18 +8.88934e-18 +5.392e-18 +5.53422e-18 +0.000178937 +0.00019298 +0.000313096 +0.000451056 +0.000598148 +0.000752155 +0.000912004 +0.00107705 +0.00124685 +0.0014211 +0.000873416 +4.07044e-05 +0 +6.19265e-21 +2.31645e-17 +0 +0 +2.23802e-17 +0 +0 +2.16192e-17 +0 +2.11245e-17 +1.10372e-20 +0 +0 +1.06587e-20 +0 +1.96994e-17 +1.94703e-17 +0 +0 +1.87968e-17 +1.85769e-17 +0 +9.59047e-21 +0 +1.77197e-17 +1.75109e-17 +0 +0 +1.68974e-17 +0 +1.6499e-17 +0 +1.61089e-17 +1.59169e-17 +0 +8.21359e-21 +1.5353e-17 +1.51689e-17 +0 +7.82653e-21 +1.46285e-17 +1.44521e-17 +0 +1.41051e-17 +1.39343e-17 +1.37654e-17 +0 +1.34329e-17 +0 +1.31076e-17 +0 +0 +1.33548e-20 +1.3191e-20 +1.30291e-20 +1.21731e-17 +0 +0 +1.17283e-17 +1.15833e-17 +1.20938e-20 +1.12981e-17 +0 +1.10191e-17 +0 +1.07463e-17 +1.12187e-20 +0 +1.03482e-17 +1.02185e-17 +0 +0 +0 +1.02692e-20 +9.59135e-18 +0 +9.35025e-18 +9.23175e-18 +9.11459e-18 +8.99876e-18 +8.88423e-18 +9.27237e-21 +0 +0 +0 +0 +0 +0 +8.01399e-18 +8.36294e-21 +0 +1.62969e-20 +0 +7.50967e-18 +7.41229e-18 +7.31604e-18 +1.52673e-20 +0 +7.03402e-18 +6.94219e-18 +0 +6.7618e-18 +0 +6.58561e-18 +6.49908e-18 +6.41358e-18 +1.26582e-17 +6.24561e-18 +6.16314e-18 +1.21632e-17 +6.0011e-18 +1.252e-20 +5.8429e-18 +5.76523e-18 +0 +0 +5.5378e-18 +0 +5.3907e-18 +5.3185e-18 +1.04943e-17 +0 +0 +0 +0 +0 +0 +0 +9.95198e-21 +0 +9.68364e-21 +0 +8.91246e-18 +8.79096e-18 +0 +0 +8.43541e-18 +8.31984e-18 +8.20573e-18 +0 +1.68759e-20 +1.66436e-20 +7.76331e-18 +0 +0 +0 +1.55249e-20 +1.53096e-20 +7.14038e-18 +1.48872e-20 +1.46799e-20 +1.44754e-20 +1.42734e-20 +0 +1.38771e-20 +6.47152e-18 +1.3491e-20 +0 +0 +0 +6.02939e-18 +5.94437e-18 +0 +5.7776e-18 +5.69583e-18 +0 +5.53545e-18 +3.5745e-05 +0.00022287 +0.000315308 +0.000455061 +0.00060213 +0.000755821 +0.000915333 +0.00108008 +0.00124962 +0.00142364 +0.000859313 +2.51728e-05 +1.78474e-18 +6.71909e-18 +1.19653e-18 +1.61109e-18 +9.22645e-18 +1.82205e-17 +1.22007e-17 +1.72533e-17 +1.60273e-17 +9.95248e-19 +1.86701e-17 +1.63959e-17 +1.13026e-17 +1.02132e-17 +7.65574e-18 +1.38264e-18 +6.5517e-18 +1.09596e-17 +8.15886e-18 +5.42792e-18 +1.14944e-17 +1.04083e-17 +0 +2.494e-18 +4.10305e-19 +7.93819e-18 +1.18334e-17 +6.94503e-18 +3.97282e-18 +7.84259e-18 +3.7945e-18 +6.14207e-18 +4.58355e-18 +1.45933e-18 +1.54828e-17 +4.33542e-18 +3.5773e-18 +6.36865e-18 +1.4005e-17 +1.41583e-18 +6.78653e-18 +6.04066e-18 +1.25701e-17 +1.11895e-17 +4.47982e-18 +6.35076e-18 +3.19479e-18 +1.30343e-17 +7.95614e-18 +5.43041e-18 +0 +2.29866e-18 +5.2165e-18 +5.1469e-18 +1.65599e-18 +5.44596e-19 +2.14928e-18 +3.28667e-18 +3.24259e-18 +2.11554e-18 +5.24311e-18 +5.1223e-18 +0 +0 +8.87134e-18 +6.32576e-18 +4.78567e-18 +9.95077e-18 +1.07289e-17 +8.33148e-18 +2.30999e-18 +8.76366e-19 +2.20432e-18 +4.2632e-19 +8.9987e-18 +9.78817e-18 +8.18232e-19 +5.32588e-18 +4.53656e-18 +3.21837e-18 +1.02966e-17 +4.27578e-18 +6.92775e-18 +3.71454e-19 +7.32389e-19 +6.64492e-18 +5.4846e-18 +4.63602e-18 +6.02644e-18 +3.42043e-19 +1.41456e-18 +2.72338e-18 +1.31011e-18 +2.97107e-18 +7.19663e-18 +5.46342e-18 +4.08676e-18 +3.05273e-19 +4.33439e-18 +4.27365e-18 +4.15518e-18 +6.34721e-19 +4.03925e-18 +1.7388e-18 +3.98162e-18 +7.25125e-18 +3.33258e-18 +5.83088e-19 +4.28392e-18 +4.99582e-18 +4.92502e-18 +3.60384e-18 +2.02309e-18 +4.86415e-19 +1.19874e-18 +7.56378e-19 +3.5877e-18 +3.30685e-18 +4.39146e-18 +4.46255e-20 +1.58358e-18 +6.02664e-18 +6.79495e-18 +2.40097e-18 +3.40444e-18 +4.17389e-18 +4.03317e-19 +3.25956e-18 +3.99612e-18 +4.32457e-18 +1.90273e-19 +1.91272e-18 +5.91723e-19 +4.51684e-18 +5.3488e-18 +5.09429e-18 +3.41659e-18 +0 +1.0834e-18 +1.70161e-18 +3.35342e-18 +4.66515e-18 +7.21476e-18 +2.92549e-18 +2.85168e-18 +1.2217e-18 +3.01388e-19 +6.22716e-19 +5.08389e-18 +1.0594e-17 +2.60953e-18 +5.86882e-19 +6.19533e-18 +2.71286e-19 +5.4525e-18 +5.10858e-18 +5.29244e-18 +2.55592e-19 +2.5684e-18 +3.07605e-18 +3.2748e-18 +1.20384e-18 +3.36786e-18 +2.14951e-18 +2.11749e-18 +0 +1.83143e-18 +5.63222e-18 +0.000182879 +0.000201481 +0.000330793 +0.000469636 +0.00061544 +0.000767837 +0.000926203 +0.00108997 +0.00125869 +0.00141648 +0.000810454 +1.64966e-18 +3.25993e-18 +1.28839e-17 +1.5912e-17 +7.07459e-18 +2.52408e-18 +3.45283e-18 +1.30766e-17 +8.23829e-18 +1.3318e-17 +2.06494e-17 +2.6718e-17 +2.10441e-17 +1.90271e-17 +2.31469e-17 +3.61031e-17 +6.96287e-18 +5.2004e-18 +1.6571e-18 +8.18402e-19 +7.43712e-18 +0 +1.5458e-17 +6.54345e-18 +1.96964e-17 +1.85418e-17 +7.50602e-19 +5.33708e-18 +6.73524e-18 +1.2436e-17 +1.17105e-17 +2.82089e-18 +8.4963e-18 +4.95181e-18 +1.38551e-17 +5.49973e-18 +8.08021e-18 +5.363e-18 +9.81659e-18 +6.37726e-19 +2.6448e-18 +1.34308e-17 +1.38756e-17 +4.24355e-18 +1.16122e-17 +8.51041e-18 +1.86733e-18 +5.87648e-18 +9.32857e-18 +2.2464e-18 +4.43556e-18 +5.03592e-18 +1.08081e-18 +6.40367e-19 +3.79212e-18 +9.04709e-18 +1.00603e-17 +5.06879e-19 +6.60244e-18 +6.02377e-18 +8.96805e-18 +1.73199e-17 +5.31887e-18 +7.31268e-18 +4.7195e-18 +3.17864e-17 +2.30798e-17 +5.42807e-18 +1.1242e-17 +7.10822e-18 +2.65222e-18 +1.13148e-17 +5.50018e-18 +1.04452e-17 +7.46754e-18 +3.68495e-18 +1.18584e-18 +4.68205e-19 +9.39255e-18 +5.77402e-18 +1.49975e-18 +1.18372e-18 +6.71649e-18 +7.78017e-18 +5.82898e-18 +1.12226e-18 +1.70257e-17 +2.18529e-18 +9.02912e-18 +3.72326e-18 +1.0497e-18 +1.65686e-17 +1.21326e-17 +1.63812e-18 +5.09692e-18 +2.453e-18 +6.05001e-19 +2.74559e-18 +3.88644e-18 +5.11194e-18 +3.78237e-18 +7.23621e-18 +1.02614e-17 +1.33134e-17 +5.64396e-18 +3.31904e-18 +1.035e-17 +1.62516e-17 +5.75467e-18 +2.1286e-18 +1.79965e-18 +2.76116e-18 +4.47421e-18 +6.61963e-18 +5.48804e-18 +2.79973e-18 +9.20444e-18 +3.08652e-18 +1.28029e-17 +8.38842e-18 +5.13781e-18 +2.49056e-18 +4.99702e-18 +4.67737e-18 +9.7194e-18 +3.98025e-18 +2.24292e-18 +9.48104e-19 +1.15279e-17 +7.0663e-18 +4.84728e-18 +2.83794e-18 +7.36405e-19 +2.75933e-18 +1.50403e-18 +7.62426e-18 +1.94897e-18 +8.78464e-18 +5.41345e-18 +4.93697e-18 +1.00641e-17 +2.33465e-18 +1.34269e-17 +6.11448e-18 +3.48015e-18 +7.90345e-18 +3.98642e-18 +6.72859e-18 +6.63318e-18 +1.50464e-18 +6.16103e-18 +9.78485e-18 +1.88477e-18 +1.42077e-18 +5.93239e-19 +3.61059e-18 +1.0206e-17 +3.92093e-18 +1.52554e-18 +3.30811e-18 +1.08689e-18 +9.73987e-19 +3.16793e-18 +2.17603e-18 +1.49218e-18 +2.29775e-18 +1.17753e-18 +1.8017e-19 +0 +0.000211433 +0.00025844 +0.000366842 +0.000497962 +0.000639836 +0.000789481 +0.000945687 +0.00110769 +0.00127495 +0.00136436 +0.00071291 +8.65289e-18 +2.78938e-18 +2.05894e-17 +2.14442e-17 +6.46733e-18 +1.18983e-17 +8.77732e-18 +1.04116e-18 +1.71528e-18 +9.49474e-18 +1.62563e-17 +8.44827e-18 +9.98772e-18 +6.47336e-19 +1.23165e-17 +8.22089e-18 +3.90633e-18 +5.55951e-18 +1.52642e-18 +1.50843e-18 +9.83907e-18 +1.47329e-18 +2.18399e-18 +2.30295e-18 +1.0949e-17 +4.21555e-18 +7.08184e-18 +7.13547e-18 +1.17967e-17 +7.50333e-18 +1.21806e-17 +3.27068e-18 +1.06e-17 +1.09848e-17 +8.32955e-18 +1.52131e-17 +1.08422e-17 +3.65193e-18 +1.20315e-18 +6.65433e-18 +2.34797e-18 +4.64207e-19 +8.70865e-18 +1.67542e-17 +1.54334e-17 +0 +3.90736e-17 +3.709e-17 +2.1302e-18 +2.86184e-17 +1.16405e-17 +4.7227e-18 +3.24518e-18 +3.60619e-18 +6.72831e-18 +2.54105e-18 +9.65333e-19 +1.02975e-17 +5.27374e-18 +1.22778e-17 +3.1602e-17 +5.08097e-18 +8.96423e-19 +7.25699e-18 +1.06632e-17 +1.82994e-17 +1.26162e-17 +3.03097e-18 +1.61283e-17 +8.8666e-18 +1.62204e-18 +5.44398e-18 +4.11097e-18 +3.74711e-18 +2.4668e-18 +2.05995e-20 +5.71206e-18 +8.31167e-18 +1.23104e-17 +3.32809e-18 +6.85778e-18 +3.94971e-18 +2.22845e-18 +2.06258e-18 +6.65218e-18 +5.36125e-18 +2.91119e-18 +4.44165e-18 +3.99804e-18 +1.31141e-17 +1.09351e-17 +1.24081e-17 +2.81725e-18 +4.35297e-18 +1.79071e-18 +7.77649e-18 +6.97837e-18 +9.18444e-19 +5.43956e-18 +6.93512e-18 +9.27451e-18 +7.51949e-18 +1.39862e-18 +1.69865e-18 +5.65836e-18 +2.89576e-18 +5.71608e-18 +2.4179e-18 +1.79144e-18 +5.78947e-18 +5.24148e-20 +4.39612e-18 +4.71567e-19 +4.74684e-18 +0 +1.08768e-18 +1.05545e-17 +2.11835e-18 +7.1424e-18 +3.7817e-18 +6.78463e-19 +3.1803e-18 +4.62414e-18 +9.77714e-18 +5.94903e-18 +1.42796e-18 +3.13774e-19 +4.63793e-19 +3.35237e-18 +1.80408e-18 +3.55992e-18 +5.99994e-18 +1.29998e-18 +5.69752e-19 +2.81072e-18 +1.38632e-19 +1.50441e-18 +5.12697e-18 +6.78814e-18 +6.82761e-18 +3.36781e-18 +1.02216e-18 +3.65511e-18 +4.72446e-18 +9.81113e-19 +1.20972e-18 +8.359e-19 +7.06914e-19 +7.66227e-18 +5.26742e-18 +3.5014e-18 +1.02487e-17 +1.97862e-18 +5.52675e-18 +4.27533e-18 +6.21936e-18 +6.65391e-18 +9.63813e-18 +1.0112e-19 +8.37717e-18 +3.24554e-18 +4.87788e-19 +2.96525e-18 +3.39572e-18 +2.23259e-18 +5.22859e-18 +1.62893e-18 +1.87332e-18 +5.62949e-18 +0.000267393 +0.000348552 +0.000426167 +0.000544535 +0.000678982 +0.000823741 +0.00097635 +0.00113553 +0.00130047 +0.00128063 +0.000563399 +1.74931e-17 +1.49271e-17 +4.36203e-18 +1.12834e-17 +2.69143e-17 +1.33095e-17 +2.56837e-18 +4.76264e-18 +8.16422e-18 +4.96862e-18 +1.59694e-17 +1.09335e-17 +2.40268e-18 +2.376e-18 +1.58597e-17 +1.04555e-17 +5.75694e-19 +7.3836e-18 +7.30117e-18 +9.16302e-18 +8.23666e-19 +7.60127e-18 +0 +3.59134e-20 +9.97168e-18 +8.04301e-18 +2.18043e-17 +0 +1.50486e-18 +1.23951e-18 +1.56856e-17 +2.42389e-18 +4.79083e-19 +4.2627e-18 +4.91624e-18 +1.6663e-17 +6.63473e-18 +1.49265e-17 +1.76616e-17 +5.08287e-18 +1.17964e-17 +9.28524e-18 +1.30201e-17 +1.66673e-17 +4.17076e-19 +1.58714e-17 +1.18165e-17 +1.65121e-17 +2.03006e-17 +1.4163e-17 +3.88831e-18 +1.86382e-17 +3.03885e-18 +9.7593e-18 +1.65078e-17 +1.09983e-17 +6.52142e-18 +2.14824e-18 +1.04378e-17 +5.41981e-18 +3.45523e-19 +5.12179e-18 +6.91698e-18 +4.16748e-18 +8.23908e-19 +1.30286e-18 +1.28662e-18 +2.54296e-18 +1.00492e-17 +1.42731e-17 +5.51849e-18 +6.9668e-18 +6.8833e-18 +2.66114e-18 +2.62946e-18 +4.0408e-18 +4.70479e-18 +4.36635e-18 +4.59193e-18 +6.87335e-19 +3.53088e-18 +8.58614e-18 +7.95176e-19 +4.97494e-18 +1.29374e-18 +1.27799e-18 +2.52389e-18 +9.22438e-18 +3.20139e-18 +3.89195e-18 +1.20133e-18 +3.56038e-18 +1.87524e-18 +9.26093e-19 +4.11612e-18 +2.03292e-18 +5.57703e-18 +1.98371e-18 +2.82864e-18 +2.22624e-19 +4.88136e-18 +7.96508e-18 +2.08877e-19 +1.10385e-17 +8.47855e-18 +9.98225e-19 +3.93729e-19 +3.30529e-18 +1.53665e-18 +9.49224e-19 +1.31131e-18 +1.10904e-18 +4.19789e-18 +1.44176e-18 +8.89752e-19 +6.85254e-18 +5.55181e-18 +5.99534e-18 +8.62565e-18 +2.00434e-18 +6.75959e-18 +1.30295e-18 +1.44701e-18 +4.75986e-18 +3.75939e-18 +0 +4.5987e-19 +1.80909e-18 +3.12462e-18 +6.90364e-18 +3.62529e-18 +8.01597e-18 +1.55481e-18 +8.36919e-18 +1.10153e-17 +5.70849e-18 +8.04979e-19 +1.32431e-18 +1.04814e-18 +4.00045e-18 +3.82067e-19 +2.60453e-19 +1.61434e-18 +4.40857e-18 +1.32954e-18 +1.19294e-18 +3.53232e-18 +9.30156e-19 +3.45453e-19 +9.0549e-19 +6.03238e-18 +8.1579e-18 +5.88878e-20 +3.32843e-18 +6.3833e-19 +7.00607e-18 +1.54883e-18 +1.42667e-18 +2.21069e-18 +1.78809e-18 +6.26234e-18 +3.89739e-19 +3.62051e-18 +5.35904e-18 +5.56602e-19 +2.28838e-18 +3.52244e-18 +3.5647e-18 +4.75941e-20 +0.000368765 +0.000446269 +0.000506909 +0.000611481 +0.00073587 +0.000873503 +0.00102082 +0.00117588 +0.00133748 +0.00115774 +0.000352466 +1.18777e-17 +2.47435e-18 +5.50899e-18 +2.42263e-18 +2.15742e-17 +1.06735e-17 +3.52028e-18 +1.94472e-17 +1.78056e-17 +8.80858e-18 +5.06037e-18 +8.3444e-19 +2.20152e-18 +1.30685e-17 +1.23905e-17 +7.46162e-18 +3.42801e-18 +7.30283e-18 +3.09645e-18 +1.8123e-17 +1.21206e-17 +2.17323e-17 +3.70676e-18 +1.95582e-18 +4.35248e-18 +1.14812e-17 +3.78577e-18 +8.19141e-18 +6.01907e-18 +1.5113e-17 +4.75647e-18 +5.82503e-18 +1.57325e-17 +5.6983e-18 +1.73415e-18 +2.14475e-18 +9.75416e-18 +1.67872e-18 +5.39311e-18 +7.38483e-18 +8.31791e-18 +6.21982e-18 +9.72282e-18 +2.94354e-18 +1.20315e-17 +9.6093e-19 +1.89793e-18 +6.00533e-18 +1.22483e-17 +1.26627e-17 +7.44006e-18 +8.97193e-19 +4.8019e-20 +1.4913e-17 +1.19705e-17 +3.94552e-18 +3.39211e-18 +3.35394e-18 +8.78784e-18 +8.0331e-18 +3.24175e-18 +0 +1.64778e-17 +5.32594e-18 +1.85889e-18 +2.45114e-18 +5.44921e-18 +1.07744e-17 +9.17208e-18 +1.05299e-17 +5.4939e-18 +3.43034e-18 +9.0422e-18 +0 +3.73635e-20 +7.3696e-18 +2.15842e-18 +5.86724e-18 +1.58169e-18 +2.08456e-18 +4.12148e-18 +2.54596e-18 +5.53609e-18 +2.98441e-18 +6.65244e-20 +6.31679e-18 +1.53678e-17 +4.03444e-18 +2.8153e-18 +3.01349e-18 +1.60486e-18 +7.2452e-18 +1.79004e-18 +6.63381e-19 +5.91407e-20 +4.75245e-18 +1.49499e-18 +1.22318e-17 +1.66722e-18 +4.11877e-19 +6.10502e-19 +3.01634e-18 +2.18574e-18 +7.87171e-19 +1.74608e-18 +5.18804e-20 +7.57663e-19 +1.12408e-18 +5.1778e-18 +5.48154e-18 +8.30409e-18 +3.03214e-18 +2.46756e-18 +8.70529e-19 +1.20409e-18 +4.41876e-18 +6.88389e-18 +1.99046e-18 +9.50442e-18 +9.06589e-18 +1.75924e-18 +2.3703e-18 +1.87342e-18 +1.54185e-19 +1.67543e-18 +2.55911e-18 +1.53975e-19 +4.11108e-18 +1.45027e-19 +1.43258e-17 +4.10365e-18 +5.59096e-19 +5.10831e-18 +6.81849e-19 +1.62005e-18 +8.78107e-18 +7.0963e-18 +1.03831e-18 +3.9745e-18 +2.28309e-18 +4.25159e-18 +3.76487e-19 +4.14766e-18 +7.71001e-18 +3.09327e-18 +1.76245e-18 +2.08963e-18 +4.58385e-19 +6.79026e-19 +4.02344e-18 +3.09093e-18 +1.74389e-18 +6.45796e-19 +3.8268e-18 +2.38695e-19 +1.03797e-18 +1.02347e-18 +3.63828e-18 +0 +2.04173e-19 +0 +3.65098e-18 +7.96911e-18 +2.99795e-18 +7.41619e-19 +5.29697e-18 +0 +3.68926e-19 +9.51566e-20 +0.000482643 +0.000542601 +0.000614093 +0.000699397 +0.000812668 +0.00094146 +0.00108185 +0.00123138 +0.00138847 +0.000877109 +7.24874e-05 +5.69422e-18 +2.08563e-17 +4.18513e-18 +2.76179e-18 +1.33959e-17 +1.92139e-17 +1.63404e-17 +2.09474e-17 +7.88186e-19 +3.89688e-18 +9.25725e-18 +9.67191e-18 +2.77118e-18 +6.98191e-18 +1.08594e-17 +6.8396e-18 +1.2572e-17 +1.7707e-17 +2.36824e-17 +1.99229e-17 +4.1756e-18 +2.34169e-17 +1.43141e-17 +1.34914e-18 +1.55771e-18 +1.51954e-17 +1.22045e-17 +5.60782e-18 +8.96426e-18 +2.21769e-17 +1.67205e-18 +7.85938e-18 +2.45596e-18 +1.39741e-17 +1.60412e-18 +5.95503e-19 +2.35521e-18 +9.51374e-18 +7.87659e-18 +1.02647e-17 +1.88152e-18 +0 +1.84197e-18 +2.18617e-18 +1.62225e-17 +6.77701e-18 +6.70486e-18 +1.43146e-17 +9.32676e-18 +1.77704e-17 +9.46664e-18 +6.68958e-18 +3.30902e-18 +2.61924e-18 +7.12483e-18 +5.7669e-18 +1.17266e-17 +9.4057e-18 +3.12974e-19 +1.84082e-18 +7.89081e-18 +5.40399e-18 +2.673e-18 +1.46875e-18 +1.39471e-17 +9.1975e-18 +5.69877e-19 +3.93748e-18 +2.78134e-18 +6.60254e-18 +7.34676e-18 +6.45912e-18 +1.86327e-18 +6.84494e-18 +1.82266e-18 +4.37789e-18 +1.12065e-17 +9.82379e-18 +1.99323e-18 +2.46463e-18 +6.33534e-18 +6.26501e-18 +1.19323e-18 +4.0062e-18 +6.05923e-18 +9.21846e-19 +2.27985e-18 +8.11325e-18 +7.57747e-18 +2.28304e-19 +2.17918e-18 +1.29291e-18 +2.98307e-18 +8.63858e-18 +8.54182e-18 +5.35621e-18 +2.03685e-18 +2.0147e-18 +5.99819e-19 +1.37925e-18 +2.14202e-18 +5.77446e-18 +6.47042e-18 +9.97204e-18 +3.72074e-18 +8.09233e-18 +2.54607e-18 +7.01081e-18 +6.57572e-18 +5.44756e-18 +9.72737e-18 +4.12133e-18 +5.26267e-18 +8.39127e-19 +1.32802e-18 +3.60849e-18 +4.88372e-19 +3.20549e-19 +1.7428e-18 +2.81911e-18 +6.19269e-18 +3.36909e-18 +3.02577e-18 +1.49531e-19 +1.28592e-17 +9.93513e-18 +1.58853e-18 +4.85323e-18 +1.41296e-18 +1.39659e-18 +1.65406e-18 +1.36238e-18 +2.69311e-18 +7.45305e-18 +2.63179e-18 +7.2819e-18 +3.34085e-18 +6.85774e-18 +8.03309e-18 +6.45179e-18 +1.96265e-18 +9.69284e-19 +6.46635e-18 +4.02399e-18 +4.44407e-18 +6.24111e-18 +4.34028e-18 +9.05062e-19 +3.1233e-18 +1.76473e-18 +6.56254e-19 +4.95217e-18 +8.51021e-19 +5.68984e-20 +3.53231e-18 +6.36426e-18 +2.43504e-18 +2.40558e-18 +5.94264e-19 +2.34886e-18 +3.09463e-18 +4.01345e-18 +1.51162e-18 +2.61237e-18 +3.31916e-18 +1.09419e-18 +1.44747e-18 +4.09196e-18 +0 +0.000613057 +0.000661384 +0.000743371 +0.000809891 +0.000911537 +0.00103004 +0.00116181 +0.00130422 +0.00122908 +0.000415471 +2.61767e-17 +1.91829e-17 +9.75504e-18 +4.06762e-18 +1.15803e-17 +8.97456e-18 +6.91218e-18 +4.40019e-18 +2.42068e-18 +3.83522e-18 +1.40041e-17 +2.09176e-17 +1.07054e-17 +2.41962e-17 +1.41469e-17 +1.03928e-17 +2.21469e-17 +8.63872e-18 +1.00885e-17 +7.81738e-18 +8.17007e-18 +7.23766e-18 +1.8758e-17 +1.12683e-17 +1.42554e-17 +1.59547e-17 +2.74031e-20 +7.61896e-18 +1.82618e-17 +7.87851e-19 +3.92646e-19 +1.54171e-18 +1.52628e-18 +8.30564e-18 +9.71741e-18 +7.39992e-18 +5.49424e-18 +3.62615e-18 +3.23036e-18 +6.04045e-18 +3.51722e-19 +4.17802e-18 +1.34413e-17 +4.09387e-18 +1.35156e-18 +2.3399e-18 +2.64701e-18 +1.3108e-18 +2.5938e-18 +6.43218e-19 +1.5886e-18 +1.5718e-18 +2.48919e-18 +7.39117e-18 +4.26737e-18 +1.56878e-17 +2.09054e-18 +4.13755e-18 +5.84975e-18 +3.18425e-18 +2.86495e-18 +6.80499e-18 +7.8573e-18 +1.05532e-17 +3.02328e-18 +8.16824e-19 +4.03786e-18 +4.26235e-18 +7.64512e-18 +2.70267e-19 +1.00688e-17 +8.43091e-18 +1.5169e-18 +3.00292e-18 +4.70378e-18 +4.94425e-19 +2.66739e-18 +3.83805e-18 +1.42418e-18 +5.40246e-18 +6.27498e-18 +2.5296e-18 +5.46141e-18 +6.75443e-18 +3.34162e-18 +3.08594e-18 +2.39906e-18 +1.29475e-18 +2.5621e-18 +3.37997e-18 +6.29573e-19 +3.93064e-18 +6.13815e-18 +2.83444e-18 +3.60485e-18 +1.19004e-18 +5.09697e-18 +2.71562e-18 +3.83734e-18 +2.65794e-18 +6.00922e-18 +1.30142e-18 +3.70929e-19 +1.27369e-18 +2.69804e-18 +1.06872e-18 +8.80148e-18 +2.96066e-18 +5.34028e-18 +4.09076e-18 +1.18086e-18 +2.50166e-18 +4.12375e-18 +1.95852e-18 +9.52324e-18 +2.39525e-18 +1.57929e-18 +3.12435e-19 +2.47238e-18 +2.75124e-18 +4.83797e-18 +3.58905e-18 +7.10048e-18 +4.97508e-18 +2.31542e-18 +8.58821e-18 +5.66303e-19 +8.96229e-18 +2.21602e-18 +9.31548e-18 +2.71079e-18 +6.96839e-18 +2.38572e-18 +9.43834e-18 +3.37093e-18 +3.07749e-18 +5.58183e-18 +1.00572e-18 +3.4734e-18 +9.83733e-19 +5.82563e-18 +5.7604e-18 +0 +2.34828e-18 +1.39292e-18 +5.51023e-18 +9.08235e-19 +2.6953e-18 +3.33322e-18 +2.19616e-18 +1.30445e-18 +8.61099e-19 +1.06203e-18 +3.99102e-18 +5.81743e-18 +1.84882e-18 +3.25034e-18 +9.04033e-18 +3.97326e-18 +1.3752e-18 +1.74848e-18 +6.91623e-18 +2.16026e-19 +2.13625e-19 +2.22937e-18 +3.67428e-18 +1.09444e-18 +7.4444e-19 +5.68552e-18 +5.62461e-18 +0.000734948 +0.000784176 +0.000850607 +0.000939433 +0.0010143 +0.00112463 +0.00124886 +0.00137361 +0.000742444 +5.33359e-18 +1.05469e-17 +1.56415e-17 +3.12512e-17 +1.72005e-17 +6.31268e-19 +4.35872e-18 +2.83172e-17 +7.91153e-18 +7.21977e-18 +3.5686e-18 +2.94009e-18 +8.13725e-18 +9.76764e-18 +5.73146e-19 +2.07733e-17 +5.54975e-19 +9.87467e-18 +1.63045e-18 +4.28781e-18 +4.23833e-18 +4.71269e-18 +2.22549e-17 +8.69647e-18 +1.71901e-17 +7.99545e-18 +2.27179e-17 +4.88098e-19 +6.5275e-20 +7.15135e-18 +8.48062e-18 +6.05296e-18 +1.56448e-17 +2.13718e-17 +1.21326e-17 +5.32861e-18 +8.33744e-18 +2.16883e-18 +3.85621e-18 +2.15925e-17 +1.08771e-17 +8.26747e-19 +2.45069e-18 +4.07253e-19 +7.97527e-18 +1.10316e-17 +6.61753e-18 +9.2305e-18 +4.56005e-18 +9.00988e-18 +1.11381e-18 +1.31913e-17 +1.04981e-17 +8.583e-18 +2.47355e-18 +4.18927e-18 +1.72394e-17 +1.43051e-17 +5.71972e-18 +3.65703e-18 +1.24757e-17 +1.65392e-17 +1.02507e-17 +4.42999e-18 +1.06266e-17 +4.32182e-18 +1.03673e-17 +3.0127e-18 +1.90369e-17 +1.23392e-17 +2.90157e-18 +8.02435e-18 +2.54837e-18 +6.70884e-18 +3.3126e-18 +7.36114e-18 +5.38461e-18 +1.33716e-18 +1.05026e-17 +1.19272e-17 +4.86489e-18 +3.54245e-18 +1.42317e-17 +9.61617e-18 +4.91336e-19 +8.65399e-18 +1.66278e-18 +2.34372e-18 +4.16547e-18 +8.68269e-18 +4.51205e-18 +1.78299e-18 +1.32088e-18 +1.51992e-18 +9.64747e-18 +4.44493e-18 +4.2171e-19 +2.89017e-18 +2.85328e-18 +1.60841e-18 +1.59146e-18 +2.35124e-18 +4.25532e-18 +3.43732e-18 +3.01578e-18 +2.97698e-18 +8.08124e-18 +9.81293e-20 +0 +1.06093e-18 +1.39485e-18 +2.41656e-18 +3.05759e-18 +5.36514e-18 +3.31084e-18 +5.22726e-18 +2.2585e-18 +5.09116e-18 +6.90896e-18 +7.12911e-18 +1.52942e-18 +7.84884e-18 +1.07251e-17 +1.29367e-17 +1.45076e-17 +3.7223e-18 +4.23841e-18 +1.95185e-18 +1.11066e-18 +1.3596e-18 +2.67932e-18 +5.33589e-19 +2.08825e-18 +3.60389e-18 +5.08005e-19 +2.75689e-18 +6.67687e-18 +1.70926e-18 +3.61175e-18 +2.37531e-19 +4.68714e-19 +9.48033e-18 +4.56254e-19 +3.60163e-18 +1.99845e-18 +1.31441e-18 +1.51286e-18 +0 +4.24521e-19 +4.18797e-19 +0 +4.8466e-18 +5.17948e-18 +2.03584e-19 +3.48933e-18 +1.14734e-18 +1.69764e-18 +5.02371e-18 +4.77288e-18 +2.17462e-18 +5.357e-18 +6.51754e-18 +2.77962e-18 +4.80144e-18 +5.74627e-18 +3.00184e-18 +6.6363e-19 +1.94584e-18 +1.92692e-18 +3.26806e-19 +4.97861e-18 +0.000850286 +0.000896652 +0.000962011 +0.00105455 +0.00110398 +0.00122114 +0.00133933 +0.000916696 +0.000146548 +3.05376e-17 +3.85767e-20 +8.46357e-18 +4.46651e-18 +7.73454e-18 +5.46786e-18 +2.16373e-18 +1.17754e-17 +9.53295e-18 +4.1922e-18 +6.2219e-18 +1.69293e-17 +2.5379e-18 +1.55682e-17 +8.44702e-18 +9.83173e-18 +1.94542e-18 +1.92908e-18 +6.6648e-18 +1.50703e-17 +2.79615e-18 +8.29669e-18 +5.47162e-18 +5.41282e-18 +7.13944e-18 +9.71113e-18 +6.98731e-18 +8.63853e-18 +5.12704e-18 +6.33936e-18 +1.00331e-17 +6.6162e-18 +1.4724e-17 +1.98227e-17 +8.0028e-18 +1.02899e-17 +7.8288e-18 +2.32286e-18 +6.12635e-18 +0 +3.37074e-18 +1.03712e-17 +4.76237e-18 +7.24557e-18 +1.93463e-17 +1.06397e-18 +4.20441e-18 +1.38591e-17 +9.25083e-18 +2.71046e-18 +6.71592e-19 +1.98975e-18 +2.29309e-18 +3.88799e-18 +5.44501e-18 +6.33435e-18 +1.88068e-18 +5.57348e-18 +3.97946e-18 +8.47477e-18 +1.19694e-18 +4.43771e-18 +5.84986e-19 +8.67519e-18 +7.72047e-18 +6.78316e-18 +2.51583e-18 +8.32028e-19 +5.73434e-18 +2.96932e-18 +2.66942e-18 +7.91379e-18 +8.60506e-18 +1.29064e-18 +2.0429e-18 +3.52576e-18 +3.73395e-18 +1.33178e-19 +3.40478e-18 +3.36591e-18 +7.12782e-18 +3.2881e-18 +8.35529e-18 +5.50541e-18 +1.08822e-17 +4.48093e-19 +7.08551e-18 +1.7516e-18 +9.08292e-18 +1.28227e-18 +5.91375e-18 +2.50446e-18 +8.32482e-19 +8.17074e-19 +3.2227e-18 +2.38803e-18 +1.96928e-18 +7.78987e-19 +3.45621e-18 +3.41617e-18 +3.00072e-18 +7.40791e-19 +1.8325e-18 +4.7046e-18 +9.66811e-20 +6.70671e-18 +3.48703e-19 +6.20106e-18 +3.06313e-18 +1.01281e-18 +6.64405e-18 +1.44389e-17 +1.26427e-17 +1.34499e-17 +4.42963e-18 +8.43773e-18 +9.8779e-18 +6.15393e-19 +3.01302e-18 +9.52157e-18 +5.28951e-18 +1.16368e-18 +1.14677e-18 +4.53326e-18 +8.39074e-18 +2.76333e-18 +1.09129e-18 +1.88755e-18 +4.26026e-18 +3.67943e-18 +7.78666e-19 +7.68993e-18 +9.61965e-18 +3.99983e-18 +5.43118e-18 +3.90119e-18 +6.26063e-18 +8.55821e-18 +3.28709e-18 +4.63605e-18 +2.2889e-18 +1.5868e-18 +2.23491e-18 +3.53013e-18 +1.52297e-18 +1.93685e-18 +6.78713e-18 +2.09716e-18 +3.72155e-18 +2.452e-18 +3.02491e-18 +3.58296e-18 +2.55576e-18 +1.04962e-19 +2.29729e-18 +6.9934e-18 +1.11942e-18 +1.84446e-18 +2.54535e-18 +1.26006e-18 +6.37787e-18 +7.34494e-18 +3.62508e-18 +1.70642e-18 +2.18835e-18 +2.82791e-18 +2.78701e-18 +3.23464e-19 +2.87465e-18 +3.26443e-19 +0 +0.000993534 +0.00103603 +0.00109563 +0.00115235 +0.00125547 +0.0012242 +0.000823128 +0.000149527 +4.01824e-18 +6.96363e-18 +4.92594e-18 +9.7566e-18 +8.69522e-18 +2.05699e-17 +3.79025e-18 +8.44398e-18 +7.89682e-18 +1.37994e-18 +4.09979e-18 +0 +9.37853e-18 +1.06131e-17 +1.40117e-17 +1.25731e-17 +4.29282e-19 +2.21025e-17 +9.67964e-18 +1.12505e-17 +7.42623e-18 +4.9019e-18 +2.38602e-17 +9.20895e-18 +1.8631e-17 +1.56982e-17 +7.77143e-18 +4.61613e-18 +5.71207e-18 +4.52388e-18 +2.23925e-18 +8.12811e-18 +2.19502e-18 +3.62094e-18 +5.73477e-18 +2.83874e-18 +9.83375e-18 +4.51946e-18 +7.57079e-18 +8.8565e-18 +0 +1.26822e-17 +4.62479e-18 +3.27002e-18 +2.91301e-18 +3.31844e-19 +8.56019e-18 +4.39304e-18 +5.90076e-18 +1.22949e-18 +3.65049e-18 +1.08389e-17 +9.53514e-18 +3.0549e-19 +9.63069e-18 +4.04326e-18 +3.71628e-18 +2.54667e-18 +4.75816e-18 +1.16329e-17 +3.83717e-18 +4.88195e-18 +9.12497e-18 +1.59341e-18 +4.73222e-18 +1.19612e-17 +9.26227e-18 +1.55292e-17 +6.04533e-18 +6.48026e-18 +7.6446e-18 +4.92404e-19 +4.8718e-19 +2.38913e-18 +3.30799e-18 +1.87015e-18 +9.25098e-19 +9.15217e-18 +7.24367e-18 +4.47864e-19 +4.43101e-18 +2.19231e-18 +2.60152e-18 +5.147e-18 +7.21317e-18 +2.51889e-18 +0 +2.8747e-18 +4.87493e-18 +8.4381e-18 +7.55128e-18 +2.75227e-18 +9.33182e-18 +6.15405e-18 +7.60734e-18 +4.13821e-18 +4.4649e-18 +4.78489e-18 +7.54068e-19 +3.95926e-18 +2.4936e-18 +6.33729e-18 +8.70346e-18 +2.41178e-18 +7.83067e-18 +7.74423e-18 +1.46495e-17 +2.96307e-18 +7.81388e-18 +2.57537e-18 +2.54802e-18 +5.98035e-18 +6.22507e-18 +3.69275e-18 +5.47682e-18 +7.52146e-18 +3.86682e-18 +7.35392e-18 +1.45593e-18 +2.97809e-19 +2.27496e-18 +1.29253e-17 +1.39095e-18 +4.3939e-18 +1.05882e-17 +1.61031e-18 +4.51036e-18 +1.31138e-18 +2.33341e-18 +6.9212e-18 +5.32061e-18 +1.75296e-18 +9.90138e-19 +2.45033e-18 +4.59505e-18 +3.34661e-18 +1.13426e-17 +4.437e-18 +3.00313e-18 +6.15927e-18 +3.60736e-18 +1.78669e-18 +4.62616e-18 +7.40354e-18 +4.45651e-19 +2.12562e-18 +1.05037e-17 +1.0587e-17 +8.61655e-18 +4.66247e-18 +4.00637e-18 +1.1925e-18 +6.65119e-18 +2.1286e-18 +6.4965e-18 +6.4167e-18 +1.86452e-18 +2.09481e-19 +2.18649e-18 +5.03654e-18 +1.77947e-18 +5.6185e-18 +2.08342e-18 +2.74166e-18 +3.38576e-19 +4.34929e-18 +8.26305e-18 +6.20244e-18 +1.61243e-18 +3.18572e-18 +1.5758e-18 +4.97391e-18 +0.00116452 +0.0011908 +0.00114676 +0.00109285 +0.000873483 +0.000439677 +6.19347e-05 +6.11597e-18 +1.81816e-17 +9.4376e-18 +1.70041e-18 +5.89785e-18 +9.18366e-18 +2.48192e-18 +4.09899e-18 +9.74834e-18 +1.00622e-17 +8.77396e-18 +1.46218e-17 +8.6147e-18 +5.82002e-18 +1.03803e-17 +6.095e-18 +1.0946e-17 +7.47977e-18 +1.1128e-18 +1.02803e-17 +1.56424e-17 +1.69401e-17 +6.0708e-18 +1.76971e-18 +7.02692e-19 +5.20956e-18 +1.58282e-17 +2.38677e-18 +3.71516e-18 +9.70359e-18 +7.95593e-18 +1.31365e-18 +3.25355e-18 +1.93393e-18 +1.27798e-18 +1.26532e-18 +8.14776e-18 +1.42801e-17 +1.47613e-17 +1.24903e-17 +8.14803e-18 +1.34523e-17 +3.55351e-18 +7.6267e-18 +3.77818e-18 +4.03025e-18 +1.42758e-18 +6.49519e-18 +1.67833e-18 +1.60699e-17 +1.09774e-18 +1.35912e-17 +1.15774e-17 +2.13335e-18 +1.37346e-17 +1.72656e-17 +7.7729e-18 +9.23813e-18 +2.54247e-18 +1.76199e-18 +8.97483e-18 +1.48138e-17 +4.89031e-18 +6.29607e-18 +1.63076e-17 +2.37585e-18 +1.41121e-17 +1.67702e-17 +1.38536e-18 +7.3096e-18 +9.9533e-18 +9.85578e-18 +1.02033e-17 +3.95352e-18 +6.96076e-18 +1.24911e-17 +3.83898e-18 +5.91358e-18 +2.09085e-18 +1.69763e-17 +2.45986e-18 +8.13722e-19 +1.24598e-17 +9.55095e-18 +1.02443e-17 +7.80226e-18 +7.79503e-19 +2.29436e-18 +2.27153e-18 +6.37267e-18 +1.86622e-18 +1.83684e-18 +2.18216e-18 +3.96056e-18 +1.35447e-17 +2.82289e-18 +1.15277e-17 +1.48695e-17 +6.16157e-18 +6.83885e-19 +5.36686e-18 +5.97728e-18 +7.5599e-18 +8.45866e-18 +4.18635e-18 +4.14376e-18 +6.36756e-19 +3.43616e-18 +6.80057e-18 +1.83559e-18 +4.23916e-18 +7.1926e-18 +2.37426e-18 +1.40912e-17 +2.32431e-18 +6.32593e-18 +4.55382e-18 +1.13679e-18 +6.68955e-18 +4.13802e-18 +2.45663e-18 +0 +5.39489e-19 +5.33864e-19 +9.94685e-18 +8.28872e-18 +4.61359e-18 +3.04425e-18 +3.51344e-18 +6.45671e-18 +2.7036e-18 +3.16326e-18 +4.98407e-19 +5.71216e-18 +2.35487e-19 +3.49485e-18 +1.01427e-17 +3.64905e-18 +9.35018e-19 +2.24536e-18 +1.32509e-18 +3.2773e-18 +4.32453e-18 +1.28819e-18 +5.716e-18 +8.57963e-18 +2.89808e-18 +7.57663e-18 +1.25593e-17 +6.01116e-19 +2.38084e-18 +1.57201e-18 +8.14545e-18 +1.92095e-18 +2.27901e-18 +1.01572e-19 +2.60042e-18 +7.40995e-19 +3.76193e-19 +2.15707e-18 +1.03008e-17 +2.46089e-18 +4.86392e-18 +1.3775e-18 +9.51466e-18 +5.0405e-18 +5.31696e-18 +6.24383e-18 +1.62723e-18 +2.5723e-18 +3.17772e-19 +7.85564e-18 +0 +0.000796382 +0.000706238 +0.000532257 +0.000321987 +7.70994e-05 +1.91298e-18 +6.06773e-18 +1.27844e-17 +1.86412e-18 +2.58765e-18 +1.02629e-17 +2.10783e-17 +1.081e-17 +0 +1.55863e-17 +1.44e-17 +6.2681e-18 +1.07031e-17 +8.21575e-18 +0 +1.68311e-18 +1.66812e-18 +5.95391e-18 +5.90297e-18 +2.27595e-18 +1.80517e-17 +1.59793e-18 +8.87177e-18 +1.53921e-17 +1.37028e-17 +1.54431e-18 +3.67312e-18 +7.28299e-18 +1.80552e-18 +5.96513e-18 +8.27894e-18 +1.28974e-17 +6.10253e-18 +2.30495e-18 +1.37081e-17 +6.79468e-18 +1.74008e-17 +7.79036e-18 +1.59969e-17 +1.17568e-17 +8.94426e-18 +5.37356e-19 +7.99015e-18 +1.00327e-17 +8.63689e-18 +4.1509e-18 +3.60031e-18 +2.03934e-18 +6.56986e-18 +2.50474e-18 +3.72419e-18 +8.36773e-18 +1.12213e-17 +4.83598e-18 +6.71084e-18 +5.46397e-18 +4.70944e-19 +4.20114e-18 +4.16408e-18 +4.8156e-18 +1.1818e-17 +6.75804e-18 +1.51821e-17 +1.28346e-17 +7.89591e-18 +6.52134e-18 +1.37886e-17 +1.53743e-17 +1.69402e-18 +2.51696e-18 +5.82055e-18 +2.06022e-18 +5.30988e-18 +0 +4.01129e-18 +1.11301e-17 +1.49696e-17 +5.07523e-18 +4.64305e-18 +1.61037e-17 +3.04019e-18 +5.27166e-18 +2.98522e-18 +3.99094e-19 +1.48758e-19 +3.26857e-18 +3.59847e-18 +8.55864e-18 +2.47533e-18 +2.10088e-18 +1.24911e-17 +5.158e-18 +1.36584e-18 +7.08912e-18 +6.75093e-19 +8.28609e-18 +8.53924e-18 +1.10639e-17 +5.15961e-18 +1.59971e-18 +6.38854e-19 +1.25454e-18 +3.1075e-18 +3.18965e-19 +4.27073e-18 +4.8365e-18 +4.79115e-18 +5.93357e-19 +3.52809e-18 +6.4071e-18 +5.48223e-18 +1.14332e-18 +5.66348e-19 +1.96524e-18 +8.37164e-19 +1.37869e-18 +3.27401e-18 +5.40431e-19 +3.21225e-18 +1.5927e-18 +2.6279e-18 +7.93288e-19 +9.53795e-18 +6.89464e-18 +2.52952e-19 +5.51414e-18 +1.48921e-18 +0 +3.65353e-18 +6.27178e-18 +5.97337e-18 +3.54999e-18 +2.34416e-19 +6.9667e-18 +5.75067e-18 +4.71947e-19 +3.60966e-18 +2.68136e-18 +8.93297e-19 +3.50899e-18 +3.90926e-18 +4.30152e-18 +2.34505e-18 +3.79581e-18 +2.30007e-18 +6.59645e-19 +2.46793e-18 +5.27516e-18 +6.02741e-18 +1.99223e-18 +5.1231e-18 +4.29313e-18 +2.32762e-18 +6.88758e-18 +4.16877e-18 +1.13005e-18 +2.23799e-18 +7.35698e-19 +2.18766e-18 +1.81384e-18 +7.20735e-19 +4.24422e-18 +4.5514e-18 +2.7732e-18 +3.77545e-18 +4.07893e-18 +4.37487e-18 +3.33116e-19 +4.61813e-18 +3.91827e-18 +3.23741e-18 +4.48143e-18 +1.27893e-18 +3.56675e-19 +0 +6.36091e-05 +7.80636e-18 +5.38737e-18 +1.67067e-18 +1.15972e-17 +5.25919e-18 +4.56525e-18 +8.41019e-18 +3.20884e-17 +8.2763e-18 +1.64203e-17 +9.40702e-19 +8.7008e-18 +1.01726e-17 +1.19259e-17 +5.46014e-18 +6.032e-19 +1.79101e-18 +6.21882e-18 +3.81857e-18 +4.37143e-18 +1.44575e-18 +9.74877e-18 +5.68851e-18 +9.31079e-18 +9.23603e-18 +7.77372e-18 +2.754e-17 +5.46385e-18 +1.24656e-17 +2.33866e-17 +1.6003e-18 +1.85153e-17 +8.13372e-18 +1.79582e-17 +8.77777e-18 +1.69018e-17 +9.14494e-18 +2.26779e-17 +1.89959e-17 +1.43799e-17 +2.95133e-18 +3.9031e-18 +7.98515e-18 +0 +2.69032e-17 +1.27525e-17 +1.45234e-17 +1.62649e-17 +9.91056e-18 +6.40104e-18 +9.29727e-18 +1.21458e-17 +8.92418e-18 +2.21372e-18 +4.38995e-18 +5.66096e-18 +1.59804e-17 +2.09914e-17 +1.0623e-18 +1.60158e-17 +6.27065e-19 +6.21969e-19 +1.27495e-17 +1.63172e-17 +9.71079e-18 +2.80974e-18 +5.57268e-18 +6.3178e-18 +3.1345e-18 +1.94269e-18 +1.00159e-17 +0 +6.44263e-18 +1.50349e-18 +2.34865e-17 +1.03536e-17 +2.5676e-18 +7.27463e-19 +7.93677e-18 +6.79824e-18 +2.12977e-18 +3.51965e-18 +9.77435e-18 +1.73109e-17 +3.43377e-18 +1.43035e-17 +7.43078e-18 +2.68144e-18 +1.00075e-18 +9.88511e-19 +1.30717e-18 +1.68534e-17 +6.4293e-18 +7.01334e-18 +6.95607e-18 +1.19151e-17 +3.10968e-18 +6.22426e-19 +3.16859e-19 +4.24741e-18 +8.72387e-18 +2.08991e-18 +1.77521e-18 +2.93527e-18 +1.16662e-18 +2.02005e-18 +8.62049e-19 +1.24881e-17 +1.09772e-17 +3.62939e-18 +4.98305e-18 +9.33347e-18 +3.81112e-18 +1.40378e-17 +4.5511e-18 +5.5756e-18 +1.07941e-17 +8.09337e-18 +2.07119e-18 +4.10782e-18 +3.05592e-18 +3.78764e-18 +3.00506e-18 +6.45487e-18 +6.40121e-18 +5.61528e-18 +4.84162e-19 +1.68036e-18 +1.04737e-17 +4.72126e-18 +7.95802e-18 +1.04449e-17 +2.07502e-18 +0 +2.48915e-18 +1.03215e-17 +8.89959e-19 +4.57101e-19 +4.37666e-18 +4.77339e-18 +7.74618e-18 +5.11816e-18 +6.55605e-18 +1.00639e-17 +2.07889e-18 +4.94706e-18 +2.86345e-18 +2.43175e-18 +4.22504e-18 +1.21461e-18 +7.50598e-18 +3.13353e-18 +1.1698e-18 +1.54372e-18 +3.05415e-18 +1.02438e-19 +6.75586e-18 +9.30251e-18 +1.11119e-18 +3.2917e-18 +1.45378e-18 +0 +3.21366e-18 +4.24156e-18 +2.80914e-18 +5.21084e-18 +1.72174e-18 +1.36867e-18 +1.70214e-18 +1.34214e-18 +2.32851e-18 +6.65562e-19 +0 +3.56948e-18 +1.93566e-18 +6.68904e-18 +1.04204e-17 +9.39253e-18 +1.67966e-19 +6.74709e-18 +7.5694e-18 +1.27125e-17 +9.46235e-18 +2.24798e-17 +3.10637e-18 +7.28678e-18 +1.44629e-17 +2.76051e-18 +9.31377e-18 +3.53436e-18 +1.7537e-17 +1.33879e-18 +2.12706e-18 +1.16036e-17 +5.49617e-18 +5.20671e-19 +3.60887e-18 +1.43263e-17 +7.61681e-18 +9.07102e-18 +3.75099e-18 +3.97095e-18 +3.20206e-18 +2.46666e-19 +1.43129e-17 +1.03526e-17 +6.6903e-18 +2.37222e-18 +4.70689e-19 +1.68169e-17 +2.31805e-18 +1.63339e-17 +1.98638e-17 +8.15749e-18 +2.24889e-17 +2.23212e-18 +3.54415e-18 +1.62681e-17 +1.30909e-18 +1.32089e-17 +4.51314e-18 +7.03858e-18 +3.3874e-18 +5.68569e-20 +7.50647e-18 +1.84175e-17 +1.21176e-17 +4.68822e-18 +6.87829e-18 +1.60625e-18 +1.33512e-17 +1.81952e-17 +5.31221e-20 +8.96143e-18 +2.51356e-18 +1.03625e-17 +5.33307e-18 +2.83542e-18 +1.257e-17 +4.28266e-18 +5.3596e-18 +6.96996e-18 +7.2818e-18 +1.33704e-17 +2.51245e-18 +9.25514e-18 +4.23961e-18 +1.78835e-17 +8.70091e-18 +1.24355e-17 +4.11411e-18 +2.72262e-18 +3.03995e-18 +1.13972e-17 +7.3195e-18 +4.95409e-18 +2.94977e-18 +8.45794e-18 +2.90622e-18 +4.48655e-18 +1.52678e-17 +3.15705e-19 +6.89372e-18 +9.33995e-19 +4.17719e-20 +5.51517e-18 +6.99469e-18 +1.21017e-18 +1.49803e-18 +1.48906e-18 +5.90332e-18 +5.27349e-18 +4.07188e-18 +1.7318e-18 +4.58449e-18 +1.36494e-17 +1.80641e-17 +1.12066e-17 +8.3424e-18 +1.38009e-18 +1.37187e-18 +1.63165e-18 +3.23914e-18 +8.30614e-18 +3.45731e-18 +1.05592e-18 +5.24102e-18 +7.54261e-18 +2.84329e-18 +9.2254e-18 +4.07223e-18 +2.52491e-18 +7.26823e-18 +4.72682e-18 +1.97557e-18 +9.89442e-19 +7.05661e-18 +4.83236e-18 +3.35715e-18 +6.426e-18 +2.36238e-18 +8.44302e-18 +9.77693e-18 +4.6214e-19 +6.88121e-19 +3.64306e-18 +6.78064e-19 +3.36547e-18 +2.22803e-18 +7.07513e-18 +5.26733e-18 +6.94849e-19 +3.46828e-18 +4.44832e-19 +6.81999e-18 +5.28922e-18 +2.10332e-18 +1.04253e-17 +6.30945e-19 +7.80848e-18 +3.67311e-18 +3.84722e-18 +3.01715e-18 +1.99843e-18 +2.77342e-18 +1.18477e-18 +8.59102e-18 +2.32584e-18 +2.18793e-19 +1.15078e-18 +9.48246e-18 +4.89597e-18 +7.10309e-18 +4.8244e-18 +8.47384e-18 +3.29192e-18 +1.81831e-18 +1.08154e-18 +5.01083e-18 +3.19806e-18 +7.11999e-19 +1.05074e-18 +3.4786e-18 +7.25056e-18 +5.82987e-18 +1.70151e-18 +1.35146e-18 +5.36791e-18 +6.66155e-18 +9.92001e-19 +3.28426e-18 +2.60919e-18 +6.14975e-18 +2.57213e-18 +9.6102e-19 +1.27865e-18 +7.23603e-18 +4.06328e-18 +4.96401e-18 +7.79701e-18 +8.23995e-18 +1.46252e-17 +1.18124e-17 +3.17602e-18 +8.00396e-18 +1.85408e-17 +1.4582e-17 +1.89859e-18 +1.97913e-17 +7.71936e-18 +4.18007e-18 +8.99158e-18 +5.26465e-18 +8.86269e-18 +6.7684e-18 +6.27207e-18 +9.78488e-18 +3.53261e-18 +1.18371e-17 +1.74132e-18 +1.4261e-17 +1.20136e-17 +2.76907e-18 +1.73407e-17 +1.17578e-17 +1.02146e-17 +2.64928e-17 +1.6851e-17 +2.85664e-18 +3.6465e-18 +9.85599e-18 +1.43793e-17 +7.13865e-18 +5.90662e-19 +3.12797e-18 +6.98785e-18 +3.85462e-18 +2.87063e-18 +1.55812e-17 +8.49025e-18 +2.43543e-18 +5.76665e-18 +4.43328e-18 +3.85188e-18 +4.73512e-18 +1.19353e-17 +5.02882e-18 +1.69392e-17 +2.83291e-18 +7.20849e-18 +8.20555e-18 +6.93462e-18 +3.09878e-18 +1.71015e-18 +1.03554e-17 +2.19151e-18 +1.47317e-17 +8.81075e-18 +8.08933e-18 +1.6394e-18 +1.57922e-17 +1.64909e-17 +1.04362e-17 +4.78343e-19 +3.32638e-18 +7.86272e-19 +1.56171e-18 +4.03249e-18 +2.77285e-18 +3.67155e-18 +8.50765e-18 +5.73363e-18 +3.02428e-19 +3.86963e-18 +3.54761e-18 +1.32119e-17 +5.83197e-19 +8.97804e-18 +8.62972e-18 +4.57174e-18 +2.8386e-18 +2.25468e-18 +8.11793e-18 +1.11469e-18 +9.11367e-18 +1.37201e-18 +4.35931e-18 +2.70651e-18 +6.18264e-18 +2.1373e-18 +1.59135e-17 +1.52802e-17 +7.5891e-18 +6.75906e-18 +9.2962e-18 +1.30818e-17 +1.02155e-18 +7.08726e-18 +5.02885e-19 +7.49348e-19 +7.44438e-18 +2.71235e-18 +1.81214e-17 +7.78486e-18 +2.9002e-18 +4.80207e-19 +2.6239e-18 +2.45507e-19 +2.4391e-19 +9.37785e-19 +2.40756e-19 +9.25679e-19 +2.75281e-18 +2.27922e-18 +3.62381e-18 +4.05048e-18 +8.96281e-19 +6.22077e-18 +1.16978e-17 +1.31717e-18 +7.84476e-18 +4.54707e-18 +3.22787e-18 +5.98631e-18 +8.28569e-18 +5.70002e-18 +3.98635e-18 +1.04389e-18 +5.17954e-18 +5.55982e-18 +5.52412e-18 +2.84871e-18 +5.0529e-18 +1.00997e-18 +9.97916e-19 +2.25549e-19 +1.06461e-17 +4.70364e-18 +5.45273e-18 +3.87254e-18 +7.11813e-18 +3.44193e-18 +1.53437e-18 +4.15752e-18 +4.50691e-18 +3.36148e-18 +1.11783e-18 +7.37793e-18 +1.1046e-18 +3.28088e-18 +7.97268e-18 +1.26093e-18 +4.07257e-19 +1.78034e-18 +4.24797e-18 +1.23181e-18 +1.40285e-18 +2.78479e-18 +2.07753e-18 +5.50284e-18 +4.10467e-18 +4.76041e-18 +1.01432e-18 +1.69085e-18 +3.80151e-19 +8.97667e-18 +5.28966e-18 +4.27497e-18 +6.59877e-19 +1.62582e-18 +2.58856e-18 +2.89593e-18 +1.27953e-18 +6.3637e-18 +2.21513e-18 +4.05435e-19 +3.24345e-19 +2.49283e-18 +4.95657e-18 +6.68491e-18 +4.92525e-18 +2.55187e-18 +8.65819e-18 +5.45246e-18 +3.33222e-18 +7.03168e-18 +4.72389e-18 +4.07926e-18 +5.67153e-18 +3.01749e-18 +1.31849e-17 +1.78557e-17 +1.57626e-18 +4.50092e-18 +1.14658e-17 +1.04223e-17 +4.79207e-18 +8.75712e-18 +2.13651e-17 +1.42715e-17 +5.59506e-18 +0 +9.19866e-19 +6.94355e-18 +2.3593e-18 +3.06444e-18 +5.19204e-18 +4.62348e-18 +1.16573e-17 +7.01742e-18 +1.15008e-17 +1.33274e-17 +1.85675e-17 +1.48569e-17 +5.08881e-18 +1.0278e-17 +3.84943e-18 +1.26351e-17 +1.23859e-17 +5.90569e-18 +9.77741e-19 +7.12258e-18 +2.57289e-18 +3.19485e-18 +7.61708e-18 +8.03983e-18 +4.07198e-18 +1.15127e-17 +1.23646e-18 +1.9961e-18 +6.71199e-18 +2.27358e-18 +4.96848e-18 +1.30135e-17 +3.71525e-18 +3.83882e-18 +7.92137e-18 +6.41277e-18 +1.08604e-17 +1.46751e-17 +3.7167e-18 +2.84068e-18 +5.08052e-18 +1.40224e-18 +3.62339e-18 +3.46112e-18 +3.16403e-18 +6.28808e-18 +3.80327e-18 +1.20128e-17 +1.1803e-17 +3.99848e-19 +5.03351e-18 +1.05356e-18 +1.96229e-18 +4.67956e-18 +4.39201e-18 +1.0276e-18 +6.76199e-18 +5.11808e-19 +1.01044e-18 +2.50509e-18 +5.97488e-18 +7.67044e-18 +2.7054e-18 +6.35534e-18 +2.42975e-18 +2.43685e-19 +1.44018e-18 +4.29458e-18 +2.37245e-18 +1.88593e-18 +3.74939e-18 +3.26184e-18 +4.39975e-18 +8.74754e-18 +6.97615e-19 +6.37002e-18 +2.94021e-18 +5.8474e-18 +1.56598e-18 +6.69457e-19 +3.31504e-18 +8.34864e-18 +1.57274e-17 +2.25001e-19 +8.65782e-19 +0 +1.70909e-18 +1.25269e-17 +1.47785e-18 +1.04972e-17 +1.12739e-17 +1.05884e-17 +3.92333e-18 +6.18508e-19 +4.49266e-18 +3.24958e-18 +1.41398e-18 +3.21495e-18 +6.0191e-19 +3.5776e-18 +3.98997e-19 +1.17989e-18 +1.03674e-17 +9.92378e-18 +2.3234e-18 +8.47335e-18 +4.98099e-18 +2.85872e-18 +7.77387e-18 +4.52741e-18 +1.68919e-18 +1.12047e-18 +3.3446e-18 +2.77738e-18 +6.07139e-18 +1.1029e-18 +1.45744e-18 +3.26335e-18 +3.73831e-19 +5.74601e-18 +1.78972e-18 +3.9131e-18 +3.54073e-18 +2.29277e-18 +6.31448e-18 +1.5714e-18 +3.60121e-19 +0 +3.10057e-18 +3.77281e-18 +4.95489e-18 +2.72151e-18 +3.21603e-18 +2.52814e-18 +3.02095e-18 +3.18058e-18 +9.98614e-19 +6.63013e-19 +5.77784e-18 +2.6307e-18 +2.29273e-18 +1.15545e-18 +6.01286e-18 +8.57959e-18 +3.5477e-18 +8.0798e-19 +5.12285e-18 +3.82861e-18 +7.31056e-18 +3.60125e-19 +6.94337e-18 +9.47418e-19 +2.1943e-18 +3.12891e-18 +4.98269e-18 +3.72603e-18 +9.90244e-18 +7.58012e-18 +1.50585e-17 +2.00654e-18 +1.48574e-17 +1.93475e-17 +2.77102e-18 +1.98894e-17 +6.35051e-18 +9.90049e-18 +1.68844e-17 +7.08943e-18 +8.76022e-18 +8.70231e-18 +6.94981e-18 +1.63339e-17 +2.40888e-17 +1.19653e-17 +1.27123e-17 +1.01689e-17 +8.14715e-19 +9.71279e-19 +9.00623e-18 +1.15041e-17 +6.50845e-18 +8.20116e-18 +1.67663e-17 +7.16141e-18 +1.02088e-17 +3.84209e-18 +7.63764e-19 +6.97903e-18 +5.42691e-18 +1.22824e-17 +1.48885e-18 +9.90822e-18 +6.75951e-18 +1.79598e-17 +7.25457e-19 +1.25433e-17 +9.59907e-18 +5.69478e-18 +1.42766e-19 +1.15285e-17 +4.33114e-18 +1.84663e-17 +1.20044e-17 +2.74278e-18 +7.08648e-18 +4.19857e-18 +1.17106e-17 +1.17725e-17 +7.57867e-18 +6.617e-19 +1.15581e-17 +6.00499e-18 +0 +4.64283e-18 +3.33299e-18 +4.58713e-18 +4.55959e-18 +3.27335e-18 +1.35159e-17 +5.72256e-18 +3.83365e-18 +9.34308e-18 +1.5643e-17 +5.58868e-18 +9.78337e-18 +6.72437e-18 +7.99833e-18 +2.37371e-18 +1.18e-18 +1.795e-17 +4.19974e-18 +1.6701e-17 +1.72977e-18 +5.27458e-18 +8.66504e-18 +1.58749e-18 +3.38202e-18 +6.06775e-20 +6.24284e-18 +3.99092e-18 +2.20512e-18 +1.75447e-18 +6.4332e-18 +1.3013e-18 +6.57903e-18 +2.46733e-18 +7.57496e-18 +2.33458e-18 +4.01101e-18 +1.04989e-18 +4.59516e-18 +7.89515e-18 +1.86032e-18 +1.23361e-18 +2.3528e-18 +2.05334e-19 +1.82212e-18 +7.65345e-18 +6.21175e-18 +7.99294e-19 +6.54634e-18 +5.97529e-19 +2.94598e-18 +7.81739e-18 +7.19627e-18 +2.12943e-18 +3.4682e-18 +5.94162e-18 +1.9082e-18 +0 +9.44767e-19 +6.77073e-18 +7.50506e-19 +2.6092e-18 +4.45166e-18 +4.98643e-18 +3.12526e-18 +8.05198e-18 +8.19901e-18 +1.87914e-19 +2.16721e-18 +6.29401e-18 +6.44622e-18 +2.31841e-18 +1.77555e-18 +2.82951e-18 +2.81751e-18 +4.73527e-18 +8.20981e-18 +2.78374e-18 +6.94791e-19 +6.04204e-18 +5.15906e-18 +5.13955e-19 +4.43765e-18 +2.55075e-18 +1.18602e-18 +2.70119e-18 +8.42372e-19 +0 +2.84016e-18 +3.99637e-18 +3.65096e-18 +5.95549e-18 +4.61668e-18 +4.27367e-18 +5.24338e-18 +2.77747e-18 +1.30598e-18 +8.12015e-19 +1.13359e-18 +2.58389e-18 +5.95907e-18 +1.82651e-19 +6.40871e-19 +2.39881e-18 +7.97143e-18 +1.27533e-18 +1.90621e-18 +1.42505e-18 +5.68807e-18 +2.04981e-18 +4.87837e-18 +6.28278e-18 +7.21264e-18 +4.69547e-18 +3.90742e-18 +1.10511e-18 +7.478e-18 +5.29037e-18 +6.2153e-19 +4.50082e-18 +1.86041e-18 +4.72154e-19 +3.86965e-18 +1.54632e-19 +9.88998e-18 +4.56942e-18 +3.72127e-18 +1.0186e-17 +1.28916e-17 +2.1784e-17 +1.44825e-17 +9.82314e-18 +1.52442e-17 +0 +7.90565e-18 +1.70701e-18 +9.57908e-18 +1.68395e-18 +2.5674e-17 +5.8976e-18 +1.69136e-17 +1.26203e-17 +3.32924e-17 +3.39583e-18 +1.39742e-17 +1.30829e-17 +9.7466e-18 +4.80141e-18 +4.06573e-18 +7.92206e-18 +1.11097e-17 +1.33351e-17 +1.52316e-18 +1.08902e-17 +1.76548e-17 +1.68666e-17 +1.36416e-17 +6.03943e-18 +1.79993e-17 +9.74018e-18 +1.54534e-17 +2.86986e-18 +1.24013e-17 +0 +7.03724e-19 +1.00642e-17 +7.77693e-18 +3.44936e-18 +9.86998e-18 +7.62714e-18 +6.90145e-18 +8.0692e-19 +8.95054e-18 +6.63916e-19 +8.17695e-18 +1.93947e-17 +3.38552e-18 +1.25502e-17 +1.28574e-18 +8.43145e-18 +7.10875e-18 +2.52284e-18 +1.21588e-17 +8.96842e-18 +8.78846e-18 +6.27338e-18 +3.66754e-18 +1.31198e-17 +7.36423e-18 +1.41573e-17 +6.08103e-18 +7.82103e-18 +1.02461e-17 +1.31094e-17 +2.90846e-18 +7.631e-18 +5.74582e-19 +3.42668e-18 +1.70288e-18 +9.25286e-18 +1.2674e-17 +3.45653e-18 +2.1609e-17 +1.75142e-17 +5.03678e-18 +4.46269e-18 +9.41328e-18 +3.22727e-18 +7.16396e-18 +4.88958e-18 +5.38927e-18 +3.15176e-18 +1.06531e-17 +2.07671e-18 +5.16928e-19 +1.3651e-17 +5.30652e-18 +7.30542e-18 +1.44264e-17 +1.43442e-17 +5.08704e-18 +3.57045e-18 +9.46735e-18 +9.61034e-18 +5.27821e-20 +1.35762e-18 +3.66461e-18 +4.21976e-18 +1.33523e-17 +1.15718e-17 +4.71664e-19 +3.37752e-18 +6.62558e-18 +2.59913e-18 +7.40173e-19 +7.36217e-19 +1.64466e-18 +4.9057e-18 +5.06057e-18 +6.29265e-18 +3.04077e-18 +1.0675e-18 +1.13279e-17 +5.45893e-18 +3.32889e-18 +4.18336e-18 +3.81539e-18 +5.19725e-19 +5.32221e-18 +2.22119e-18 +1.69978e-19 +2.70667e-18 +5.2178e-18 +8.54254e-18 +6.83444e-18 +3.64987e-18 +5.28321e-18 +1.26526e-17 +7.85025e-18 +4.88351e-19 +4.53682e-18 +7.41918e-18 +2.56913e-18 +9.59895e-19 +4.93214e-18 +4.27658e-18 +6.46533e-18 +4.86697e-18 +1.56316e-19 +2.49063e-18 +1.3173e-17 +8.48771e-18 +6.14691e-18 +1.27021e-17 +5.63896e-18 +3.94658e-18 +4.23359e-18 +4.81819e-18 +7.59693e-19 +8.99974e-19 +2.82773e-18 +1.68568e-19 +1.62456e-18 +6.62132e-18 +3.66493e-18 +3.21345e-18 +4.65807e-18 +2.46552e-18 +2.8916e-18 +7.3473e-18 +8.18216e-18 +5.77498e-19 +7.41579e-18 +1.27931e-18 +1.41905e-18 +1.14037e-18 +2.81763e-18 +6.17853e-18 +5.32002e-18 +8.37603e-19 +5.70761e-18 +3.05425e-18 +2.49226e-18 +3.17627e-18 +4.40794e-18 +9.43733e-18 +3.13782e-17 +2.0236e-18 +2.57251e-17 +9.98028e-19 +3.07282e-18 +1.10261e-17 +4.00888e-18 +1.99082e-17 +1.4854e-17 +1.91601e-18 +9.51518e-19 +9.45084e-19 +9.38702e-20 +1.14682e-17 +2.7783e-18 +2.35484e-17 +1.30656e-17 +9.98301e-19 +2.5872e-17 +2.56989e-17 +1.20357e-20 +1.63449e-17 +8.85618e-20 +1.51689e-17 +1.06516e-17 +4.38722e-18 +1.8458e-17 +1.69776e-18 +1.12155e-17 +1.19792e-17 +0 +5.12561e-18 +9.28048e-18 +2.12133e-17 +1.41036e-17 +1.65077e-17 +6.16002e-18 +4.92767e-18 +0 +3.92817e-19 +4.75434e-18 +4.72357e-18 +1.58487e-17 +3.5162e-18 +9.41751e-18 +1.42617e-17 +8.02233e-18 +3.42682e-18 +7.40187e-19 +4.85407e-18 +4.53089e-18 +5.51879e-18 +1.11116e-17 +6.30934e-18 +7.97931e-18 +1.41589e-18 +5.34655e-18 +1.67821e-18 +5.69653e-18 +1.04934e-17 +3.15605e-18 +0 +4.87834e-18 +3.0974e-18 +6.55805e-18 +1.72916e-18 +1.05755e-18 +4.07285e-18 +1.13603e-17 +6.49138e-19 +8.5133e-18 +1.05129e-17 +9.17489e-18 +1.16525e-17 +3.4071e-20 +4.75522e-18 +5.47298e-18 +2.84376e-18 +2.58104e-18 +1.09956e-17 +4.73648e-18 +9.68048e-19 +4.80072e-19 +3.10212e-18 +4.50729e-18 +8.13645e-18 +6.68225e-18 +4.19598e-18 +5.79393e-18 +7.94942e-18 +4.81101e-18 +1.25429e-18 +1.09842e-17 +1.91433e-18 +1.2539e-17 +5.1208e-18 +1.4501e-17 +1.29887e-17 +2.51753e-18 +1.95927e-18 +4.32987e-18 +6.02825e-18 +2.9975e-18 +1.597e-18 +2.1179e-18 +2.10619e-18 +8.37917e-18 +7.81307e-18 +8.29395e-19 +4.7409e-18 +1.02513e-19 +2.75965e-20 +1.52149e-18 +2.01801e-18 +9.63591e-18 +5.39204e-18 +2.58275e-18 +5.92961e-18 +2.96159e-19 +0 +1.11924e-17 +6.19769e-18 +5.87763e-18 +9.29953e-18 +2.38507e-18 +7.49932e-18 +8.21854e-18 +1.09047e-17 +2.05876e-18 +4.09684e-18 +7.13495e-18 +7.37768e-18 +5.59926e-18 +5.39019e-18 +9.09358e-19 +3.80205e-18 +2.97344e-18 +4.57475e-18 +2.76807e-18 +3.55577e-18 +2.83365e-18 +4.75833e-18 +1.81771e-19 +3.49404e-19 +9.21975e-18 +6.58247e-18 +8.63721e-19 +7.90178e-18 +3.42136e-18 +2.04445e-18 +2.37558e-18 +8.45037e-19 +1.51506e-18 +7.04271e-18 +3.007e-18 +3.328e-19 +6.63108e-18 +1.81727e-18 +2.96223e-18 +2.13324e-18 +4.24756e-18 +4.40568e-20 +3.89441e-18 +4.52762e-18 +2.41689e-18 +3.85419e-18 +9.60402e-19 +5.58454e-18 +6.04392e-18 +8.40402e-18 +7.27151e-18 +3.94014e-18 +1.1033e-18 +9.40177e-19 +1.25292e-18 +2.4933e-18 +7.10009e-06 +2.77698e-05 +4.89095e-05 +3.247e-17 +1.10923e-17 +5.22426e-18 +1.03771e-17 +1.09784e-17 +9.67973e-18 +3.97815e-18 +1.75609e-18 +3.37919e-18 +0 +6.02181e-18 +1.60207e-18 +9.75956e-18 +8.63999e-18 +6.48861e-18 +6.96466e-18 +1.0326e-18 +1.02557e-18 +9.98312e-18 +1.69992e-17 +2.11073e-18 +1.37775e-17 +6.64442e-18 +9.06291e-18 +6.94767e-18 +9.52593e-18 +1.44861e-18 +3.93267e-18 +7.81324e-18 +1.89325e-18 +1.25999e-17 +1.38246e-17 +2.13429e-17 +2.39686e-18 +4.57905e-19 +5.54986e-18 +8.7675e-18 +1.1045e-17 +6.33402e-18 +1.19933e-20 +3.17e-18 +2.62454e-18 +1.02564e-17 +4.83599e-18 +5.23391e-18 +2.55753e-18 +3.38799e-18 +8.41564e-20 +9.86689e-18 +1.03023e-17 +5.03574e-18 +2.46093e-18 +4.89535e-19 +2.59175e-18 +8.85513e-19 +1.19953e-18 +7.94935e-19 +1.45295e-17 +1.49091e-17 +5.61436e-18 +8.67889e-18 +2.00228e-18 +9.71896e-18 +1.52104e-18 +1.51162e-18 +5.40818e-18 +3.06073e-18 +8.75455e-18 +5.60392e-18 +7.32842e-19 +5.53558e-18 +5.50189e-18 +1.15141e-18 +1.17287e-17 +2.14674e-17 +1.01744e-17 +5.05663e-18 +1.81514e-18 +7.77186e-18 +4.96643e-18 +7.67954e-18 +9.40623e-18 +2.84605e-18 +6.87052e-18 +1.2321e-17 +5.4587e-18 +1.2839e-17 +8.02695e-18 +0 +5.72299e-18 +1.0604e-17 +2.00574e-17 +1.27883e-18 +2.56528e-19 +2.2759e-18 +1.88497e-18 +1.87462e-18 +5.09428e-18 +4.8187e-18 +5.8974e-18 +9.77425e-19 +1.8225e-18 +5.31656e-18 +4.32588e-18 +8.36532e-19 +5.82375e-18 +9.45651e-18 +3.4094e-18 +1.3681e-17 +4.18706e-18 +2.42933e-18 +3.68215e-18 +1.48827e-18 +5.80666e-18 +1.15522e-17 +9.01328e-19 +3.81087e-18 +8.47412e-18 +1.02054e-17 +1.32467e-18 +3.07453e-18 +6.11772e-18 +3.36952e-18 +4.97499e-18 +8.61389e-19 +1.71352e-18 +1.06553e-18 +7.42249e-18 +4.64277e-18 +1.89036e-18 +1.01371e-17 +1.24935e-18 +5.17573e-19 +6.59385e-18 +1.04599e-17 +8.72682e-06 +2.06719e-05 +3.28185e-05 +4.51712e-05 +5.77346e-05 +7.05135e-05 +8.35128e-05 +9.67375e-05 +0.000110193 +0.000123884 +0.000137817 +0.000151998 +0.000166431 +0.000181123 +0.000196081 +0.00021131 +0.000226818 +0.000242611 +0.000258695 +0.00027508 +0.000291771 +0.000308776 +0.000326104 +0.000343763 +0.000361761 +0.000380107 +0.000398809 +0.000417878 +0.000437323 +0.000457153 +0.00047738 +0.000498014 +0.000519065 +0.000540546 +0.000562468 +0.000584843 +0.000607684 +0.000631005 +0.000654818 +0.000679137 +0.000703979 +0.000729307 +0.000751667 +0.000767686 +0.000783688 +1.38935e-17 +3.54907e-17 +1.50425e-17 +1.10149e-17 +2.25081e-17 +2.04814e-17 +6.2069e-19 +5.66684e-18 +1.50497e-17 +1.43399e-17 +8.69047e-18 +1.35469e-17 +1.09547e-17 +6.03174e-18 +2.044e-17 +8.98435e-18 +4.17222e-18 +3.5686e-18 +1.28065e-17 +1.8173e-18 +6.76903e-19 +5.60316e-19 +4.00734e-18 +5.53068e-19 +5.05251e-18 +5.45735e-19 +2.16771e-18 +0 +8.2353e-18 +6.48097e-18 +1.05544e-18 +5.25011e-19 +1.56245e-18 +3.72509e-18 +1.54201e-18 +8.37411e-18 +8.82663e-18 +4.03176e-18 +5.7078e-18 +4.57634e-18 +2.96517e-18 +5.59732e-18 +8.00015e-18 +1.48307e-17 +2.88933e-18 +6.31535e-18 +5.70433e-19 +9.44623e-20 +3.1858e-06 +7.93572e-06 +1.27409e-05 +1.76022e-05 +2.25203e-05 +2.74962e-05 +3.25307e-05 +3.76246e-05 +4.27788e-05 +4.79943e-05 +5.32719e-05 +5.86126e-05 +6.40173e-05 +6.9487e-05 +7.50227e-05 +8.06253e-05 +8.6296e-05 +9.20358e-05 +9.78457e-05 +0.000103727 +0.00010968 +0.000115707 +0.000121809 +0.000127986 +0.00013424 +0.000140573 +0.000146984 +0.000153477 +0.000160052 +0.00016671 +0.000173452 +0.000180281 +0.000187197 +0.000194203 +0.000201298 +0.000208486 +0.000215766 +0.000223142 +0.000230615 +0.000238185 +0.000245856 +0.000253628 +0.000261503 +0.000269484 +0.000277571 +0.000285767 +0.000294074 +0.000302493 +0.000311027 +0.000319677 +0.000328447 +0.000337336 +0.000346349 +0.000355487 +0.000364752 +0.000374148 +0.000383675 +0.000393336 +0.000403135 +0.000413073 +0.000423154 +0.000433379 +0.000443751 +0.000454274 +0.000464951 +0.000475783 +0.000486774 +0.000497928 +0.000509247 +0.000520734 +0.000532393 +0.000544228 +0.000556241 +0.000568437 +0.000580818 +0.000593389 +0.000606154 +0.000619116 +0.00063228 +0.000645649 +0.000659229 +0.000673023 +0.000687035 +0.000701271 +0.000715735 +0.000730432 +0.000745311 +0.000755963 +0.000765076 +0.000774191 +0.000783334 +0.000792505 +0.000801704 +0.00081093 +0.000820181 +0.000829459 +0.000838761 +0.000848088 +0.000857438 +0.000866811 +0.000876207 +0.000885623 +0.00089506 +0.000904516 +0.000913991 +0.000923484 +0.000932994 +0.00094252 +0.000952061 +0.000961616 +0.000971184 +0.000980764 +0.000990354 +0.000999954 +0.00100956 +0.00101918 +0.0010288 +0.00103843 +0.00104806 +0.00105769 +0.00106732 +0.00107695 +0.00108658 +0.00109621 +0.00110583 +0.00111544 +0.00112504 +0.00113464 +0.00114422 +0.00114812 +0.00114139 +0.00113463 +0.000527321 +0.000531025 +0.000534767 +0.000538547 +0.000542366 +0.000546224 +0.000550121 +0.000554059 +0.000558038 +0.000562058 +0.000566119 +0.000570223 +0.00057437 +0.00057856 +0.000582793 +0.000587071 +0.000591394 +0.000595763 +0.000600178 +0.000604639 +0.000609148 +0.000613705 +0.00061831 +0.000622965 +0.000627669 +0.000632424 +0.00063723 +0.000642087 +0.000646998 +0.000651961 +0.000656979 +0.000662051 +0.000667178 +0.000672361 +0.000677602 +0.0006829 +0.000688256 +0.000693672 +0.000699147 +0.000704684 +0.000710282 +0.000715942 +0.000721666 +0.000727454 +0.000733308 +0.000739227 +0.000745214 +0.000751231 +0.000755625 +0.000759222 +0.000762816 +0.000766431 +0.000770067 +0.000773724 +0.000777401 +0.0007811 +0.000784819 +0.000788559 +0.000792321 +0.000796103 +0.000799907 +0.000803732 +0.000807577 +0.000811444 +0.000815332 +0.000819241 +0.000823172 +0.000827123 +0.000831096 +0.00083509 +0.000839105 +0.000843141 +0.000847199 +0.000851277 +0.000855377 +0.000859498 +0.00086364 +0.000867803 +0.000871987 +0.000876193 +0.000880419 +0.000884666 +0.000888934 +0.000893223 +0.000897533 +0.000901864 +0.000906215 +0.000910587 +0.000914979 +0.000919392 +0.000923826 +0.00092828 +0.000932754 +0.000937248 +0.000941763 +0.000946297 +0.000950851 +0.000955425 +0.000960019 +0.000964632 +0.000969265 +0.000973916 +0.000978587 +0.000983277 +0.000987986 +0.000992713 +0.000997459 +0.00100222 +0.001007 +0.0010118 +0.00101662 +0.00102146 +0.00102631 +0.00103118 +0.00103607 +0.00104097 +0.00104589 +0.00105082 +0.00105577 +0.00106074 +0.00106572 +0.00107072 +0.00107573 +0.00108075 +0.00108579 +0.00109085 +0.00109591 +0.00110099 +0.00110608 +0.00111119 +0.0011163 +0.00112143 +0.00112656 +0.00113171 +0.00113687 +0.00113522 +0.00113116 +0.00112707 +0.00112295 +0.0011188 +0.00111462 +0.00111041 +0.00110617 +0.0011019 +0.0010976 +0.00109327 +0.0010889 +0.00108451 +0.00108008 +0.00107562 +0.00107113 +0.0010666 +0.00106204 +0.00105745 +0.00105283 +0.00104817 +0.00104348 +0.00103875 +0.00103399 +0.0010292 +0.00102437 +0.00101951 +0.00101461 +0.00100968 +0.00100471 +0.000999711 +0.000994672 +0.000989598 +0.000984487 +0.000979339 +0.000974155 +0.000968935 +0.000963677 +0.000958382 +0.000953049 +0.000947679 +0.000942271 +0.000936825 +0.00093134 +0.000925818 +0.00104397 +0.00104542 +0.00104688 +0.00104835 +0.00104983 +0.00105132 +0.00105282 +0.00105433 +0.00105584 +0.00105737 +0.0010589 +0.00106045 +0.001062 +0.00106356 +0.00106514 +0.00106672 +0.00106831 +0.00106991 +0.00107151 +0.00107313 +0.00107476 +0.0010764 +0.00107804 +0.0010797 +0.00108136 +0.00108304 +0.00108472 +0.00108642 +0.00108812 +0.00108983 +0.00109155 +0.00109329 +0.00109503 +0.00109678 +0.00109854 +0.00110031 +0.00110209 +0.00110388 +0.00110568 +0.00110749 +0.0011093 +0.00111113 +0.00111297 +0.00111482 +0.00111667 +0.00111854 +0.00112041 +0.0011223 +0.00112176 +0.00112005 +0.00111833 +0.0011166 +0.00111485 +0.00111309 +0.00111132 +0.00110953 +0.00110773 +0.00110592 +0.00110409 +0.00110225 +0.00110039 +0.00109852 +0.00109664 +0.00109474 +0.00109283 +0.0010909 +0.00108896 +0.001087 +0.00108503 +0.00108305 +0.00108105 +0.00107903 +0.001077 +0.00107496 +0.00107289 +0.00107082 +0.00106872 +0.00106662 +0.00106449 +0.00106235 +0.00106019 +0.00105802 +0.00105583 +0.00105363 +0.00105141 +0.00104917 +0.00104691 +0.00104464 +0.00104235 +0.00104004 +0.00103772 +0.00103538 +0.00103302 +0.00103064 +0.00102825 +0.00102584 +0.00102341 +0.00102096 +0.00101849 +0.00101601 +0.0010135 +0.00101098 +0.00100844 +0.00100588 +0.0010033 +0.0010007 +0.000998084 +0.000995447 +0.00099279 +0.000990114 +0.000987417 +0.000984701 +0.000981964 +0.000979207 +0.00097643 +0.000973632 +0.000970813 +0.000967973 +0.000965113 +0.000962231 +0.000959328 +0.000956403 +0.000953457 +0.000950489 +0.000947499 +0.000944487 +0.000941453 +0.000938397 +0.000935318 +0.000932216 +0.000929092 +0.000925944 +0.000922774 +0.00091958 +0.000916363 +0.000913122 +0.000909858 +0.000906569 +0.000903257 +0.00089992 +0.000896559 +0.000893173 +0.000889763 +0.000886328 +0.000882867 +0.000879382 +0.000875871 +0.000872335 +0.000868773 +0.000865185 +0.000861572 +0.000857932 +0.000854265 +0.000850572 +0.000846853 +0.000843106 +0.000839333 +0.000835532 +0.000831704 +0.000827849 +0.000823966 +0.000820055 +0.000816115 +0.000812148 +0.000808152 +0.000804128 +0.000800075 +0.000795993 +0.000791882 +0.000787742 +0.000783572 +0.000779372 +0.000775143 +0.000770884 +0.000766595 +0.000762275 +0.000757925 +0.000753544 +0.000749133 +0.000744691 +0.000939687 +0.000938748 +0.000937804 +0.000936853 +0.000935895 +0.000934929 +0.000933956 +0.000932976 +0.000931988 +0.000930993 +0.00092999 +0.000928979 +0.00092796 +0.000926934 +0.0009259 +0.000924858 +0.000923808 +0.00092275 +0.000921684 +0.00092061 +0.000919528 +0.000918437 +0.000917338 +0.000916231 +0.000915115 +0.000913991 +0.000912858 +0.000911717 +0.000910567 +0.000909408 +0.00090824 +0.000907064 +0.000905878 +0.000904684 +0.00090348 +0.000902267 +0.000901045 +0.000899814 +0.000898573 +0.000897323 +0.000896064 +0.000894794 +0.000893516 +0.000892227 +0.000890929 +0.000889621 +0.000888303 +0.000886975 +0.000885636 +0.000884288 +0.00088293 +0.000881561 +0.000880182 +0.000878792 +0.000877392 +0.000875981 +0.00087456 +0.000873127 +0.000871684 +0.00087023 +0.000868765 +0.000867289 +0.000865802 +0.000864304 +0.000862794 +0.000861273 +0.00085974 +0.000858196 +0.00085664 +0.000855072 +0.000853493 +0.000851902 +0.000850298 +0.000848683 +0.000847055 +0.000845415 +0.000843763 +0.000842099 +0.000840421 +0.000838732 +0.000837029 +0.000835314 +0.000833586 +0.000831845 +0.00083009 +0.000828323 +0.000826542 +0.000824748 +0.000822941 +0.00082112 +0.000819285 +0.000817437 +0.000815574 +0.000813698 +0.000811808 +0.000809903 +0.000807985 +0.000806052 +0.000804104 +0.000802143 +0.000800166 +0.000798175 +0.000796168 +0.000794147 +0.000792111 +0.00079006 +0.000787993 +0.000785911 +0.000783813 +0.0007817 +0.000779571 +0.000777427 +0.000775266 +0.000773089 +0.000770897 +0.000768688 +0.000766462 +0.00076422 +0.000761962 +0.000759687 +0.000757395 +0.000755086 +0.00075276 +0.000750416 +0.000748056 +0.000745678 +0.000743282 +0.000740869 +0.000738438 +0.00073599 +0.000733523 +0.000731038 +0.000728535 +0.000726013 +0.000723473 +0.000720915 +0.000718337 +0.000715741 +0.000713126 +0.000710492 +0.000707838 +0.000705165 +0.000702473 +0.00069976 +0.000697029 +0.000694277 +0.000691505 +0.000688713 +0.000685901 +0.000683068 +0.000680215 +0.000677342 +0.000674447 +0.000671531 +0.000668595 +0.000665637 +0.000662658 +0.000659657 +0.000656635 +0.000653591 +0.000650525 +0.000647438 +0.000644328 +0.000641195 +0.000638041 +0.000634863 +0.000631663 +0.000628441 +0.000625195 +0.000621926 +0.000618634 +0.000615319 +0.00061198 +0.000608617 +0.000605231 +0.00060182 +0.000598386 +0.000594927 +0.000591444 +0.000587937 +0.000723555 +0.000722832 +0.000722105 +0.000721373 +0.000720635 +0.000719892 +0.000719143 +0.000718388 +0.000717627 +0.00071686 +0.000716088 +0.00071531 +0.000714526 +0.000713735 +0.000712939 +0.000712137 +0.000711328 +0.000710514 +0.000709693 +0.000708866 +0.000708033 +0.000707193 +0.000706347 +0.000705494 +0.000704635 +0.000703769 +0.000702897 +0.000702018 +0.000701133 +0.00070024 +0.000699341 +0.000698435 +0.000697522 +0.000696603 +0.000695676 +0.000694742 +0.000693801 +0.000692853 +0.000691898 +0.000690935 +0.000689965 +0.000688988 +0.000688003 +0.000687011 +0.000686012 +0.000685004 +0.000683989 +0.000682967 +0.000681936 +0.000680898 +0.000679852 +0.000678798 +0.000677736 +0.000676666 +0.000675588 +0.000674502 +0.000673407 +0.000672304 +0.000671193 +0.000670074 +0.000668946 +0.000667809 +0.000666664 +0.00066551 +0.000664348 +0.000663177 +0.000661996 +0.000660807 +0.000659609 +0.000658402 +0.000657186 +0.000655961 +0.000654726 +0.000653482 +0.000652229 +0.000650966 +0.000649694 +0.000648412 +0.000647121 +0.00064582 +0.000644509 +0.000643188 +0.000641858 +0.000640517 +0.000639166 +0.000637805 +0.000636434 +0.000635053 +0.000633661 +0.000632259 +0.000630846 +0.000629423 +0.000627989 +0.000626544 +0.000625089 +0.000623622 +0.000622145 +0.000620657 +0.000619157 +0.000617646 +0.000616124 +0.000614591 +0.000613046 +0.00061149 +0.000609922 +0.000608343 +0.000606751 +0.000605148 +0.000603533 +0.000601906 +0.000600267 +0.000598615 +0.000596952 +0.000595276 +0.000593587 +0.000591886 +0.000590173 +0.000588446 +0.000586707 +0.000584956 +0.000583191 +0.000581413 +0.000579622 +0.000577817 +0.000576 +0.000574169 +0.000572324 +0.000570466 +0.000568595 +0.000566709 +0.00056481 +0.000562896 +0.000560969 +0.000559027 +0.000557072 +0.000555101 +0.000553117 +0.000551118 +0.000549104 +0.000547076 +0.000545032 +0.000542974 +0.000540901 +0.000538813 +0.000536709 +0.00053459 +0.000532456 +0.000530306 +0.000528141 +0.00052596 +0.000523763 +0.00052155 +0.000519321 +0.000517076 +0.000514815 +0.000512538 +0.000510244 +0.000507933 +0.000505606 +0.000503262 +0.000500902 +0.000498524 +0.00049613 +0.000493718 +0.000491289 +0.000488842 +0.000486378 +0.000483897 +0.000481398 +0.000478881 +0.000476346 +0.000473793 +0.000471222 +0.000468633 +0.000466025 +0.000463399 +0.000460755 +0.000458092 +0.00045541 +0.000452709 +0.000537979 +0.000537442 +0.000536902 +0.000536358 +0.000535809 +0.000535256 +0.000534699 +0.000534138 +0.000533572 +0.000533002 +0.000532428 +0.000531849 +0.000531266 +0.000530679 +0.000530087 +0.00052949 +0.000528889 +0.000528284 +0.000527673 +0.000527058 +0.000526439 +0.000525814 +0.000525185 +0.000524551 +0.000523912 +0.000523269 +0.00052262 +0.000521967 +0.000521308 +0.000520645 +0.000519976 +0.000519303 +0.000518624 +0.00051794 +0.000517251 +0.000516557 +0.000515857 +0.000515152 +0.000514442 +0.000513726 +0.000513005 +0.000512279 +0.000511546 +0.000510809 +0.000510065 +0.000509317 +0.000508562 +0.000507802 +0.000507035 +0.000506264 +0.000505486 +0.000504702 +0.000503913 +0.000503117 +0.000502315 +0.000501508 +0.000500694 +0.000499874 +0.000499048 +0.000498215 +0.000497377 +0.000496532 +0.00049568 +0.000494822 +0.000493958 +0.000493087 +0.00049221 +0.000491326 +0.000490435 +0.000489537 +0.000488633 +0.000487722 +0.000486804 +0.000485879 +0.000484947 +0.000484009 +0.000483063 +0.00048211 +0.000481149 +0.000480182 +0.000479207 +0.000478225 +0.000477236 +0.000476239 +0.000475235 +0.000474223 +0.000473204 +0.000472176 +0.000471142 +0.000470099 +0.000469049 +0.00046799 +0.000466924 +0.00046585 +0.000464768 +0.000463678 +0.000462579 +0.000461473 +0.000460358 +0.000459234 +0.000458103 +0.000456963 +0.000455814 +0.000454657 +0.000453491 +0.000452317 +0.000451134 +0.000449942 +0.000448741 +0.000447531 +0.000446312 +0.000445084 +0.000443847 +0.000442601 +0.000441346 +0.000440081 +0.000438807 +0.000437524 +0.000436231 +0.000434928 +0.000433616 +0.000432294 +0.000430962 +0.000429621 +0.000428269 +0.000426908 +0.000425536 +0.000424155 +0.000422763 +0.000421361 +0.000419949 +0.000418526 +0.000417093 +0.00041565 +0.000414196 +0.000412731 +0.000411255 +0.000409769 +0.000408272 +0.000406763 +0.000405244 +0.000403714 +0.000402172 +0.00040062 +0.000399056 +0.00039748 +0.000395893 +0.000394295 +0.000392685 +0.000391063 +0.00038943 +0.000387785 +0.000386127 +0.000384458 +0.000382777 +0.000381084 +0.000379378 +0.00037766 +0.00037593 +0.000374187 +0.000372432 +0.000370664 +0.000368884 +0.000367091 +0.000365284 +0.000363465 +0.000361634 +0.000359788 +0.00035793 +0.000356059 +0.000354174 +0.000352276 +0.000350364 +0.000348439 +0.000346501 +0.000344548 +0.000342582 +0.000340602 +0.000338608 +0.0003366 +0.000379879 +0.0003795 +0.000379119 +0.000378734 +0.000378347 +0.000377956 +0.000377563 +0.000377167 +0.000376767 +0.000376365 +0.000375959 +0.000375551 +0.000375139 +0.000374724 +0.000374306 +0.000373885 +0.00037346 +0.000373033 +0.000372602 +0.000372168 +0.00037173 +0.000371289 +0.000370845 +0.000370397 +0.000369946 +0.000369492 +0.000369034 +0.000368572 +0.000368107 +0.000367639 +0.000367167 +0.000366691 +0.000366212 +0.000365729 +0.000365243 +0.000364752 +0.000364258 +0.00036376 +0.000363259 +0.000362754 +0.000362244 +0.000361731 +0.000361214 +0.000360693 +0.000360169 +0.00035964 +0.000359107 +0.00035857 +0.000358029 +0.000357484 +0.000356935 +0.000356381 +0.000355824 +0.000355262 +0.000354696 +0.000354126 +0.000353551 +0.000352972 +0.000352389 +0.000351801 +0.000351209 +0.000350612 +0.000350011 +0.000349405 +0.000348795 +0.00034818 +0.00034756 +0.000346936 +0.000346307 +0.000345673 +0.000345035 +0.000344391 +0.000343743 +0.00034309 +0.000342432 +0.000341769 +0.000341101 +0.000340428 +0.00033975 +0.000339067 +0.000338379 +0.000337686 +0.000336987 +0.000336283 +0.000335574 +0.000334859 +0.000334139 +0.000333414 +0.000332684 +0.000331947 +0.000331206 +0.000330458 +0.000329706 +0.000328947 +0.000328183 +0.000327413 +0.000326637 +0.000325856 +0.000325069 +0.000324276 +0.000323477 +0.000322672 +0.00032186 +0.000321043 +0.00032022 +0.000319391 +0.000318555 +0.000317714 +0.000316866 +0.000316012 +0.000315151 +0.000314284 +0.00031341 +0.000312531 +0.000311644 +0.000310751 +0.000309851 +0.000308945 +0.000308032 +0.000307112 +0.000306186 +0.000305252 +0.000304312 +0.000303365 +0.00030241 +0.000301449 +0.000300481 +0.000299505 +0.000298522 +0.000297533 +0.000296535 +0.000295531 +0.000294519 +0.0002935 +0.000292473 +0.000291438 +0.000290396 +0.000289347 +0.00028829 +0.000287225 +0.000286152 +0.000285071 +0.000283983 +0.000282886 +0.000281782 +0.00028067 +0.000279549 +0.00027842 +0.000277284 +0.000276139 +0.000274985 +0.000273823 +0.000272653 +0.000271475 +0.000270287 +0.000269092 +0.000267887 +0.000266674 +0.000265453 +0.000264222 +0.000262983 +0.000261734 +0.000260477 +0.000259211 +0.000257935 +0.000256651 +0.000255357 +0.000254055 +0.000252742 +0.000251421 +0.00025009 +0.00024875 +0.0002474 +0.000246041 +0.000244672 +0.000243293 +0.000241905 +0.000240506 +0.000239098 +0.000237681 +0.00024734 +0.000247093 +0.000246845 +0.000246595 +0.000246342 +0.000246088 +0.000245832 +0.000245574 +0.000245314 +0.000245052 +0.000244788 +0.000244522 +0.000244254 +0.000243984 +0.000243712 +0.000243437 +0.000243161 +0.000242883 +0.000242602 +0.000242319 +0.000242034 +0.000241747 +0.000241458 +0.000241167 +0.000240873 +0.000240577 +0.000240279 +0.000239978 +0.000239676 +0.000239371 +0.000239063 +0.000238754 +0.000238442 +0.000238127 +0.00023781 +0.000237491 +0.000237169 +0.000236845 +0.000236519 +0.00023619 +0.000235858 +0.000235524 +0.000235187 +0.000234848 +0.000234507 +0.000234162 +0.000233815 +0.000233466 +0.000233114 +0.000232759 +0.000232401 +0.000232041 +0.000231678 +0.000231312 +0.000230943 +0.000230572 +0.000230198 +0.000229821 +0.000229441 +0.000229058 +0.000228673 +0.000228284 +0.000227893 +0.000227498 +0.000227101 +0.000226701 +0.000226297 +0.000225891 +0.000225481 +0.000225069 +0.000224653 +0.000224234 +0.000223812 +0.000223387 +0.000222958 +0.000222527 +0.000222092 +0.000221654 +0.000221212 +0.000220767 +0.000220319 +0.000219868 +0.000219413 +0.000218955 +0.000218493 +0.000218028 +0.000217559 +0.000217087 +0.000216611 +0.000216132 +0.000215649 +0.000215162 +0.000214672 +0.000214178 +0.000213681 +0.000213179 +0.000212674 +0.000212166 +0.000211653 +0.000211137 +0.000210616 +0.000210092 +0.000209564 +0.000209032 +0.000208496 +0.000207956 +0.000207412 +0.000206864 +0.000206312 +0.000205756 +0.000205196 +0.000204631 +0.000204062 +0.000203489 +0.000202912 +0.000202331 +0.000201745 +0.000201155 +0.00020056 +0.000199962 +0.000199358 +0.00019875 +0.000198138 +0.000197521 +0.0001969 +0.000196274 +0.000195644 +0.000195009 +0.000194369 +0.000193724 +0.000193075 +0.000192421 +0.000191762 +0.000191098 +0.00019043 +0.000189756 +0.000189078 +0.000188394 +0.000187706 +0.000187013 +0.000186314 +0.000185611 +0.000184902 +0.000184188 +0.000183469 +0.000182745 +0.000182015 +0.00018128 +0.00018054 +0.000179794 +0.000179043 +0.000178287 +0.000177525 +0.000176758 +0.000175985 +0.000175206 +0.000174422 +0.000173632 +0.000172837 +0.000172036 +0.000171229 +0.000170416 +0.000169597 +0.000168773 +0.000167942 +0.000167106 +0.000166264 +0.000165416 +0.000164561 +0.000163701 +0.000162834 +0.000161962 +0.000161083 +0.000160198 +0.000159306 +0.000158409 +0.000157505 +0.000156594 +0.000155677 +0.000154754 +0.000143137 +0.000142994 +0.00014285 +0.000142705 +0.00014256 +0.000142412 +0.000142264 +0.000142115 +0.000141964 +0.000141813 +0.00014166 +0.000141506 +0.000141351 +0.000141195 +0.000141037 +0.000140878 +0.000140718 +0.000140557 +0.000140395 +0.000140231 +0.000140066 +0.0001399 +0.000139733 +0.000139564 +0.000139394 +0.000139223 +0.00013905 +0.000138877 +0.000138701 +0.000138525 +0.000138347 +0.000138168 +0.000137987 +0.000137805 +0.000137622 +0.000137437 +0.000137251 +0.000137063 +0.000136875 +0.000136684 +0.000136492 +0.000136299 +0.000136104 +0.000135908 +0.00013571 +0.000135511 +0.00013531 +0.000135108 +0.000134904 +0.000134699 +0.000134492 +0.000134283 +0.000134073 +0.000133861 +0.000133648 +0.000133433 +0.000133217 +0.000132998 +0.000132779 +0.000132557 +0.000132334 +0.000132109 +0.000131883 +0.000131654 +0.000131424 +0.000131193 +0.000130959 +0.000130724 +0.000130487 +0.000130248 +0.000130008 +0.000129765 +0.000129521 +0.000129275 +0.000129027 +0.000128777 +0.000128526 +0.000128272 +0.000128017 +0.000127759 +0.0001275 +0.000127239 +0.000126975 +0.00012671 +0.000126443 +0.000126174 +0.000125902 +0.000125629 +0.000125354 +0.000125076 +0.000124797 +0.000124515 +0.000124232 +0.000123946 +0.000123658 +0.000123368 +0.000123076 +0.000122781 +0.000122485 +0.000122186 +0.000121885 +0.000121581 +0.000121276 +0.000120968 +0.000120658 +0.000120345 +0.00012003 +0.000119713 +0.000119394 +0.000119072 +0.000118748 +0.000118421 +0.000118092 +0.00011776 +0.000117426 +0.00011709 +0.000116751 +0.000116409 +0.000116065 +0.000115719 +0.00011537 +0.000115018 +0.000114664 +0.000114307 +0.000113947 +0.000113585 +0.00011322 +0.000112852 +0.000112482 +0.000112109 +0.000111733 +0.000111355 +0.000110974 +0.00011059 +0.000110203 +0.000109813 +0.00010942 +0.000109025 +0.000108626 +0.000108225 +0.000107821 +0.000107414 +0.000107004 +0.000106591 +0.000106174 +0.000105755 +0.000105333 +0.000104908 +0.000104479 +0.000104048 +0.000103613 +0.000103176 +0.000102735 +0.000102291 +0.000101843 +0.000101393 +0.000100939 +0.000100482 +0.000100022 +9.95579e-05 +9.9091e-05 +9.86206e-05 +9.81469e-05 +9.76698e-05 +9.71893e-05 +9.67053e-05 +9.62179e-05 +9.5727e-05 +9.52326e-05 +9.47347e-05 +9.42333e-05 +9.37282e-05 +9.32197e-05 +9.27075e-05 +9.21916e-05 +9.16722e-05 +9.11491e-05 +9.06222e-05 +9.00917e-05 +8.95575e-05 +0.000127332 +0.000127205 +0.000127077 +0.000126948 +0.000126818 +0.000126687 +0.000126555 +0.000126422 +0.000126289 +0.000126154 +0.000126018 +0.000125881 +0.000125743 +0.000125604 +0.000125464 +0.000125322 +0.00012518 +0.000125037 +0.000124892 +0.000124747 +0.0001246 +0.000124452 +0.000124303 +0.000124153 +0.000124002 +0.00012385 +0.000123696 +0.000123542 +0.000123386 +0.000123229 +0.000123071 +0.000122911 +0.000122751 +0.000122589 +0.000122426 +0.000122261 +0.000122096 +0.000121929 +0.000121761 +0.000121591 +0.000121421 +0.000121249 +0.000121075 +0.000120901 +0.000120725 +0.000120548 +0.000120369 +0.000120189 +0.000120008 +0.000119825 +0.000119641 +0.000119455 +0.000119269 +0.00011908 +0.000118891 +0.000118699 +0.000118507 +0.000118313 +0.000118117 +0.00011792 +0.000117722 +0.000117522 +0.00011732 +0.000117117 +0.000116912 +0.000116706 +0.000116499 +0.000116289 +0.000116079 +0.000115866 +0.000115652 +0.000115437 +0.000115219 +0.000115 +0.00011478 +0.000114558 +0.000114334 +0.000114108 +0.000113881 +0.000113652 +0.000113421 +0.000113189 +0.000112955 +0.000112719 +0.000112481 +0.000112242 +0.000112 +0.000111757 +0.000111512 +0.000111265 +0.000111017 +0.000110766 +0.000110514 +0.00011026 +0.000110004 +0.000109746 +0.000109486 +0.000109224 +0.00010896 +0.000108694 +0.000108426 +0.000108156 +0.000107884 +0.000107611 +0.000107335 +0.000107057 +0.000106777 +0.000106494 +0.00010621 +0.000105924 +0.000105635 +0.000105345 +0.000105052 +0.000104757 +0.00010446 +0.000104161 +0.000103859 +0.000103555 +0.000103249 +0.000102941 +0.00010263 +0.000102318 +0.000102002 +0.000101685 +0.000101365 +0.000101043 +0.000100718 +0.000100391 +0.000100062 +9.97299e-05 +9.93957e-05 +9.9059e-05 +9.87198e-05 +9.83781e-05 +9.80339e-05 +9.76872e-05 +9.7338e-05 +9.69862e-05 +9.66318e-05 +9.62748e-05 +9.59153e-05 +9.55531e-05 +9.51882e-05 +9.48207e-05 +9.44505e-05 +9.40777e-05 +9.37021e-05 +9.33238e-05 +9.29427e-05 +9.25589e-05 +9.21723e-05 +9.17828e-05 +9.13906e-05 +9.09955e-05 +9.05976e-05 +9.01968e-05 +8.97931e-05 +8.93866e-05 +8.8977e-05 +8.85646e-05 +8.81491e-05 +8.77307e-05 +8.73093e-05 +8.68849e-05 +8.64574e-05 +8.60269e-05 +8.55933e-05 +8.51566e-05 +8.47168e-05 +8.42738e-05 +8.38277e-05 +8.33785e-05 +8.2926e-05 +8.24704e-05 +8.20115e-05 +8.15494e-05 +8.1084e-05 +8.06154e-05 +8.01434e-05 +7.96681e-05 +0.000296215 +0.000292916 +0.000289496 +0.000285947 +0.000282267 +0.00027845 +0.000274491 +0.000270386 +0.000266129 +0.000261715 +0.00025714 +0.000252397 +0.000247482 +0.000242388 +0.00023711 +0.000231642 +0.000225979 +0.000220114 +0.000214041 +0.000207755 +0.00020125 +0.00019452 +0.000187558 +0.00018036 +0.000171945 +0.000321995 +0.000318449 +0.00031472 +0.000310852 +0.000306839 +0.000302677 +0.000298359 +0.00029388 +0.000289236 +0.00028442 +0.000279426 +0.000274248 +0.00026888 +0.000263317 +0.00025755 +0.000251575 +0.000245383 +0.000238969 +0.000232326 +0.000225446 +0.000218323 +0.00021095 +0.000203321 +0.000195427 +0.000191374 +0.000519365 +0.000513724 +0.000507721 +0.000501494 +0.000495035 +0.000488335 +0.000481386 +0.00047418 +0.000466708 +0.000458961 +0.000450928 +0.000442602 +0.000433972 +0.000425028 +0.00041576 +0.000406158 +0.000396211 +0.000385909 +0.000375241 +0.000364197 +0.000352766 +0.000340936 +0.000328699 +0.000316042 +0.000319146 +0.000745376 +0.00073737 +0.000728755 +0.000719819 +0.00071055 +0.000700936 +0.000690964 +0.000680624 +0.000669901 +0.000658783 +0.000647258 +0.00063531 +0.000622927 +0.000610093 +0.000596795 +0.000583018 +0.000568747 +0.000553967 +0.000538663 +0.000522819 +0.000506421 +0.000489453 +0.000471899 +0.000453747 +0.000462603 +0.000984316 +0.000973859 +0.000962483 +0.000950682 +0.000938442 +0.000925745 +0.000912578 +0.000898923 +0.000884763 +0.000870083 +0.000854863 +0.000839086 +0.000822734 +0.000805789 +0.00078823 +0.000770039 +0.000751195 +0.00073168 +0.000711474 +0.000690555 +0.000668905 +0.000646503 +0.000623329 +0.000599365 +0.000608265 +0.00106731 +0.00108924 +0.00111081 +0.00113281 +0.00115522 +0.00115918 +0.00114269 +0.00112559 +0.00110787 +0.00108949 +0.00107043 +0.00105068 +0.00103021 +0.00100899 +0.000987007 +0.000964232 +0.000940642 +0.00091621 +0.000890913 +0.000864725 +0.000837622 +0.000809578 +0.000780569 +0.000750571 +0.000751387 +0.000508944 +0.000555958 +0.000606174 +0.00065988 +0.000718486 +0.000773794 +0.00082002 +0.000865543 +0.00091194 +0.00095916 +0.00100714 +0.00105581 +0.00110508 +0.00115485 +0.00119162 +0.00116413 +0.00113565 +0.00110616 +0.00107562 +0.00104401 +0.00101129 +0.000977443 +0.000942427 +0.000906218 +0.000890961 +5.0391e-18 +2.13307e-18 +2.04142e-18 +7.52853e-19 +1.96488e-18 +2.66242e-05 +8.47337e-05 +0.000147353 +0.000214951 +0.000288063 +0.000367298 +0.000453352 +0.000547027 +0.000649656 +0.00075914 +0.000848432 +0.000935578 +0.00102334 +0.00111144 +0.00119958 +0.00118913 +0.00114933 +0.00110817 +0.0010656 +0.00102929 +2.15961e-18 +3.49863e-18 +2.72189e-18 +3.98867e-18 +4.52534e-18 +2.53427e-18 +6.95837e-19 +1.19369e-18 +2.4139e-18 +1.23184e-18 +2.30471e-18 +1.23744e-18 +2.13135e-18 +3.18439e-18 +1.79396e-05 +0.000127464 +0.000248253 +0.000381907 +0.000530321 +0.000698019 +0.000848992 +0.000988297 +0.00112614 +0.00122822 +0.00117197 +2.15961e-18 +1.5913e-18 +5.44378e-18 +5.30882e-18 +1.33548e-18 +2.53427e-18 +2.4701e-18 +1.19369e-18 +8.58474e-19 +1.81462e-18 +1.26483e-18 +2.01309e-18 +1.06568e-18 +0 +2.1238e-18 +1.14503e-18 +5.36116e-19 +1.10932e-18 +2.18846e-18 +1.02921e-18 +0.000131877 +0.000320675 +0.000535125 +0.000772208 +0.000967588 +2.88607e-18 +1.4498e-18 +2.72189e-18 +3.97253e-18 +2.60171e-18 +1.30086e-18 +5.50752e-18 +3.23051e-19 +1.16504e-18 +6.46962e-19 +8.19642e-19 +1.29766e-18 +0 +2.08919e-18 +2.1238e-18 +4.17282e-18 +2.05223e-18 +2.02135e-18 +9.62309e-19 +1.02921e-18 +3.00107e-18 +1.37513e-18 +2.10874e-18 +4.36517e-05 +0.0002994 +2.16838e-18 +3.49863e-18 +0 +3.97253e-18 +1.33548e-18 +0 +1.22389e-18 +1.23663e-18 +2.33007e-18 +1.13793e-18 +6.02071e-19 +1.08826e-18 +0 +1.0446e-18 +0 +5.45044e-19 +1.12627e-18 +5.28047e-19 +1.92462e-18 +1.96989e-18 +3.00107e-18 +1.86619e-18 +1.00378e-18 +1.36117e-18 +9.98551e-19 +2.15961e-18 +6.99726e-19 +2.72189e-18 +1.98627e-18 +3.48875e-19 +1.91395e-18 +3.68659e-18 +4.78566e-18 +1.16504e-18 +1.17886e-18 +6.32413e-19 +8.01897e-19 +3.72986e-18 +3.13379e-18 +0 +0 +1.12627e-18 +5.28047e-19 +9.62309e-19 +3.83764e-18 +1.94964e-18 +2.12202e-18 +0 +3.41709e-18 +2.09775e-18 +2.87949e-18 +1.39945e-18 +5.44378e-18 +1.32418e-18 +4.51187e-18 +6.27845e-19 +6.15522e-18 +1.23663e-18 +1.74756e-18 +3.42765e-18 +2.84527e-18 +1.12741e-18 +0 +7.69726e-19 +3.12473e-18 +1.00698e-18 +1.12627e-18 +1.55572e-18 +2.88693e-18 +4.75372e-18 +1.38673e-18 +0 +9.27253e-19 +3.69449e-18 +1.84484e-18 +9.35833e-18 +1.41221e-18 +2.72189e-18 +2.64836e-18 +3.22277e-19 +2.53427e-18 +9.01843e-19 +5.96843e-19 +5.82519e-19 +6.46962e-19 +2.30471e-18 +1.12741e-18 +2.13135e-18 +1.66579e-18 +1.63458e-18 +1.14503e-18 +0 +1.43774e-18 +1.09423e-18 +4.75372e-18 +3.00107e-18 +1.06101e-18 +9.27253e-19 +9.99851e-19 +1.84484e-18 +8.99839e-18 +4.2154e-18 +1.37335e-18 +2.64836e-18 +1.74437e-19 +5.04856e-18 +2.19868e-18 +2.98421e-19 +5.82519e-19 +1.73445e-18 +6.32413e-19 +3.26477e-18 +2.13135e-18 +2.08919e-18 +5.12513e-19 +3.06972e-18 +9.90485e-19 +1.43774e-18 +2.93354e-18 +1.96989e-18 +5.09314e-19 +1.93332e-18 +9.27253e-19 +4.61811e-19 +4.99275e-19 +1.07981e-18 +1.75953e-18 +2.72811e-18 +4.30731e-18 +1.94151e-18 +2.51712e-18 +5.51747e-18 +3.5847e-18 +2.62133e-18 +2.2966e-18 +1.94659e-18 +1.63238e-18 +1.59851e-18 +1.56689e-18 +2.77406e-19 +5.0349e-19 +3.4667e-18 +2.02135e-18 +2.93354e-18 +1.02921e-18 +1.06996e-18 +6.87563e-19 +2.78176e-18 +1.05024e-18 +1.91121e-18 +1.80231e-18 +2.8005e-18 +3.40236e-18 +2.65441e-18 +4.51524e-18 +0 +6.33961e-19 +1.20456e-18 +4.07763e-18 +8.53446e-19 +1.94659e-18 +2.44858e-18 +2.13135e-18 +3.65609e-18 +1.0619e-18 +1.00698e-18 +9.90485e-19 +1.01067e-18 +1.23954e-18 +1.08108e-18 +6.93366e-19 +6.87563e-19 +3.24539e-18 +2.30906e-18 +1.84484e-18 +1.79665e-18 +4.84529e-18 +1.67695e-18 +1.75976e-19 +5.04717e-18 +4.89592e-18 +2.67088e-18 +3.74839e-18 +1.67868e-18 +3.80844e-18 +5.47458e-19 +1.02783e-18 +2.50017e-18 +3.40758e-18 +4.74184e-18 +1.38655e-18 +2.25391e-19 +8.7994e-19 +6.85291e-19 +0 +1.23299e-18 +8.04951e-19 +1.18357e-18 +8.80425e-19 +3.0704e-18 +8.21715e-18 +6.4034e-18 +2.68312e-18 +6.34228e-18 +1.89353e-18 +3.67357e-18 +2.96765e-19 +5.76177e-19 +1.67868e-18 +0 +5.47458e-19 +4.37048e-18 +0 +7.30195e-19 +1.44552e-18 +1.61764e-18 +6.76172e-19 +2.19985e-18 +4.88651e-19 +2.53073e-18 +4.67338e-19 +0 +3.94523e-19 +8.80425e-19 +4.11724e-19 +5.5381e-18 +3.58543e-19 +8.43373e-19 +2.92608e-18 +1.89353e-18 +9.17461e-19 +1.04178e-18 +8.78219e-19 +0 +8.66953e-19 +1.06653e-18 +7.83316e-19 +2.00014e-18 +7.41985e-19 +2.14921e-18 +2.31091e-18 +1.12695e-18 +6.59955e-19 +4.88651e-19 +4.54752e-19 +8.51561e-19 +4.02475e-19 +1.18357e-18 +1.60427e-18 +0 +2.03108e-19 +2.07867e-18 +3.52276e-18 +6.50239e-18 +2.83741e-18 +5.50539e-18 +2.82041e-18 +4.32133e-19 +2.7978e-19 +1.35914e-18 +3.17391e-18 +5.13913e-19 +4.12529e-18 +4.86797e-18 +2.13768e-18 +3.69746e-18 +0 +7.01606e-19 +6.44608e-19 +2.52049e-18 +1.02749e-18 +4.02475e-19 +6.29133e-19 +1.35499e-18 +1.52134e-18 +4.82302e-18 +1.03828e-18 +5.03085e-18 +5.20266e-18 +7.56642e-18 +1.37868e-18 +3.2654e-18 +4.3911e-19 +1.67868e-18 +1.91556e-18 +5.28448e-19 +3.85435e-19 +2.25016e-18 +7.41985e-19 +4.3862e-18 +2.08358e-18 +2.4793e-18 +1.98344e-18 +1.71896e-18 +2.27376e-19 +6.16493e-19 +0 +1.39724e-18 +1.16142e-18 +1.5352e-18 +8.94414e-19 +2.59612e-18 +4.21687e-19 +1.14132e-18 +1.57634e-18 +1.98783e-18 +1.85521e-18 +4.3911e-19 +2.23824e-18 +2.58656e-18 +5.28448e-19 +1.28666e-18 +1.75012e-18 +6.12051e-19 +8.39686e-19 +3.94157e-19 +3.38086e-18 +1.54449e-18 +2.14869e-19 +6.40297e-19 +2.33669e-19 +2.01238e-19 +7.89046e-19 +9.67851e-19 +1.5352e-18 +4.47207e-19 +3.28821e-18 +5.19874e-18 +2.4384e-19 +7.88169e-19 +1.98826e-18 +4.00632e-18 +4.60941e-18 +5.52565e-18 +1.0898e-18 +1.84957e-18 +6.95409e-20 +3.18772e-18 +2.00912e-18 +4.74184e-19 +1.04741e-18 +2.02852e-18 +3.08036e-18 +7.52043e-19 +2.38835e-19 +4.2578e-19 +1.6099e-18 +6.90415e-19 +1.9357e-19 +1.02931e-19 +2.07661e-18 +6.49029e-19 +5.99509e-18 +2.51968e-18 +1.02462e-18 +2.52336e-18 +4.37732e-18 +6.26592e-18 +3.56719e-18 +3.80565e-18 +4.42575e-18 +2.82652e-18 +3.84402e-18 +1.88634e-18 +1.77819e-18 +1.97078e-19 +2.59199e-18 +1.56993e-18 +1.10159e-18 +2.83556e-18 +4.6237e-19 +4.02475e-19 +0 +6.77496e-19 +1.52221e-18 +5.71588e-18 +1.1708e-20 +0 +0 +0 +0 +4.74828e-18 +0 +0 +1.83914e-20 +0 +0 +0 +0 +3.79347e-18 +3.6976e-18 +0 +2.97676e-20 +2.90754e-20 +3.36066e-18 +0 +0 +1.57809e-18 +1.54856e-18 +5.14655e-20 +3.2721e-18 +2.38599e-20 +1.75388e-18 +1.07978e-18 +3.95145e-18 +1.95862e-18 +1.90369e-19 +2.85083e-18 +2.41341e-18 +3.05061e-18 +5.05464e-18 +1.53155e-18 +1.98012e-18 +3.1679e-19 +9.9004e-19 +1.39142e-18 +1.83407e-18 +1.33236e-18 +2.55489e-18 +1.89489e-18 +7.13751e-19 +3.28069e-19 +7.94848e-19 +1.88132e-18 +1.65183e-18 +1.45427e-18 +4.05558e-18 +7.44269e-18 +5.81726e-19 +3.95145e-18 +1.17594e-18 +1.82754e-18 +9.63453e-19 +1.44084e-19 +7.0129e-20 +2.66496e-18 +1.60135e-18 +1.29844e-18 +3.1679e-18 +1.85633e-18 +1.33095e-18 +3.66869e-18 +2.66472e-18 +3.29297e-18 +1.1157e-18 +2.29878e-18 +1.72288e-18 +2.01361e-18 +5.22588e-19 +1.65183e-18 +3.99923e-18 +8.81632e-20 +4.87622e-18 +3.15559e-18 +1.9354e-18 +2.82328e-18 +7.65924e-19 +3.99877e-18 +4.03436e-18 +2.9464e-18 +2.46346e-18 +1.73683e-18 +3.37594e-18 +7.60296e-19 +2.72261e-18 +2.75082e-19 +1.08214e-18 +9.35306e-19 +4.54203e-19 +2.22815e-18 +6.56575e-19 +2.36761e-18 +6.35878e-19 +2.29939e-18 +1.65183e-18 +3.45388e-18 +4.05551e-18 +2.39534e-18 +4.15209e-18 +2.41925e-18 +1.56919e-18 +1.06925e-18 +2.36952e-18 +5.33112e-18 +4.62914e-18 +3.42249e-18 +1.08685e-18 +2.59688e-18 +1.90074e-18 +7.4253e-19 +1.45151e-18 +3.48763e-19 +1.87061e-18 +4.70542e-19 +2.22815e-19 +8.83412e-19 +1.7219e-18 +2.33155e-18 +2.09035e-19 +0 +1.0907e-18 +5.64244e-18 +4.27839e-18 +5.14859e-18 +5.96813e-18 +5.32811e-18 +2.43812e-18 +3.70585e-18 +2.88169e-18 +4.20774e-18 +2.19079e-18 +5.32566e-19 +2.59688e-19 +2.78775e-18 +1.48506e-18 +1.21666e-18 +1.19018e-18 +9.35306e-19 +6.92304e-19 +5.0672e-19 +1.31315e-18 +2.37905e-18 +4.23919e-19 +6.27105e-19 +1.65183e-18 +2.1814e-18 +4.23291e-18 +5.45681e-19 +3.32167e-19 +3.87179e-18 +1.88218e-18 +4.87971e-18 +2.67053e-18 +2.30535e-18 +2.80516e-18 +1.09289e-18 +7.98849e-19 +3.37594e-18 +2.53432e-19 +2.67938e-19 +9.67673e-19 +2.14523e-18 +2.50839e-19 +9.08405e-19 +9.23321e-19 +1.76682e-18 +4.30475e-19 +8.78338e-19 +8.3614e-19 +0 +3.2721e-18 +1.41384e-18 +3.54501e-19 +1.34078e-18 +1.94326e-18 +3.13379e-18 +1.53185e-18 +3.26204e-18 +4.6107e-18 +1.68993e-18 +4.37158e-18 +6.05575e-19 +2.0775e-18 +3.04118e-18 +2.48956e-18 +3.39697e-18 +4.26746e-18 +4.64108e-18 +1.36261e-18 +1.78252e-18 +1.33435e-18 +8.91921e-19 +2.29453e-19 +4.1807e-19 +3.30365e-18 +1.28724e-18 +3.12728e-19 +3.95258e-18 +5.915e-18 +5.47106e-18 +1.96786e-18 +3.10538e-19 +2.13013e-18 +1.55867e-18 +2.02906e-18 +0 +3.3954e-18 +3.55804e-18 +2.33746e-18 +0 +2.23755e-18 +1.34097e-18 +3.03972e-18 +0 +3.79115e-18 +8.63001e-19 +1.23781e-18 +9.31397e-19 +4.41061e-19 +1.62533e-18 +6.43619e-19 +6.47956e-19 +3.64854e-18 +2.9575e-18 +4.03268e-18 +5.80738e-19 +5.65848e-19 +2.135e-18 +1.81845e-18 +2.07044e-18 +0 +4.84695e-19 +0 +4.19055e-18 +3.64648e-18 +2.42222e-19 +9.11423e-19 +1.31983e-18 +2.13365e-18 +4.56005e-19 +9.47232e-19 +1.70979e-18 +6.03571e-19 +2.48408e-18 +1.62533e-18 +2.89629e-18 +1.88399e-18 +4.86472e-18 +7.10522e-18 +1.44758e-18 +2.80286e-18 +2.18479e-18 +2.67821e-18 +5.71513e-18 +6.11191e-18 +4.95647e-19 +2.90817e-18 +9.48811e-19 +1.85911e-18 +5.18296e-19 +2.23755e-18 +1.75955e-18 +9.84613e-19 +0 +1.55844e-18 +4.9982e-18 +2.51559e-18 +8.19107e-19 +0 +0 +1.60905e-18 +5.00364e-18 +5.47281e-18 +1.60079e-19 +6.91503e-18 +2.24229e-18 +7.65249e-18 +1.21107e-18 +1.55867e-18 +1.05103e-18 +5.63594e-19 +9.6939e-19 +9.82943e-19 +4.21314e-18 +5.18296e-19 +1.01772e-18 +3.07921e-18 +2.59772e-18 +2.13365e-18 +2.155e-18 +6.13832e-19 +3.33091e-18 +0 +1.62974e-18 +1.84814e-18 +7.07981e-18 +1.25091e-18 +1.21618e-18 +1.183e-18 +8.48377e-19 +2.24229e-18 +6.00818e-18 +1.69842e-18 +2.07823e-18 +5.76806e-19 +1.51095e-18 +1.93878e-18 +1.4462e-18 +5.59997e-18 +5.03813e-18 +1.85444e-18 +8.79774e-19 +1.73181e-18 +0 +0 +9.01785e-19 +4.46656e-19 +0 +2.59889e-18 +1.84814e-18 +7.07981e-18 +1.87637e-18 +3.66335e-18 +5.33312e-18 +2.32366e-18 +8.96916e-18 +3.2905e-18 +2.13013e-18 +1.03911e-18 +0 +3.96518e-18 +1.10228e-18 +3.79524e-18 +4.64776e-18 +5.49193e-18 +1.79004e-18 +2.63932e-18 +1.79412e-18 +9.70458e-19 +1.68496e-18 +4.1895e-18 +4.95124e-18 +1.63821e-18 +1.85315e-18 +0 +2.57448e-18 +3.12728e-18 +1.85372e-18 +2.45112e-18 +8.06536e-18 +2.80286e-18 +6.00818e-18 +5.35643e-18 +0 +4.0674e-18 +9.91294e-19 +5.24698e-19 +2.84643e-18 +1.92599e-18 +2.77901e-18 +3.61271e-18 +0 +0 +1.76832e-18 +8.42479e-19 +8.33033e-19 +1.65041e-18 +0 +1.2009e-18 +1.62533e-18 +7.72343e-18 +1.29591e-18 +1.21618e-18 +1.183e-18 +1.727e-18 +7.85388e-18 +5.46199e-19 +5.32531e-18 +2.65798e-18 +3.09273e-18 +9.91294e-19 +2.00853e-18 +1.89762e-18 +2.11397e-18 +1.88883e-18 +3.61271e-18 +1.82285e-18 +9.84613e-19 +1.70692e-18 +4.30999e-18 +1.89446e-18 +1.21613e-18 +3.27643e-18 +1.85315e-18 +1.62533e-18 +2.57448e-18 +5.01508e-18 +3.64854e-18 +3.56341e-18 +1.75489e-18 +5.60572e-19 +5.46199e-18 +1.10338e-18 +1.53137e-18 +3.09273e-18 +4.95647e-18 +1.10228e-18 +9.48811e-19 +9.29553e-19 +2.73486e-18 +1.85444e-18 +4.42457e-18 +4.42985e-18 +4.26729e-18 +2.52744e-18 +1.89446e-18 +1.96799e-18 +3.27643e-18 +0 +8.79734e-19 +2.57448e-18 +2.52462e-18 +1.21618e-18 +1.183e-18 +4.0417e-18 +2.32295e-18 +3.8348e-18 +4.26025e-18 +5.22593e-18 +5.10229e-18 +9.91294e-19 +1.10228e-18 +1.89762e-18 +1.92599e-18 +0 +1.85444e-18 +8.79774e-19 +1.96923e-18 +1.25777e-18 +9.1201e-19 +8.33033e-19 +4.5724e-05 +0.000178961 +0.000328833 +0.000498241 +1.14567e-18 +1.15201e-18 +1.07975e-18 +2.63751e-18 +4.11453e-18 +8.4287e-18 +7.71753e-18 +3.75362e-18 +0 +1.0126e-18 +8.68315e-19 +4.23622e-18 +5.79101e-18 +2.52599e-05 +9.3892e-05 +0.000168596 +0.000250104 +0.000339264 +0.000437065 +0.000544659 +0.000664285 +0.000785418 +0.000888122 +0.000989528 +0.0010829 +7.67963e-05 +0.000111709 +0.00014887 +0.000188469 +0.000230713 +0.000275835 +0.000324093 +0.000375776 +0.000431207 +0.000490748 +0.000554807 +0.000623845 +0.000699211 +0.000769961 +0.000823025 +0.000875088 +0.000927827 +0.000981136 +0.00103489 +0.00108894 +0.00114312 +0.00116505 +0.00113162 +0.00109703 +0.00106447 +0.00081133 +0.000836584 +0.000862029 +0.000888118 +0.000914844 +0.0009422 +0.000970171 +0.000998743 +0.00102789 +0.0010576 +0.00108783 +0.00111854 +0.00114969 +0.0011609 +0.00113991 +0.00111816 +0.00109562 +0.00107226 +0.00104806 +0.00102299 +0.000997024 +0.000970136 +0.000942298 +0.000913485 +0.000904014 +0.00113389 +0.0011234 +0.00111222 +0.00110062 +0.00108859 +0.00107611 +0.00106315 +0.00104972 +0.00103579 +0.00102133 +0.00100635 +0.000990806 +0.000974691 +0.000957984 +0.000940665 +0.000922713 +0.000904109 +0.00088483 +0.000864856 +0.000844164 +0.000822733 +0.000800541 +0.000777565 +0.000753783 +0.000760454 +0.00092525 +0.000916647 +0.000907526 +0.000898062 +0.000888243 +0.000878056 +0.000867488 +0.000856526 +0.000845155 +0.000833362 +0.000821131 +0.000808448 +0.000795298 +0.000781664 +0.00076753 +0.00075288 +0.000737697 +0.000721964 +0.000705663 +0.000688777 +0.000671287 +0.000653175 +0.000634423 +0.000615013 +0.000629258 +0.000744254 +0.000737307 +0.00072997 +0.000722357 +0.000714458 +0.000706263 +0.000697762 +0.000688943 +0.000679796 +0.000670309 +0.00066047 +0.000650267 +0.000639687 +0.000628719 +0.000617349 +0.000605563 +0.000593348 +0.000580691 +0.000567576 +0.00055399 +0.000539919 +0.000525346 +0.000510259 +0.000494642 +0.000509786 +0.000587604 +0.0005821 +0.000576307 +0.000570296 +0.000564059 +0.000557588 +0.000550875 +0.000543912 +0.000536689 +0.000529198 +0.000521428 +0.000513372 +0.000505018 +0.000496356 +0.000487378 +0.000478071 +0.000468425 +0.000458429 +0.000448072 +0.000437343 +0.000426229 +0.000414721 +0.000402805 +0.00039047 +0.000402537 +0.000452458 +0.000448207 +0.000443745 +0.000439116 +0.000434313 +0.000429329 +0.00042416 +0.000418797 +0.000413234 +0.000407465 +0.000401481 +0.000395276 +0.000388842 +0.000382171 +0.000375255 +0.000368086 +0.000360657 +0.000352957 +0.000344979 +0.000336715 +0.000328154 +0.000319288 +0.000310108 +0.000300605 +0.000308014 +0.000336414 +0.000333244 +0.000329926 +0.000326483 +0.000322911 +0.000319205 +0.00031536 +0.000311371 +0.000307234 +0.000302943 +0.000298493 +0.000293877 +0.000289092 +0.00028413 +0.000278986 +0.000273653 +0.000268126 +0.000262399 +0.000256464 +0.000250315 +0.000243946 +0.000237349 +0.000230519 +0.000223447 +0.000226356 +0.000237547 +0.000235302 +0.000232958 +0.000230526 +0.000228003 +0.000225385 +0.000222669 +0.000219852 +0.000216929 +0.000213897 +0.000210753 +0.000207493 +0.000204111 +0.000200605 +0.000196971 +0.000193203 +0.000189297 +0.00018525 +0.000181055 +0.00017671 +0.000172208 +0.000167545 +0.000162716 +0.000157716 +0.000157333 +0.000154662 +0.000153196 +0.000151669 +0.000150085 +0.000148441 +0.000146736 +0.000144966 +0.00014313 +0.000141226 +0.00013925 +0.000137201 +0.000135077 +0.000132873 +0.000130588 +0.000128219 +0.000125762 +0.000123216 +0.000120577 +0.000117842 +0.000115007 +0.000112071 +0.000109028 +0.000105877 +0.000102614 +0.000100593 +8.97166e-05 +8.88599e-05 +8.7969e-05 +8.70444e-05 +8.60847e-05 +8.50887e-05 +8.4055e-05 +8.29823e-05 +8.18692e-05 +8.07142e-05 +7.95158e-05 +7.82725e-05 +7.69827e-05 +7.56448e-05 +7.42571e-05 +7.28179e-05 +7.13255e-05 +6.97781e-05 +6.8174e-05 +6.65113e-05 +6.47884e-05 +6.30034e-05 +6.11549e-05 +5.92413e-05 +5.71103e-05 +7.87429e-05 +7.79947e-05 +7.72188e-05 +7.64137e-05 +7.55784e-05 +7.47118e-05 +7.38129e-05 +7.28803e-05 +7.19131e-05 +7.09099e-05 +6.98696e-05 +6.87908e-05 +6.76722e-05 +6.65126e-05 +6.53105e-05 +6.40645e-05 +6.27733e-05 +6.14353e-05 +6.0049e-05 +5.86131e-05 +5.71259e-05 +5.5586e-05 +5.39918e-05 +5.23418e-05 +5.04651e-05 +) +; boundaryField { - inlet + inlet { type fixedValue; value uniform 0; } - - outlet + outlet { type zeroGradient; } - - upperWall + upperWall { type zeroGradient; } - - lowerWall + lowerWall { type zeroGradient; } - - frontAndBack + frontAndBack { type empty; } } + // ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/constant/polyMesh/boundary b/tutorials/incompressible/simpleFoam/pitzDaily/constant/polyMesh/boundary index eb4a4e461df4c51d64c38b8a33c61baff06750ca..313dcceba1abd7b93d57320c4c674f1734692506 100644 --- a/tutorials/incompressible/simpleFoam/pitzDaily/constant/polyMesh/boundary +++ b/tutorials/incompressible/simpleFoam/pitzDaily/constant/polyMesh/boundary @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ diff --git a/tutorials/incompressible/simpleSRFFoam/simpleSRFFoam/createFields.H b/tutorials/incompressible/simpleSRFFoam/simpleSRFFoam/createFields.H index 3e4e11ae301c2acc68e501410d870b8e1bf1b989..a5d68368ea58b18ffa8498337c4dd1b58f508aef 100644 --- a/tutorials/incompressible/simpleSRFFoam/simpleSRFFoam/createFields.H +++ b/tutorials/incompressible/simpleSRFFoam/simpleSRFFoam/createFields.H @@ -1,4 +1,4 @@ - Info << "Reading field p\n" << endl; + Info<< "Reading field p\n" << endl; volScalarField p ( IOobject diff --git a/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict index 176b1467df245f1883bc80052ba98e87e5ff934a..6e02e44e34288182b6b6616ff0e15cdb8228c676 100644 --- a/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict @@ -34,7 +34,7 @@ hierarchicalCoeffs metisCoeffs { - processorWeights ( 1 1 1 1 ); + //processorWeights ( 1 1 1 1 ); } manualCoeffs diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/dynamicMeshDict b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/dynamicMeshDict index d7570faf2d4d8ccdba5dd26614745c8f804fedf3..9249808c58d190e2272d768484beb5005c191676 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/dynamicMeshDict +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/dynamicMeshDict @@ -19,14 +19,23 @@ dynamicFvMesh dynamicRefineFvMesh; dynamicRefineFvMeshCoeffs { + // How often to refine refineInterval 1; + // Field to be refinement on field alpha1; + // Refine field inbetween lower..upper lowerRefineLevel 0.001; upperRefineLevel 0.999; + // If value < unrefineLevel unrefine unrefineLevel 10; + // Have slower than 2:1 refinement nBufferLayers 1; + // Refine cells only up to maxRefinement levels maxRefinement 2; + // Stop refinement if maxCells reached maxCells 200000; + // Flux field and corresponding velocity field. Fluxes on changed + // faces get recalculated by interpolating the velocity. correctFluxes ( ( @@ -34,6 +43,7 @@ dynamicRefineFvMeshCoeffs U ) ); + // Write the refinement level as a volScalarField dumpLevel true; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/gen6DoF/gen6DoF.C b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/gen6DoF/gen6DoF.C index a90c715389afce5e50786885c3d39af2c7d8ec8c..e46d0fd053aac9bdda300f8943048119373e0e71 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/gen6DoF/gen6DoF.C +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/gen6DoF/gen6DoF.C @@ -88,7 +88,7 @@ int main(int argc, char *argv[]) dataFile << timeValues << endl; } - Info << "End\n" << endl; + Info<< "End\n" << endl; return 0; } diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H index 5a67dd0497b150c4a46f62f306afdf814cfe17aa..cab105511b203935eea4c905ecb1f175e8730e39 100644 --- a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H @@ -19,7 +19,7 @@ )*rUAf; adjustPhi(phi, U, p); - for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( diff --git a/wmake/rules/linux64Icc/c++ b/wmake/rules/linux64Icc/c++ index a637677c1d4d306fc87df75f2480543e513409de..6ddaa1fe6111f057ae174b0f6d30038763c35ff9 100644 --- a/wmake/rules/linux64Icc/c++ +++ b/wmake/rules/linux64Icc/c++ @@ -1,6 +1,6 @@ .SUFFIXES: .C .cxx .cc .cpp -c++WARN = -wd654,819,1125,1476,1505,1572 +c++WARN = -wd327,654,819,1125,1476,1505,1572 CC = icpc diff --git a/wmake/rules/linuxIA64Icc/c++ b/wmake/rules/linuxIA64Icc/c++ index b8e396385682ae5cb3c3f72a16e570423b208c14..625cbd186efb0f5af95d7298da0fa2251539d207 100644 --- a/wmake/rules/linuxIA64Icc/c++ +++ b/wmake/rules/linuxIA64Icc/c++ @@ -1,6 +1,6 @@ .SUFFIXES: .C .cxx .cc .cpp -c++WARN = -wd654,819,1125,1476,1505,1572 +c++WARN = -wd327,654,819,1125,1476,1505,1572 CC = icpc diff --git a/wmake/rules/linuxIcc/c++ b/wmake/rules/linuxIcc/c++ index 011145e81e1e2c757b6811f53d2a44cc44c66de2..dcbd72e77cf119f99a6ad56c8af40c8cca5473eb 100644 --- a/wmake/rules/linuxIcc/c++ +++ b/wmake/rules/linuxIcc/c++ @@ -1,6 +1,6 @@ .SUFFIXES: .C .cxx .cc .cpp -c++WARN = -wd654,819,1125,1476,1505,1572 +c++WARN = -wd327,654,819,1125,1476,1505,1572 #CC = icpc -gcc-version=400 CC = icpc