From 3bd3fb1e00cb53b95a913618e95510b4254c2861 Mon Sep 17 00:00:00 2001 From: tlichtenegger Date: Thu, 30 Jun 2022 10:04:32 +0200 Subject: [PATCH 01/44] Make sure gradPForceSmooth only uses certain smoothing models. Also fixed some inconsistencies in constDiffAndTemporalSmoothing. --- .../gradPForceSmooth/gradPForceSmooth.C | 7 ++++- .../constDiffAndTemporalSmoothing.C | 29 ++++++------------- .../constDiffAndTemporalSmoothing.H | 3 +- .../temporalSmoothing/temporalSmoothing.C | 2 +- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C index 16d26a06..e6c82158 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C @@ -96,7 +96,7 @@ gradPForceSmooth::gradPForceSmooth if (modelType_ == "B") { - FatalError <<"using model gradPForceSmooth with model type B is not valid\n" << abort(FatalError); + FatalError <<"using model gradPForceSmooth with model type B is not valid\n" << abort(FatalError); } else if (modelType_ == "Bfull") { @@ -135,6 +135,11 @@ gradPForceSmooth::gradPForceSmooth particleCloud_.probeM().scalarFields_.append("Vs"); particleCloud_.probeM().scalarFields_.append("rho"); particleCloud_.probeM().writeHeader(); + + if (!(smoothingM().type() == "temporalSmoothing") && !(smoothingM().type() == "constDiffAndTemporalSmoothing")) + { + FatalError <<"using model gradPForceSmooth with invalid smoothing model\n" << abort(FatalError); + } } diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.C index dc307235..b119af4a 100644 --- a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.C +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.C @@ -68,8 +68,9 @@ constDiffAndTemporalSmoothing::constDiffAndTemporalSmoothing smoothingLength_(dimensionedScalar("smoothingLength",dimensionSet(0,1,0,0,0,0,0), readScalar(propsDict_.lookup("smoothingLength")))), smoothingLengthReferenceField_(dimensionedScalar("smoothingLengthReferenceField",dimensionSet(0,1,0,0,0,0,0), readScalar(propsDict_.lookup("smoothingLength")))), DT_("DT", dimensionSet(0,2,-1,0,0), 0.), + refFieldName_(propsDict_.lookup("refField")), gamma_(readScalar(propsDict_.lookup("smoothingStrength"))), - correctBoundary_(propsDict_.lookupOrDefault("correctBoundary",false)), +// correctBoundary_(propsDict_.lookupOrDefault("correctBoundary",false)), verbose_(false) { @@ -110,12 +111,14 @@ void constDiffAndTemporalSmoothing::smoothen(volScalarField& fieldSrc) const double deltaT = sSmoothField.mesh().time().deltaTValue(); DT_.value() = smoothingLength_.value() * smoothingLength_.value() / deltaT; + const volScalarField& refField = particleCloud_.mesh().lookupObject(refFieldName_); // do smoothing solve ( fvm::ddt(sSmoothField) -fvm::laplacian(DT_, sSmoothField) + -gamma_/deltaT * (refField - fvm::Sp(1.0,sSmoothField)) ); // bound sSmoothField_ @@ -151,33 +154,19 @@ void constDiffAndTemporalSmoothing::smoothen(volVectorField& fieldSrc) const dimensionedScalar deltaT = vSmoothField.mesh().time().deltaT(); DT_.value() = smoothingLength_.value() * smoothingLength_.value() / deltaT.value(); + const volVectorField& refField = particleCloud_.mesh().lookupObject(refFieldName_); - // do spacial smoothing + // do spatial and temporal smoothing solve ( fvm::ddt(vSmoothField) -fvm::laplacian(DT_, vSmoothField) - ); - - // create fields for temporal smoothing - volVectorField refField = vSmoothField; - - vSmoothField.ref()=fieldSrc.oldTime().internalField(); - vSmoothField.correctBoundaryConditions(); - vSmoothField.oldTime()=fieldSrc.oldTime(); - vSmoothField.oldTime().correctBoundaryConditions(); - - // do temporal smoothing - solve - ( - fvm::ddt(vSmoothField) - - - gamma_/deltaT * (refField - fvm::Sp(1.0,vSmoothField)) + -gamma_/deltaT * (refField - fvm::Sp(1.0,vSmoothField)) ); // create temporally smoothened boundary field - if (correctBoundary_) - vSmoothField.boundaryFieldRef() = 1/(1+gamma_)*fieldSrc.oldTime().boundaryField() + gamma_/(1+gamma_)*fieldSrc.boundaryField(); + // if (correctBoundary_) + // vSmoothField.boundaryFieldRef() = 1/(1+gamma_)*fieldSrc.oldTime().boundaryField() + gamma_/(1+gamma_)*fieldSrc.boundaryField(); // get data from working vSmoothField fieldSrc=vSmoothField; diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.H b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.H index 16d962de..6a9f92d7 100644 --- a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.H +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffAndTemporalSmoothing/constDiffAndTemporalSmoothing.H @@ -65,8 +65,9 @@ private: dimensionedScalar smoothingLength_; dimensionedScalar smoothingLengthReferenceField_; mutable dimensionedScalar DT_; + word refFieldName_; scalar gamma_; - bool correctBoundary_; +// bool correctBoundary_; bool verbose_; public: diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/temporalSmoothing/temporalSmoothing.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/temporalSmoothing/temporalSmoothing.C index 5b0161e5..ff4dd2c2 100644 --- a/src/lagrangian/cfdemParticle/subModels/smoothingModel/temporalSmoothing/temporalSmoothing.C +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/temporalSmoothing/temporalSmoothing.C @@ -130,7 +130,7 @@ void Foam::temporalSmoothing::smoothen(volVectorField& fieldSrc) const vSmoothField.oldTime()=fieldSrc; vSmoothField.oldTime().correctBoundaryConditions(); - volVectorField refField = particleCloud_.mesh().lookupObject(refFieldName_); + const volVectorField& refField = particleCloud_.mesh().lookupObject(refFieldName_); dimensionedScalar deltaT = vSmoothField.mesh().time().deltaT(); solve From d7fb907a8a1dd0d76071ebb2aee1a5ea91cffb13 Mon Sep 17 00:00:00 2001 From: tlichtenegger Date: Thu, 30 Jun 2022 15:26:40 +0200 Subject: [PATCH 02/44] Instead of throwing an error if gradPForceSmooth uses any smoothing model other than a temporal one, make it optional. If spatial smoothing is used, updated pSmooth in every time step. --- .../forceModel/gradPForceSmooth/gradPForceSmooth.C | 10 ++++++++-- .../forceModel/gradPForceSmooth/gradPForceSmooth.H | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C index e6c82158..66117c3c 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.C @@ -61,6 +61,7 @@ gradPForceSmooth::gradPForceSmooth U_(sm.mesh().lookupObject (velocityFieldName_)), useRho_(false), useU_(false), + temporalSmoothing_(false), addedMassCoeff_(0.0), smoothingModel_ ( @@ -136,9 +137,9 @@ gradPForceSmooth::gradPForceSmooth particleCloud_.probeM().scalarFields_.append("rho"); particleCloud_.probeM().writeHeader(); - if (!(smoothingM().type() == "temporalSmoothing") && !(smoothingM().type() == "constDiffAndTemporalSmoothing")) + if ((smoothingM().type() == "temporalSmoothing") || (smoothingM().type() == "constDiffAndTemporalSmoothing")) { - FatalError <<"using model gradPForceSmooth with invalid smoothing model\n" << abort(FatalError); + temporalSmoothing_ = true; } } @@ -155,6 +156,11 @@ gradPForceSmooth::~gradPForceSmooth() void gradPForceSmooth::setForce() const { volVectorField gradPField = fvc::grad(p_); + + // if temporal smoothing is used, let pSmooth evolve on its own - smoothing model itself looks up p + // else, set pSmooth to current p and apply spatial smoothing + if (!temporalSmoothing_) pSmooth_ = p_; + if (pFieldName_ == "p_rgh") { const volScalarField& rho_ = particleCloud_.mesh().lookupObject("rho"); diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.H b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.H index 3f5de700..8acae367 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForceSmooth/gradPForceSmooth.H @@ -62,6 +62,8 @@ private: bool useU_; // if false: substitution p=0.5*rho*U^2 + bool temporalSmoothing_; + mutable double addedMassCoeff_; //added mass coefficient autoPtr smoothingModel_; From 507f24145ec32e85ea865e3cde54795e89bf2f46 Mon Sep 17 00:00:00 2001 From: tlichtenegger Date: Wed, 6 Jul 2022 12:14:32 +0200 Subject: [PATCH 03/44] dSauter is constructed by submodel dSauter. If another one is constructed by the solver, force models looking up dSauter may get confused. --- .../cfdemSolverRhoPimpleChem/createFields.H | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/applications/solvers/cfdemSolverRhoPimpleChem/createFields.H b/applications/solvers/cfdemSolverRhoPimpleChem/createFields.H index d5daf875..674efed4 100644 --- a/applications/solvers/cfdemSolverRhoPimpleChem/createFields.H +++ b/applications/solvers/cfdemSolverRhoPimpleChem/createFields.H @@ -303,18 +303,4 @@ mesh, dimensionedScalar("zero",dimensionSet(0, -3, 0, 0, 1),0) ); - - volScalarField dSauter - ( - IOobject - ( - "dSauter", - runTime.timeName(), - mesh, - IOobject::READ_IF_PRESENT, - IOobject::AUTO_WRITE - ), - mesh, - dimensionedScalar("zero",dimensionSet(0, 1, 0, 0, 0,0,0),0) - ); //=============================== From 389b44d0e5ff2e4572fc5dee9ec4007891001aef Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 29 Jul 2022 13:46:33 +0200 Subject: [PATCH 04/44] [doc] constDiffSmoothing doc update --- doc/smoothingModel_constDiffSmoothing.txt | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/doc/smoothingModel_constDiffSmoothing.txt b/doc/smoothingModel_constDiffSmoothing.txt index 9ff82ecd..bfefed13 100644 --- a/doc/smoothingModel_constDiffSmoothing.txt +++ b/doc/smoothingModel_constDiffSmoothing.txt @@ -15,17 +15,22 @@ dictionary. smoothingModel constDiffSmoothing; constDiffSmoothingProps \{ - lowerLimit number1; - upperLimit number2; - smoothingLength lengthScale; - smoothingLengthReferenceField lengthScaleRefField; + lowerLimit number1; + upperLimit number2; + smoothingLength lengthScale; + smoothingLengthReferenceField lengthScaleRefField; + smoothingLengthFieldName fieldName1; + smoothingLengthReferenceFieldName fieldName2; verbose; \} :pre {number1} = scalar fields will be bound to this lower value :ulb,l {number2} = scalar fields will be bound to this upper value :l {lengthScale} = length scale over which the exchange fields will be smoothed out :l -{lengthScaleRefField} = length scale over which reference fields (e.g., the average particle velocity) will be smoothed out. Should be always larger than lengthScale. If not specified, will be equal to lengthScale. :l +{lengthScaleRefField} = (optional) length scale over which reference fields (e.g., the average particle velocity) will be smoothed out. Should be always larger than lengthScale. If not specified, will be equal to lengthScale. :l +{fieldName1} = (optional) name of scalar field to be used as local smoothing length. :l +{fieldName2} = (optional) name of scalar field to be used as local smoothing length for reference fields. :l + {verbose} = (optional, default false) flag for debugging output :l :ule @@ -51,6 +56,11 @@ which these reference fields are not specified. Values calculated in the cells e.g. the average particle velocity, which are not specified in all cells in case the flow is rather dilute. +Alternative to {smoothingLength} and {smoothingLengthReferenceField}, +{smoothingLengthFieldName} and/or {smoothingLengthReferenceFieldName} can be used +to define spatial variation of the smoothing lengths. Either the scalar or field +options must be used, giving both will result in errors. + [Restrictions:] This model is tested in a limited number of flow situations. From 3107a9ce10915caea4c13973c23240edab3ad81c Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 29 Jul 2022 13:57:58 +0200 Subject: [PATCH 05/44] Update smoothingModel_constDiffSmoothing.txt --- doc/smoothingModel_constDiffSmoothing.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/smoothingModel_constDiffSmoothing.txt b/doc/smoothingModel_constDiffSmoothing.txt index bfefed13..34b0c3e4 100644 --- a/doc/smoothingModel_constDiffSmoothing.txt +++ b/doc/smoothingModel_constDiffSmoothing.txt @@ -18,7 +18,7 @@ constDiffSmoothingProps lowerLimit number1; upperLimit number2; smoothingLength lengthScale; - smoothingLengthReferenceField lengthScaleRefField; + smoothingLengthReference lengthScaleRefField; smoothingLengthFieldName fieldName1; smoothingLengthReferenceFieldName fieldName2; verbose; From 056b121f21e645589b396096e52c91bf36a7faf7 Mon Sep 17 00:00:00 2001 From: Thomas Lichtenegger Date: Tue, 2 Aug 2022 09:52:51 +0200 Subject: [PATCH 06/44] Minor modifications for rcfdemSolverCoupledHeattransfer to improve stability. --- .../{TEqImp.H => TEqn.H} | 11 ++++++-- .../createFields.H | 25 +++++++++++++++++++ .../rcfdemSolverCoupledHeattransfer.C | 2 +- .../updateRho.H | 3 ++- 4 files changed, 37 insertions(+), 4 deletions(-) rename applications/solvers/rcfdemSolverCoupledHeattransfer/{TEqImp.H => TEqn.H} (76%) diff --git a/applications/solvers/rcfdemSolverCoupledHeattransfer/TEqImp.H b/applications/solvers/rcfdemSolverCoupledHeattransfer/TEqn.H similarity index 76% rename from applications/solvers/rcfdemSolverCoupledHeattransfer/TEqImp.H rename to applications/solvers/rcfdemSolverCoupledHeattransfer/TEqn.H index c79de93c..b5d5bca9 100644 --- a/applications/solvers/rcfdemSolverCoupledHeattransfer/TEqImp.H +++ b/applications/solvers/rcfdemSolverCoupledHeattransfer/TEqn.H @@ -1,4 +1,4 @@ - volScalarField rhoeps = rhoRec*voidfractionRec; + rhoeps = rhoRec*voidfractionRec; particleCloud.energyContributions(Qsource); @@ -23,10 +23,17 @@ fvOptions(rhoeps, T) // no fvOptions support yet ); - fvOptions.constrain(TEqn); // no fvOptions support yet + // fvOptions.constrain(TEqn); // no fvOptions support yet + + TEqn.relax(); TEqn.solve(); + T = max(T, TMin); + T = min(T, TMax); + + Info<< "T max/min/ave : " << max(T).value() << " " << min(T).value() << " " << average(T).value() << endl; + particleCloud.clockM().start(31,"postFlow"); counter++; diff --git a/applications/solvers/rcfdemSolverCoupledHeattransfer/createFields.H b/applications/solvers/rcfdemSolverCoupledHeattransfer/createFields.H index 4fe8e7b1..34d727f4 100644 --- a/applications/solvers/rcfdemSolverCoupledHeattransfer/createFields.H +++ b/applications/solvers/rcfdemSolverCoupledHeattransfer/createFields.H @@ -73,6 +73,9 @@ dimensionedVector("zero", dimensionSet(0, 1, -1, 0, 0), vector::zero) ); + volScalarField rhoeps("rhoeps", rhoRec*voidfractionRec); + rhoeps.oldTime(); // switch on saving old time + // heat transfer fields Info << "\nCreating heat transfer fields.\n" << endl; @@ -228,3 +231,25 @@ ) ); weightDict.add("weights",scalarList(1,1.0)); + + dimensionedScalar TMax + ( + dimensionedScalar::lookupOrDefault + ( + "TMax", + transportProps, + dimTemperature, + GREAT + ) + ); + + dimensionedScalar TMin + ( + dimensionedScalar::lookupOrDefault + ( + "TMin", + transportProps, + dimTemperature, + 0.0 + ) + ); diff --git a/applications/solvers/rcfdemSolverCoupledHeattransfer/rcfdemSolverCoupledHeattransfer.C b/applications/solvers/rcfdemSolverCoupledHeattransfer/rcfdemSolverCoupledHeattransfer.C index c54e1f76..c6feec14 100644 --- a/applications/solvers/rcfdemSolverCoupledHeattransfer/rcfdemSolverCoupledHeattransfer.C +++ b/applications/solvers/rcfdemSolverCoupledHeattransfer/rcfdemSolverCoupledHeattransfer.C @@ -98,7 +98,7 @@ int main(int argc, char *argv[]) particleCloud.clockM().start(26,"Flow"); #include "updateRho.H" - #include "TEqImp.H" + #include "TEqn.H" particleCloud.clockM().stop("Flow"); stepCounter++; diff --git a/applications/solvers/rcfdemSolverCoupledHeattransfer/updateRho.H b/applications/solvers/rcfdemSolverCoupledHeattransfer/updateRho.H index 63c7da64..0dd3249e 100644 --- a/applications/solvers/rcfdemSolverCoupledHeattransfer/updateRho.H +++ b/applications/solvers/rcfdemSolverCoupledHeattransfer/updateRho.H @@ -1 +1,2 @@ -rhoRec = pRec / (T * R); \ No newline at end of file +dimensionedScalar Tave = T.weightedAverage(voidfractionRec); +rhoRec = pRec / (Tave * R); From fb798eb92f998375f48e7743edf1964583aca360 Mon Sep 17 00:00:00 2001 From: Thomas Lichtenegger Date: Tue, 2 Aug 2022 11:30:51 +0200 Subject: [PATCH 07/44] Update rCFD fluidized bed case to improve stability. --- .../rCFD/CFD/constant/recProperties | 2 +- .../CFD/constant/thermophysicalProperties | 49 - .../rCFD/CFD/constant/transportProperties | 4 + .../rCFD/CFD/orig.0/T | 20488 +--------------- .../rCFD/CFD/system/controlDict | 68 +- .../rCFD/CFD/system/fvSchemes | 8 - .../rCFD/CFD/system/fvSolution | 28 - .../rCFD/DEM/in.liggghts_run | 8 +- 8 files changed, 72 insertions(+), 20583 deletions(-) delete mode 100644 tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/thermophysicalProperties mode change 100644 => 100755 tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/orig.0/T diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/recProperties b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/recProperties index b2cf25ee..0b05c8b8 100755 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/recProperties +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/recProperties @@ -52,7 +52,7 @@ surfaceScalarFields //verbose true; -couplingSubStep 3; +couplingSubStep 7; initialRecSteps 150; diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/thermophysicalProperties b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/thermophysicalProperties deleted file mode 100644 index 69269c16..00000000 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/thermophysicalProperties +++ /dev/null @@ -1,49 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 2.3.0 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "constant"; - object thermophysicalProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -thermoType -{ - type hePsiThermo; - mixture pureMixture; - transport const; - thermo eConst; - equationOfState perfectGas; - specie specie; - energy sensibleInternalEnergy; -} - -mixture -{ - specie - { - nMoles 1; - molWeight 42.1; - } - thermodynamics - { - Cv 1310; - Hf 0; - } - transport - { - mu 1e-05; - Pr 0.72; - } -} - - -// ************************************************************************* // diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/transportProperties b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/transportProperties index 5f844a69..c90fab8b 100644 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/transportProperties +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/constant/transportProperties @@ -27,4 +27,8 @@ Cv Cv [ 0 2 -2 -1 0 0 0 ] 1310; molM molM [1 0 0 0 -1 0 0 ] 0.0421; +TMax TMax [0 0 0 1 0 0 0] 400; + +TMin TMin [0 0 0 1 0 0 0] 250; + // ************************************************************************* // diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/orig.0/T b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/orig.0/T old mode 100644 new mode 100755 index 14f16334..a3f0a535 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/orig.0/T +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/orig.0/T @@ -10,20498 +10,14 @@ FoamFile version 2.0; format ascii; class volScalarField; - location "-1.66363e-11"; + location "0"; object T; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 1 0 0 0]; -internalField nonuniform List -20480 -( -330.151 -334.559 -334.586 -335.314 -336.121 -334.775 -334.955 -333.202 -333.049 -329.344 -327.689 -327.808 -326.889 -324.328 -322.001 -321.566 -320.799 -321.554 -321.519 -323.336 -324.384 -325.775 -327.334 -328.188 -328.526 -328.71 -330.864 -330.677 -335.276 -333.664 -335.297 -333.396 -332.443 -334.194 -336.916 -336.694 -338.179 -336.322 -334.357 -332.963 -333.159 -332.778 -330.892 -327.469 -326.707 -326.282 -324.43 -323.438 -321.672 -321.227 -323.514 -323.311 -325.496 -326.616 -331.378 -331.397 -330.57 -330.938 -332.385 -333.438 -333.283 -334.377 -336.67 -331.009 -331.614 -333.828 -336.01 -336.687 -337.628 -336.83 -334.942 -334.402 -334.961 -331.482 -329.741 -328.294 -326.297 -325.997 -324.398 -321.585 -322.47 -321.478 -322.272 -321.606 -326 -327.307 -327.977 -332.225 -331.312 -329.078 -333.938 -334.714 -337.463 -335.915 -334.852 -334.283 -329.926 -332.639 -335.175 -336.416 -334.051 -333.976 -332.842 -331.759 -332.544 -328.134 -327.894 -327.511 -323.823 -323.902 -322.026 -319.532 -320.898 -321.917 -321.249 -322.489 -322.609 -324.688 -325.321 -327.06 -328.203 -328.856 -331.435 -330.189 -334.263 -335.547 -334.337 -331.226 -347.436 -348.964 -349.558 -349.188 -349.525 -349.11 -349.373 -348.639 -349.275 -345.591 -345.148 -346.565 -341.461 -335.918 -338.282 -337.248 -332.544 -331.61 -334.069 -340.299 -339.922 -344.664 -346.928 -346.454 -346.935 -346.249 -347.863 -348.106 -348.794 -349.678 -348.91 -347.112 -348.559 -343.69 -346.755 -347.746 -350.075 -347.963 -348.446 -349.065 -348.782 -348.466 -347.986 -345.037 -343.477 -336.801 -335.119 -331.949 -325.78 -330.864 -335.102 -340.516 -345.146 -346.673 -349.512 -349.106 -348.535 -348.236 -348.959 -348.859 -347.017 -348.043 -350.353 -347.926 -347.64 -343.081 -343.795 -347.02 -346.731 -348.793 -348.49 -348.825 -349.401 -345.717 -346.73 -346.894 -345.796 -337.714 -336.47 -336.214 -327.73 -331.197 -339.658 -338.629 -344.077 -345.26 -347.055 -349.877 -348.031 -346.243 -347.934 -349.332 -349.874 -350.298 -349.085 -349.354 -347.374 -343.348 -345.843 -347.221 -347.212 -348.599 -349.197 -348.616 -348.567 -343.348 -345.728 -344.68 -342.033 -336.742 -338.351 -338.589 -330.876 -329.615 -337.961 -334.995 -338.141 -343.85 -345.398 -346.397 -345.975 -347.997 -347.383 -344.137 -347.889 -349.97 -349.612 -348.173 -351.103 -350.259 -350.091 -349.989 -351.199 -350.201 -350.411 -350.498 -350.991 -348.975 -350.091 -350.788 -349.618 -347.203 -343.613 -344.626 -336.174 -341.769 -346.623 -349.643 -347.324 -349.232 -350.328 -351.061 -351.148 -349.599 -350.783 -351.144 -351.58 -352.303 -352.101 -351.363 -350.223 -346.275 -345.552 -347.427 -350.706 -347.679 -348.956 -350.205 -349.904 -350.121 -350.74 -350.7 -350.669 -346.594 -342.179 -340.751 -330.688 -343.76 -348.334 -349.406 -350.006 -350.357 -351.643 -352.177 -352.004 -352.208 -351.973 -352.131 -350.788 -351.615 -352.604 -352.015 -351.234 -348.474 -345.373 -348.29 -347.896 -347.895 -348.282 -349.567 -350.341 -348.901 -350.062 -351.047 -350.922 -348.527 -342.628 -341.772 -328.654 -343.51 -349.345 -349.988 -349.344 -349.574 -351.061 -351.842 -351.63 -351.366 -352.045 -352.097 -352.405 -352.57 -352.311 -351.923 -351.105 -348.859 -349.303 -349.575 -347.031 -349.874 -350.456 -349.747 -350.032 -347.699 -349.451 -349.358 -349.581 -346.764 -343.399 -342.404 -330.432 -339.45 -348.688 -346.206 -348.061 -350.308 -349.154 -351.032 -351.386 -351.814 -351.508 -349.187 -350.478 -352.157 -352.317 -351.182 -351.937 -351.864 -351.202 -351.352 -351.42 -351.069 -351.165 -351.576 -351.547 -351.146 -351.185 -351.718 -351.972 -350.308 -348.102 -346.925 -335.965 -348.895 -350.25 -350.884 -349.641 -350.389 -351.247 -351.733 -352.351 -351.67 -352.332 -352.554 -352.554 -352.718 -352.551 -352.299 -351.602 -350.569 -348.031 -350.218 -351.115 -349.269 -350.239 -350.211 -350.06 -351.152 -351.713 -351.833 -351.961 -350.657 -346.192 -342.362 -337.527 -349.514 -350.128 -350.657 -351.282 -351.27 -352.134 -352.763 -352.709 -352.869 -352.71 -352.708 -352.465 -352.698 -352.799 -352.308 -351.892 -351.269 -349.911 -350.405 -350.024 -349.901 -350.583 -350.912 -350.636 -349.695 -350.986 -351.8 -351.454 -351.254 -345.584 -341.934 -337.66 -349.163 -351.11 -350.591 -351.192 -350.978 -351.722 -352.48 -352.293 -352.455 -352.779 -352.575 -352.603 -352.578 -352.383 -352.374 -352.039 -351.216 -351.363 -351.584 -349.22 -349.744 -350.956 -350.601 -350.743 -348.148 -350.483 -351.324 -351.496 -350.66 -347.112 -342.915 -335.755 -347.821 -350.391 -348.345 -350.688 -351.636 -350.244 -352.495 -352.406 -352.637 -352.636 -352.189 -352.289 -352.625 -352.472 -351.826 -352.158 -351.869 -351.89 -351.933 -351.897 -351.998 -351.575 -351.916 -351.72 -351.72 -351.747 -352.267 -352.315 -351.556 -349.114 -346.932 -339.553 -351.352 -351.928 -351.603 -350.761 -351.331 -352.098 -352.094 -352.832 -352.654 -352.979 -352.974 -352.933 -352.884 -352.479 -352.543 -352.007 -351.865 -350.59 -351.896 -352.161 -351.622 -351.746 -351.784 -351.305 -351.243 -351.268 -351.818 -351.886 -351.888 -348.352 -342.158 -346.023 -351.572 -351.672 -351.422 -351.844 -352.189 -352.409 -352.648 -352.867 -352.931 -352.841 -352.906 -352.732 -352.797 -352.693 -352.586 -351.736 -351.901 -351.47 -351.56 -351.75 -351.679 -351.664 -351.793 -351.594 -350.311 -351.162 -351.459 -351.908 -351.93 -347.857 -336.127 -346.162 -351.435 -351.975 -351.613 -352.072 -351.916 -352.109 -352.429 -352.557 -352.784 -352.627 -352.482 -352.367 -352.346 -352.397 -352.632 -351.724 -352.152 -351.626 -351.478 -351.355 -351.362 -351.729 -351.764 -351.254 -350.396 -351.323 -351.819 -352.052 -351.798 -348.878 -342.099 -344.212 -351.168 -351.626 -350.449 -351.561 -352.138 -351.547 -352.727 -352.737 -352.818 -352.819 -352.504 -352.493 -352.468 -352.145 -352.229 -351.933 -351.681 -352.124 -352.344 -352.249 -352.303 -352.121 -352.255 -352.124 -351.998 -351.989 -351.655 -352.349 -352.159 -350.064 -345.542 -344.556 -352.283 -352.064 -351.985 -351.37 -351.906 -352.39 -352.565 -353.1 -353.01 -352.938 -353.121 -353.079 -353.071 -352.876 -352.756 -352.097 -352.004 -351.564 -352.287 -352.404 -352.037 -351.82 -351.77 -351.727 -351.58 -351.568 -351.734 -352.006 -351.805 -350.305 -337.715 -349.948 -352.189 -351.893 -351.353 -352.035 -352.344 -352.621 -352.889 -352.867 -352.815 -352.819 -352.888 -352.87 -352.95 -353.077 -352.918 -351.902 -351.94 -352.082 -352.226 -352.091 -351.777 -351.6 -351.512 -351.598 -351.383 -350.623 -351.519 -352.026 -352.265 -349.743 -337.823 -350.083 -352.156 -352.063 -351.526 -352.315 -352.159 -352.491 -352.737 -352.716 -352.516 -352.397 -352.428 -352.694 -352.643 -352.715 -352.929 -351.604 -351.798 -352.079 -352.119 -352.012 -351.774 -352.193 -351.99 -351.849 -351.683 -351.671 -352.056 -351.681 -351.896 -350.826 -339.884 -348.932 -352.256 -352.02 -351.081 -352.124 -352.456 -351.922 -352.794 -352.562 -352.497 -352.599 -352.469 -352.607 -352.667 -352.538 -352.542 -351.771 -351.883 -352.212 -352.246 -352.185 -352.325 -352.253 -352.229 -352.142 -352.105 -352.131 -352.228 -352.254 -352.242 -350.377 -343.853 -349.025 -352.457 -352.233 -352.237 -351.914 -352.194 -352.418 -352.934 -353.172 -353.097 -353.143 -353.232 -353.197 -353.127 -353.067 -352.862 -351.902 -352.173 -352.073 -352.293 -352.248 -352.058 -351.967 -351.479 -351.613 -351.679 -351.89 -351.984 -352.08 -352.014 -348.813 -341.819 -351.481 -352.164 -351.958 -351.871 -351.976 -352.303 -352.72 -352.971 -352.788 -352.899 -352.924 -353.134 -353.034 -352.837 -352.887 -352.951 -352.029 -352.288 -352.212 -352.328 -351.927 -351.923 -351.847 -351.446 -350.919 -351.109 -351.278 -351.815 -351.944 -352.119 -349.477 -340.128 -351.413 -352.271 -352.223 -351.734 -352.187 -352.287 -352.548 -352.715 -352.602 -352.521 -352.741 -352.929 -352.963 -352.867 -352.899 -352.587 -351.664 -352.196 -351.909 -352.058 -351.95 -352.031 -352.042 -351.805 -351.568 -351.695 -351.811 -352.013 -351.754 -351.999 -349.652 -341.634 -351.497 -352.259 -352.011 -351.498 -352.061 -352.405 -352.389 -352.796 -352.686 -352.626 -352.671 -352.797 -352.902 -353.04 -352.885 -352.824 -351.991 -351.703 -351.971 -352.245 -352.284 -352.215 -352.16 -352.074 -352.134 -352.289 -352.181 -352.101 -352.172 -352.093 -350.312 -338.817 -348.827 -352.304 -352.224 -352.446 -352.186 -352.341 -352.783 -353.046 -353.219 -352.991 -352.874 -352.922 -352.81 -352.832 -352.756 -352.647 -352.134 -351.753 -352.282 -352.293 -352.184 -351.904 -351.104 -351.552 -351.617 -351.667 -352.088 -352.091 -352.267 -352.185 -349.572 -341.471 -352.467 -351.963 -352.223 -352.136 -352.364 -352.373 -352.713 -352.952 -352.781 -352.904 -352.72 -352.764 -352.436 -352.339 -352.595 -352.675 -352.461 -352.294 -352.211 -352.051 -352.086 -351.351 -351.006 -350.945 -351.243 -351.521 -352.036 -352.168 -352.156 -352.012 -348.703 -339.361 -352.28 -352.22 -352.159 -351.789 -352.262 -352.414 -352.756 -352.669 -352.232 -352.567 -352.796 -352.737 -352.656 -352.517 -352.597 -352.786 -351.851 -352.054 -352.259 -352.192 -352.105 -352.043 -351.922 -351.869 -351.684 -351.5 -352.026 -351.919 -351.744 -351.957 -349.595 -339.723 -351.727 -352.331 -352.336 -351.831 -352.234 -352.448 -352.544 -352.718 -352.746 -352.592 -352.676 -352.702 -352.597 -352.604 -352.767 -352.835 -352.032 -351.958 -352.22 -352.184 -352.319 -352.125 -351.866 -351.629 -352.155 -351.881 -352.165 -352.255 -352.173 -352.138 -350.655 -337.58 -348.406 -352.565 -352.306 -352.446 -352.379 -352.595 -353.073 -353.098 -352.717 -352.647 -352.442 -352.631 -352.362 -352.785 -352.744 -352.878 -352.205 -352.108 -352.237 -352.213 -351.915 -351.762 -351.706 -351.698 -351.575 -351.674 -352.175 -352.185 -351.996 -351.976 -350.716 -340.235 -351.145 -352.27 -352.319 -352.347 -352.215 -352.573 -352.985 -352.995 -352.771 -352.516 -352.639 -352.653 -352.653 -352.687 -352.818 -352.826 -351.961 -352.193 -352.129 -352.025 -351.619 -351.806 -351.561 -351.265 -350.924 -351.848 -351.905 -352.257 -352.167 -352.094 -348.803 -338.178 -352.243 -352.194 -352.182 -351.962 -352.309 -352.531 -352.838 -352.611 -352.39 -352.641 -352.568 -352.694 -352.75 -352.639 -352.756 -352.819 -351.754 -351.979 -351.924 -351.969 -351.908 -351.557 -351.368 -351.031 -351.478 -351.555 -351.934 -351.845 -351.878 -351.77 -350.206 -340.224 -349.64 -352.386 -352.29 -352.048 -352.201 -352.589 -352.755 -352.681 -352.372 -352.548 -352.664 -352.567 -352.706 -352.764 -352.82 -352.673 -351.8 -351.904 -352.364 -352.324 -352.324 -352.374 -351.843 -351.792 -351.953 -351.785 -352.17 -352.11 -352.253 -352.132 -350.859 -336.981 -347.306 -352.027 -352.275 -352.348 -352.454 -352.578 -353.058 -352.701 -352.574 -352.367 -352.616 -352.549 -352.536 -352.524 -352.648 -352.312 -352.288 -352.236 -352.349 -351.992 -351.69 -351.542 -351.741 -351.777 -351.652 -351.706 -352.057 -351.946 -351.606 -351.96 -350.51 -341.115 -350.143 -352.21 -352.322 -352.403 -352.278 -352.69 -353.005 -352.758 -352.519 -352.599 -352.677 -352.697 -352.622 -352.793 -352.732 -352.779 -352.224 -352.044 -352.221 -352.062 -352.159 -350.902 -350.839 -351.248 -351.075 -351.658 -351.893 -351.454 -351.866 -352.17 -350.635 -340.497 -351.98 -352.149 -352.172 -352.147 -352.175 -352.505 -352.716 -352.665 -352.473 -352.605 -352.673 -352.565 -352.615 -352.598 -352.693 -352.684 -351.94 -352.09 -351.796 -351.943 -351.908 -351.616 -351.298 -350.851 -351.224 -351.864 -351.649 -351.445 -351.249 -351.915 -350.158 -339.322 -349.772 -352.322 -352.203 -352.24 -352.222 -352.631 -352.69 -352.609 -352.246 -352.5 -352.654 -352.496 -352.672 -352.765 -352.719 -352.857 -352.351 -352.492 -352.141 -351.739 -351.583 -351.176 -351.877 -351.862 -351.838 -352.169 -352.196 -352.251 -352.143 -352.234 -351.305 -338.888 -343.265 -352.363 -352.211 -352.33 -352.509 -352.677 -352.5 -352.696 -352.617 -352.58 -352.441 -352.54 -352.702 -352.724 -352.746 -352.53 -352.092 -352.382 -351.825 -351.922 -351.186 -349.997 -352.15 -351.964 -351.987 -351.995 -352.089 -352.021 -351.722 -351.902 -351.58 -337.137 -347.88 -351.795 -352.286 -352.441 -352.419 -352.62 -352.682 -352.527 -352.619 -352.666 -352.64 -352.634 -352.586 -352.34 -352.502 -352.818 -352.047 -352.122 -352.25 -351.637 -351.377 -351.523 -350.72 -351.687 -351.21 -351.925 -351.851 -351.609 -350.924 -352.232 -351.263 -339.496 -349.273 -351.27 -352.351 -352.169 -352.335 -352.525 -352.796 -352.734 -352.588 -352.67 -352.601 -352.49 -352.475 -352.484 -352.492 -352.645 -351.989 -352.206 -351.749 -351.522 -351.484 -350.487 -350.454 -350.944 -351.221 -351.863 -351.857 -351.957 -351.166 -351.564 -351.254 -337.126 -344.903 -350.469 -352.335 -352.122 -352.334 -352.388 -352.68 -352.602 -352.414 -352.449 -352.49 -352.547 -352.528 -352.581 -352.76 -352.741 -352.097 -351.789 -352.048 -351.447 -351.598 -351.32 -351.471 -351.828 -352.184 -352.177 -352.182 -352.072 -352.268 -352.168 -351.9 -343.39 -337.187 -349.383 -352.111 -352.367 -352.635 -352.487 -352.345 -352.747 -352.399 -352.535 -352.539 -352.686 -352.56 -352.617 -352.723 -352.626 -351.689 -351.519 -351.019 -350.507 -350.427 -349.865 -351.463 -351.99 -352.041 -351.724 -352.215 -351.938 -351.465 -352.089 -351.623 -342.619 -335.385 -351.956 -352.549 -352.406 -352.658 -352.543 -352.609 -352.618 -352.632 -352.664 -352.599 -352.545 -352.568 -352.59 -352.589 -352.642 -352.207 -352.261 -351.727 -351.208 -350.416 -349.576 -349.581 -351.591 -351.642 -351.034 -352.106 -351.835 -351.511 -351.908 -352.018 -336.877 -339.156 -352.411 -352.049 -352.354 -351.89 -352.377 -352.449 -352.607 -352.633 -352.646 -352.456 -352.556 -352.428 -352.497 -352.47 -352.493 -352.128 -352.07 -352.105 -351.664 -351.648 -350.669 -350.197 -350.617 -350.853 -351.96 -351.645 -351.639 -351.343 -351.729 -352.079 -339.989 -336.194 -348.586 -351.829 -352.459 -352.491 -352.553 -352.65 -352.502 -352.451 -352.469 -352.528 -352.317 -352.322 -352.54 -352.649 -352.592 -352.284 -351.874 -351.965 -351.488 -350.568 -350.533 -350.999 -351.879 -352.161 -352.129 -352.168 -352.167 -352.186 -352.108 -351.644 -349.375 -341.697 -344.759 -351.845 -352.129 -352.172 -352.435 -352.781 -352.821 -352.696 -352.616 -352.644 -352.742 -352.588 -352.561 -352.57 -352.678 -352.022 -351.939 -351.509 -350.325 -350.029 -349.254 -350.242 -351.686 -352.217 -351.925 -352.093 -352.009 -351.699 -351.815 -351.493 -347.879 -343.256 -343.259 -350.436 -352.313 -351.689 -352.298 -352.553 -352.524 -352.578 -352.611 -352.603 -352.463 -352.422 -352.398 -352.376 -352.667 -352.11 -351.544 -351.541 -351.03 -349.848 -349.199 -348.958 -351.617 -351.867 -351.547 -352.082 -351.86 -351.884 -351.818 -351.676 -343.729 -337.253 -340.274 -350.442 -352.233 -351.902 -352.41 -352.381 -352.368 -352.71 -352.526 -352.345 -352.442 -352.338 -351.876 -352.271 -352.667 -351.729 -351.656 -351.72 -351.771 -351.389 -350.763 -350.598 -350.911 -350.756 -351.672 -351.684 -351.709 -351.344 -351.766 -351.653 -346.688 -339.731 -344.794 -351.483 -352.27 -352.374 -352.613 -352.542 -352.508 -352.501 -352.314 -352.244 -352.192 -352.419 -352.359 -352.418 -352.708 -352.27 -352.36 -352.428 -352.289 -351.234 -349.295 -350.293 -351.896 -352.12 -352.202 -352.279 -352.213 -352.3 -351.817 -351.87 -349.624 -344.658 -343.702 -352.177 -352.187 -351.905 -352.32 -352.371 -352.612 -352.229 -352.409 -352.665 -352.436 -352.291 -352.365 -352.524 -352.632 -351.715 -351.944 -352.012 -351.989 -351.252 -349.545 -349.918 -352.004 -352.189 -351.96 -352.124 -351.623 -352.031 -351.641 -351.125 -347.726 -344.681 -338.808 -350.759 -351.969 -350.07 -352.091 -352.596 -352.419 -352.579 -352.639 -352.575 -352.302 -352.171 -352.19 -352.259 -352.546 -352.121 -352.178 -351.817 -351.812 -351.583 -349.879 -349.192 -351.788 -351.685 -351.56 -352.075 -351.825 -351.562 -351.456 -352.02 -345.561 -338.732 -338.396 -350.465 -352.3 -349.578 -350.715 -352.52 -352.267 -352.598 -352.586 -352.417 -352.01 -351.728 -351.591 -352.195 -352.323 -351.651 -352.218 -352.471 -352.493 -352.223 -350.856 -349.474 -350.018 -351.039 -351.593 -351.395 -351.717 -351.869 -351.984 -351.537 -345.563 -338.68 -342.184 -351.027 -352.295 -352.324 -351.873 -352.212 -352.435 -352.536 -352.408 -352.335 -352.194 -352.359 -352.204 -352.409 -352.363 -352.321 -352.03 -352.229 -351.522 -351.57 -349.292 -349.088 -351.917 -352.183 -352.197 -352.301 -352.276 -352.282 -351.784 -351.636 -350.154 -346.491 -340.268 -349.505 -351.869 -348.8 -350.024 -351.786 -353.146 -352.605 -352.605 -352.686 -352.489 -352.267 -351.897 -351.665 -352.669 -352.099 -351.858 -351.391 -351.545 -351.4 -349.581 -349.109 -351.622 -352.061 -351.988 -352.092 -351.539 -351.483 -351.739 -351.863 -348.712 -345.796 -337.035 -345.782 -350.703 -347.465 -349.2 -350.737 -353.001 -352.414 -352.449 -352.534 -352.275 -351.891 -351.659 -351.79 -352.608 -351.988 -351.983 -352.015 -351.955 -352.005 -347.896 -348.933 -351.728 -351.714 -351.97 -351.707 -351.633 -351.73 -351.412 -351.849 -346.453 -339.952 -338.722 -345.175 -351.592 -345.622 -346.51 -351.777 -352.729 -352.506 -352.575 -352.422 -352.014 -351.913 -351.631 -351.403 -352.389 -352.085 -351.878 -352.319 -351.739 -352.3 -350.854 -349.407 -350.218 -350.875 -351.679 -351.655 -351.723 -351.954 -351.787 -352.171 -346.967 -340.467 -339.964 -349.511 -352.061 -349.014 -350.002 -352.625 -352.618 -352.492 -352.376 -352.323 -352.262 -352.148 -351.762 -352.094 -352.39 -352.336 -352.441 -352.354 -351.83 -351.695 -349.534 -349.411 -350.802 -352.084 -352.048 -352.253 -352.071 -352.041 -351.911 -351.75 -350.527 -347.732 -342.486 -349.096 -351.537 -349.56 -348.507 -349.523 -351.311 -352.222 -352.587 -352.611 -352.035 -352.407 -351.866 -351.721 -352.278 -351.989 -352.267 -352.087 -351.979 -351.157 -350.438 -349.553 -351.95 -351.824 -351.855 -352.158 -351.771 -351.875 -351.441 -351.401 -349.567 -346.568 -337.438 -340.727 -349.52 -349.809 -349.975 -349.217 -350.367 -352.536 -352.521 -352.592 -352.273 -351.531 -351.26 -351.442 -351.902 -352.141 -351.864 -351.901 -351.756 -351.188 -350.21 -349.17 -351.64 -351.289 -351.376 -351.923 -351.653 -351.538 -351.306 -352.262 -347.249 -341.782 -335.863 -341.607 -350.784 -347.156 -349.104 -348.512 -350.088 -351.934 -352.536 -352.517 -352.027 -351.235 -351.717 -351.747 -352.447 -352.129 -352.021 -351.927 -352.383 -352.102 -351.836 -348.902 -350.764 -350.877 -351.844 -351.586 -351.651 -352.017 -351.425 -352.104 -348.224 -343.287 -339.32 -344.922 -352.039 -348.651 -348.754 -351.033 -351.763 -352.481 -352.539 -352.407 -352.206 -351.418 -351.417 -352.168 -352.331 -352.025 -352.246 -352.754 -352.72 -352.481 -350.717 -350.292 -351.959 -352.09 -352.369 -352.167 -352.187 -352.114 -351.793 -351.935 -351.108 -350.007 -344.844 -347.683 -351.334 -350.378 -349.524 -349.437 -349.601 -352.26 -352.971 -352.495 -352.305 -351.97 -351.511 -351.41 -352.105 -352.291 -352.363 -352.526 -352.326 -351.111 -350.401 -350.213 -352.109 -351.885 -351.924 -352.042 -351.809 -351.866 -351.572 -351.437 -350.013 -350.344 -339.462 -342.171 -349.531 -349.362 -350.921 -350.948 -349.497 -350.158 -352.241 -352.476 -352.306 -351.429 -352.078 -352.04 -351.345 -352.112 -352.294 -352.059 -352.013 -350.382 -350.477 -349.451 -352.008 -351.241 -351.929 -351.905 -351.415 -351.238 -351.946 -351.504 -347.152 -344.592 -338.089 -338.425 -348.36 -349.884 -350.312 -350.034 -346.551 -350.973 -352.855 -352.335 -351.964 -351.804 -351.694 -351.972 -352.021 -352.009 -352.242 -351.883 -351.855 -351.907 -351.25 -348.545 -350.216 -351.236 -351.959 -351.663 -351.987 -351.573 -351.062 -351.323 -348.829 -345.141 -339.374 -341.775 -349.549 -349.195 -347.775 -350.452 -350.35 -351.522 -352.127 -352.395 -352.218 -351.103 -351.864 -351.665 -352.214 -351.807 -352.2 -351.993 -351.672 -352.113 -351.486 -350.413 -351.967 -352.181 -351.983 -352.233 -352.366 -352.196 -351.887 -352.045 -351.904 -350.469 -347.305 -349.103 -351.793 -350.942 -351.623 -350.375 -350.318 -350.566 -351.568 -352.75 -352.408 -351.657 -351.893 -351.851 -351.765 -352.495 -352.552 -351.612 -351.486 -351.157 -350.749 -349.433 -351.834 -351.599 -352.172 -352.112 -352.027 -351.73 -351.797 -351.418 -350.962 -350.64 -343.106 -343.755 -349.512 -350.777 -351.828 -351.832 -351.099 -349.805 -349.96 -352.765 -352.328 -351.332 -352.007 -352.445 -351.901 -352.17 -352.011 -350.964 -351.43 -350.641 -350.584 -348.652 -351.391 -351.506 -352.088 -352.066 -351.713 -351.448 -351.824 -351.13 -349.432 -349.192 -342.702 -338.6 -348.005 -349.929 -351.189 -350.602 -348.281 -347.733 -350.967 -352.926 -352.252 -351.536 -351.382 -351.503 -351.951 -352.037 -352.09 -351.549 -350.453 -350.546 -350.571 -350.134 -351.016 -351.652 -352.114 -351.667 -351.873 -351.632 -350.808 -350.892 -350.777 -348.882 -340.432 -339.739 -349.244 -349.836 -348.1 -348.197 -348.134 -349.204 -352.365 -352.78 -351.709 -351.218 -351.124 -352.099 -351.954 -352.383 -352.418 -352.463 -351.988 -351.65 -349.34 -350.206 -351.483 -352.114 -352.181 -352.314 -352.157 -352.325 -352.221 -352.255 -352.352 -351.884 -349.045 -350.704 -352.087 -350.707 -352.056 -352.093 -351.92 -351.617 -351.218 -352.099 -352.076 -351.81 -352.128 -352.257 -351.396 -352.245 -351.839 -351.531 -350.112 -351.457 -350.967 -349.122 -351.853 -351.987 -352.11 -352.149 -352.15 -351.982 -351.706 -351.666 -351.998 -350.014 -346.79 -348.78 -350.647 -350.046 -352.365 -352.64 -352.454 -351.571 -349.684 -351.517 -352.451 -351.813 -351.86 -351.794 -352.218 -351.998 -351.91 -351.918 -350.877 -351.264 -350.158 -349.871 -351.42 -351.479 -352.235 -352.007 -352.046 -351.934 -351.554 -351.44 -351.156 -348.312 -342.303 -341.11 -348.909 -350.623 -352.202 -352.466 -351.472 -349.635 -347.769 -351.297 -352.414 -351.98 -351.662 -351.555 -352.122 -351.827 -352.4 -351.759 -350.872 -351.288 -349.177 -350.514 -351.074 -351.566 -352.268 -352.14 -351.97 -351.917 -351.902 -351.328 -351.719 -350.15 -341.694 -341.589 -346.384 -350.545 -350.986 -350.504 -348.508 -349.427 -350.668 -349.415 -352.81 -351.575 -350.915 -351.632 -351.833 -352.468 -352.188 -351.931 -351.595 -352.227 -350.084 -350.85 -351.629 -352.059 -352.273 -352.402 -352.337 -352.224 -352.347 -352.275 -352.431 -352.516 -349.581 -350.559 -351.704 -350.186 -351.869 -352.192 -352.252 -351.816 -351.211 -351.951 -352.715 -351.985 -352.176 -352.34 -352.005 -352.46 -352.244 -351.969 -351.329 -351.458 -348.656 -350.076 -351.778 -351.857 -352.104 -351.953 -352.294 -352.395 -352.437 -352.235 -352.2 -351.946 -350.274 -349.945 -351.219 -351.081 -351.032 -351.291 -351.936 -351.615 -350.551 -350.265 -352.091 -351.994 -351.991 -351.446 -352.155 -351.668 -351.958 -351.735 -351.956 -350.144 -349.852 -351.224 -351.289 -351.741 -352.378 -352.142 -352.231 -352.17 -352.666 -352.138 -351.847 -351.175 -348.095 -347.684 -346.612 -349.046 -350.741 -350.557 -351.485 -350.507 -348.28 -348.929 -351.287 -352.357 -351.152 -351.353 -351.587 -352.159 -351.838 -351.892 -351.477 -350.623 -348.922 -350.815 -351.419 -352.08 -352.298 -352.18 -352.223 -352.264 -351.941 -352.025 -351.934 -351.256 -345.156 -345.81 -346.063 -347.549 -351.904 -351.228 -350.54 -350.12 -350.275 -348.989 -351.615 -351.749 -351.136 -351.012 -351.99 -352.35 -352.544 -352.383 -352.176 -352.481 -349.649 -350.845 -351.785 -352.304 -352.418 -352.274 -352.148 -352.361 -352.317 -352.584 -352.414 -351.974 -350.497 -349.716 -351.216 -351.628 -351.881 -352.203 -352.094 -351.596 -351.446 -351.976 -351.523 -352.179 -351.881 -352.334 -351.668 -352.019 -352.508 -351.922 -351.509 -349.703 -350.555 -350.363 -351.703 -352.177 -352.211 -352.269 -351.918 -349.761 -351.444 -352.24 -352.594 -352.164 -351.801 -350.24 -349.661 -351.169 -350.711 -351.473 -352.152 -351.744 -350.127 -349.219 -351.065 -352.644 -351.622 -351.76 -352.062 -351.404 -352.046 -351.701 -352.028 -350.721 -350.862 -351.168 -351.51 -352.037 -352.224 -352.299 -352.027 -351.285 -350.128 -352.348 -352.578 -351.974 -351.731 -351.591 -350.234 -348.793 -349.859 -351.123 -351.379 -350.084 -348.836 -348.871 -348.573 -352.922 -351.944 -351.302 -351.39 -351.875 -351.524 -352.018 -352 -351.161 -349.949 -350.202 -351.64 -352.411 -352.105 -352.316 -352.345 -351.797 -351.088 -351.834 -352.796 -352.479 -351.04 -351.274 -351.026 -350.712 -347.646 -350.54 -351.085 -350.235 -349.975 -348.559 -350.104 -352.501 -351.801 -351.645 -351.399 -352.407 -352.689 -352.484 -352.514 -351.523 -351.281 -350.489 -351.498 -352.173 -352.17 -352.372 -352.262 -352.579 -352.38 -352.036 -352.294 -352.444 -351.832 -351.593 -351.614 -351.965 -352.251 -352.439 -352.237 -351.686 -351.688 -351.675 -350.805 -352.508 -352.254 -352.442 -352.056 -352.24 -352.537 -352.18 -352.054 -350.644 -351.903 -350.338 -351.341 -351.762 -352.108 -352.05 -351.883 -350.856 -351.01 -351.434 -351.055 -351.751 -350.795 -350.529 -349.407 -351.439 -349.943 -351.523 -351.945 -351.03 -349.324 -350.043 -349.507 -351.94 -352.143 -351.993 -352.202 -352.053 -352.196 -351.781 -352.092 -350.326 -351.048 -351.213 -351.266 -351.993 -352.529 -352.179 -352.188 -351.849 -350.999 -350.097 -349.976 -352.018 -352.088 -351.968 -349.167 -350.144 -350.868 -351.421 -351.638 -350.378 -348.016 -348.684 -348.564 -351.751 -352.086 -351.55 -351.203 -351.023 -352.319 -352.197 -351.964 -350.961 -351.185 -350.601 -351.125 -351.967 -352.377 -352.437 -352.209 -352.247 -351.714 -350.666 -350.428 -351.779 -352.245 -350.808 -350.798 -350.155 -350.614 -351.397 -351.307 -349.765 -349.053 -347.782 -349.417 -352.601 -351.984 -351.351 -351.717 -352.467 -352.553 -352.51 -352.9 -350.876 -352.189 -350.579 -351.079 -351.932 -352.334 -352.28 -351.979 -352.375 -352.479 -352.133 -352.372 -351.62 -352.124 -352.105 -351.936 -352.164 -352.534 -352.343 -352.042 -351.742 -351.421 -351.13 -350.734 -352.592 -352.333 -352.409 -352.452 -352.363 -352.499 -352.169 -351.999 -350.106 -352.088 -350.611 -350.802 -351.508 -351.927 -352.224 -352.303 -351.37 -351.599 -351.955 -351.328 -352.098 -350.974 -350.712 -350.919 -351.199 -350.785 -351.961 -351.799 -350.881 -349.385 -349.419 -349.413 -351.371 -352.038 -352.118 -351.185 -352.098 -352.372 -351.249 -351.7 -350.899 -350.324 -350.898 -351.039 -351.371 -351.957 -352.229 -352.195 -352.181 -351.481 -351.234 -351.128 -351.425 -351.9 -351.74 -350.886 -351.556 -351.188 -351.417 -351.015 -348.993 -346.998 -349.121 -350.199 -350.443 -352.171 -351.293 -351.291 -351.831 -352.238 -351.98 -351.997 -351.895 -351.076 -350.342 -351.012 -351.893 -352.074 -352.209 -352.42 -352.26 -351.806 -351.176 -351.314 -350.816 -351.185 -351.281 -351.09 -351.095 -350.441 -350.802 -350.607 -349.351 -349.157 -348.115 -351.344 -352.31 -351.782 -350.935 -351.416 -351.774 -352.477 -352.36 -352.306 -350.479 -351.494 -351.208 -350.842 -351.591 -352.077 -352.408 -352.228 -352.545 -352.52 -351.951 -352.282 -351.638 -352.211 -352.064 -352.349 -352.671 -352.522 -352.21 -352.065 -351.623 -351.479 -350.937 -351.097 -352.146 -352.201 -352.196 -352.51 -352.102 -352.651 -352.314 -351.655 -350.477 -351.638 -350.926 -350.879 -351.237 -351.776 -351.847 -352.085 -351.016 -351.541 -351.84 -351.318 -352.28 -351.219 -350.735 -351.217 -351.363 -351.312 -352.037 -351.61 -350.32 -349.438 -350.115 -350.478 -351.6 -352.044 -351.908 -351.495 -352.365 -351.628 -351.929 -351.715 -350.594 -350.935 -350.954 -351.122 -351.5 -351.99 -352.134 -352.135 -352.146 -351.434 -351.509 -351.177 -351.632 -351.847 -351.646 -351.089 -351.172 -350.936 -351.246 -350.599 -348.96 -348.278 -349.003 -351.815 -350.426 -352.324 -351.669 -351.028 -351.642 -352.316 -351.631 -351.625 -350.644 -350.936 -350.795 -350.747 -351.647 -352.317 -352.351 -352.201 -352.136 -352.189 -351.412 -351.137 -351.208 -351.27 -350.856 -351.318 -351.171 -350.959 -351.266 -350.512 -349.111 -349.17 -348.849 -351.799 -351.869 -351.893 -351.612 -351.702 -352.013 -352.605 -352.56 -351.857 -351.808 -352.034 -351.395 -350.727 -351.184 -351.901 -352.231 -352.116 -352.229 -352.505 -352.095 -352.251 -351.618 -352.242 -352.331 -352.654 -352.699 -352.329 -352.296 -351.949 -351.69 -351.291 -351.039 -351.836 -351.824 -352.321 -352.447 -352.589 -352.346 -352.489 -352.473 -351.196 -351.639 -351.869 -351.045 -350.55 -351.14 -351.819 -352.094 -352.374 -351.487 -351.411 -351.917 -351.547 -352.176 -351.131 -350.758 -351.361 -351.436 -351.756 -352.129 -351.248 -350.412 -349.452 -349.278 -349.327 -349.227 -352.368 -352.25 -351.421 -352.104 -352.246 -351.936 -351.143 -351.163 -351.148 -350.971 -350.971 -351.335 -351.638 -351.983 -352.152 -352.313 -351.639 -351.192 -351.293 -351.752 -352.131 -351.559 -350.982 -351.125 -351.192 -351.166 -350.19 -348.586 -348.477 -349.494 -349.487 -346.716 -352.368 -351.643 -350.92 -352.038 -352.239 -351.921 -351.623 -350.442 -350.53 -350.721 -350.495 -351.367 -351.912 -352.028 -352.32 -352.16 -352.216 -351.366 -351.196 -351.039 -351.356 -351.158 -351.56 -351.35 -351.033 -350.92 -350.192 -349.182 -349.538 -348.986 -350.399 -350.747 -352.175 -351.864 -350.759 -352.559 -352.505 -352.338 -351.632 -351.988 -351.692 -351.341 -350.949 -351.235 -351.579 -352.207 -352.172 -352.454 -352.37 -351.986 -352.366 -351.738 -352.079 -352.381 -352.654 -352.537 -352.204 -352.1 -352.028 -351.696 -351.637 -351.405 -352.504 -351.453 -352.493 -352.251 -352.417 -352.505 -352.296 -351.814 -350.765 -351.357 -351.648 -350.965 -350.753 -350.888 -351.457 -351.628 -352.313 -351.449 -351.406 -351.805 -351.591 -352.062 -351.319 -350.838 -351.492 -351.56 -351.928 -351.933 -351.365 -349.934 -349.117 -349.384 -349.578 -348.989 -352.477 -352.131 -351.867 -352.236 -351.853 -352.14 -350.894 -351.111 -351.129 -350.924 -351.044 -351.1 -351.694 -351.936 -352.014 -352.285 -351.827 -351.353 -351.277 -351.828 -351.814 -351.555 -351.101 -351.428 -351.193 -350.95 -349.806 -348.215 -348.185 -349.011 -348.013 -347.739 -352.624 -351.829 -351.13 -351.333 -351.84 -351.313 -351.487 -350.845 -350.929 -350.904 -350.568 -350.954 -351.914 -352.162 -352.087 -352.189 -352.32 -351.402 -351.033 -351.006 -351.457 -351.533 -351.651 -351.176 -351.027 -351.045 -350.357 -349.149 -349.32 -348.92 -348.695 -351.117 -352.106 -351.975 -350.813 -352.522 -352.595 -351.909 -351.958 -351.662 -351.763 -351.295 -350.603 -351.068 -351.606 -352.002 -352.088 -352.148 -352.599 -352.304 -352.26 -351.672 -352.139 -352.229 -352.436 -352.402 -352.249 -352.092 -352.105 -351.801 -351.721 -351.591 -352.334 -351.431 -352.361 -352.376 -352.523 -352.455 -352.26 -351.757 -350.786 -351.448 -351.591 -351.024 -350.541 -350.821 -351.618 -351.896 -352.29 -351.829 -351.475 -351.934 -351.684 -352.044 -351.331 -351.128 -351.625 -351.668 -352.05 -351.89 -351.147 -350.052 -349.558 -350.735 -350.784 -349.922 -352.411 -351.952 -351.758 -351.993 -351.387 -351.843 -350.557 -351.178 -351.108 -351.138 -350.89 -351.14 -351.311 -351.74 -351.895 -352.296 -351.781 -351.516 -351.637 -351.823 -351.795 -351.359 -351.103 -351.154 -351.255 -350.916 -349.639 -347.652 -349.334 -348.901 -348.576 -347.968 -352.316 -351.752 -351.336 -351.833 -351.819 -351.525 -351.189 -350.547 -350.798 -350.872 -350.549 -351.188 -351.532 -351.839 -352.312 -352.223 -352.208 -351.564 -351.328 -351.273 -351.356 -351.207 -351.08 -351.055 -351.221 -350.835 -349.627 -349.254 -349.44 -349.48 -348.88 -352.108 -352.187 -352.188 -351.572 -352.416 -352.617 -351.061 -351.547 -351.626 -351.793 -351.304 -351.135 -351.028 -351.271 -352.154 -352.104 -352.311 -352.349 -351.957 -352.394 -351.757 -352.092 -352.084 -352.385 -352.349 -352.3 -352.293 -352.301 -352.07 -352.169 -351.789 -352.343 -351.744 -352.13 -352.114 -352.091 -351.857 -352.25 -351.879 -349.916 -351.223 -351.535 -350.701 -350.422 -350.908 -351.164 -351.506 -352.295 -351.627 -351.476 -351.723 -351.969 -352.069 -351.251 -350.754 -351.603 -351.849 -352.049 -351.783 -351.315 -349.787 -349.887 -351.055 -350.564 -348.589 -352.267 -352.224 -351.653 -351.94 -350.032 -352.069 -350.999 -351.172 -351.461 -351.293 -351.095 -351.262 -351.577 -351.861 -352.038 -352.303 -351.847 -351.584 -351.569 -351.956 -351.803 -351.365 -351.072 -351.431 -351.236 -350.586 -349.481 -348.431 -349.885 -349.447 -348.88 -348.742 -352.431 -351.761 -351.042 -351.374 -351.44 -352.101 -351.123 -349.813 -351.138 -350.948 -350.924 -350.855 -351.77 -352.2 -352.05 -352.17 -352.388 -351.523 -351.229 -351.521 -351.617 -351.418 -351.353 -351.281 -351.077 -350.807 -350.197 -349.17 -349.279 -349.63 -350.552 -351.847 -352.346 -351.982 -350.39 -352.099 -352.122 -351.501 -352.123 -351.124 -351.472 -351.268 -350.526 -351.127 -351.687 -351.925 -352.1 -352.15 -352.573 -352.227 -352.303 -351.737 -352.093 -352.092 -352.316 -352.239 -352.239 -352.353 -352.438 -352.059 -352.486 -351.955 -351.948 -351.471 -352.438 -352.409 -352.299 -351.659 -352.275 -351.883 -351.134 -351.58 -351.376 -351.001 -350.599 -350.671 -351.526 -351.642 -352.185 -352.043 -351.67 -351.972 -351.772 -351.885 -351.456 -351.22 -351.756 -351.859 -352.178 -351.764 -351.394 -350.256 -349.716 -351.337 -350.325 -348.301 -352.5 -352.013 -351.629 -351.862 -352.058 -352.003 -350.72 -350.925 -350.92 -351.239 -350.959 -351.076 -351.383 -351.709 -352.008 -352.347 -351.797 -351.613 -351.593 -351.88 -351.647 -351.219 -351.322 -351.204 -350.936 -350.682 -349.535 -347.844 -350.511 -350.215 -349.382 -347.963 -352.453 -351.418 -350.796 -351.9 -351.033 -352.239 -350.566 -348.661 -351.472 -350.71 -350.983 -351.683 -351.635 -351.92 -352.405 -352.256 -352.299 -351.615 -351.417 -351.326 -351.634 -351.258 -351.402 -351.353 -351.404 -351.026 -349.809 -349.4 -349.28 -349.956 -350.438 -351.527 -352.313 -352.29 -350.821 -352.535 -352.387 -351.737 -351.556 -350.76 -351.932 -350.904 -351.312 -350.908 -351.277 -352.217 -352.082 -352.23 -352.21 -351.99 -352.413 -351.854 -352.102 -352.037 -352.114 -352.198 -352.2 -352.277 -352.397 -352.266 -352.36 -352.404 -351.679 -351.612 -352.152 -352.192 -352.524 -352.422 -351.992 -351.895 -350.856 -351.465 -351.193 -350.447 -350.72 -350.996 -351.036 -351.479 -352.241 -351.794 -351.736 -351.721 -352.108 -352.084 -351.174 -350.824 -351.616 -351.838 -352.106 -351.838 -351.558 -350.075 -350.224 -351.294 -350.142 -349.232 -352.343 -352.17 -351.127 -351.509 -351.939 -351.914 -351.362 -350.397 -351.782 -351.142 -350.983 -351.305 -351.7 -351.989 -352.196 -352.299 -351.97 -351.605 -351.582 -351.804 -351.559 -351.443 -351.139 -351.216 -351.067 -350.381 -349.384 -348.214 -350.074 -350.4 -349.445 -347.347 -352.414 -352.212 -351.594 -351.526 -351.651 -352.112 -351.178 -349.821 -351.602 -350.913 -350.883 -351.448 -351.962 -352.285 -352.074 -352.142 -352.474 -351.618 -351.379 -351.483 -351.457 -351.389 -351.258 -351.294 -351.508 -350.896 -350.292 -349.17 -349.102 -349.193 -350.305 -351.116 -352.432 -351.978 -351.795 -352.373 -352.614 -351.943 -351.67 -350.464 -351.54 -350.708 -350.555 -351.198 -351.727 -351.818 -352.111 -352.184 -352.502 -352.22 -352.321 -351.911 -352.024 -352.043 -352.186 -352.207 -352.278 -352.276 -352.26 -352.232 -352.487 -352.595 -351.56 -351.915 -352.078 -352.341 -352.339 -352.281 -351.944 -351.409 -351.993 -350.565 -351.571 -351.246 -350.672 -350.872 -351.576 -351.467 -352.128 -352.105 -351.631 -352.067 -352.045 -352.116 -351.789 -351.205 -351.79 -351.875 -352.292 -351.575 -351.715 -350.369 -350.082 -351.791 -350.425 -349.747 -352.132 -352.183 -351.853 -352.351 -352.088 -352.064 -351.304 -350.405 -351.376 -351.155 -351.074 -351.245 -351.507 -351.746 -351.979 -352.269 -351.79 -351.497 -351.574 -351.87 -351.54 -351.324 -351.638 -351.416 -350.779 -350.335 -349.582 -348.002 -350.323 -351.297 -349.725 -346.914 -352.415 -352.347 -351.375 -352.26 -351.061 -352.121 -351.996 -350.994 -351.845 -350.632 -351.411 -351.872 -351.998 -351.931 -352.455 -352.19 -352.223 -351.499 -351.504 -351.377 -351.518 -351.275 -351.62 -351.581 -351.393 -351.037 -349.986 -349.677 -349.492 -350.043 -349.692 -350.456 -352.377 -352.557 -351.242 -352.178 -351.98 -351.276 -352.576 -350.546 -351.633 -350.935 -351.103 -351.006 -351.299 -352.177 -352.143 -352.184 -352.202 -352.041 -352.361 -351.927 -352.109 -351.999 -352.157 -352.082 -352.188 -352.247 -352.301 -352.255 -352.392 -352.644 -351.566 -351.606 -352.639 -352.458 -352.196 -352.008 -351.408 -351.836 -351.784 -349.799 -351.38 -350.741 -350.643 -350.909 -350.984 -351.429 -352.187 -351.895 -351.884 -351.796 -352.186 -351.833 -351.389 -350.944 -351.653 -351.746 -352.097 -351.781 -351.828 -350.51 -350.472 -351.504 -350.92 -349.537 -352.295 -351.786 -351.624 -352.093 -352.079 -352.06 -351.178 -348.91 -351.207 -351.047 -351.09 -351.416 -351.647 -352.04 -352.269 -352.334 -351.912 -351.551 -351.63 -351.879 -351.646 -351.538 -351.349 -351.192 -350.837 -350.16 -349.33 -348.385 -349.969 -350.609 -349.577 -349.878 -352.427 -352.618 -350.513 -352.11 -351.521 -351.931 -351.969 -349.417 -351.87 -350.884 -351.172 -351.738 -351.936 -352.19 -351.986 -352.221 -352.374 -351.635 -351.338 -351.487 -351.411 -351.461 -351.355 -351.53 -351.399 -351.324 -350.381 -349.519 -348.868 -350.022 -349.243 -351.172 -352.441 -352.211 -351.458 -351.358 -351.859 -351.962 -352.076 -350.435 -351.934 -351.05 -351.067 -351.145 -351.63 -351.825 -352.121 -352.275 -352.529 -352.198 -352.301 -352.048 -352.157 -352.061 -352.177 -352.119 -352.259 -352.224 -352.231 -352.353 -352.398 -352.588 -350.92 -352.432 -352.412 -352.471 -352.392 -351.4 -351.85 -351.518 -351.902 -350.581 -351.366 -351.545 -350.828 -351.164 -351.564 -351.491 -352.077 -352.086 -351.806 -352.012 -352.092 -352.111 -351.819 -351.32 -351.729 -351.802 -352.156 -351.715 -352.117 -350.775 -350.233 -351.884 -350.594 -348.528 -352.579 -352.329 -351.734 -351.471 -351.074 -351.82 -351.999 -347.844 -351.628 -351.234 -351.151 -351.513 -351.553 -351.753 -352.029 -352.242 -351.765 -351.57 -351.541 -351.919 -351.577 -351.626 -351.59 -351.522 -350.755 -350.313 -349.711 -348.239 -349.864 -350.935 -348.195 -349.5 -352.299 -352.455 -351.4 -351.585 -351.319 -351.822 -352.163 -348.883 -351.552 -350.788 -351.243 -351.892 -352.029 -352.065 -352.441 -352.165 -352.209 -351.478 -351.623 -351.5 -351.648 -351.353 -351.49 -352.006 -351.688 -351.28 -350.497 -349.645 -349.181 -349.097 -348.757 -351.336 -352.361 -352.461 -350.437 -352.153 -352.016 -351.67 -352.086 -351.598 -351.482 -351.2 -350.697 -351.059 -351.408 -352.133 -352.135 -352.178 -352.229 -352.085 -352.359 -352.038 -351.983 -352.03 -352.258 -352.12 -352.233 -352.329 -352.148 -352.182 -352.26 -352.295 -351.022 -351.976 -352.104 -352.188 -352.26 -351.751 -350.718 -351.465 -352.092 -350.64 -351.145 -350.872 -350.723 -350.957 -350.929 -351.412 -352.167 -351.97 -352.012 -351.874 -352.24 -351.93 -351.566 -351.296 -351.605 -351.747 -352.056 -351.915 -352.356 -350.846 -350.657 -351.615 -349.796 -350.813 -352.307 -352.24 -351.885 -351.476 -350.482 -351.74 -351.742 -348.67 -351.424 -350.946 -351.235 -351.556 -351.615 -352.198 -352.23 -352.281 -351.898 -351.584 -351.717 -351.84 -351.556 -351.509 -351.629 -351.088 -350.771 -350.044 -349.321 -348.741 -349.925 -350.787 -348.233 -349.56 -352.453 -352.274 -351.957 -352.226 -350.315 -351.259 -352.077 -350.774 -351.8 -350.959 -351.394 -351.808 -351.793 -352.058 -351.924 -352.258 -352.207 -351.584 -351.376 -351.515 -351.417 -351.411 -351.397 -351.721 -351.967 -351.405 -350.639 -349.633 -349.051 -349.394 -350.318 -351.809 -352.216 -352.275 -351.154 -351.77 -351.438 -351.196 -351.849 -350.375 -352.031 -351.024 -351.385 -351.212 -351.586 -351.975 -352.158 -352.26 -352.445 -352.12 -352.348 -352.107 -352.073 -352.168 -352.306 -352.194 -352.193 -352.262 -352.206 -352.29 -352.42 -352.439 -351.107 -352.123 -352.06 -352.448 -352.217 -351.421 -349.718 -351.435 -352.088 -349.96 -351.466 -351.405 -350.994 -351.229 -351.5 -351.546 -352.012 -352.053 -351.817 -351.985 -352.261 -351.979 -351.963 -351.57 -351.701 -351.579 -351.962 -351.771 -352.51 -351.121 -350.775 -351.629 -348.932 -350.781 -352.422 -352.281 -351.886 -351.003 -349.128 -351.637 -351.841 -349.18 -351.587 -351.29 -351.393 -351.623 -351.768 -351.829 -352.146 -352.194 -351.897 -351.659 -351.587 -351.889 -351.562 -351.757 -351.667 -351.451 -350.709 -350.215 -349.68 -348.666 -350.084 -350.769 -346.759 -350.239 -352.43 -352.42 -351.383 -352.128 -350.025 -350.488 -352.222 -351.919 -351.542 -351.074 -351.152 -351.811 -351.664 -352.22 -352.53 -352.088 -352.184 -351.546 -351.643 -351.6 -351.531 -351.44 -351.399 -352.042 -351.827 -351.521 -350.613 -350.075 -349.089 -348.645 -350.001 -352.08 -352.392 -352.058 -351.903 -351.844 -352.292 -351.101 -351.989 -350.302 -351.716 -351.371 -350.775 -351.06 -351.554 -352.198 -352.069 -352.182 -352.217 -352.146 -352.373 -352.097 -352.03 -352.223 -352.153 -352.228 -352.292 -352.163 -352.173 -352.207 -352.079 -352.465 -351.257 -352.058 -351.987 -352.431 -352.418 -351.322 -351.116 -350.823 -351.966 -349.487 -351.248 -350.991 -351.035 -351.133 -350.965 -351.539 -352.129 -352 -351.948 -352.014 -352.182 -352.043 -351.905 -351.655 -351.763 -351.745 -352.074 -351.684 -352.32 -351.416 -350.91 -351.694 -348.033 -350.891 -352.259 -352.148 -351.768 -350.64 -349.468 -351.161 -351.299 -350.098 -351.673 -351.034 -351.301 -351.405 -351.623 -352.336 -352.256 -352.282 -351.75 -351.596 -351.674 -351.761 -351.74 -351.907 -351.932 -351.251 -350.714 -350 -349.608 -349.216 -349.938 -350.569 -347.492 -349.645 -352.402 -352.232 -351.022 -351.91 -351.251 -350.419 -352.023 -350.18 -351.584 -351.296 -351.613 -351.853 -352.099 -352.224 -351.862 -352.407 -352.074 -351.452 -351.424 -351.503 -351.514 -351.469 -351.534 -352.155 -351.742 -351.858 -350.638 -349.881 -349.578 -349.037 -349.734 -351.892 -352.401 -352.397 -350.735 -351.559 -351.668 -350.289 -352.472 -351.91 -352.023 -350.793 -351.359 -351.429 -351.583 -352.053 -352.234 -352.3 -352.387 -352.081 -352.348 -352.115 -352.082 -352.229 -352.3 -352.259 -352.344 -352.339 -352.22 -352.28 -352.274 -352.539 -351.629 -352.133 -352.302 -352.506 -352.3 -351.455 -350.388 -351.523 -352.207 -350.74 -351.536 -351.376 -351.016 -351.243 -351.669 -351.623 -352.042 -352.007 -351.821 -351.979 -352.335 -352.115 -352.069 -351.861 -351.789 -351.893 -352.27 -351.744 -352.494 -351.551 -350.86 -351.757 -347.878 -351.254 -351.913 -352.183 -351.558 -350.98 -349.741 -350.95 -351.7 -350.065 -352.221 -351.24 -351.467 -351.899 -352.123 -351.927 -352.173 -352.049 -351.964 -351.63 -351.705 -351.928 -351.761 -351.923 -351.896 -351.453 -350.741 -350.051 -349.942 -348.956 -350.279 -350.867 -347.986 -350.694 -352.299 -352.17 -350.49 -352.127 -351.304 -349.788 -352.087 -350.947 -351.714 -351.266 -351.146 -351.853 -351.81 -352.14 -352.578 -352.063 -352.115 -351.698 -351.573 -351.609 -351.719 -351.47 -351.842 -352.262 -351.737 -351.902 -350.723 -350.073 -349.073 -349.634 -349.404 -351.897 -352.305 -352.108 -351.302 -351.525 -351.953 -350.426 -352.1 -351.683 -351.589 -351.48 -351.007 -351.294 -351.615 -352.268 -352.002 -352.124 -352.18 -352.198 -352.37 -352.226 -352.019 -352.317 -352.191 -352.359 -352.314 -352.282 -352.25 -352.317 -352.054 -352.475 -351.927 -351.842 -352.516 -352.522 -352.408 -351.314 -351.483 -351.076 -352.237 -350.286 -351.318 -351.175 -351.02 -351.324 -351.126 -351.583 -352.123 -351.791 -351.947 -352.117 -352.216 -352.222 -352.066 -351.83 -351.775 -351.875 -352.064 -351.826 -352.386 -351.799 -351.009 -351.627 -349.433 -351.212 -352.28 -352.328 -351.36 -351.442 -350.378 -351.219 -352.064 -350.308 -351.777 -351.091 -351.37 -351.539 -351.525 -352.284 -352.076 -352.234 -351.694 -351.624 -351.645 -351.726 -352.026 -352.084 -351.822 -351.172 -350.719 -350.14 -349.822 -349.673 -349.947 -350.502 -347.685 -351.201 -352.328 -352.259 -350.293 -352.064 -351.763 -349.654 -352.117 -350.506 -351.21 -351.323 -351.35 -351.782 -352.076 -352.354 -351.806 -352.152 -352.092 -351.533 -351.494 -351.572 -351.555 -351.694 -351.741 -352.179 -351.73 -352.194 -350.67 -349.88 -350.085 -349.189 -350.175 -352.183 -352.255 -352.237 -351.74 -351.224 -351.542 -350.322 -352.19 -352.134 -351.432 -351.124 -351.415 -351.431 -351.757 -352.117 -352.355 -352.337 -352.349 -352.075 -352.345 -352.047 -351.945 -352.381 -352.243 -352.347 -352.328 -352.19 -352.238 -352.324 -352.1 -352.449 -351.741 -352.122 -352.408 -352.371 -352.032 -350.947 -351.275 -350.943 -352.134 -350.645 -351.474 -351.267 -351.092 -351.292 -351.763 -351.772 -352.002 -351.904 -351.873 -352.022 -352.366 -352.107 -352.058 -351.728 -351.846 -352.086 -352.099 -351.681 -352.367 -351.804 -350.966 -351.513 -349.573 -351.578 -352.511 -352.036 -351.085 -351.771 -350.342 -350.572 -351.982 -349.861 -351.626 -351.136 -351.453 -351.894 -352.172 -352.16 -352.256 -351.887 -351.639 -351.692 -351.864 -352.03 -351.987 -352.02 -352.088 -351.5 -350.653 -350.053 -350.09 -349.519 -350.222 -350.328 -348.089 -351.177 -352.068 -352.122 -350.001 -351.146 -350.84 -350.075 -352.176 -350.867 -351.471 -351.43 -351.124 -352.154 -351.958 -352.135 -352.691 -352.219 -352.035 -351.88 -351.664 -351.517 -351.759 -351.621 -351.663 -352.371 -351.943 -351.914 -350.568 -349.962 -349.688 -349.14 -350.7 -352.13 -352.311 -352.205 -351.215 -351.312 -350.21 -350.964 -351.801 -351.454 -351.854 -351.614 -351.178 -351.418 -351.712 -352.309 -351.989 -352.102 -352.185 -352.256 -352.404 -352.205 -352.074 -352.259 -352.212 -352.356 -352.258 -352.431 -352.301 -352.375 -352.147 -352.312 -351.893 -352.148 -352.38 -352.236 -352.014 -351.823 -351.13 -351.329 -352.176 -351.055 -351.305 -351.214 -351.191 -351.424 -351.296 -351.658 -352.115 -351.855 -351.978 -352.188 -352.219 -352.321 -352.256 -352.002 -351.909 -352.107 -352.119 -351.918 -352.222 -351.853 -351.102 -351.887 -350.69 -351.714 -352.12 -352.023 -350.445 -351.925 -350.223 -350.4 -351.876 -349.421 -351.757 -351.521 -351.405 -351.638 -351.637 -352.288 -351.944 -352.132 -351.525 -351.595 -351.72 -351.857 -352.042 -352.18 -351.891 -351.237 -350.983 -350.259 -349.987 -350.015 -350.038 -350.299 -348.796 -351.262 -352.449 -351.926 -351.428 -351.118 -349.641 -350.207 -352.093 -350.591 -351.167 -351.237 -351.356 -351.703 -351.933 -352.426 -351.776 -352.072 -352.11 -351.631 -351.451 -351.709 -351.745 -351.606 -352.07 -352.211 -351.881 -352.18 -350.599 -349.911 -350.244 -349.019 -350.635 -351.853 -352.299 -351.473 -351.338 -351.467 -351.229 -350.999 -351.792 -351.686 -350.136 -350.951 -351.567 -351.471 -351.836 -352.07 -352.369 -352.422 -352.317 -352.032 -352.227 -352.178 -352.282 -352.285 -352.154 -352.284 -352.153 -352.134 -352.188 -352.345 -352.289 -352.496 -351.88 -352.235 -352.197 -352.484 -351.291 -351.08 -350.464 -350.298 -352.016 -351.327 -351.836 -351.35 -351.296 -351.368 -351.779 -351.859 -352.009 -351.897 -351.931 -351.943 -352.234 -352.232 -352.078 -351.863 -351.893 -352.079 -351.97 -351.756 -352.242 -351.911 -351.097 -351.699 -350.937 -351.928 -352.314 -352.201 -350.942 -350.654 -350.184 -349.605 -352.062 -350.196 -351.361 -351.252 -351.526 -351.99 -352.197 -352.019 -352.204 -351.838 -351.658 -351.566 -351.83 -352.069 -352.045 -352.169 -352.036 -351.46 -350.789 -350.047 -350.17 -349.877 -350.183 -350.181 -349.191 -351.536 -352.447 -352.229 -351.191 -351.147 -350.34 -349.638 -351.974 -349.117 -349.563 -352.015 -351.077 -352.326 -352.004 -351.989 -352.578 -352.213 -351.876 -351.661 -351.713 -351.612 -351.886 -352.006 -352.072 -352.23 -352.077 -351.844 -350.785 -350.143 -349.977 -349.474 -350.865 -352.164 -352.427 -351.988 -351.362 -350.761 -351.121 -350.874 -351.855 -351.465 -350.656 -351.885 -351.257 -351.52 -351.821 -352.351 -351.993 -352.051 -352.217 -352.287 -352.167 -352.239 -352.24 -352.213 -352.17 -352.307 -352.093 -352.073 -352.339 -352.316 -352.259 -352.383 -352.004 -352.357 -352.362 -352.217 -352.066 -350.354 -350.377 -349.351 -351.664 -351.301 -351.25 -350.981 -351.216 -351.489 -351.378 -351.671 -352.095 -351.956 -351.942 -352.087 -352.383 -352.104 -352.257 -351.948 -351.955 -352.179 -352.096 -351.791 -352.065 -351.9 -351.314 -351.656 -350.335 -351.628 -352.536 -351.617 -350.449 -349.863 -349.988 -350.468 -351.731 -350.858 -351.562 -351.57 -351.731 -351.674 -351.739 -352.203 -352.021 -351.879 -351.654 -351.636 -351.991 -351.894 -352.034 -352.257 -352.05 -351.432 -350.987 -350.39 -350.002 -350.301 -350.16 -350.287 -349.778 -351.68 -352.375 -351.95 -350.752 -350.645 -350.573 -350.339 -352.219 -351.436 -350.472 -351.567 -351.493 -351.592 -351.823 -352.496 -351.911 -351.845 -352.055 -351.671 -351.634 -351.574 -351.966 -351.913 -352.157 -352.158 -351.919 -352.049 -350.784 -349.94 -350.372 -350.384 -350.571 -351.992 -352.356 -351.002 -350.831 -350.947 -350.085 -349.456 -351.196 -351.68 -350.414 -350.799 -351.518 -351.591 -351.988 -352.061 -352.282 -352.51 -352.379 -351.977 -352.4 -352.117 -352.279 -352.102 -351.799 -352.139 -351.872 -352.127 -352.13 -352.434 -352.354 -352.506 -352.07 -352.353 -352.301 -352.259 -352.091 -350.442 -350.052 -350.214 -351.717 -351.398 -351.866 -351.43 -351.453 -351.385 -351.819 -351.973 -352.112 -351.877 -351.956 -351.989 -352.334 -352.388 -352.158 -351.972 -352.019 -352.172 -352.039 -351.762 -352.069 -352.059 -351.203 -351.549 -351.555 -351.955 -352.471 -350.891 -350.519 -350.059 -350.153 -349.156 -352.239 -351.68 -351.407 -351.317 -351.844 -351.598 -352.226 -351.916 -352.083 -351.948 -351.532 -351.544 -351.917 -352.101 -352.112 -352.315 -352.183 -351.503 -350.772 -350.192 -350.564 -350.115 -350.434 -350.304 -350.25 -351.862 -352.384 -351.344 -350.813 -351.125 -350.617 -349.92 -352.091 -351.301 -348.404 -352.088 -351.008 -352.305 -352.132 -351.957 -352.451 -352.221 -351.763 -351.536 -351.597 -351.627 -352.07 -352.198 -352.215 -352.315 -352.094 -351.631 -350.783 -350.405 -350.273 -349.959 -351.443 -352.004 -352.336 -350.643 -351.238 -350.979 -351.154 -349.543 -351.339 -351.917 -350.799 -351.207 -351.622 -351.575 -351.881 -352.277 -351.977 -352.049 -352.048 -352.304 -352.29 -352.231 -352.258 -352.146 -351.854 -352.137 -351.772 -352.176 -352.36 -352.275 -352.158 -352.378 -352.399 -352.39 -352.096 -352.279 -351.99 -351.36 -349.565 -349.959 -351.799 -351.462 -351.255 -350.972 -351.254 -351.647 -351.358 -351.636 -352.038 -352.062 -351.826 -352.246 -352.254 -352.093 -352.188 -352.039 -352.122 -352.208 -352.035 -351.714 -351.969 -351.909 -351.339 -351.615 -351.096 -351.601 -352.192 -351.665 -350.997 -349.74 -348.943 -350.364 -351.93 -351.412 -351.458 -351.741 -351.535 -351.775 -351.855 -352.111 -352.08 -351.652 -351.642 -351.71 -351.926 -351.892 -352.276 -352.299 -352.233 -351.563 -351.167 -350.4 -350.277 -350.573 -350.434 -350.819 -350.663 -351.467 -351.908 -351.031 -350.271 -351.453 -350.165 -350.594 -351.685 -351.467 -348.514 -351.388 -351.283 -351.672 -351.802 -352.299 -351.843 -351.732 -351.808 -351.573 -351.722 -351.631 -352.257 -352.338 -352.183 -352.109 -351.901 -351.884 -351.053 -350.199 -350.457 -350.318 -351.777 -352.118 -352.028 -350.717 -351.804 -351.076 -350.229 -350.741 -350.905 -352.388 -350.568 -351.099 -351.488 -351.778 -352.159 -352.114 -352.131 -352.5 -352.358 -351.947 -352.397 -352.131 -352.421 -352.115 -351.908 -351.699 -351.821 -352.085 -352.035 -352.447 -352.319 -352.466 -352.119 -352.232 -352.228 -352.272 -351.748 -351.482 -350.854 -350.47 -352.046 -351.496 -351.505 -351.617 -351.657 -351.365 -351.85 -352.118 -352.195 -351.772 -351.91 -351.941 -352.312 -352.266 -352.246 -352.085 -352.248 -352.244 -352.087 -351.823 -352.02 -352.112 -351.386 -351.773 -351.676 -351.844 -352.254 -351.474 -351.985 -350.924 -350.837 -351.084 -351.48 -351.443 -351.313 -351.122 -351.89 -351.812 -352.216 -351.727 -351.984 -351.973 -351.537 -351.634 -352.008 -352.179 -352.281 -352.351 -352.2 -351.812 -351.004 -350.323 -350.878 -350.466 -350.705 -350.798 -350.999 -351.818 -352.23 -351.789 -352.397 -350.161 -350.61 -349.466 -350.428 -351.958 -349.694 -351.423 -351.096 -352.295 -352.148 -351.885 -352.26 -352.156 -351.596 -351.666 -351.681 -351.81 -352.342 -352.288 -352.335 -352.305 -352.159 -351.624 -351.207 -350.474 -350.371 -350.756 -351.823 -352.283 -352.078 -351.386 -351.61 -351.771 -351.066 -351.246 -351.251 -352.028 -350.571 -350.941 -351.189 -351.591 -351.889 -352.163 -351.985 -352.015 -352.016 -352.146 -352.267 -352.313 -352.294 -352.397 -351.949 -351.846 -351.92 -352.286 -352.063 -352.157 -352.158 -352.244 -352.327 -352.361 -352.478 -352.144 -352.359 -351.323 -350.327 -350.918 -351.415 -351.975 -351.206 -351.072 -351.272 -351.791 -351.404 -351.599 -351.918 -352.111 -351.689 -352.147 -352.108 -352.119 -352.242 -352.174 -352.159 -352.296 -352.112 -351.929 -351.985 -351.973 -351.383 -351.62 -351.348 -351.992 -352.266 -351.757 -351.971 -350.871 -351.358 -351.07 -350.498 -351.505 -350.865 -351.541 -351.674 -351.662 -351.64 -351.988 -352.106 -351.402 -351.478 -351.643 -351.964 -351.92 -352.34 -352.46 -352.255 -351.686 -351.22 -350.324 -350.651 -350.883 -350.546 -351.14 -351.27 -351.831 -352.377 -351.486 -351.921 -350.443 -350.321 -351.774 -351.224 -352.093 -350.02 -351.017 -351.319 -351.677 -351.723 -352.172 -351.645 -351.603 -351.774 -351.566 -351.761 -351.68 -352.399 -352.631 -352.181 -352.098 -351.88 -351.744 -351.158 -350.426 -350.613 -351.189 -351.935 -352.089 -352.515 -351.18 -351.923 -350.775 -351.048 -350.723 -351.385 -352.059 -350.686 -351.085 -351.121 -352.038 -352.366 -352.209 -352.097 -352.483 -352.28 -351.965 -352.21 -352.126 -352.411 -352.221 -351.662 -351.986 -351.939 -351.884 -351.87 -352.516 -352.404 -352.363 -351.496 -352.332 -352.224 -352.304 -352.383 -350.154 -351.242 -351.329 -351.078 -351.836 -351.345 -351.728 -351.313 -351.422 -351.868 -352.23 -352.24 -351.695 -351.819 -351.892 -352.25 -352.221 -352.379 -352.179 -352.281 -352.286 -351.978 -351.834 -352.058 -352.062 -351.506 -351.587 -351.606 -351.951 -351.86 -351.835 -351.906 -350.818 -352.064 -351.057 -350.712 -352.117 -351.293 -350.965 -351.571 -352.057 -352.329 -351.647 -351.836 -351.702 -351.588 -351.583 -351.852 -352.315 -352.425 -352.384 -352.176 -351.732 -351.214 -350.354 -351.058 -350.599 -351.114 -351.014 -351.271 -351.664 -352.346 -351.852 -351.98 -350.471 -351.715 -351.784 -351.269 -351.782 -350.362 -351.038 -350.865 -352.32 -352.174 -351.727 -352.155 -352.139 -351.463 -351.647 -351.687 -351.612 -352.57 -352.344 -352.429 -352.099 -352.072 -351.474 -351.308 -350.25 -350.954 -351.427 -351.898 -352.299 -352.414 -351.475 -351.984 -350.52 -352.044 -351.715 -350.927 -352.418 -350.752 -350.916 -351.33 -351.691 -351.834 -352.056 -352.149 -351.975 -352.002 -352.289 -352.342 -352.377 -352.433 -352.243 -352.02 -352.002 -351.81 -351.801 -352.039 -351.718 -352.119 -352.402 -352.243 -352.525 -352.205 -352.435 -352.377 -351.023 -351.657 -351.794 -350.957 -352.486 -351.302 -351.051 -351.09 -351.868 -351.433 -351.659 -351.805 -352 -351.573 -352.219 -351.996 -352.238 -352.256 -352.352 -352.356 -352.461 -351.986 -352.001 -352.062 -351.907 -351.433 -351.743 -351.178 -352.028 -352.129 -352.249 -352.381 -351.208 -351.877 -351.488 -350.843 -352.009 -350.808 -351.119 -352.14 -351.538 -351.483 -352.14 -352.184 -351.342 -351.26 -351.592 -351.868 -351.997 -352.21 -352.355 -352.22 -351.696 -351.191 -350.647 -350.886 -351.017 -350.85 -351.402 -351.302 -351.967 -352.323 -351.762 -352.324 -350.991 -352.004 -351.945 -351.297 -351.536 -350.975 -351.007 -350.147 -351.282 -351.638 -352.158 -351.641 -351.557 -351.8 -351.56 -351.64 -351.689 -352.549 -352.712 -352.19 -352.005 -351.809 -351.666 -350.978 -350.368 -350.894 -351.869 -351.107 -352.108 -352.285 -351.091 -351.349 -350.76 -351.706 -352.249 -351.189 -352.054 -350.588 -351.178 -351.196 -351.982 -352.213 -352.329 -352.045 -352.467 -352.165 -351.951 -352.114 -352.191 -352.279 -352.38 -352.136 -351.938 -351.934 -351.749 -351.873 -352.192 -352.047 -352.436 -352.179 -352.245 -352.327 -352.495 -352.418 -351.287 -352.404 -351.659 -350.914 -352.085 -351.244 -351.441 -351.333 -351.407 -351.608 -352.265 -352.041 -351.698 -351.814 -351.816 -352.034 -352.212 -352.033 -352.267 -352.376 -352.23 -352.04 -351.955 -351.988 -351.967 -351.589 -351.897 -351.7 -351.983 -351.978 -352.416 -352.406 -350.184 -352.397 -352.061 -350.995 -352.314 -350.936 -350.999 -351.371 -351.954 -352.316 -351.546 -351.587 -351.534 -351.814 -351.592 -351.824 -351.97 -352.348 -352.423 -352.162 -351.73 -351.294 -350.638 -351.175 -350.846 -351.341 -351.29 -351.284 -351.934 -352.388 -352.352 -352.345 -351.252 -352.294 -351.707 -350.85 -352.062 -351.215 -350.811 -351.02 -352.056 -351.549 -351.507 -352.029 -352.426 -351.451 -351.646 -351.671 -351.624 -352.347 -352.213 -352.262 -352.101 -352.052 -351.515 -351.216 -350.612 -351.215 -351.921 -351.867 -352.216 -352.411 -351.848 -351.306 -351.241 -352.292 -352.226 -349.808 -352.39 -350.442 -350.961 -351.279 -351.815 -351.547 -352.003 -352.217 -351.875 -352.039 -352.274 -352.244 -352.371 -352.376 -352.261 -352.198 -352.205 -351.93 -351.711 -352.032 -351.804 -352.172 -352.441 -352.191 -352.43 -352.321 -352.321 -352.335 -351.236 -352.569 -352.131 -350.914 -352.52 -351.324 -351.215 -351.123 -351.262 -351.25 -351.644 -351.79 -351.973 -351.602 -352.24 -351.772 -352 -352.066 -352.451 -352.529 -352.58 -351.99 -352.023 -352.042 -351.949 -351.617 -352.036 -351.724 -352.098 -351.89 -352.267 -352.377 -351.719 -352.387 -352.267 -351.844 -352.079 -350.689 -351.408 -352.064 -351.567 -351.399 -352.019 -352.168 -351.347 -350.929 -351.653 -351.515 -351.59 -351.691 -352.225 -352.178 -351.776 -351.223 -351.062 -351.217 -351.248 -351.37 -351.643 -351.455 -352.068 -352.409 -352.211 -352.37 -351.331 -352.408 -352.184 -351.109 -351.776 -351.22 -350.665 -350.556 -351.49 -351.109 -351.167 -350.949 -350.548 -351.659 -351.549 -351.457 -351.158 -352.193 -352.684 -352.284 -352.083 -351.955 -351.867 -351.358 -350.867 -351.255 -352.006 -352.063 -352.305 -352.299 -352.435 -351.266 -351.827 -352.658 -352.535 -351.077 -352.102 -351.224 -351.176 -351.439 -351.858 -351.822 -352.364 -351.994 -352.339 -352.139 -352.086 -351.999 -352.298 -352.35 -352.428 -352.275 -352 -352.098 -352.151 -352.083 -351.946 -352.112 -352.167 -352.273 -352.37 -352.267 -352.25 -352.371 -351.213 -352.706 -352.378 -350.809 -352.352 -351.368 -351.425 -351.366 -351.12 -351.089 -352.137 -352.004 -351.744 -351.789 -351.555 -351.893 -351.906 -351.876 -352.287 -352.196 -352.069 -352.025 -352.129 -352.08 -351.991 -351.937 -352.202 -351.666 -352.313 -352.246 -351.293 -352.178 -351.048 -352.53 -352.148 -351.23 -352.161 -350.864 -351.198 -351.153 -351.496 -351.817 -351.601 -351.331 -351.024 -352.561 -351.681 -351.907 -351.448 -351.802 -352.398 -352.202 -351.831 -351.4 -351.13 -351.464 -351.26 -351.799 -351.68 -351.746 -352.383 -352.004 -352.451 -351.885 -351.581 -352.403 -352.07 -351.708 -351.753 -351.302 -350.561 -351.122 -351.766 -350.497 -351.158 -351.563 -351.372 -351.394 -351.641 -351.512 -351.169 -352.622 -352.276 -352.122 -352.207 -352.009 -351.646 -351.681 -351.06 -351.63 -352.08 -352.018 -351.988 -352.354 -352.472 -351.648 -351.309 -352.475 -352.675 -351.537 -352.379 -350.927 -351.411 -351.357 -351.836 -351.518 -351.808 -352.22 -351.965 -352.033 -352.185 -352.395 -352.096 -352.671 -352.582 -352.417 -352.191 -352.279 -352 -352.069 -351.869 -352.198 -352.213 -352.172 -352.586 -351.691 -351.819 -352.396 -351.92 -352.541 -352.398 -350.875 -352.487 -351.473 -351.312 -351.255 -351.059 -351.115 -351.712 -351.801 -351.829 -351.573 -352.434 -351.509 -351.891 -351.816 -352.232 -352.362 -352.214 -352.249 -352.17 -352.212 -352.028 -351.617 -352.393 -351.972 -352.343 -352.253 -352.052 -352.373 -351.892 -352.479 -352.346 -351.255 -352.12 -350.889 -351.641 -351.641 -351.486 -351.623 -351.906 -351.737 -351.279 -350.404 -351.738 -351.202 -351.607 -351.787 -352.453 -351.987 -352.15 -351.399 -351.278 -351.36 -351.529 -351.721 -352.026 -351.969 -352.206 -352.006 -352.518 -352.223 -352.127 -352.506 -352.402 -351.124 -351.422 -351.842 -350.719 -350.983 -351.223 -350.947 -351.028 -350.861 -350.179 -351.113 -351.596 -351.305 -351.099 -351.931 -352.548 -352.35 -352.097 -352.037 -351.979 -351.757 -351.269 -351.822 -352.08 -352.012 -351.88 -352.022 -352.473 -352.018 -350.804 -352.516 -352.685 -351.802 -351.961 -351.317 -350.971 -351.678 -351.983 -351.806 -352.318 -352.038 -351.805 -351.476 -352.073 -351.895 -352.428 -352.325 -352.33 -352.59 -352.209 -352.171 -352.163 -352.273 -352.168 -352.168 -352.316 -352.264 -352.478 -351.832 -351.875 -352.22 -352.429 -352.611 -352.362 -350.335 -352.916 -351.507 -351.289 -351.37 -351.183 -351.344 -351.795 -351.808 -351.762 -351.442 -351.258 -351.927 -351.745 -351.73 -352.055 -352.264 -352.156 -352.346 -352.303 -352.068 -352.192 -351.947 -352.235 -351.863 -352.394 -352.368 -352.103 -352.403 -352.222 -352.553 -352.112 -349.748 -352.518 -350.728 -351.429 -351.198 -351.46 -351.644 -351.483 -351.191 -349.997 -352.437 -351.544 -351.934 -351.481 -351.876 -352.048 -352.448 -352.182 -351.81 -351.688 -351.7 -351.713 -351.996 -352.139 -351.81 -352.514 -352.067 -352.311 -351.558 -352.071 -352.382 -352.371 -351.917 -352.067 -351.345 -350.868 -351.374 -351.642 -350.86 -351.276 -351.213 -350.248 -350.358 -351.766 -351.371 -351.208 -351.695 -352.336 -352.045 -352.211 -352.018 -351.917 -351.752 -351.402 -351.535 -352.257 -352.317 -352.318 -352.379 -351.685 -351.423 -352.188 -352.616 -352.471 -352.071 -351.905 -351.364 -351.76 -351.57 -351.802 -351.721 -351.925 -351.935 -351.935 -352.152 -352.09 -352.284 -352.118 -352.379 -352.394 -352.45 -352.395 -352.344 -352.325 -352.495 -352.292 -352.115 -352.057 -352.322 -352.453 -352.024 -351.629 -352.324 -352.351 -352.699 -352.37 -350.664 -351.651 -351.674 -351.428 -351.499 -350.95 -351.233 -351.707 -351.961 -351.684 -351.249 -352.263 -351.606 -351.821 -351.717 -351.92 -352.079 -352.041 -352.187 -352.213 -352.171 -352.01 -351.704 -352.015 -352.037 -352.401 -352.191 -352.149 -352.194 -352.566 -352.674 -352.423 -351.221 -352.242 -351.049 -351.792 -351.698 -351.587 -351.801 -351.603 -351.567 -351.386 -350.158 -351.357 -350.982 -351.59 -351.27 -352.047 -351.908 -352.462 -352.046 -351.856 -351.639 -351.806 -351.857 -352.197 -352.086 -351.946 -351.932 -352.44 -352.283 -351.723 -352.373 -352.466 -352.007 -351.455 -352.026 -350.912 -351.251 -351.064 -350.964 -350.993 -350.693 -350.315 -350.354 -351.434 -351.439 -351.273 -351.787 -352.256 -352.081 -352.258 -352.275 -352.317 -352.127 -351.816 -352.068 -351.659 -351.946 -352.451 -351.847 -352.317 -351.593 -351.665 -352.71 -352.611 -351.4 -351.604 -351.891 -351.11 -351.671 -352.035 -351.797 -352.061 -351.807 -351.757 -351.392 -351.999 -351.818 -352.409 -351.795 -352.459 -352.345 -352.657 -352.284 -352.203 -352.555 -352.443 -352.256 -352.319 -352.281 -352.509 -352.206 -352.024 -352.416 -352.533 -352.639 -352.393 -350.771 -352.587 -351.631 -351.268 -351.25 -351.373 -351.503 -351.777 -351.512 -351.595 -351.398 -350.83 -351.507 -351.9 -351.572 -351.62 -352.028 -352.091 -352.301 -352.243 -352.195 -351.804 -351.829 -351.754 -352.222 -352.428 -352.374 -351.959 -352.24 -352.368 -352.456 -352.323 -351.617 -352.013 -350.972 -351.603 -351.358 -351.604 -351.349 -351.426 -351.386 -349.831 -350.024 -350.329 -352.165 -351.419 -351.315 -351.377 -351.899 -352.249 -352.47 -352.148 -352.124 -352.109 -352.278 -351.594 -351.887 -352.278 -352.108 -352.48 -352.328 -351.217 -352.591 -352.25 -352.155 -351.491 -351.564 -351.686 -351.738 -351.603 -351.059 -351.059 -350.99 -350.401 -350.982 -351.565 -351.564 -351.378 -351.374 -352.207 -352.187 -352.439 -352.187 -352.02 -351.932 -351.235 -351.278 -351.86 -352.024 -352.239 -352.302 -352.315 -351.916 -351.569 -352.602 -352.679 -352.014 -351.581 -351.278 -351.665 -351.853 -351.739 -351.961 -352.064 -352.104 -351.871 -351.896 -351.549 -351.348 -351.56 -351.876 -352.111 -352.427 -352.366 -352.525 -352.429 -352.5 -352.447 -352.453 -352.348 -352.433 -352.407 -352.28 -352.473 -352.371 -352.557 -352.715 -352.36 -351.335 -351.035 -351.685 -351.596 -351.579 -350.934 -351.279 -351.737 -352.044 -351.519 -351.284 -351.549 -351.633 -351.873 -351.909 -351.841 -351.724 -352.042 -352.531 -352.296 -352.071 -351.548 -351.696 -351.426 -352.091 -352.492 -352.397 -352.492 -351.978 -351.975 -352.617 -352.435 -351.667 -351.438 -351.319 -351.793 -351.538 -351.497 -351.934 -351.719 -351.355 -350.95 -349.858 -349.003 -350.721 -351.492 -351.275 -351.434 -351.641 -352.026 -352.554 -352.247 -351.881 -351.584 -351.734 -352.023 -351.934 -352.368 -352.272 -352.369 -352.349 -351.792 -352.411 -352.405 -351.973 -351.36 -351.871 -351.134 -351.256 -351.17 -351.194 -350.798 -350.953 -351.081 -351.219 -351.178 -351.501 -351.468 -351.58 -351.814 -352.024 -352.431 -352.645 -352.673 -352.17 -351.809 -351.429 -351.903 -352.209 -352.318 -352.386 -351.505 -352.013 -352.32 -352.768 -352.653 -351.582 -349.385 -351.846 -351.641 -351.781 -352.188 -351.784 -351.964 -351.707 -351.871 -351.53 -351.443 -351.514 -351.837 -351.86 -352.489 -352.538 -352.385 -352.449 -352.496 -352.446 -352.621 -352.533 -352.386 -352.158 -352.431 -352.402 -352.406 -352.414 -352.426 -352.765 -352.372 -351.191 -351.503 -351.797 -351.408 -351.247 -351.215 -351.318 -351.922 -351.496 -351.604 -351.159 -350.598 -350.312 -351.454 -351.763 -351.248 -351.432 -352.177 -352.46 -352.365 -352.163 -352.209 -351.958 -352.031 -351.924 -352.136 -352.292 -352.128 -351.996 -352.489 -352.412 -352.197 -351.373 -352.031 -351.302 -351.902 -351.725 -351.754 -351.125 -351.432 -351.69 -350.327 -350.652 -349.666 -350.231 -351.461 -351.684 -351.336 -350.961 -352.182 -352.511 -352.56 -352.261 -352.385 -351.659 -351.973 -352.149 -352.506 -352.008 -352.123 -352.391 -352.062 -352.101 -352.398 -352.082 -351.643 -351.428 -352.02 -351.246 -351.272 -351.26 -351.393 -351.48 -350.503 -351.155 -351.254 -351.386 -351.486 -351.408 -351.782 -352.136 -352.489 -352.171 -352.14 -352.458 -352.155 -351.964 -351.622 -351.895 -352.23 -352.295 -352.283 -351.409 -352.409 -352.607 -352.557 -351.784 -350.232 -351.564 -351.414 -352.085 -351.588 -352.272 -352.331 -351.96 -351.66 -351.326 -351.615 -351.809 -351.708 -352.099 -351.794 -352.545 -352.502 -352.428 -352.375 -352.465 -352.619 -352.682 -352.182 -352.077 -352.116 -352.571 -352.432 -352.48 -352.426 -352.799 -352.362 -351.684 -351.531 -351.915 -351.712 -351.552 -351.136 -351.349 -351.797 -352.183 -351.544 -351.343 -351.43 -350.709 -351.495 -351.691 -351.869 -351.62 -352.158 -352.01 -352.393 -352.357 -352.133 -352.397 -351.981 -351.934 -352.079 -352.562 -351.951 -352.354 -352.277 -352.39 -352.233 -351.728 -352.023 -351.387 -351.668 -351.464 -351.351 -351.604 -351.937 -351.089 -350.664 -351.353 -350.608 -350.538 -351.27 -351.483 -351.675 -351.359 -352.018 -352.203 -352.208 -352.3 -352.118 -351.909 -351.506 -351.903 -352.266 -352.266 -352.315 -352.33 -351.497 -352.442 -352.451 -352.258 -350.9 -351.718 -351.367 -351.59 -351.233 -350.989 -350.994 -351.224 -351.612 -351.782 -351.62 -351.171 -351.52 -351.933 -351.61 -351.957 -351.996 -352.099 -352.125 -352.299 -352.018 -351.776 -351.919 -351.956 -352.109 -352.532 -352.396 -351.242 -352.447 -352.618 -352.358 -351.942 -350.275 -351.849 -351.715 -351.896 -352.285 -351.799 -351.632 -351.285 -351.43 -351.752 -351.479 -351.737 -351.865 -352.206 -352.306 -352.591 -352.667 -352.657 -352.311 -352.401 -352.471 -352.579 -352.395 -352.136 -351.884 -352.43 -352.225 -352.315 -352.161 -352.685 -352.495 -352.071 -351.83 -351.664 -351.719 -351.448 -351.532 -351.391 -351.926 -351.519 -351.698 -351.502 -351.753 -351.483 -351.913 -351.884 -352.037 -352.014 -351.924 -352.246 -352.365 -352.375 -352.242 -352.541 -352.471 -351.399 -352.002 -352.254 -352.384 -351.998 -352.164 -352.34 -352.203 -352.085 -351.507 -351.534 -352.305 -351.761 -351.889 -351.114 -351.579 -351.498 -350.97 -351.32 -351.311 -351.668 -351.887 -351.927 -351.421 -351.702 -351.624 -352.23 -352.376 -352.214 -352.001 -352.184 -352.153 -352.124 -352.032 -352.236 -352.406 -352.298 -351.406 -352.342 -352.441 -352.352 -351.683 -351.866 -351.565 -351.765 -351.056 -351.928 -351.361 -351.368 -350.923 -351.582 -352.016 -351.904 -351.665 -351.492 -351.922 -352.126 -352.114 -352.394 -352.206 -352.224 -352.085 -351.97 -351.543 -351.91 -351.952 -351.693 -352.11 -351.954 -352.331 -352.781 -352.573 -352.116 -350.974 -352.269 -351.395 -352.085 -351.567 -352.19 -352.347 -351.419 -351.063 -350.974 -351.595 -352.038 -351.671 -352.309 -352.475 -352.119 -352.48 -351.756 -351.965 -352.281 -352.376 -352.495 -352.487 -352.34 -352.062 -352.381 -352.035 -352.087 -352.172 -352.618 -352.17 -352.115 -351.243 -352.122 -351.86 -351.653 -351.415 -351.364 -351.821 -352.236 -351.092 -351.648 -352.107 -352.005 -352.434 -352.305 -352.366 -352.198 -352.511 -351.879 -352.506 -352.024 -352.248 -352.379 -352.457 -352.096 -352.168 -352.273 -352.036 -352.153 -351.372 -352.577 -352.329 -352.308 -351.543 -352.172 -351.605 -351.598 -351.431 -351.638 -352.18 -351.437 -351.206 -351.767 -352.143 -352.351 -351.913 -352.115 -352.186 -351.671 -352.074 -352.233 -351.891 -352.201 -352.257 -352.075 -352.223 -351.759 -351.878 -352.21 -351.746 -352.2 -351.276 -352.336 -352.312 -352.351 -352.148 -351.279 -351.775 -351.902 -351.808 -350.94 -351.033 -350.739 -351.424 -351.586 -352.339 -352.385 -352.139 -352.002 -352.218 -351.892 -351.94 -351.753 -351.918 -351.863 -352.146 -352.108 -352.069 -351.982 -352.007 -352.167 -351.792 -351.575 -352.375 -352.582 -352.634 -352.227 -351.504 -350.777 -351.577 -352.061 -351.908 -352.109 -351.112 -351.242 -351.319 -351.744 -352.119 -352.47 -352.414 -352.282 -351.912 -351.875 -352.249 -352.199 -352.403 -352.313 -352.501 -352.356 -352.401 -352.263 -351.898 -352.186 -352.004 -351.985 -352.367 -352.561 -352.419 -352.247 -351.708 -352.139 -351.824 -351.509 -351.589 -351.575 -351.842 -351.745 -351.481 -352.191 -352.313 -352.43 -352.44 -352.433 -352.176 -351.657 -351.178 -351.969 -351.926 -352.322 -352.286 -352.211 -352.488 -351.947 -352.065 -352.306 -351.601 -352.018 -352.042 -352.443 -352.322 -352.149 -351.641 -351.977 -352.417 -351.999 -351.891 -351.463 -351.858 -351.588 -351.536 -352.18 -352.38 -352.479 -352.39 -352.168 -352.311 -351.445 -351.391 -352.056 -352.085 -352.371 -351.927 -352.251 -352.035 -351.827 -351.98 -352.231 -351.609 -352.235 -351.423 -352.337 -352.137 -351.992 -351.953 -351.429 -351.919 -351.847 -351.027 -351.146 -351.088 -350.919 -350.959 -352.025 -352.354 -352.532 -352.526 -352.455 -352.185 -352.091 -351.437 -351.753 -352.052 -351.797 -352.295 -352.293 -351.612 -350.299 -351.675 -351.869 -351.503 -351.79 -352.384 -352.477 -352.708 -352.374 -351.988 -350.958 -351.64 -351.811 -351.317 -351.291 -351.077 -351.318 -352.027 -352.485 -352.465 -352.37 -352.33 -352.12 -352.124 -351.928 -352.26 -351.953 -352.336 -352.455 -352.468 -352.257 -352.371 -352.508 -352.221 -352.228 -352.219 -352.187 -351.821 -352.381 -352.56 -352.234 -352.395 -352 -351.464 -351.558 -351.658 -351.684 -351.867 -351.51 -352.07 -352.435 -352.625 -352.664 -352.601 -352.356 -352.267 -351.722 -351.808 -352.222 -352.213 -352.243 -352.477 -352.086 -352.303 -352.119 -352.117 -352.399 -351.879 -352.177 -352.274 -352.543 -352.569 -352.156 -351.823 -351.614 -351.284 -351.42 -351.577 -351.296 -351.998 -352.038 -352.216 -352.375 -352.401 -352.363 -352.509 -352.321 -352.34 -352.143 -352.127 -352.2 -352.253 -352.284 -352.212 -352.233 -352.27 -352.003 -351.927 -352.388 -351.979 -352.157 -352.085 -352.44 -352.274 -352.348 -352.262 -351.919 -352.116 -351.929 -351.723 -351.712 -351.462 -351.522 -351.736 -352.343 -352.533 -352.558 -352.482 -352.131 -351.93 -352.044 -352.032 -351.968 -351.679 -351.704 -352.439 -351.757 -351.825 -351.018 -351.566 -352.019 -351.662 -351.657 -352.103 -352.628 -352.365 -352.591 -352.618 -352.072 -351.788 -351.898 -351.654 -351.993 -351.867 -352.367 -352.323 -352.454 -352.454 -352.002 -352.256 -352.215 -352.125 -351.876 -352.156 -351.966 -352.383 -352.321 -352.626 -352.387 -352.526 -352.496 -352.237 -352.125 -352.096 -352.108 -352.175 -352.222 -352.616 -352.687 -352.338 -352.272 -351.845 -351.575 -351.43 -351.878 -352.297 -352.241 -352.506 -352.643 -352.447 -352.254 -352.433 -352.25 -352.205 -351.605 -351.882 -352.182 -352.288 -352.257 -352.477 -351.955 -352.477 -352.386 -352.247 -352.365 -351.967 -352.142 -351.878 -352.2 -352.169 -352.225 -352.23 -352.135 -351.754 -351.799 -351.78 -351.759 -352.16 -352.265 -352.339 -352.388 -352.173 -352.429 -352.22 -352.268 -351.969 -352.185 -352.103 -352.186 -352.218 -352.161 -352.423 -352.356 -352.341 -352.183 -351.791 -352.45 -352.177 -352.263 -351.089 -352.477 -352.388 -352.389 -352.288 -352.256 -352.27 -352.174 -351.653 -352.137 -352.143 -351.996 -352.49 -352.468 -352.202 -351.27 -351.515 -352.011 -351.99 -351.955 -351.9 -351.745 -352.012 -351.72 -351.624 -352.417 -352.399 -351.839 -351.635 -352.447 -351.919 -351.792 -352.333 -351.942 -352.309 -352.274 -352.227 -351.986 -352.231 -352.54 -352.253 -352.299 -352.291 -352.228 -352.412 -352.444 -352.201 -351.876 -352.296 -352.253 -352.158 -351.767 -352.178 -351.992 -352.312 -352.448 -352.609 -352.33 -352.268 -352.287 -352.214 -352.103 -352.136 -352.117 -352.488 -352.311 -352.42 -351.819 -352.667 -352.673 -352.343 -352.102 -352.276 -352.626 -352.194 -352.326 -352.375 -352.454 -351.544 -352.336 -352.446 -352.252 -352.236 -351.505 -351.894 -352.186 -352.288 -352.387 -352.259 -352.207 -352.586 -352.308 -352.335 -352.298 -351.975 -352.016 -351.641 -352.216 -352.292 -352.445 -352.41 -352.459 -352.309 -352.304 -352.314 -352.286 -352.28 -352.184 -352.351 -352.318 -352.233 -352.351 -352.232 -352.225 -351.99 -352.138 -352.106 -352.183 -352.303 -352.293 -352.468 -352.19 -352.133 -352.205 -351.729 -351.904 -351.915 -352.082 -350.741 -351.677 -352.326 -352.142 -351.772 -352.477 -352.526 -352.224 -352.308 -352.353 -352.166 -351.848 -351.188 -351.978 -351.888 -351.139 -351.667 -352.011 -351.881 -352.115 -352.035 -351.37 -351.95 -351.789 -351.836 -352.287 -352.2 -351.389 -351.315 -351.63 -351.785 -351.53 -352.274 -352.07 -352.363 -352.439 -352.274 -352.126 -352.322 -352.287 -352.39 -352.27 -352.384 -352.283 -352.444 -352.302 -352.157 -351.84 -352.263 -352.287 -352.245 -351.809 -352.171 -352.046 -352.357 -352.482 -352.177 -352.186 -352.03 -352.326 -352.343 -352.182 -352.243 -352.153 -352.256 -352.303 -352.384 -352.175 -352.397 -352.059 -351.706 -352.393 -352.107 -351.888 -352.281 -352.288 -352.364 -352.34 -351.57 -352.233 -352.372 -352.271 -352.289 -351.571 -351.924 -352.174 -352.255 -352.433 -352.187 -352.354 -352.327 -352.099 -352.436 -352.332 -352.04 -352.201 -352.114 -352.234 -352.283 -352.329 -352.132 -352.144 -352.313 -352.35 -351.942 -352.269 -352.253 -352.289 -352.276 -352.31 -352.272 -352.285 -352.165 -352.23 -351.957 -352.105 -352.022 -352.142 -352.315 -352.388 -352.332 -352.116 -352.529 -352.479 -352.091 -352.118 -351.93 -352.122 -351.402 -351.717 -351.874 -352.009 -351.811 -352.16 -352.097 -352.251 -351.919 -352.065 -352.073 -351.629 -351.083 -352.287 -351.947 -351.304 -351.419 -352.093 -351.743 -351.966 -352.343 -351.659 -351.739 -352.006 -351.791 -351.656 -352.709 -352.013 -351.561 -352.016 -351.985 -351.741 -352.476 -352.301 -351.944 -352.464 -352.336 -352.307 -352.252 -352.237 -352.364 -352.342 -352.29 -352.22 -352.483 -352.297 -352.211 -351.861 -352.286 -352.261 -352.146 -351.879 -352.165 -352.097 -352.474 -352.29 -352.06 -352.2 -351.988 -352.191 -352.259 -352.044 -352.118 -352.051 -352.062 -352.429 -352.335 -352.29 -352.399 -352.12 -351.879 -352.341 -351.966 -351.89 -352.347 -352.253 -352.373 -352.327 -351.675 -352.201 -352.447 -352.238 -352.214 -351.64 -351.98 -352.17 -352.353 -352.467 -352.212 -352.396 -352.232 -352.108 -352.258 -352.122 -351.878 -352.044 -351.979 -352.267 -352.006 -352.141 -352.219 -352.007 -352.234 -351.946 -351.948 -352.306 -352.235 -352.27 -352.299 -352.355 -352.265 -352.287 -352.209 -352.25 -352.01 -352.122 -352.129 -352.232 -352.382 -352.247 -352.233 -352.304 -352.461 -352.402 -352.002 -352.14 -351.91 -352.14 -350.99 -351.534 -351.34 -351.889 -351.574 -352.344 -352.176 -351.844 -351.681 -351.881 -351.851 -351.627 -351.036 -352.137 -352.15 -351.36 -351.532 -352.046 -352.106 -351.833 -352.164 -351.964 -351.981 -351.856 -351.665 -352.466 -352.764 -352.527 -351.671 -351.92 -351.986 -351.786 -352.11 -352.233 -352.072 -352.397 -352.335 -352.24 -352.235 -352.307 -352.527 -352.278 -352.319 -352.364 -352.305 -352.396 -352.144 -351.861 -352.273 -352.305 -352.167 -351.879 -352.196 -352.232 -352.462 -352.124 -352.242 -352.222 -352.161 -352.206 -352.22 -352.141 -352.275 -352.148 -351.633 -352.14 -352.361 -352.269 -352.324 -352.082 -352.036 -352.41 -351.935 -351.88 -352.32 -352.335 -352.298 -352.289 -351.728 -352.215 -352.483 -352.312 -352.165 -351.636 -352.016 -352.251 -352.453 -352.401 -352.26 -352.415 -352.346 -352.423 -352.34 -352.172 -352.018 -352.195 -352.158 -352.312 -352.115 -352.01 -352.249 -352.039 -352.318 -351.964 -352.073 -352.293 -352.176 -352.304 -352.268 -352.326 -352.19 -352.214 -352.16 -352.255 -352.01 -352.086 -352.126 -352.297 -352.368 -352.179 -352.071 -352.04 -351.998 -352.102 -351.94 -351.964 -351.948 -352.072 -350.797 -351.522 -351.392 -351.78 -351.636 -352.39 -352.153 -351.969 -351.854 -352.093 -351.879 -351.685 -350.853 -352.386 -352.289 -351.269 -351.206 -351.825 -351.924 -352.082 -352.051 -351.79 -351.858 -351.904 -351.718 -352.006 -351.703 -351.87 -351.545 -351.332 -351.959 -351.679 -352.165 -352.227 -352.164 -352.353 -352.362 -352.211 -352.261 -352.371 -352.501 -352.112 -352.404 -352.304 -352.472 -352.329 -352.23 -351.833 -352.228 -352.243 -352.153 -351.969 -352.232 -352.286 -352.415 -352.056 -352.342 -352.15 -352.163 -352.187 -352.18 -352.144 -352.208 -351.99 -351.778 -352.212 -352.392 -352.21 -352.231 -352.026 -352.126 -352.369 -351.819 -351.971 -352.4 -352.335 -352.325 -352.281 -351.857 -352.096 -352.341 -352.27 -352.138 -351.752 -352.082 -352.284 -352.435 -352.174 -352.181 -352.261 -352.199 -352.3 -352.159 -352.004 -351.991 -352.13 -352.148 -352.278 -352.102 -351.972 -352.232 -352.009 -352.268 -351.932 -352.181 -352.181 -352.221 -352.302 -352.211 -352.302 -352.271 -352.244 -352.066 -352.237 -352.02 -352.1 -352.102 -352.218 -352.114 -352.113 -351.994 -351.944 -351.951 -352.051 -352.154 -352.141 -351.958 -352.173 -350.826 -351.53 -351.475 -351.752 -351.817 -352.296 -351.885 -351.857 -351.912 -352.095 -351.977 -351.723 -350.744 -352.317 -352.462 -351.665 -350.893 -351.569 -351.617 -351.804 -352.261 -352.023 -351.495 -351.805 -351.922 -351.729 -351.562 -351.436 -351.604 -351.983 -351.916 -351.892 -352.196 -352.236 -352.224 -352.363 -352.367 -352.188 -352.305 -352.348 -352.435 -352.224 -352.366 -352.253 -352.454 -352.363 -352.309 -351.8 -352.204 -352.252 -352.063 -351.94 -352.305 -352.323 -352.252 -352.119 -352.259 -352.04 -352.141 -352.119 -352.164 -352.162 -352.198 -352.046 -351.869 -352.243 -352.433 -352.195 -352.205 -351.99 -352.13 -352.228 -351.748 -352.124 -352.474 -352.232 -352.367 -352.296 -351.894 -351.979 -352.33 -352.223 -352.043 -351.713 -352.184 -352.342 -352.361 -352.04 -352.046 -352.058 -351.995 -352.027 -351.901 -351.846 -352.027 -352.068 -352.163 -352.245 -352.071 -352.001 -352.217 -351.991 -352.279 -351.936 -352.154 -352.161 -352.33 -352.289 -352.218 -352.336 -352.337 -352.268 -352.041 -352.175 -352.033 -352.118 -352.171 -352.244 -352.095 -352.051 -352.006 -352.002 -351.98 -352.067 -352.022 -351.992 -351.995 -352.138 -350.88 -351.574 -351.567 -351.754 -351.926 -352.239 -351.952 -351.945 -351.896 -352.093 -351.753 -351.64 -350.845 -351.957 -352.412 -352.144 -351.277 -351.288 -351.789 -351.415 -351.996 -352.417 -351.853 -351.736 -351.914 -351.819 -351.878 -351.864 -351.695 -351.479 -351.918 -351.766 -352.102 -352.26 -352.284 -352.381 -352.336 -352.165 -352.367 -352.327 -352.435 -352.322 -352.249 -352.451 -352.31 -352.407 -352.315 -351.797 -352.188 -352.264 -352.086 -352.072 -352.309 -352.309 -352.114 -352.145 -352.168 -352.007 -352.194 -352.181 -352.266 -352.302 -352.222 -352.167 -351.928 -352.285 -352.401 -352.177 -352.208 -352.032 -352.23 -352.213 -351.84 -352.236 -352.508 -352.182 -352.294 -352.334 -351.887 -351.938 -352.39 -352.3 -352.052 -351.833 -352.247 -352.325 -352.245 -351.989 -352.018 -352.031 -351.986 -352.027 -352.014 -352.112 -352.364 -352.49 -352.135 -352.232 -352.057 -352.081 -352.248 -352.03 -352.284 -351.986 -352.223 -352.264 -352.473 -352.218 -352.269 -352.351 -352.268 -352.277 -352.066 -352.228 -351.994 -352.097 -352.119 -352.233 -352.058 -352.055 -351.964 -351.994 -351.98 -352.089 -352.089 -351.982 -352.034 -352.257 -350.934 -351.617 -351.625 -351.805 -352.058 -352.242 -351.931 -351.874 -351.992 -352.298 -351.672 -351.579 -350.784 -351.437 -352.221 -352.35 -351.802 -351.304 -351.759 -351.655 -351.391 -352.208 -351.928 -351.938 -351.939 -351.68 -351.557 -351.574 -352.066 -352.023 -351.714 -351.883 -352.179 -352.238 -352.276 -352.364 -352.323 -352.195 -352.447 -352.34 -352.458 -352.328 -352.127 -352.426 -352.453 -352.44 -352.342 -351.789 -352.195 -352.222 -351.99 -352.091 -352.4 -352.214 -352.068 -352.122 -352.117 -352.101 -352.27 -352.165 -352.244 -352.154 -351.94 -351.884 -351.957 -352.305 -352.312 -352.122 -352.146 -352.021 -352.262 -352.151 -351.859 -352.333 -352.652 -352.184 -352.229 -352.34 -352.028 -351.824 -352.336 -352.288 -351.956 -351.869 -352.308 -352.322 -352.253 -351.95 -352.025 -352.069 -352.051 -352.131 -352.129 -352.294 -352.379 -352.371 -352.196 -352.187 -352.029 -352.121 -352.235 -352.079 -352.275 -351.941 -352.191 -352.259 -352.536 -352.102 -352.252 -352.282 -352.222 -352.262 -352.072 -352.326 -352.04 -352.086 -352.108 -352.202 -352.021 -352.044 -351.949 -351.883 -351.838 -351.995 -352.054 -352.164 -352.105 -352.252 -351.073 -351.691 -351.625 -351.844 -352.093 -352.281 -351.98 -351.834 -351.982 -352.035 -351.657 -351.577 -350.896 -351.13 -352.137 -352.336 -352.028 -351.483 -351.548 -351.904 -351.271 -351.783 -351.712 -351.736 -352.019 -351.756 -351.456 -351.344 -351.326 -352.041 -351.712 -351.721 -352.12 -352.26 -352.272 -352.356 -352.327 -352.237 -352.5 -352.352 -352.461 -352.363 -352.135 -352.262 -352.456 -352.504 -352.354 -351.844 -352.221 -352.215 -352.1 -352.177 -352.308 -352.146 -352.017 -352.186 -352.136 -352.172 -352.249 -352.116 -352.18 -351.928 -351.699 -351.674 -351.987 -352.317 -352.217 -352.068 -352.082 -351.99 -352.172 -352.009 -351.818 -352.405 -352.74 -352.194 -352.244 -352.326 -352.115 -351.671 -352.287 -352.242 -351.946 -351.904 -352.335 -352.294 -352.178 -351.964 -352.055 -352.031 -352.028 -352.092 -352.09 -352.22 -352.113 -351.912 -352.211 -352.166 -352.006 -352.103 -352.132 -352.029 -352.242 -352.003 -352.223 -352.337 -352.468 -352.167 -352.259 -352.24 -352.193 -352.168 -352.096 -352.341 -352.105 -352.067 -352.064 -352.151 -352.016 -352.045 -351.991 -351.918 -351.818 -351.821 -351.835 -351.957 -351.947 -352.004 -351.148 -351.774 -351.646 -351.882 -352.014 -352.081 -351.83 -351.968 -352.227 -352.143 -351.696 -351.752 -351.234 -351.027 -351.987 -352.254 -352.018 -351.708 -351.525 -351.91 -351.576 -351.626 -351.792 -351.561 -351.93 -352.047 -351.869 -351.784 -351.44 -351.122 -351.114 -351.489 -352.146 -352.254 -352.243 -352.347 -352.295 -352.218 -352.492 -352.312 -352.408 -352.401 -352.231 -352.2 -352.295 -352.461 -352.334 -351.91 -352.174 -352.172 -352.027 -352.252 -352.332 -352.04 -352.04 -352.263 -352.079 -352.255 -352.131 -352.105 -352.07 -351.843 -351.629 -351.616 -351.995 -352.354 -352.18 -352.07 -352.068 -352.014 -352.137 -351.957 -351.947 -352.531 -352.706 -352.16 -352.24 -352.339 -352.018 -351.633 -352.317 -352.215 -351.913 -352.032 -352.413 -352.243 -352.121 -351.987 -352.031 -351.987 -351.958 -351.937 -351.958 -352.078 -351.863 -351.674 -352.187 -352.175 -352.026 -352.108 -352.064 -352.021 -352.184 -352.012 -352.311 -352.469 -352.383 -352.267 -352.213 -352.268 -352.192 -352.142 -352.191 -352.375 -352.171 -352.13 -352.108 -352.154 -351.994 -352.024 -351.995 -351.942 -351.908 -351.78 -351.636 -351.818 -351.751 -351.807 -351.156 -351.763 -351.69 -351.952 -352.064 -352.094 -351.727 -351.708 -352.119 -352.153 -351.803 -351.839 -351.276 -350.886 -351.687 -351.999 -351.999 -351.982 -351.627 -351.853 -351.702 -351.584 -351.72 -351.523 -351.593 -351.821 -351.991 -351.95 -351.649 -351.431 -351.014 -351.554 -352.206 -352.259 -352.244 -352.356 -352.302 -352.194 -352.468 -352.293 -352.357 -352.418 -352.323 -352.215 -352.176 -352.335 -352.293 -351.98 -352.131 -352.166 -352.097 -352.194 -352.206 -351.953 -352.256 -352.236 -352.075 -352.238 -352.064 -352.095 -351.928 -351.817 -351.64 -351.618 -352.089 -352.381 -352.171 -352.109 -352.089 -352.041 -352.161 -351.972 -352.1 -352.598 -352.643 -352.148 -352.185 -352.325 -351.89 -351.621 -352.345 -352.15 -351.871 -352.03 -352.378 -352.204 -352.143 -351.989 -352.04 -351.945 -351.877 -351.893 -351.829 -351.97 -351.718 -351.606 -352.261 -352.19 -352.043 -352.128 -352.067 -352.05 -352.194 -351.999 -352.354 -352.394 -352.308 -352.217 -352.046 -352.232 -352.205 -352.078 -352.107 -352.319 -352.186 -352.179 -352.188 -352.213 -352.047 -352.036 -351.972 -351.879 -351.846 -351.764 -351.558 -351.794 -351.678 -351.701 -351.141 -351.747 -351.725 -351.99 -352.07 -352.185 -351.841 -351.666 -352.082 -351.696 -351.823 -351.649 -351.16 -350.8 -351.48 -351.73 -352.069 -352.207 -351.875 -352.009 -351.822 -351.759 -351.625 -351.606 -351.437 -351.418 -351.582 -351.704 -351.626 -351.893 -351.442 -351.625 -352.16 -352.299 -352.271 -352.36 -352.31 -352.168 -352.427 -352.35 -352.364 -352.424 -352.409 -352.282 -352.198 -352.254 -352.257 -352.105 -352.234 -352.166 -352.144 -352.327 -352.178 -352.05 -352.338 -352.059 -352.168 -352.199 -352.015 -351.986 -351.818 -351.766 -351.657 -351.622 -352.047 -352.39 -352.174 -352.149 -352.115 -352.07 -352.152 -352.025 -352.193 -352.564 -352.488 -352.077 -352.174 -352.291 -351.8 -351.611 -352.362 -352.147 -351.906 -352.184 -352.438 -352.141 -352.077 -351.969 -352.05 -351.897 -351.812 -351.842 -351.728 -351.924 -351.663 -351.592 -352.177 -352.167 -352.067 -352.168 -352.121 -352.074 -352.156 -351.994 -352.317 -352.331 -352.227 -352.147 -351.972 -352.15 -352.15 -351.945 -352.041 -352.227 -352.111 -352.133 -352.218 -352.221 -352.075 -352.036 -351.974 -351.901 -351.746 -351.664 -351.453 -351.756 -351.676 -351.652 -351.071 -351.728 -351.739 -352.037 -352.04 -352.1 -351.72 -351.661 -352.206 -351.848 -351.959 -351.547 -351.262 -351.013 -351.443 -351.7 -351.908 -352.095 -352.024 -352.266 -352.062 -352.12 -351.887 -351.882 -351.777 -351.576 -351.488 -351.635 -351.645 -352.049 -351.699 -351.644 -352.23 -352.29 -352.224 -352.31 -352.274 -352.133 -352.373 -352.393 -352.318 -352.412 -352.455 -352.414 -352.351 -352.268 -352.265 -352.181 -352.224 -352.145 -352.114 -352.201 -352.051 -352.175 -352.295 -352.103 -352.234 -352.065 -351.863 -351.9 -351.718 -351.7 -351.661 -351.624 -352.05 -352.387 -352.16 -352.139 -352.1 -352.088 -352.146 -352.069 -352.28 -352.577 -352.366 -351.971 -352.102 -352.248 -351.811 -351.753 -352.408 -352.109 -351.924 -352.253 -352.346 -352.045 -352.095 -352.027 -352.031 -351.874 -351.758 -351.635 -351.643 -351.889 -351.636 -351.587 -352.162 -352.149 -352.062 -352.197 -352.143 -352.102 -352.137 -351.978 -352.217 -352.344 -352.043 -352.062 -351.999 -352.1 -352.087 -351.933 -352.158 -352.236 -352.067 -352.123 -352.235 -352.211 -352.082 -352.064 -351.994 -351.955 -351.815 -351.631 -351.404 -351.691 -351.659 -351.626 -351 -351.608 -351.663 -352.028 -352.055 -352.078 -351.691 -351.555 -351.864 -352.074 -352.043 -351.675 -351.471 -351.322 -351.511 -351.831 -351.903 -351.827 -351.78 -352.138 -351.957 -352.125 -352.057 -351.935 -352.056 -351.822 -351.763 -351.621 -351.651 -352.056 -351.75 -351.65 -352.061 -352.23 -352.227 -352.323 -352.318 -352.139 -352.311 -352.383 -352.274 -352.397 -352.453 -352.537 -352.503 -352.328 -352.283 -352.165 -352.136 -352.08 -352.214 -352.288 -352.12 -352.225 -352.231 -352.117 -352.157 -351.922 -351.729 -351.819 -351.666 -351.662 -351.662 -351.63 -352.081 -352.368 -352.132 -352.092 -352.071 -352.053 -352.174 -352.083 -352.338 -352.596 -352.368 -351.997 -352.039 -352.169 -351.911 -351.971 -352.45 -352.014 -352.001 -352.348 -352.285 -352.021 -352.129 -352.017 -352.046 -351.848 -351.701 -351.493 -351.62 -351.839 -351.607 -351.593 -352.147 -352.119 -352.019 -352.163 -352.141 -352.083 -352.153 -352 -352.176 -352.394 -351.988 -351.945 -352 -352.076 -352.078 -352.014 -352.242 -352.194 -352.02 -352.131 -352.25 -352.19 -352.085 -352.079 -352.024 -351.955 -351.932 -351.777 -351.546 -351.694 -351.617 -351.621 -350.915 -351.562 -351.587 -351.916 -352.026 -352.123 -351.917 -351.73 -351.534 -351.867 -351.918 -351.775 -351.59 -351.401 -351.599 -351.88 -352.387 -352.097 -351.852 -352.074 -351.913 -351.994 -352.054 -351.848 -352.018 -351.848 -351.88 -351.553 -351.697 -352.023 -351.727 -351.657 -352.159 -352.257 -352.253 -352.325 -352.322 -352.18 -352.259 -352.388 -352.375 -352.421 -352.502 -352.566 -352.551 -352.375 -352.263 -352.097 -352.073 -352.197 -352.228 -352.207 -352.148 -352.318 -352.183 -352.068 -351.947 -351.712 -351.742 -351.711 -351.662 -351.655 -351.664 -351.636 -352.021 -352.347 -352.13 -352.073 -352.05 -352.009 -352.154 -352.117 -352.329 -352.518 -352.366 -352.02 -352.058 -352.145 -351.992 -352.081 -352.389 -351.978 -352.117 -352.423 -352.226 -352.04 -352.14 -352.001 -351.996 -351.772 -351.661 -351.538 -351.666 -351.808 -351.589 -351.601 -352.128 -352.12 -351.996 -352.109 -352.143 -352.043 -352.118 -352.035 -352.108 -352.366 -352.074 -351.971 -352.028 -352.067 -352.107 -352.138 -352.39 -352.155 -352.017 -352.145 -352.258 -352.187 -352.085 -352.078 -352.037 -351.954 -351.957 -352.005 -351.774 -351.774 -351.595 -351.631 -350.868 -351.585 -351.581 -351.836 -352.022 -352.144 -352.14 -351.999 -351.598 -351.723 -351.792 -351.766 -351.623 -351.326 -351.57 -351.851 -352.231 -352.146 -351.94 -352.171 -352.03 -351.998 -352.149 -351.94 -352.019 -351.898 -351.918 -351.704 -351.788 -351.968 -351.691 -351.665 -352.169 -352.284 -352.235 -352.308 -352.321 -352.214 -352.206 -352.357 -352.417 -352.467 -352.515 -352.482 -352.527 -352.377 -352.248 -352.073 -352.016 -352.258 -352.23 -352.228 -352.116 -352.176 -351.903 -351.855 -351.857 -351.705 -351.752 -351.641 -351.677 -351.667 -351.67 -351.642 -352.053 -352.348 -352.158 -352.079 -352.037 -352.001 -352.118 -352.149 -352.259 -352.459 -352.319 -351.984 -352.004 -352.171 -352.075 -352.116 -352.275 -351.957 -352.236 -352.433 -352.057 -352.028 -352.105 -351.985 -351.935 -351.73 -351.677 -351.662 -351.725 -351.803 -351.604 -351.619 -352.232 -352.141 -352.002 -352.055 -352.13 -352.038 -352.1 -352.048 -352.012 -352.329 -352.018 -351.988 -352.098 -352.074 -352.147 -352.237 -352.414 -352.125 -352.022 -352.17 -352.245 -352.193 -352.072 -352.085 -352.056 -351.967 -351.961 -352.167 -351.967 -351.877 -351.636 -351.656 -350.949 -351.501 -351.584 -351.771 -352.01 -352.121 -352.206 -352.102 -351.896 -351.84 -351.75 -351.778 -351.675 -351.371 -351.505 -351.878 -351.98 -351.964 -351.739 -352.065 -352.001 -351.866 -352.144 -351.981 -352.13 -351.953 -352.064 -351.879 -351.813 -351.906 -351.671 -351.674 -352.067 -352.259 -352.207 -352.321 -352.365 -352.197 -352.134 -352.243 -352.311 -352.436 -352.396 -352.378 -352.487 -352.36 -352.269 -352.129 -352.128 -352.33 -352.224 -352.158 -352.172 -352.066 -351.867 -351.818 -351.715 -351.731 -351.743 -351.63 -351.703 -351.674 -351.675 -351.647 -352.002 -352.33 -352.171 -352.081 -352.049 -351.99 -352.144 -352.132 -352.216 -352.466 -352.339 -352.011 -351.95 -352.174 -352.137 -352.136 -352.186 -351.982 -352.326 -352.357 -351.982 -352.058 -352.058 -351.865 -351.838 -351.712 -351.724 -351.764 -351.767 -351.797 -351.631 -351.635 -352.245 -352.149 -352.017 -352.012 -352.139 -352.056 -352.123 -352.059 -352.004 -352.336 -352.065 -351.881 -352.076 -352.121 -352.165 -352.266 -352.365 -352.092 -352.054 -352.2 -352.224 -352.199 -352.057 -352.065 -352.084 -351.968 -351.973 -352.2 -352.103 -351.959 -351.71 -351.673 -351.065 -351.464 -351.643 -351.721 -351.94 -352.101 -352.153 -352.113 -352.125 -351.94 -351.78 -351.934 -351.816 -351.565 -351.52 -351.757 -352.334 -352.235 -351.969 -352.07 -352.126 -351.832 -352.075 -351.896 -352.146 -351.942 -352.139 -351.89 -351.812 -351.85 -351.662 -351.68 -352.139 -352.235 -352.202 -352.299 -352.347 -352.242 -352.119 -352.156 -352.209 -352.3 -352.268 -352.311 -352.417 -352.337 -352.272 -352.173 -352.193 -352.36 -352.28 -352.148 -352.084 -351.942 -351.743 -351.82 -351.783 -351.736 -351.681 -351.662 -351.747 -351.678 -351.683 -351.654 -351.955 -352.318 -352.188 -352.096 -352.067 -351.98 -352.129 -352.135 -352.221 -352.416 -352.367 -352.077 -351.975 -352.211 -352.171 -352.15 -352.154 -352.043 -352.382 -352.235 -351.916 -352.021 -351.934 -351.739 -351.751 -351.675 -351.737 -351.809 -351.8 -351.788 -351.661 -351.655 -352.255 -352.201 -352.06 -352.03 -352.156 -352.056 -352.11 -352.088 -352.017 -352.278 -352.171 -351.942 -352.037 -352.184 -352.176 -352.288 -352.335 -352.055 -352.11 -352.248 -352.214 -352.216 -352.076 -352.051 -352.113 -351.97 -351.969 -352.142 -352.195 -352.052 -351.797 -351.69 -351.077 -351.471 -351.675 -351.729 -351.86 -352.055 -352.061 -352.101 -352.094 -351.914 -351.896 -352.071 -351.977 -351.804 -351.553 -351.686 -352.06 -352.05 -352.078 -352.076 -352.292 -351.976 -352.111 -351.89 -352.087 -351.942 -352.086 -351.888 -351.849 -351.816 -351.672 -351.691 -352.043 -352.28 -352.239 -352.268 -352.346 -352.338 -352.173 -352.169 -352.169 -352.18 -352.216 -352.259 -352.343 -352.295 -352.273 -352.172 -352.138 -352.323 -352.262 -352.256 -352.183 -352.059 -351.804 -351.727 -351.734 -351.786 -351.663 -351.687 -351.784 -351.677 -351.691 -351.66 -351.904 -352.309 -352.222 -352.111 -352.09 -352 -352.085 -352.159 -352.189 -352.333 -352.298 -352.078 -351.971 -352.223 -352.211 -352.163 -352.156 -352.059 -352.402 -352.181 -351.892 -351.961 -351.81 -351.623 -351.694 -351.653 -351.701 -351.784 -351.815 -351.783 -351.691 -351.67 -352.238 -352.191 -352.085 -352.028 -352.132 -352.074 -352.096 -352.107 -351.977 -352.197 -352.13 -351.975 -352.067 -352.204 -352.148 -352.264 -352.242 -352.023 -352.125 -352.267 -352.2 -352.215 -352.068 -352 -352.113 -351.985 -351.954 -352.036 -352.208 -352.144 -351.881 -351.711 -351.068 -351.47 -351.666 -351.702 -351.796 -351.979 -352.004 -352.003 -351.917 -351.87 -351.972 -352.013 -352.039 -351.982 -351.641 -351.665 -351.514 -351.633 -351.81 -351.92 -352.23 -352.062 -352.16 -351.942 -352.049 -351.968 -352.01 -351.953 -351.889 -351.797 -351.681 -351.703 -352.106 -352.325 -352.253 -352.244 -352.34 -352.363 -352.281 -352.258 -352.199 -352.137 -352.212 -352.245 -352.305 -352.287 -352.299 -352.199 -352.177 -352.347 -352.333 -352.317 -352.368 -352.3 -352.068 -351.901 -351.738 -351.8 -351.689 -351.713 -351.801 -351.682 -351.7 -351.669 -351.878 -352.295 -352.258 -352.137 -352.14 -352.022 -352.099 -352.13 -352.181 -352.307 -352.322 -352.103 -351.921 -352.147 -352.25 -352.168 -352.172 -352.039 -352.41 -352.185 -351.919 -351.937 -351.766 -351.572 -351.65 -351.642 -351.66 -351.726 -351.801 -351.783 -351.726 -351.691 -352.177 -352.169 -352.085 -352.01 -352.121 -352.098 -352.106 -352.122 -351.992 -352.145 -352.187 -351.89 -352.012 -352.237 -352.126 -352.154 -352.11 -351.975 -352.161 -352.272 -352.182 -352.19 -352.03 -351.909 -352.065 -351.996 -351.949 -351.943 -352.149 -352.196 -351.968 -351.749 -351.059 -351.451 -351.703 -351.679 -351.798 -351.936 -351.957 -351.823 -351.817 -351.862 -351.921 -351.898 -351.946 -352.033 -351.807 -351.557 -351.428 -351.39 -351.486 -351.716 -352.057 -352.062 -352.155 -352 -352.045 -351.989 -351.997 -352.042 -351.909 -351.788 -351.686 -351.712 -352.129 -352.304 -352.231 -352.253 -352.318 -352.378 -352.384 -352.316 -352.255 -352.123 -352.237 -352.286 -352.267 -352.292 -352.307 -352.226 -352.226 -352.276 -352.359 -352.297 -352.403 -352.412 -352.261 -352.169 -351.842 -351.813 -351.711 -351.745 -351.798 -351.688 -351.708 -351.679 -351.931 -352.294 -352.294 -352.165 -352.161 -352.027 -352.084 -352.119 -352.206 -352.28 -352.363 -352.216 -351.932 -352.035 -352.242 -352.158 -352.18 -352.036 -352.413 -352.215 -351.955 -351.951 -351.796 -351.588 -351.633 -351.642 -351.643 -351.673 -351.752 -351.779 -351.758 -351.715 -352.125 -352.156 -352.088 -352.006 -352.129 -352.099 -352.093 -352.131 -352.022 -352.099 -352.248 -351.998 -351.942 -352.221 -352.131 -352.066 -352.007 -351.897 -352.166 -352.293 -352.179 -352.175 -352.016 -351.843 -351.99 -351.979 -351.956 -351.909 -352.049 -352.18 -352.024 -351.79 -350.953 -351.393 -351.67 -351.656 -351.798 -351.906 -351.859 -351.705 -351.844 -351.887 -351.835 -351.863 -351.813 -351.994 -351.93 -351.612 -351.549 -351.297 -351.374 -351.578 -351.918 -352.041 -352.142 -352.041 -352.05 -352.02 -352.039 -352.096 -351.917 -351.807 -351.722 -351.713 -352.048 -352.311 -352.23 -352.262 -352.312 -352.376 -352.386 -352.314 -352.296 -352.149 -352.276 -352.345 -352.235 -352.244 -352.297 -352.229 -352.193 -352.157 -352.321 -352.268 -352.352 -352.407 -352.31 -352.334 -351.955 -351.84 -351.718 -351.775 -351.793 -351.694 -351.719 -351.686 -351.935 -352.269 -352.3 -352.163 -352.155 -352.044 -352.058 -352.129 -352.197 -352.21 -352.269 -352.291 -352.05 -351.969 -352.201 -352.151 -352.168 -352.046 -352.397 -352.259 -352 -351.987 -351.843 -351.634 -351.648 -351.658 -351.655 -351.655 -351.696 -351.77 -351.785 -351.741 -352.077 -352.101 -352.061 -351.975 -352.111 -352.111 -352.067 -352.12 -352.03 -352.002 -352.175 -352.092 -351.946 -352.178 -352.145 -352.051 -351.958 -351.866 -352.11 -352.29 -352.187 -352.182 -352.029 -351.832 -351.927 -351.955 -351.978 -351.928 -351.957 -352.13 -352.054 -351.833 -350.905 -351.436 -351.664 -351.651 -351.777 -351.9 -351.769 -351.724 -351.899 -351.907 -351.817 -351.857 -351.756 -351.949 -351.992 -351.821 -351.689 -351.334 -351.361 -351.528 -351.836 -352.034 -352.144 -352.064 -352.087 -352.066 -352.102 -352.106 -351.899 -351.846 -351.759 -351.708 -352.111 -352.359 -352.237 -352.259 -352.292 -352.343 -352.356 -352.32 -352.327 -352.198 -352.283 -352.378 -352.262 -352.185 -352.27 -352.267 -352.254 -352.179 -352.315 -352.257 -352.305 -352.38 -352.3 -352.398 -352.057 -351.886 -351.725 -351.794 -351.786 -351.694 -351.723 -351.69 -351.944 -352.263 -352.309 -352.162 -352.178 -352.059 -352.051 -352.084 -352.228 -352.212 -352.23 -352.285 -352.157 -351.975 -352.152 -352.154 -352.157 -352.068 -352.384 -352.303 -352.038 -352.03 -351.89 -351.687 -351.68 -351.673 -351.67 -351.667 -351.658 -351.756 -351.796 -351.765 -351.996 -352.088 -352.059 -351.97 -352.1 -352.106 -352.059 -352.128 -352.099 -351.977 -352.055 -352.057 -351.921 -352.152 -352.199 -352.084 -351.959 -351.883 -352.067 -352.266 -352.188 -352.193 -352.054 -351.854 -351.887 -351.934 -351.975 -351.936 -351.891 -352.094 -352.063 -351.865 -350.971 -351.408 -351.702 -351.705 -351.791 -351.924 -351.719 -351.811 -351.91 -351.906 -351.845 -351.826 -351.727 -351.864 -352.007 -351.971 -351.797 -351.428 -351.296 -351.532 -351.776 -352.02 -352.141 -352.09 -352.128 -352.103 -352.143 -352.081 -351.859 -351.85 -351.735 -351.703 -352.045 -352.307 -352.208 -352.274 -352.291 -352.322 -352.338 -352.318 -352.33 -352.19 -352.281 -352.356 -352.31 -352.2 -352.24 -352.279 -352.353 -352.232 -352.296 -352.25 -352.28 -352.359 -352.282 -352.412 -352.135 -351.93 -351.738 -351.806 -351.776 -351.693 -351.727 -351.691 -351.935 -352.244 -352.306 -352.159 -352.186 -352.053 -352.036 -352.065 -352.262 -352.277 -352.264 -352.302 -352.219 -352.015 -352.117 -352.152 -352.148 -352.089 -352.366 -352.333 -352.063 -352.058 -351.922 -351.731 -351.711 -351.688 -351.683 -351.697 -351.646 -351.746 -351.802 -351.79 -351.952 -352.071 -352.062 -351.967 -352.092 -352.103 -352.06 -352.127 -352.179 -352.105 -352.037 -352.074 -351.862 -352.042 -352.214 -352.145 -351.998 -351.909 -352.025 -352.239 -352.193 -352.195 -352.081 -351.884 -351.87 -351.907 -351.944 -351.937 -351.866 -352.085 -352.061 -351.892 -350.993 -351.3 -351.685 -351.705 -351.784 -351.869 -351.716 -351.881 -351.891 -351.891 -351.836 -351.801 -351.717 -351.787 -351.954 -351.982 -351.88 -351.518 -351.235 -351.522 -351.729 -351.991 -352.123 -352.118 -352.145 -352.13 -352.162 -352.059 -351.857 -351.862 -351.761 -351.716 -352.154 -352.345 -352.22 -352.296 -352.29 -352.287 -352.297 -352.306 -352.297 -352.162 -352.266 -352.303 -352.281 -352.248 -352.204 -352.191 -352.324 -352.202 -352.257 -352.261 -352.272 -352.332 -352.27 -352.41 -352.19 -351.964 -351.757 -351.814 -351.772 -351.687 -351.725 -351.683 -351.953 -352.211 -352.303 -352.185 -352.179 -352.067 -352.024 -352.055 -352.184 -352.27 -352.273 -352.358 -352.324 -352.062 -352.101 -352.153 -352.135 -352.086 -352.328 -352.36 -352.09 -352.076 -351.951 -351.77 -351.745 -351.708 -351.692 -351.724 -351.648 -351.743 -351.799 -351.808 -351.979 -352.032 -352.058 -351.974 -352.077 -352.112 -352.047 -352.095 -352.198 -352.206 -352.149 -352.135 -351.925 -351.931 -352.156 -352.184 -352.045 -351.93 -351.967 -352.212 -352.192 -352.181 -352.097 -351.911 -351.857 -351.874 -351.914 -351.938 -351.86 -352.081 -352.045 -351.907 -350.999 -351.316 -351.704 -351.658 -351.758 -351.779 -351.807 -351.892 -351.87 -351.854 -351.811 -351.847 -351.795 -351.847 -351.862 -351.99 -351.986 -351.538 -351.228 -351.501 -351.694 -351.954 -352.095 -352.126 -352.13 -352.138 -352.156 -352.025 -351.861 -351.917 -351.882 -351.736 -352.155 -352.362 -352.239 -352.31 -352.265 -352.255 -352.3 -352.288 -352.245 -352.13 -352.208 -352.308 -352.197 -352.218 -352.182 -352.131 -352.258 -352.19 -352.262 -352.283 -352.287 -352.336 -352.282 -352.41 -352.229 -351.983 -351.773 -351.81 -351.785 -351.686 -351.723 -351.67 -351.963 -352.217 -352.32 -352.206 -352.175 -352.075 -352.003 -351.994 -352.061 -352.188 -352.25 -352.345 -352.437 -352.155 -352.093 -352.17 -352.144 -352.087 -352.287 -352.377 -352.131 -352.108 -351.974 -351.796 -351.771 -351.722 -351.696 -351.739 -351.653 -351.741 -351.794 -351.822 -351.897 -352.026 -352.071 -352.001 -352.079 -352.117 -352.048 -352.066 -352.141 -352.177 -352.182 -352.242 -352.108 -351.932 -352.09 -352.198 -352.102 -351.961 -351.905 -352.19 -352.209 -352.176 -352.102 -351.938 -351.85 -351.862 -351.905 -351.935 -351.863 -352.083 -352.03 -351.916 -350.998 -351.307 -351.728 -351.665 -351.763 -351.791 -351.901 -351.857 -351.841 -351.82 -351.842 -351.918 -351.914 -351.954 -351.799 -352.092 -352.019 -351.491 -351.282 -351.517 -351.673 -351.929 -352.075 -352.117 -352.108 -352.144 -352.146 -351.991 -351.839 -351.935 -351.954 -351.728 -352.024 -352.249 -352.195 -352.305 -352.271 -352.281 -352.292 -352.213 -352.198 -352.053 -352.206 -352.305 -352.138 -352.16 -352.216 -352.191 -352.278 -352.236 -352.308 -352.306 -352.309 -352.341 -352.282 -352.399 -352.252 -351.994 -351.787 -351.8 -351.787 -351.68 -351.72 -351.654 -351.978 -352.193 -352.317 -352.195 -352.182 -352.078 -351.988 -351.938 -351.975 -352.069 -352.176 -352.255 -352.421 -352.258 -352.101 -352.173 -352.157 -352.096 -352.246 -352.368 -352.151 -352.128 -351.991 -351.816 -351.792 -351.735 -351.692 -351.742 -351.656 -351.741 -351.787 -351.817 -351.864 -351.987 -352.06 -351.986 -352.073 -352.122 -352.041 -352.033 -352.064 -352.106 -352.104 -352.212 -352.228 -352 -352.032 -352.197 -352.137 -351.987 -351.851 -352.145 -352.221 -352.191 -352.113 -351.967 -351.851 -351.864 -351.892 -351.921 -351.863 -352.076 -352.009 -351.908 -350.869 -351.237 -351.683 -351.7 -351.814 -351.833 -351.932 -351.849 -351.82 -351.831 -351.874 -351.873 -351.925 -351.913 -351.768 -352.117 -351.881 -351.449 -351.371 -351.528 -351.663 -351.909 -352.041 -352.088 -352.094 -352.131 -352.124 -351.958 -351.827 -351.91 -351.911 -351.689 -352.241 -352.344 -352.2 -352.304 -352.288 -352.288 -352.189 -352.186 -352.18 -352.034 -352.231 -352.207 -352.158 -352.197 -352.288 -352.287 -352.33 -352.271 -352.364 -352.326 -352.294 -352.316 -352.263 -352.378 -352.267 -352.007 -351.798 -351.796 -351.77 -351.672 -351.719 -351.639 -351.982 -352.171 -352.318 -352.213 -352.205 -352.095 -351.977 -351.928 -351.925 -351.98 -352.098 -352.171 -352.328 -352.31 -352.132 -352.18 -352.163 -352.114 -352.214 -352.358 -352.163 -352.133 -351.995 -351.823 -351.813 -351.748 -351.689 -351.742 -351.66 -351.743 -351.788 -351.801 -351.865 -351.932 -352.048 -351.993 -352.079 -352.129 -352.028 -352.023 -352.051 -352.087 -352.069 -352.081 -352.236 -352.075 -352.017 -352.182 -352.155 -352.015 -351.834 -352.097 -352.206 -352.204 -352.121 -351.997 -351.868 -351.873 -351.874 -351.906 -351.86 -352.064 -352.002 -351.9 -350.818 -351.235 -351.695 -351.712 -351.862 -351.849 -351.958 -351.869 -351.838 -351.85 -351.82 -351.716 -351.806 -351.767 -351.719 -352.006 -351.715 -351.454 -351.463 -351.535 -351.672 -351.902 -352.011 -352.068 -352.089 -352.108 -352.104 -351.934 -351.813 -351.877 -351.825 -351.649 -352.079 -352.344 -352.213 -352.318 -352.298 -352.234 -352.185 -352.238 -352.136 -352.09 -352.16 -352.163 -352.242 -352.263 -352.299 -352.311 -352.317 -352.276 -352.376 -352.323 -352.28 -352.3 -352.248 -352.366 -352.289 -352.029 -351.809 -351.8 -351.775 -351.675 -351.72 -351.629 -351.995 -352.159 -352.322 -352.222 -352.202 -352.079 -352.004 -351.943 -351.914 -351.98 -352.05 -352.094 -352.259 -352.34 -352.149 -352.2 -352.177 -352.133 -352.197 -352.354 -352.174 -352.142 -352.008 -351.837 -351.829 -351.757 -351.691 -351.741 -351.661 -351.739 -351.791 -351.777 -351.788 -351.932 -352.066 -352.006 -352.08 -352.122 -352.038 -352.04 -352.056 -352.064 -352.059 -352.047 -352.172 -352.114 -352.017 -352.153 -352.16 -352.06 -351.835 -352.079 -352.198 -352.203 -352.114 -352.012 -351.883 -351.869 -351.852 -351.892 -351.857 -352.057 -351.999 -351.895 -350.874 -351.206 -351.769 -351.75 -351.895 -351.89 -351.931 -351.865 -351.867 -351.807 -351.695 -351.557 -351.681 -351.652 -351.678 -351.923 -351.626 -351.462 -351.531 -351.557 -351.678 -351.89 -351.989 -352.049 -352.067 -352.076 -352.077 -351.913 -351.772 -351.829 -351.751 -351.625 -352.074 -352.284 -352.185 -352.32 -352.301 -352.239 -352.235 -352.192 -352.114 -352.098 -352.159 -352.252 -352.276 -352.255 -352.242 -352.268 -352.263 -352.258 -352.342 -352.287 -352.262 -352.275 -352.218 -352.354 -352.314 -352.051 -351.816 -351.789 -351.795 -351.691 -351.722 -351.627 -352.024 -352.166 -352.32 -352.22 -352.214 -352.097 -352.07 -351.95 -351.955 -352.005 -352.035 -352.015 -352.191 -352.349 -352.164 -352.207 -352.197 -352.157 -352.161 -352.362 -352.215 -352.169 -352.036 -351.856 -351.842 -351.769 -351.697 -351.743 -351.663 -351.737 -351.8 -351.748 -351.827 -351.908 -352.077 -352.019 -352.086 -352.116 -352.059 -352.058 -352.022 -351.994 -352.001 -351.961 -352.132 -352.128 -352.013 -352.121 -352.162 -352.098 -351.832 -352.06 -352.209 -352.215 -352.109 -352.019 -351.894 -351.857 -351.841 -351.886 -351.859 -352.054 -351.998 -351.891 -350.762 -351.12 -351.746 -351.769 -351.954 -351.931 -351.846 -351.884 -351.832 -351.677 -351.549 -351.462 -351.607 -351.586 -351.713 -351.897 -351.573 -351.456 -351.573 -351.591 -351.698 -351.888 -351.973 -352.026 -352.047 -352.044 -352.059 -351.902 -351.735 -351.784 -351.705 -351.622 -352.264 -352.389 -352.194 -352.298 -352.279 -352.243 -352.149 -352.157 -352.164 -352.079 -352.296 -352.312 -352.215 -352.187 -352.172 -352.207 -352.208 -352.213 -352.323 -352.229 -352.194 -352.235 -352.182 -352.33 -352.328 -352.073 -351.824 -351.768 -351.796 -351.685 -351.712 -351.626 -351.975 -352.159 -352.312 -352.214 -352.227 -352.137 -352.077 -351.991 -352.008 -351.995 -352.059 -351.997 -352.086 -352.306 -352.179 -352.195 -352.205 -352.186 -352.117 -352.342 -352.264 -352.212 -352.069 -351.871 -351.856 -351.785 -351.709 -351.745 -351.667 -351.742 -351.808 -351.723 -351.785 -351.892 -352.062 -352.03 -352.093 -352.11 -352.06 -352.067 -351.995 -351.966 -351.985 -351.878 -352.042 -352.129 -352.025 -352.094 -352.162 -352.146 -351.831 -351.979 -352.2 -352.241 -352.12 -352.036 -351.913 -351.856 -351.843 -351.884 -351.854 -352.045 -352.003 -351.891 -350.836 -351.144 -351.746 -351.756 -351.949 -351.909 -351.786 -351.907 -351.722 -351.54 -351.432 -351.415 -351.526 -351.519 -351.755 -351.823 -351.496 -351.426 -351.565 -351.607 -351.715 -351.882 -351.953 -352 -352.018 -352.012 -352.037 -351.88 -351.711 -351.749 -351.678 -351.635 -352.02 -352.33 -352.197 -352.284 -352.28 -352.187 -352.145 -352.239 -352.161 -352.12 -352.387 -352.274 -352.143 -352.121 -352.125 -352.161 -352.161 -352.188 -352.284 -352.206 -352.142 -352.196 -352.147 -352.296 -352.338 -352.095 -351.833 -351.758 -351.793 -351.67 -351.71 -351.633 -352.019 -352.173 -352.314 -352.215 -352.232 -352.143 -352.091 -352.07 -352.032 -352.01 -352.115 -352.047 -351.999 -352.228 -352.187 -352.178 -352.201 -352.222 -352.096 -352.286 -352.269 -352.254 -352.118 -351.897 -351.865 -351.8 -351.724 -351.745 -351.67 -351.753 -351.817 -351.705 -351.772 -351.91 -352.068 -352.033 -352.081 -352.096 -352.061 -352.05 -351.976 -351.969 -352.005 -351.938 -351.986 -352.103 -352.02 -352.063 -352.132 -352.196 -351.867 -351.901 -352.147 -352.261 -352.151 -352.064 -351.939 -351.866 -351.852 -351.88 -351.848 -352.03 -352.016 -351.894 -350.911 -351.082 -351.753 -351.754 -351.939 -351.903 -351.799 -351.881 -351.61 -351.482 -351.408 -351.404 -351.45 -351.467 -351.735 -351.675 -351.393 -351.372 -351.502 -351.622 -351.725 -351.872 -351.94 -351.981 -351.985 -351.992 -352.018 -351.859 -351.703 -351.726 -351.666 -351.659 -352.18 -352.306 -352.18 -352.278 -352.268 -352.205 -352.219 -352.218 -352.13 -352.186 -352.355 -352.202 -352.107 -352.072 -352.088 -352.129 -352.125 -352.181 -352.23 -352.176 -352.11 -352.155 -352.111 -352.269 -352.354 -352.118 -351.843 -351.76 -351.792 -351.674 -351.705 -351.639 -351.99 -352.168 -352.307 -352.213 -352.242 -352.163 -352.146 -352.08 -352.036 -352.062 -352.162 -352.091 -351.965 -352.124 -352.179 -352.163 -352.171 -352.248 -352.088 -352.238 -352.247 -352.264 -352.159 -351.925 -351.873 -351.814 -351.736 -351.74 -351.671 -351.757 -351.819 -351.686 -351.812 -351.894 -352.063 -352.045 -352.081 -352.089 -352.078 -352.015 -351.955 -351.952 -351.956 -351.947 -352.011 -352.094 -352.013 -352.025 -352.07 -352.195 -351.922 -351.85 -352.075 -352.256 -352.176 -352.082 -351.957 -351.881 -351.868 -351.865 -351.839 -351.998 -352.018 -351.887 -350.761 -351.007 -351.687 -351.72 -351.941 -351.887 -351.847 -351.845 -351.563 -351.476 -351.456 -351.449 -351.435 -351.474 -351.682 -351.526 -351.309 -351.32 -351.418 -351.644 -351.731 -351.869 -351.926 -351.956 -351.959 -351.972 -352.001 -351.821 -351.689 -351.707 -351.665 -351.687 -352.187 -352.367 -352.195 -352.233 -352.22 -352.227 -352.163 -352.192 -352.183 -352.246 -352.285 -352.137 -352.098 -352.048 -352.062 -352.11 -352.106 -352.163 -352.221 -352.111 -352.056 -352.117 -352.075 -352.244 -352.364 -352.138 -351.851 -351.756 -351.782 -351.69 -351.698 -351.643 -352.017 -352.162 -352.291 -352.206 -352.241 -352.185 -352.144 -352.086 -352.062 -352.111 -352.194 -352.138 -352.007 -352.039 -352.155 -352.142 -352.129 -352.26 -352.088 -352.187 -352.222 -352.27 -352.195 -351.946 -351.882 -351.827 -351.749 -351.735 -351.671 -351.755 -351.82 -351.676 -351.796 -351.909 -352.064 -352.049 -352.078 -352.081 -352.078 -352.004 -351.978 -351.971 -351.943 -351.898 -351.958 -352.087 -352.04 -351.996 -351.996 -352.153 -351.94 -351.825 -351.999 -352.237 -352.199 -352.101 -351.977 -351.903 -351.877 -351.846 -351.825 -351.96 -352.02 -351.888 -350.964 -351.036 -351.659 -351.706 -351.903 -351.827 -351.884 -351.813 -351.565 -351.481 -351.51 -351.546 -351.512 -351.563 -351.663 -351.459 -351.31 -351.342 -351.405 -351.653 -351.736 -351.864 -351.911 -351.933 -351.934 -351.96 -351.986 -351.783 -351.678 -351.694 -351.68 -351.713 -351.967 -352.29 -352.231 -352.235 -352.237 -352.186 -352.19 -352.298 -352.192 -352.309 -352.23 -352.063 -352.077 -352.032 -352.04 -352.092 -352.085 -352.157 -352.202 -352.116 -352.01 -352.072 -352.036 -352.2 -352.36 -352.153 -351.861 -351.752 -351.778 -351.69 -351.682 -351.65 -352.013 -352.188 -352.309 -352.221 -352.264 -352.183 -352.131 -352.154 -352.105 -352.149 -352.196 -352.167 -352.093 -352.006 -352.117 -352.122 -352.097 -352.239 -352.087 -352.144 -352.188 -352.262 -352.217 -351.967 -351.89 -351.838 -351.759 -351.733 -351.672 -351.746 -351.811 -351.663 -351.793 -351.897 -352.064 -352.047 -352.081 -352.089 -352.083 -352.045 -352.043 -352.03 -352.018 -351.949 -351.905 -352.006 -352.048 -351.985 -351.933 -352.093 -351.934 -351.807 -351.918 -352.2 -352.212 -352.114 -351.99 -351.922 -351.88 -351.836 -351.802 -351.926 -352.023 -351.882 -350.876 -350.927 -351.607 -351.674 -351.885 -351.824 -351.929 -351.803 -351.597 -351.501 -351.555 -351.633 -351.629 -351.687 -351.692 -351.479 -351.387 -351.428 -351.446 -351.65 -351.727 -351.834 -351.893 -351.911 -351.908 -351.946 -351.945 -351.734 -351.66 -351.683 -351.699 -351.726 -352.042 -352.27 -352.213 -352.244 -352.251 -352.251 -352.321 -352.275 -352.14 -352.372 -352.209 -352 -352.045 -352.024 -352.027 -352.07 -352.057 -352.169 -352.175 -352.101 -351.998 -352.048 -352.022 -352.177 -352.366 -352.163 -351.869 -351.746 -351.789 -351.688 -351.673 -351.658 -351.976 -352.133 -352.289 -352.222 -352.288 -352.218 -352.198 -352.194 -352.137 -352.213 -352.212 -352.163 -352.167 -352.035 -352.098 -352.098 -352.073 -352.218 -352.086 -352.116 -352.158 -352.241 -352.224 -351.984 -351.903 -351.849 -351.77 -351.734 -351.674 -351.737 -351.801 -351.652 -351.75 -351.858 -352.042 -352.044 -352.098 -352.117 -352.114 -352.105 -352.111 -352.093 -352.097 -352.06 -351.973 -351.946 -352.021 -351.99 -351.892 -352.026 -351.916 -351.801 -351.854 -352.145 -352.213 -352.12 -351.995 -351.934 -351.885 -351.827 -351.791 -351.906 -352.031 -351.869 -350.613 -350.879 -351.536 -351.644 -351.854 -351.821 -351.912 -351.827 -351.628 -351.521 -351.587 -351.66 -351.693 -351.787 -351.752 -351.536 -351.494 -351.546 -351.502 -351.628 -351.716 -351.826 -351.881 -351.892 -351.897 -351.939 -351.89 -351.696 -351.654 -351.682 -351.718 -351.731 -351.943 -352.321 -352.238 -352.204 -352.223 -352.311 -352.27 -352.186 -352.185 -352.4 -352.215 -351.964 -352.01 -352.015 -352.015 -352.044 -352.02 -352.153 -352.186 -352.053 -351.971 -352.018 -352.002 -352.178 -352.377 -352.17 -351.875 -351.744 -351.793 -351.697 -351.677 -351.663 -352.031 -352.162 -352.285 -352.237 -352.292 -352.28 -352.267 -352.203 -352.173 -352.277 -352.258 -352.157 -352.199 -352.094 -352.098 -352.072 -352.054 -352.2 -352.09 -352.09 -352.13 -352.229 -352.235 -352.004 -351.918 -351.86 -351.782 -351.737 -351.68 -351.733 -351.786 -351.641 -351.697 -351.845 -352.02 -352.05 -352.111 -352.131 -352.117 -352.152 -352.163 -352.151 -352.145 -352.118 -352.079 -351.976 -351.988 -352 -351.871 -351.964 -351.885 -351.793 -351.807 -352.091 -352.206 -352.119 -351.999 -351.94 -351.886 -351.817 -351.79 -351.887 -352.017 -351.855 -350.839 -350.763 -351.442 -351.638 -351.807 -351.829 -351.9 -351.873 -351.631 -351.542 -351.599 -351.627 -351.695 -351.855 -351.813 -351.603 -351.602 -351.666 -351.583 -351.57 -351.701 -351.815 -351.858 -351.874 -351.886 -351.941 -351.816 -351.658 -351.642 -351.681 -351.736 -351.731 -351.791 -352.203 -352.287 -352.224 -352.242 -352.253 -352.245 -352.292 -352.235 -352.403 -352.235 -351.946 -351.984 -352.014 -352.006 -352.015 -351.994 -352.135 -352.175 -352.09 -351.95 -351.991 -351.975 -352.164 -352.377 -352.172 -351.879 -351.742 -351.785 -351.709 -351.684 -351.67 -351.908 -352.136 -352.292 -352.258 -352.277 -352.296 -352.293 -352.26 -352.22 -352.312 -352.313 -352.177 -352.207 -352.158 -352.115 -352.062 -352.032 -352.164 -352.093 -352.068 -352.101 -352.203 -352.231 -352.023 -351.937 -351.876 -351.793 -351.743 -351.691 -351.733 -351.77 -351.628 -351.633 -351.775 -351.994 -352.043 -352.114 -352.126 -352.12 -352.191 -352.196 -352.202 -352.194 -352.13 -352.146 -352.058 -351.988 -352.012 -351.867 -351.92 -351.846 -351.769 -351.784 -352.043 -352.191 -352.116 -352.003 -351.948 -351.886 -351.818 -351.787 -351.874 -352.008 -351.834 -351.027 -350.609 -351.32 -351.557 -351.746 -351.83 -351.93 -351.87 -351.664 -351.594 -351.605 -351.617 -351.697 -351.886 -351.859 -351.694 -351.704 -351.778 -351.712 -351.543 -351.678 -351.796 -351.858 -351.871 -351.883 -351.935 -351.751 -351.641 -351.644 -351.685 -351.749 -351.718 -351.82 -352.287 -352.253 -352.255 -352.274 -352.311 -352.375 -352.296 -352.199 -352.443 -352.23 -351.927 -351.962 -352.014 -351.999 -351.985 -351.99 -352.132 -352.147 -352.057 -351.965 -351.989 -351.975 -352.152 -352.374 -352.173 -351.883 -351.745 -351.783 -351.716 -351.684 -351.678 -352.002 -352.09 -352.277 -352.256 -352.251 -352.283 -352.309 -352.295 -352.228 -352.324 -352.355 -352.198 -352.19 -352.202 -352.138 -352.062 -352.011 -352.124 -352.078 -352.046 -352.092 -352.19 -352.232 -352.038 -351.963 -351.894 -351.805 -351.746 -351.699 -351.731 -351.753 -351.621 -351.683 -351.726 -351.968 -352.023 -352.089 -352.129 -352.127 -352.185 -352.198 -352.237 -352.239 -352.122 -352.143 -352.117 -352.009 -352.032 -351.877 -351.885 -351.8 -351.726 -351.754 -352.01 -352.178 -352.119 -352.011 -351.96 -351.894 -351.822 -351.784 -351.868 -352.001 -351.813 -351.115 -350.604 -351.221 -351.499 -351.652 -351.753 -351.907 -351.881 -351.757 -351.626 -351.61 -351.624 -351.652 -351.841 -351.866 -351.77 -351.775 -351.858 -351.839 -351.577 -351.645 -351.791 -351.856 -351.868 -351.88 -351.907 -351.701 -351.63 -351.647 -351.689 -351.753 -351.704 -351.534 -352.483 -352.326 -352.239 -352.258 -352.348 -352.289 -352.153 -352.263 -352.508 -352.188 -351.914 -351.944 -352.016 -351.998 -351.956 -351.978 -352.113 -352.152 -352.037 -351.94 -351.957 -351.961 -352.151 -352.383 -352.171 -351.886 -351.745 -351.79 -351.728 -351.688 -351.688 -351.952 -352.133 -352.289 -352.244 -352.233 -352.272 -352.296 -352.28 -352.231 -352.347 -352.378 -352.217 -352.167 -352.228 -352.161 -352.071 -352.019 -352.094 -352.066 -352.015 -352.063 -352.18 -352.24 -352.064 -351.99 -351.904 -351.814 -351.745 -351.705 -351.731 -351.736 -351.612 -351.618 -351.72 -351.946 -351.995 -352.057 -352.14 -352.113 -352.159 -352.196 -352.249 -352.252 -352.111 -352.099 -352.14 -352.033 -352.053 -351.906 -351.88 -351.781 -351.668 -351.717 -351.973 -352.17 -352.124 -352.018 -351.969 -351.901 -351.82 -351.798 -351.857 -351.981 -351.789 -351.378 -350.602 -351.08 -351.508 -351.628 -351.743 -351.893 -351.91 -351.77 -351.605 -351.591 -351.581 -351.571 -351.778 -351.865 -351.817 -351.826 -351.889 -351.922 -351.66 -351.618 -351.778 -351.852 -351.872 -351.877 -351.887 -351.671 -351.632 -351.663 -351.699 -351.757 -351.692 -350.973 -352.168 -352.402 -352.288 -352.236 -352.244 -352.163 -352.176 -352.414 -352.505 -352.123 -351.904 -351.922 -352.011 -351.998 -351.935 -351.946 -352.092 -352.125 -352.075 -351.952 -351.954 -351.939 -352.128 -352.373 -352.157 -351.889 -351.747 -351.789 -351.74 -351.691 -351.693 -351.892 -352.087 -352.281 -352.238 -352.227 -352.264 -352.268 -352.252 -352.24 -352.356 -352.378 -352.231 -352.136 -352.226 -352.181 -352.082 -352.03 -352.073 -352.046 -351.993 -352.042 -352.162 -352.236 -352.089 -352.015 -351.913 -351.823 -351.75 -351.714 -351.725 -351.717 -351.606 -351.563 -351.678 -351.926 -351.961 -352.034 -352.122 -352.088 -352.134 -352.184 -352.224 -352.242 -352.106 -352.041 -352.122 -352.058 -352.066 -351.937 -351.895 -351.786 -351.624 -351.665 -351.92 -352.157 -352.131 -352.039 -351.987 -351.909 -351.827 -351.809 -351.831 -351.949 -351.759 -351.624 -350.638 -350.887 -351.413 -351.611 -351.747 -351.853 -351.847 -351.728 -351.597 -351.546 -351.526 -351.534 -351.743 -351.84 -351.817 -351.837 -351.874 -351.965 -351.739 -351.599 -351.756 -351.862 -351.883 -351.881 -351.861 -351.651 -351.633 -351.675 -351.704 -351.749 -351.677 -350.824 -351.649 -352.254 -352.353 -352.287 -352.253 -352.227 -352.329 -352.507 -352.433 -352.071 -351.902 -351.898 -351.999 -352.006 -351.927 -351.923 -352.087 -352.094 -352.017 -351.977 -351.968 -351.937 -352.113 -352.356 -352.149 -351.9 -351.748 -351.771 -351.745 -351.695 -351.701 -352.056 -352.095 -352.26 -352.253 -352.244 -352.278 -352.242 -352.234 -352.249 -352.349 -352.377 -352.251 -352.103 -352.192 -352.194 -352.093 -352.04 -352.063 -352.032 -351.966 -352.028 -352.151 -352.237 -352.112 -352.035 -351.919 -351.832 -351.75 -351.724 -351.714 -351.698 -351.605 -351.703 -351.654 -351.891 -351.942 -352.019 -352.111 -352.073 -352.11 -352.172 -352.203 -352.228 -352.089 -351.982 -352.08 -352.074 -352.079 -351.97 -351.912 -351.82 -351.617 -351.606 -351.874 -352.145 -352.151 -352.068 -352.002 -351.924 -351.838 -351.809 -351.81 -351.921 -351.736 -351.611 -350.789 -350.803 -351.229 -351.521 -351.732 -351.866 -351.884 -351.785 -351.611 -351.49 -351.486 -351.53 -351.705 -351.789 -351.777 -351.821 -351.87 -351.975 -351.785 -351.598 -351.753 -351.859 -351.893 -351.877 -351.839 -351.648 -351.649 -351.697 -351.716 -351.743 -351.67 -350.864 -351.323 -352.016 -352.327 -352.349 -352.358 -352.342 -352.446 -352.503 -352.344 -352.032 -351.9 -351.869 -351.976 -352.012 -351.925 -351.909 -352.067 -352.086 -352.024 -351.948 -351.949 -351.923 -352.105 -352.35 -352.142 -351.906 -351.753 -351.751 -351.738 -351.693 -351.71 -351.984 -352.086 -352.247 -352.27 -352.264 -352.273 -352.214 -352.225 -352.245 -352.35 -352.388 -352.278 -352.073 -352.135 -352.193 -352.106 -352.047 -352.048 -352.019 -351.938 -352.004 -352.118 -352.227 -352.14 -352.058 -351.93 -351.84 -351.749 -351.729 -351.699 -351.679 -351.599 -351.582 -351.641 -351.838 -351.935 -352.01 -352.119 -352.071 -352.111 -352.166 -352.182 -352.186 -352.068 -351.935 -352.019 -352.056 -352.08 -351.998 -351.923 -351.864 -351.631 -351.569 -351.812 -352.129 -352.173 -352.098 -352.03 -351.951 -351.845 -351.81 -351.789 -351.893 -351.707 -351.489 -350.984 -350.79 -351.009 -351.394 -351.701 -351.914 -351.945 -351.768 -351.537 -351.4 -351.435 -351.505 -351.642 -351.727 -351.726 -351.802 -351.867 -351.951 -351.793 -351.597 -351.744 -351.861 -351.903 -351.881 -351.825 -351.644 -351.658 -351.705 -351.715 -351.735 -351.668 -350.639 -351.096 -351.803 -352.226 -352.36 -352.425 -352.41 -352.479 -352.444 -352.271 -352.006 -351.902 -351.85 -351.944 -352.009 -351.928 -351.897 -352.036 -352.043 -352.031 -351.983 -351.966 -351.909 -352.079 -352.337 -352.128 -351.905 -351.763 -351.735 -351.726 -351.69 -351.711 -351.977 -352.023 -352.227 -352.275 -352.273 -352.273 -352.221 -352.231 -352.26 -352.376 -352.39 -352.295 -352.065 -352.079 -352.185 -352.123 -352.052 -352.034 -351.995 -351.932 -351.981 -352.095 -352.221 -352.162 -352.089 -351.95 -351.849 -351.755 -351.73 -351.68 -351.666 -351.601 -351.479 -351.584 -351.793 -351.886 -351.971 -352.093 -352.049 -352.088 -352.124 -352.138 -352.138 -352.068 -351.915 -351.947 -352.034 -352.074 -352.018 -351.933 -351.888 -351.679 -351.54 -351.762 -352.113 -352.188 -352.132 -352.061 -351.977 -351.858 -351.825 -351.758 -351.863 -351.687 -351.464 -351.154 -350.767 -350.74 -351.118 -351.431 -351.67 -351.698 -351.553 -351.402 -351.333 -351.397 -351.462 -351.569 -351.673 -351.69 -351.773 -351.842 -351.925 -351.779 -351.588 -351.734 -351.879 -351.914 -351.882 -351.793 -351.638 -351.662 -351.719 -351.714 -351.72 -351.66 -350.527 -350.84 -351.565 -352.076 -352.317 -352.421 -352.418 -352.437 -352.356 -352.207 -351.983 -351.899 -351.838 -351.903 -351.994 -351.93 -351.886 -352.003 -352.001 -351.957 -351.981 -351.98 -351.919 -352.081 -352.312 -352.11 -351.901 -351.776 -351.726 -351.708 -351.681 -351.719 -352.004 -351.976 -352.186 -352.274 -352.287 -352.298 -352.239 -352.25 -352.292 -352.397 -352.377 -352.297 -352.081 -352.027 -352.155 -352.133 -352.054 -352.017 -351.971 -351.918 -351.962 -352.065 -352.218 -352.184 -352.111 -351.962 -351.859 -351.757 -351.736 -351.661 -351.65 -351.596 -351.681 -351.526 -351.756 -351.827 -351.921 -352.013 -351.988 -352.025 -352.087 -352.126 -352.112 -352.085 -351.93 -351.873 -351.983 -352.069 -352.031 -351.94 -351.891 -351.729 -351.53 -351.72 -352.086 -352.189 -352.158 -352.086 -352.005 -351.882 -351.828 -351.731 -351.832 -351.666 -351.496 -351.288 -350.844 -350.613 -350.806 -351.014 -351.209 -351.324 -351.329 -351.311 -351.306 -351.359 -351.412 -351.502 -351.622 -351.665 -351.742 -351.819 -351.898 -351.737 -351.592 -351.739 -351.875 -351.919 -351.875 -351.772 -351.645 -351.672 -351.727 -351.703 -351.703 -351.66 -350.75 -350.68 -351.283 -351.886 -352.23 -352.368 -352.381 -352.356 -352.257 -352.147 -351.961 -351.894 -351.829 -351.864 -351.977 -351.931 -351.881 -351.977 -351.988 -351.983 -351.957 -351.966 -351.902 -352.087 -352.309 -352.096 -351.893 -351.781 -351.723 -351.697 -351.679 -351.722 -352.062 -351.954 -352.116 -352.233 -352.285 -352.311 -352.259 -352.279 -352.313 -352.41 -352.37 -352.292 -352.098 -351.978 -352.112 -352.131 -352.061 -352.004 -351.953 -351.914 -351.959 -352.017 -352.185 -352.195 -352.123 -351.969 -351.866 -351.76 -351.736 -351.641 -351.641 -351.594 -351.812 -351.554 -351.721 -351.783 -351.891 -351.962 -351.96 -352.005 -352.092 -352.128 -352.092 -352.079 -351.944 -351.816 -351.914 -352.04 -352.036 -351.943 -351.873 -351.749 -351.55 -351.673 -352.06 -352.197 -352.182 -352.107 -352.031 -351.902 -351.817 -351.72 -351.824 -351.654 -351.438 -351.351 -351.024 -350.739 -350.707 -350.761 -350.928 -351.131 -351.229 -351.292 -351.29 -351.317 -351.393 -351.468 -351.585 -351.636 -351.717 -351.795 -351.856 -351.704 -351.6 -351.75 -351.885 -351.925 -351.874 -351.759 -351.66 -351.698 -351.738 -351.702 -351.691 -351.659 -350.882 -350.648 -351.028 -351.679 -352.107 -352.269 -352.308 -352.244 -352.146 -352.081 -351.931 -351.882 -351.818 -351.827 -351.952 -351.931 -351.882 -351.951 -351.966 -351.989 -352.02 -351.989 -351.897 -352.078 -352.293 -352.073 -351.873 -351.78 -351.726 -351.687 -351.675 -351.723 -352.084 -351.959 -352.061 -352.179 -352.251 -352.289 -352.264 -352.293 -352.329 -352.428 -352.36 -352.265 -352.104 -351.942 -352.064 -352.127 -352.065 -351.994 -351.936 -351.906 -351.97 -351.998 -352.147 -352.193 -352.138 -351.982 -351.87 -351.754 -351.722 -351.621 -351.634 -351.589 -351.677 -351.558 -351.701 -351.737 -351.858 -351.931 -351.931 -351.977 -352.061 -352.105 -352.073 -352.045 -351.953 -351.798 -351.862 -352.017 -352.032 -351.936 -351.847 -351.753 -351.575 -351.643 -352.018 -352.201 -352.195 -352.126 -352.054 -351.911 -351.814 -351.707 -351.813 -351.641 -351.29 -351.359 -351.192 -350.95 -350.786 -350.734 -350.9 -351.12 -351.256 -351.328 -351.268 -351.284 -351.388 -351.452 -351.558 -351.617 -351.697 -351.762 -351.829 -351.695 -351.587 -351.743 -351.886 -351.924 -351.858 -351.736 -351.663 -351.704 -351.742 -351.7 -351.674 -351.654 -350.737 -350.648 -350.849 -351.485 -351.959 -352.154 -352.213 -352.111 -352.023 -352.004 -351.895 -351.86 -351.81 -351.791 -351.927 -351.925 -351.892 -351.932 -351.945 -351.899 -352.025 -352.008 -351.914 -352.097 -352.267 -352.041 -351.853 -351.776 -351.725 -351.68 -351.678 -351.728 -351.684 -351.95 -352.028 -352.161 -352.232 -352.274 -352.276 -352.317 -352.352 -352.425 -352.319 -352.211 -352.104 -351.92 -352.015 -352.115 -352.073 -351.989 -351.925 -351.886 -351.983 -351.985 -352.12 -352.19 -352.138 -351.989 -351.871 -351.751 -351.708 -351.6 -351.631 -351.584 -351.431 -351.487 -351.68 -351.706 -351.814 -351.882 -351.894 -351.95 -352.033 -352.12 -352.065 -352.014 -351.97 -351.791 -351.803 -351.986 -352.027 -351.929 -351.822 -351.745 -351.604 -351.618 -351.968 -352.191 -352.212 -352.146 -352.07 -351.926 -351.816 -351.702 -351.802 -351.633 -351.206 -351.379 -351.302 -351.109 -350.921 -350.835 -350.97 -351.176 -351.308 -351.319 -351.237 -351.27 -351.385 -351.435 -351.534 -351.6 -351.679 -351.745 -351.807 -351.65 -351.597 -351.75 -351.873 -351.917 -351.847 -351.734 -351.676 -351.714 -351.756 -351.708 -351.669 -351.659 -350.566 -350.649 -350.75 -351.316 -351.788 -352.017 -352.079 -351.96 -351.894 -351.921 -351.85 -351.827 -351.8 -351.762 -351.904 -351.919 -351.89 -351.923 -351.955 -351.856 -351.948 -352.006 -351.904 -352.105 -352.257 -352.016 -351.838 -351.77 -351.72 -351.674 -351.679 -351.723 -351.172 -351.932 -352.001 -352.149 -352.213 -352.269 -352.29 -352.337 -352.346 -352.382 -352.255 -352.149 -352.098 -351.902 -351.971 -352.104 -352.079 -351.986 -351.917 -351.865 -351.969 -351.982 -352.092 -352.181 -352.142 -351.998 -351.874 -351.751 -351.697 -351.591 -351.628 -351.587 -351.249 -351.488 -351.646 -351.716 -351.827 -351.885 -351.908 -351.963 -352.04 -352.138 -352.044 -351.955 -351.971 -351.787 -351.747 -351.946 -352.016 -351.92 -351.8 -351.725 -351.621 -351.601 -351.916 -352.178 -352.229 -352.154 -352.084 -351.94 -351.806 -351.716 -351.79 -351.627 -351.242 -351.398 -351.354 -351.197 -351.041 -350.967 -351.063 -351.215 -351.288 -351.276 -351.202 -351.223 -351.367 -351.407 -351.509 -351.588 -351.659 -351.743 -351.778 -351.578 -351.599 -351.753 -351.869 -351.908 -351.837 -351.724 -351.688 -351.732 -351.75 -351.704 -351.661 -351.657 -350.509 -350.648 -350.707 -351.172 -351.608 -351.856 -351.921 -351.805 -351.77 -351.842 -351.807 -351.794 -351.779 -351.745 -351.878 -351.914 -351.887 -351.904 -351.978 -351.866 -351.873 -352.005 -351.924 -352.115 -352.226 -351.99 -351.816 -351.755 -351.708 -351.67 -351.685 -351.733 -350.966 -351.898 -351.972 -352.102 -352.173 -352.249 -352.289 -352.32 -352.288 -352.305 -352.179 -352.081 -352.079 -351.882 -351.915 -352.086 -352.083 -351.988 -351.916 -351.858 -351.944 -351.985 -352.076 -352.166 -352.136 -351.989 -351.864 -351.74 -351.685 -351.59 -351.625 -351.586 -351.203 -351.541 -351.604 -351.717 -351.866 -351.906 -351.918 -351.96 -352.027 -352.108 -352.008 -351.886 -351.951 -351.799 -351.715 -351.921 -352.008 -351.913 -351.78 -351.703 -351.617 -351.595 -351.864 -352.149 -352.217 -352.158 -352.086 -351.943 -351.796 -351.738 -351.78 -351.62 -351.299 -351.376 -351.373 -351.262 -351.138 -351.078 -351.146 -351.243 -351.251 -351.267 -351.148 -351.174 -351.372 -351.423 -351.505 -351.59 -351.656 -351.742 -351.772 -351.552 -351.584 -351.753 -351.86 -351.888 -351.816 -351.713 -351.685 -351.738 -351.748 -351.71 -351.655 -351.656 -350.526 -350.65 -350.693 -351.047 -351.43 -351.688 -351.754 -351.655 -351.663 -351.776 -351.77 -351.76 -351.747 -351.722 -351.86 -351.905 -351.882 -351.866 -351.965 -351.857 -351.849 -351.976 -351.941 -352.154 -352.198 -351.96 -351.79 -351.743 -351.695 -351.665 -351.685 -351.735 -350.973 -351.794 -351.942 -352.015 -352.092 -352.192 -352.244 -352.25 -352.204 -352.226 -352.107 -352.016 -352.057 -351.87 -351.87 -352.063 -352.082 -351.985 -351.918 -351.853 -351.917 -351.964 -352.063 -352.16 -352.131 -351.993 -351.863 -351.737 -351.666 -351.591 -351.62 -351.583 -351.232 -351.465 -351.58 -351.672 -351.806 -351.838 -351.878 -351.953 -351.993 -352.058 -351.957 -351.823 -351.925 -351.811 -351.685 -351.9 -352.01 -351.912 -351.772 -351.683 -351.598 -351.581 -351.838 -352.13 -352.22 -352.173 -352.094 -351.958 -351.8 -351.758 -351.764 -351.608 -351.302 -351.326 -351.382 -351.321 -351.22 -351.158 -351.183 -351.229 -351.211 -351.201 -351.127 -351.22 -351.427 -351.476 -351.517 -351.608 -351.663 -351.741 -351.786 -351.571 -351.608 -351.771 -351.85 -351.866 -351.809 -351.725 -351.703 -351.746 -351.764 -351.718 -351.657 -351.661 -350.562 -350.68 -350.692 -350.948 -351.28 -351.537 -351.606 -351.53 -351.586 -351.724 -351.729 -351.724 -351.715 -351.694 -351.846 -351.9 -351.879 -351.841 -351.941 -351.836 -351.854 -351.96 -351.937 -352.153 -352.17 -351.931 -351.771 -351.737 -351.678 -351.656 -351.686 -351.738 -350.97 -351.635 -351.896 -351.943 -352.018 -352.136 -352.188 -352.171 -352.131 -352.154 -352.049 -351.976 -352.043 -351.861 -351.836 -352.038 -352.081 -351.989 -351.923 -351.845 -351.885 -351.936 -352.044 -352.15 -352.125 -351.994 -351.862 -351.735 -351.649 -351.591 -351.613 -351.589 -351.235 -351.301 -351.546 -351.631 -351.719 -351.778 -351.871 -351.951 -351.957 -352.001 -351.917 -351.787 -351.918 -351.83 -351.644 -351.857 -352.006 -351.914 -351.77 -351.667 -351.576 -351.569 -351.815 -352.103 -352.204 -352.164 -352.102 -351.971 -351.816 -351.769 -351.74 -351.597 -351.256 -351.281 -351.388 -351.365 -351.29 -351.228 -351.21 -351.202 -351.184 -351.146 -351.219 -351.345 -351.507 -351.501 -351.512 -351.608 -351.669 -351.75 -351.784 -351.582 -351.642 -351.802 -351.848 -351.839 -351.777 -351.702 -351.71 -351.755 -351.768 -351.722 -351.66 -351.656 -350.587 -350.746 -350.703 -350.881 -351.165 -351.417 -351.485 -351.434 -351.548 -351.698 -351.699 -351.693 -351.693 -351.679 -351.829 -351.891 -351.871 -351.832 -351.917 -351.827 -351.842 -351.965 -351.977 -352.166 -352.123 -351.902 -351.755 -351.728 -351.666 -351.647 -351.683 -351.749 -350.902 -351.561 -351.846 -351.899 -351.979 -352.096 -352.126 -352.093 -352.074 -352.099 -352.013 -351.96 -352.039 -351.853 -351.8 -352.006 -352.073 -351.996 -351.93 -351.84 -351.854 -351.894 -352.031 -352.138 -352.112 -351.995 -351.867 -351.742 -351.645 -351.597 -351.604 -351.586 -351.174 -351.249 -351.476 -351.606 -351.706 -351.785 -351.868 -351.922 -351.905 -351.949 -351.904 -351.769 -351.916 -351.862 -351.629 -351.808 -351.997 -351.922 -351.781 -351.663 -351.559 -351.555 -351.797 -352.078 -352.185 -352.162 -352.11 -351.987 -351.829 -351.771 -351.71 -351.572 -351.189 -351.247 -351.383 -351.378 -351.332 -351.27 -351.237 -351.232 -351.209 -351.2 -351.335 -351.442 -351.603 -351.53 -351.519 -351.614 -351.68 -351.754 -351.802 -351.601 -351.652 -351.825 -351.839 -351.801 -351.743 -351.681 -351.7 -351.749 -351.756 -351.718 -351.658 -351.654 -350.581 -350.779 -350.716 -350.835 -351.085 -351.337 -351.394 -351.376 -351.532 -351.674 -351.673 -351.66 -351.677 -351.688 -351.828 -351.876 -351.858 -351.829 -351.887 -351.82 -351.835 -351.955 -351.982 -352.18 -352.098 -351.877 -351.741 -351.719 -351.661 -351.639 -351.681 -351.746 -350.813 -351.575 -351.798 -351.878 -351.968 -352.061 -352.06 -352.033 -352.034 -352.053 -351.978 -351.935 -352.025 -351.85 -351.767 -351.965 -352.063 -352.003 -351.94 -351.84 -351.835 -351.85 -352.004 -352.128 -352.103 -351.989 -351.86 -351.743 -351.641 -351.605 -351.597 -351.592 -351.073 -351.307 -351.382 -351.561 -351.702 -351.78 -351.848 -351.889 -351.879 -351.93 -351.89 -351.737 -351.882 -351.882 -351.632 -351.761 -351.976 -351.926 -351.796 -351.67 -351.562 -351.534 -351.775 -352.058 -352.172 -352.163 -352.108 -351.994 -351.826 -351.761 -351.681 -351.563 -351.121 -351.217 -351.365 -351.366 -351.357 -351.309 -351.269 -351.256 -351.238 -351.279 -351.381 -351.439 -351.625 -351.54 -351.517 -351.62 -351.684 -351.745 -351.825 -351.613 -351.656 -351.832 -351.832 -351.769 -351.73 -351.697 -351.723 -351.76 -351.773 -351.735 -351.667 -351.657 -350.548 -350.755 -350.731 -350.8 -351.034 -351.278 -351.326 -351.343 -351.521 -351.648 -351.652 -351.629 -351.663 -351.707 -351.841 -351.87 -351.851 -351.828 -351.864 -351.809 -351.853 -351.963 -351.998 -352.163 -352.054 -351.854 -351.731 -351.712 -351.657 -351.632 -351.679 -351.755 -350.738 -351.546 -351.748 -351.828 -351.927 -352 -352.001 -352.001 -352.009 -352.014 -351.945 -351.905 -351.99 -351.846 -351.744 -351.922 -352.048 -352.007 -351.944 -351.836 -351.829 -351.83 -351.982 -352.122 -352.097 -351.985 -351.861 -351.742 -351.637 -351.613 -351.589 -351.595 -350.982 -351.353 -351.322 -351.476 -351.634 -351.735 -351.832 -351.894 -351.896 -351.932 -351.856 -351.688 -351.803 -351.859 -351.617 -351.725 -351.957 -351.925 -351.806 -351.681 -351.575 -351.521 -351.748 -352.048 -352.168 -352.165 -352.105 -351.987 -351.818 -351.75 -351.649 -351.551 -351.068 -351.185 -351.337 -351.344 -351.355 -351.342 -351.31 -351.293 -351.271 -351.353 -351.369 -351.406 -351.549 -351.464 -351.487 -351.621 -351.684 -351.745 -351.819 -351.619 -351.662 -351.829 -351.824 -351.758 -351.744 -351.705 -351.74 -351.773 -351.788 -351.743 -351.664 -351.65 -350.502 -350.728 -350.753 -350.787 -351.013 -351.24 -351.278 -351.32 -351.5 -351.608 -351.621 -351.602 -351.646 -351.726 -351.862 -351.873 -351.855 -351.831 -351.855 -351.806 -351.857 -351.963 -352.033 -352.174 -352.01 -351.828 -351.725 -351.711 -351.653 -351.627 -351.675 -351.762 -350.676 -351.42 -351.723 -351.785 -351.87 -351.944 -351.967 -351.983 -351.976 -351.953 -351.894 -351.863 -351.937 -351.838 -351.736 -351.891 -352.032 -352.007 -351.947 -351.83 -351.831 -351.807 -351.961 -352.116 -352.086 -351.975 -351.857 -351.727 -351.628 -351.61 -351.585 -351.6 -350.922 -351.317 -351.324 -351.415 -351.56 -351.674 -351.794 -351.895 -351.889 -351.89 -351.777 -351.632 -351.729 -351.8 -351.585 -351.702 -351.943 -351.921 -351.813 -351.691 -351.598 -351.517 -351.73 -352.051 -352.178 -352.173 -352.105 -351.972 -351.807 -351.736 -351.628 -351.546 -351.035 -351.143 -351.295 -351.33 -351.334 -351.324 -351.302 -351.322 -351.332 -351.406 -351.313 -351.405 -351.512 -351.412 -351.489 -351.627 -351.674 -351.73 -351.775 -351.624 -351.646 -351.839 -351.833 -351.764 -351.758 -351.73 -351.734 -351.77 -351.787 -351.752 -351.671 -351.654 -350.465 -350.701 -350.778 -350.785 -350.999 -351.2 -351.234 -351.304 -351.471 -351.563 -351.594 -351.587 -351.637 -351.75 -351.89 -351.873 -351.841 -351.82 -351.847 -351.826 -351.875 -351.976 -352.038 -352.151 -351.989 -351.826 -351.735 -351.717 -351.665 -351.612 -351.661 -351.761 -350.63 -351.261 -351.721 -351.756 -351.822 -351.9 -351.928 -351.959 -351.935 -351.894 -351.852 -351.822 -351.881 -351.819 -351.724 -351.865 -352.018 -352.003 -351.945 -351.825 -351.84 -351.804 -351.941 -352.11 -352.08 -351.967 -351.854 -351.714 -351.627 -351.615 -351.578 -351.602 -350.893 -351.243 -351.356 -351.397 -351.498 -351.59 -351.698 -351.822 -351.833 -351.813 -351.691 -351.563 -351.657 -351.725 -351.553 -351.692 -351.935 -351.914 -351.813 -351.697 -351.625 -351.522 -351.731 -352.07 -352.192 -352.195 -352.111 -351.961 -351.804 -351.734 -351.608 -351.544 -351.018 -351.103 -351.233 -351.327 -351.316 -351.295 -351.272 -351.319 -351.362 -351.378 -351.199 -351.321 -351.438 -351.376 -351.508 -351.624 -351.65 -351.701 -351.726 -351.624 -351.639 -351.825 -351.825 -351.773 -351.779 -351.782 -351.737 -351.763 -351.777 -351.752 -351.67 -351.651 -350.454 -350.634 -350.787 -350.792 -350.988 -351.158 -351.2 -351.299 -351.444 -351.504 -351.551 -351.56 -351.626 -351.774 -351.917 -351.869 -351.83 -351.814 -351.841 -351.844 -351.916 -352.019 -352.068 -352.133 -351.954 -351.823 -351.746 -351.725 -351.69 -351.603 -351.663 -351.776 -350.599 -351.113 -351.72 -351.772 -351.81 -351.877 -351.894 -351.928 -351.89 -351.84 -351.819 -351.799 -351.846 -351.806 -351.723 -351.85 -352.01 -351.997 -351.936 -351.819 -351.852 -351.825 -351.938 -352.098 -352.065 -351.955 -351.836 -351.694 -351.622 -351.617 -351.568 -351.608 -350.884 -351.172 -351.381 -351.425 -351.461 -351.528 -351.612 -351.728 -351.75 -351.73 -351.609 -351.506 -351.611 -351.668 -351.538 -351.701 -351.939 -351.907 -351.804 -351.698 -351.646 -351.548 -351.755 -352.098 -352.212 -352.197 -352.09 -351.934 -351.795 -351.727 -351.597 -351.543 -351.007 -351.079 -351.154 -351.315 -351.317 -351.291 -351.282 -351.359 -351.375 -351.315 -351.072 -351.166 -351.273 -351.249 -351.459 -351.576 -351.619 -351.678 -351.694 -351.614 -351.659 -351.83 -351.815 -351.775 -351.819 -351.827 -351.76 -351.765 -351.773 -351.751 -351.669 -351.648 -350.473 -350.558 -350.782 -350.79 -350.97 -351.12 -351.169 -351.294 -351.424 -351.456 -351.518 -351.53 -351.618 -351.796 -351.94 -351.862 -351.824 -351.82 -351.849 -351.849 -351.937 -352.037 -352.082 -352.142 -351.959 -351.832 -351.755 -351.723 -351.714 -351.61 -351.656 -351.779 -350.588 -350.996 -351.678 -351.783 -351.81 -351.861 -351.87 -351.895 -351.851 -351.811 -351.805 -351.798 -351.834 -351.8 -351.732 -351.848 -352.001 -351.995 -351.931 -351.811 -351.858 -351.85 -351.957 -352.105 -352.064 -351.959 -351.828 -351.688 -351.622 -351.617 -351.563 -351.614 -350.89 -351.134 -351.376 -351.448 -351.45 -351.515 -351.587 -351.684 -351.697 -351.673 -351.535 -351.459 -351.58 -351.624 -351.536 -351.722 -351.949 -351.904 -351.798 -351.692 -351.654 -351.57 -351.791 -352.141 -352.245 -352.203 -352.075 -351.918 -351.794 -351.732 -351.591 -351.538 -350.996 -351.073 -351.078 -351.271 -351.311 -351.273 -351.277 -351.36 -351.373 -351.266 -350.965 -351.007 -351.115 -351.121 -351.402 -351.527 -351.615 -351.675 -351.694 -351.623 -351.657 -351.846 -351.818 -351.787 -351.849 -351.849 -351.77 -351.762 -351.771 -351.749 -351.667 -351.652 -350.516 -350.511 -350.742 -350.785 -350.95 -351.084 -351.148 -351.291 -351.398 -351.403 -351.472 -351.493 -351.622 -351.823 -351.951 -351.841 -351.798 -351.81 -351.849 -351.862 -351.947 -352.041 -352.086 -352.118 -351.968 -351.856 -351.774 -351.725 -351.724 -351.626 -351.67 -351.785 -350.593 -350.899 -351.603 -351.775 -351.805 -351.849 -351.86 -351.865 -351.816 -351.79 -351.799 -351.812 -351.838 -351.804 -351.749 -351.855 -351.999 -351.988 -351.918 -351.801 -351.863 -351.867 -351.977 -352.106 -352.051 -351.943 -351.808 -351.672 -351.613 -351.601 -351.558 -351.621 -350.898 -351.103 -351.357 -351.466 -351.478 -351.56 -351.603 -351.67 -351.66 -351.616 -351.472 -351.445 -351.586 -351.612 -351.555 -351.75 -351.955 -351.891 -351.781 -351.683 -351.661 -351.595 -351.831 -352.175 -352.25 -352.19 -352.056 -351.898 -351.781 -351.725 -351.578 -351.544 -350.98 -351.07 -351.018 -351.199 -351.283 -351.247 -351.238 -351.261 -351.251 -351.127 -350.815 -350.864 -351.021 -351.081 -351.393 -351.509 -351.634 -351.678 -351.697 -351.656 -351.663 -351.839 -351.81 -351.795 -351.844 -351.841 -351.759 -351.76 -351.776 -351.753 -351.663 -351.646 -350.571 -350.502 -350.677 -350.78 -350.923 -351.048 -351.137 -351.291 -351.37 -351.365 -351.442 -351.477 -351.65 -351.856 -351.958 -351.821 -351.762 -351.783 -351.823 -351.867 -351.952 -352.042 -352.103 -352.134 -351.967 -351.871 -351.801 -351.74 -351.732 -351.637 -351.675 -351.793 -350.613 -350.815 -351.48 -351.714 -351.769 -351.834 -351.839 -351.824 -351.786 -351.779 -351.808 -351.84 -351.854 -351.814 -351.775 -351.869 -351.999 -351.987 -351.91 -351.799 -351.871 -351.884 -351.999 -352.108 -352.039 -351.937 -351.809 -351.673 -351.617 -351.592 -351.55 -351.622 -350.907 -351.066 -351.313 -351.452 -351.518 -351.612 -351.623 -351.661 -351.628 -351.565 -351.436 -351.469 -351.619 -351.625 -351.591 -351.788 -351.968 -351.887 -351.768 -351.677 -351.667 -351.62 -351.871 -352.205 -352.245 -352.176 -352.05 -351.897 -351.789 -351.736 -351.57 -351.534 -350.958 -351.065 -350.98 -351.113 -351.23 -351.211 -351.155 -351.13 -351.074 -350.929 -350.68 -350.805 -351.015 -351.133 -351.433 -351.535 -351.672 -351.682 -351.688 -351.664 -351.678 -351.83 -351.796 -351.796 -351.824 -351.806 -351.739 -351.76 -351.782 -351.749 -351.653 -351.645 -350.621 -350.518 -350.646 -350.78 -350.91 -351.03 -351.146 -351.295 -351.341 -351.331 -351.406 -351.464 -351.688 -351.882 -351.971 -351.826 -351.749 -351.756 -351.786 -351.85 -351.951 -352.04 -352.097 -352.164 -352.009 -351.884 -351.81 -351.755 -351.735 -351.64 -351.676 -351.796 -350.635 -350.754 -351.356 -351.63 -351.714 -351.818 -351.802 -351.783 -351.766 -351.776 -351.828 -351.87 -351.874 -351.832 -351.815 -351.89 -351.995 -351.983 -351.897 -351.792 -351.876 -351.901 -352.015 -352.111 -352.029 -351.929 -351.797 -351.661 -351.611 -351.579 -351.54 -351.64 -350.907 -351.021 -351.27 -351.429 -351.548 -351.637 -351.612 -351.645 -351.602 -351.534 -351.442 -351.525 -351.678 -351.665 -351.65 -351.836 -351.975 -351.879 -351.751 -351.669 -351.674 -351.645 -351.906 -352.225 -352.223 -352.143 -352.021 -351.881 -351.782 -351.735 -351.563 -351.55 -350.933 -351.052 -350.962 -351.033 -351.163 -351.16 -351.056 -351.011 -350.935 -350.774 -350.635 -350.84 -351.066 -351.219 -351.485 -351.578 -351.72 -351.692 -351.689 -351.667 -351.668 -351.828 -351.799 -351.79 -351.803 -351.758 -351.718 -351.765 -351.79 -351.752 -351.654 -351.65 -350.658 -350.553 -350.661 -350.789 -350.907 -351.03 -351.171 -351.301 -351.315 -351.315 -351.397 -351.484 -351.731 -351.903 -351.985 -351.834 -351.737 -351.733 -351.751 -351.822 -351.94 -352.031 -352.081 -352.142 -352.039 -351.915 -351.819 -351.765 -351.739 -351.643 -351.681 -351.8 -350.656 -350.712 -351.239 -351.526 -351.657 -351.789 -351.75 -351.741 -351.749 -351.782 -351.853 -351.894 -351.885 -351.849 -351.855 -351.917 -351.999 -351.978 -351.887 -351.792 -351.882 -351.918 -352.032 -352.114 -352.02 -351.922 -351.793 -351.666 -351.623 -351.583 -351.535 -351.643 -350.899 -350.975 -351.217 -351.385 -351.542 -351.62 -351.578 -351.621 -351.587 -351.527 -351.475 -351.588 -351.725 -351.696 -351.713 -351.899 -351.989 -351.873 -351.739 -351.663 -351.68 -351.677 -351.948 -352.233 -352.205 -352.125 -352.015 -351.88 -351.788 -351.749 -351.568 -351.548 -350.907 -351.038 -350.958 -350.965 -351.083 -351.073 -350.968 -350.918 -350.852 -350.715 -350.687 -350.931 -351.134 -351.295 -351.529 -351.62 -351.761 -351.706 -351.716 -351.703 -351.668 -351.794 -351.785 -351.77 -351.76 -351.712 -351.71 -351.78 -351.799 -351.749 -351.643 -351.641 -350.677 -350.594 -350.676 -350.811 -350.913 -351.047 -351.207 -351.308 -351.296 -351.31 -351.395 -351.506 -351.761 -351.913 -351.983 -351.834 -351.732 -351.726 -351.736 -351.802 -351.928 -352.021 -352.085 -352.137 -352.032 -351.937 -351.83 -351.776 -351.742 -351.639 -351.677 -351.809 -350.667 -350.69 -351.157 -351.438 -351.605 -351.737 -351.693 -351.707 -351.737 -351.787 -351.871 -351.901 -351.887 -351.866 -351.899 -351.945 -352.002 -351.974 -351.869 -351.787 -351.888 -351.931 -352.044 -352.112 -352.013 -351.921 -351.787 -351.654 -351.62 -351.578 -351.536 -351.644 -350.881 -350.935 -351.181 -351.344 -351.514 -351.574 -351.533 -351.598 -351.58 -351.532 -351.513 -351.643 -351.761 -351.726 -351.78 -351.956 -351.99 -351.861 -351.727 -351.663 -351.682 -351.705 -351.975 -352.226 -352.17 -352.094 -352.001 -351.87 -351.781 -351.748 -351.578 -351.561 -350.885 -351.025 -350.961 -350.913 -351.001 -350.984 -350.871 -350.837 -350.804 -350.724 -350.779 -351.023 -351.187 -351.344 -351.558 -351.652 -351.777 -351.71 -351.733 -351.736 -351.707 -351.778 -351.761 -351.732 -351.685 -351.673 -351.714 -351.794 -351.804 -351.745 -351.644 -351.649 -350.688 -350.645 -350.671 -350.823 -350.924 -351.08 -351.245 -351.309 -351.281 -351.319 -351.416 -351.547 -351.788 -351.917 -351.968 -351.83 -351.738 -351.739 -351.74 -351.784 -351.907 -351.998 -352.074 -352.169 -352.05 -351.944 -351.839 -351.787 -351.746 -351.64 -351.68 -351.808 -350.673 -350.681 -351.085 -351.359 -351.557 -351.676 -351.641 -351.682 -351.73 -351.799 -351.889 -351.904 -351.888 -351.885 -351.936 -351.969 -352.001 -351.972 -351.862 -351.786 -351.895 -351.948 -352.06 -352.114 -352.006 -351.918 -351.781 -351.654 -351.63 -351.585 -351.549 -351.661 -350.861 -350.906 -351.141 -351.299 -351.472 -351.518 -351.485 -351.588 -351.588 -351.547 -351.55 -351.683 -351.774 -351.737 -351.838 -351.997 -351.974 -351.848 -351.72 -351.666 -351.69 -351.729 -351.994 -352.208 -352.127 -352.069 -352.001 -351.883 -351.796 -351.762 -351.596 -351.578 -350.872 -351.017 -350.97 -350.883 -350.929 -350.911 -350.767 -350.764 -350.79 -350.776 -350.89 -351.104 -351.227 -351.371 -351.572 -351.67 -351.77 -351.692 -351.713 -351.734 -351.719 -351.778 -351.75 -351.688 -351.629 -351.666 -351.73 -351.807 -351.806 -351.733 -351.632 -351.642 -350.695 -350.701 -350.663 -350.827 -350.944 -351.12 -351.274 -351.3 -351.273 -351.334 -351.438 -351.57 -351.794 -351.912 -351.944 -351.831 -351.752 -351.762 -351.765 -351.774 -351.883 -351.973 -352.036 -352.186 -352.1 -351.951 -351.843 -351.792 -351.749 -351.64 -351.687 -351.822 -350.675 -350.688 -351.037 -351.302 -351.505 -351.609 -351.596 -351.662 -351.72 -351.795 -351.885 -351.888 -351.878 -351.898 -351.967 -351.986 -352 -351.961 -351.85 -351.784 -351.899 -351.959 -352.062 -352.107 -351.996 -351.906 -351.773 -351.65 -351.621 -351.574 -351.546 -351.667 -350.842 -350.896 -351.12 -351.268 -351.424 -351.461 -351.449 -351.575 -351.582 -351.539 -351.566 -351.699 -351.772 -351.753 -351.903 -352.031 -351.946 -351.818 -351.701 -351.66 -351.696 -351.749 -352.01 -352.185 -352.094 -352.044 -351.986 -351.879 -351.794 -351.756 -351.608 -351.571 -350.862 -351.003 -350.981 -350.869 -350.871 -350.828 -350.706 -350.737 -350.809 -350.848 -350.982 -351.153 -351.25 -351.384 -351.565 -351.673 -351.754 -351.665 -351.676 -351.727 -351.696 -351.778 -351.767 -351.672 -351.614 -351.678 -351.751 -351.813 -351.801 -351.717 -351.624 -351.641 -350.704 -350.763 -350.671 -350.825 -350.974 -351.167 -351.296 -351.285 -351.27 -351.354 -351.469 -351.609 -351.802 -351.909 -351.917 -351.828 -351.765 -351.782 -351.787 -351.778 -351.859 -351.947 -351.99 -352.159 -352.152 -351.982 -351.853 -351.798 -351.749 -351.638 -351.688 -351.833 -350.676 -350.7 -350.985 -351.245 -351.453 -351.553 -351.564 -351.646 -351.708 -351.792 -351.879 -351.868 -351.873 -351.917 -351.995 -351.993 -351.991 -351.953 -351.845 -351.792 -351.904 -351.962 -352.059 -352.107 -352.004 -351.912 -351.784 -351.672 -351.637 -351.582 -351.551 -351.655 -350.827 -350.896 -351.091 -351.232 -351.372 -351.398 -351.42 -351.574 -351.574 -351.53 -351.573 -351.7 -351.76 -351.766 -351.95 -352.032 -351.904 -351.793 -351.694 -351.658 -351.696 -351.748 -351.99 -352.154 -352.08 -352.046 -351.999 -351.897 -351.815 -351.771 -351.616 -351.581 -350.856 -350.986 -350.989 -350.86 -350.817 -350.749 -350.703 -350.777 -350.861 -350.925 -351.049 -351.178 -351.252 -351.381 -351.535 -351.654 -351.723 -351.635 -351.639 -351.727 -351.664 -351.751 -351.788 -351.687 -351.632 -351.709 -351.772 -351.817 -351.792 -351.7 -351.618 -351.651 -350.713 -350.819 -350.705 -350.844 -351.008 -351.198 -351.297 -351.263 -351.272 -351.378 -351.494 -351.628 -351.791 -351.897 -351.892 -351.826 -351.772 -351.8 -351.801 -351.799 -351.849 -351.928 -351.96 -352.115 -352.173 -352.012 -351.863 -351.799 -351.746 -351.642 -351.709 -351.836 -350.676 -350.722 -350.953 -351.205 -351.404 -351.499 -351.534 -351.628 -351.689 -351.77 -351.85 -351.839 -351.866 -351.934 -352.01 -351.989 -351.975 -351.927 -351.825 -351.786 -351.888 -351.943 -352.04 -352.104 -352.022 -351.929 -351.799 -351.689 -351.642 -351.579 -351.54 -351.671 -350.811 -350.904 -351.077 -351.206 -351.323 -351.339 -351.398 -351.559 -351.539 -351.49 -351.55 -351.68 -351.737 -351.783 -351.987 -352.015 -351.855 -351.76 -351.677 -351.654 -351.689 -351.731 -351.954 -352.127 -352.075 -352.04 -351.999 -351.897 -351.813 -351.764 -351.615 -351.584 -350.847 -350.968 -350.992 -350.859 -350.781 -350.726 -350.754 -350.842 -350.917 -350.987 -351.09 -351.193 -351.247 -351.374 -351.498 -351.622 -351.69 -351.615 -351.615 -351.732 -351.668 -351.739 -351.807 -351.716 -351.652 -351.731 -351.783 -351.814 -351.776 -351.68 -351.611 -351.649 -350.725 -350.865 -350.766 -350.884 -351.047 -351.223 -351.296 -351.253 -351.284 -351.399 -351.518 -351.647 -351.791 -351.89 -351.871 -351.821 -351.774 -351.805 -351.812 -351.822 -351.855 -351.921 -351.947 -352.08 -352.18 -352.039 -351.877 -351.805 -351.747 -351.646 -351.711 -351.847 -350.677 -350.739 -350.917 -351.165 -351.359 -351.453 -351.515 -351.609 -351.661 -351.741 -351.813 -351.81 -351.856 -351.943 -352.016 -351.981 -351.966 -351.919 -351.82 -351.789 -351.88 -351.931 -352.024 -352.104 -352.042 -351.957 -351.828 -351.723 -351.675 -351.604 -351.546 -351.662 -350.797 -350.902 -351.053 -351.177 -351.269 -351.277 -351.38 -351.541 -351.499 -351.451 -351.522 -351.65 -351.712 -351.789 -352 -351.996 -351.83 -351.75 -351.675 -351.657 -351.689 -351.712 -351.907 -352.093 -352.073 -352.046 -352.018 -351.92 -351.838 -351.782 -351.61 -351.563 -350.836 -350.956 -350.993 -350.863 -350.767 -350.747 -350.833 -350.913 -350.973 -351.033 -351.115 -351.203 -351.251 -351.368 -351.467 -351.573 -351.644 -351.591 -351.587 -351.706 -351.664 -351.722 -351.807 -351.741 -351.679 -351.758 -351.798 -351.814 -351.764 -351.668 -351.609 -351.654 -350.734 -350.89 -350.842 -350.938 -351.082 -351.231 -351.278 -351.242 -351.302 -351.423 -351.534 -351.646 -351.772 -351.876 -351.858 -351.812 -351.771 -351.803 -351.824 -351.839 -351.868 -351.919 -351.945 -352.059 -352.175 -352.053 -351.886 -351.806 -351.746 -351.654 -351.729 -351.864 -350.678 -350.758 -350.906 -351.138 -351.312 -351.403 -351.491 -351.582 -351.627 -351.7 -351.764 -351.773 -351.844 -351.945 -352.02 -351.975 -351.96 -351.914 -351.816 -351.783 -351.865 -351.912 -351.993 -352.085 -352.055 -351.981 -351.856 -351.746 -351.687 -351.61 -351.552 -351.676 -350.782 -350.901 -351.043 -351.151 -351.214 -351.231 -351.356 -351.502 -351.438 -351.393 -351.475 -351.603 -351.682 -351.795 -352.014 -351.986 -351.818 -351.745 -351.669 -351.652 -351.679 -351.688 -351.853 -352.047 -352.057 -352.033 -352.015 -351.923 -351.835 -351.766 -351.595 -351.586 -350.822 -350.943 -350.992 -350.872 -350.779 -350.8 -350.932 -350.975 -351.016 -351.066 -351.13 -351.211 -351.27 -351.387 -351.469 -351.541 -351.602 -351.567 -351.569 -351.672 -351.665 -351.719 -351.802 -351.755 -351.694 -351.765 -351.8 -351.803 -351.746 -351.66 -351.609 -351.678 -350.743 -350.902 -350.912 -350.989 -351.113 -351.238 -351.266 -351.245 -351.326 -351.439 -351.54 -351.65 -351.766 -351.877 -351.858 -351.812 -351.768 -351.794 -351.837 -351.848 -351.879 -351.922 -351.949 -352.049 -352.173 -352.065 -351.897 -351.812 -351.75 -351.668 -351.748 -351.853 -350.68 -350.767 -350.888 -351.109 -351.27 -351.369 -351.47 -351.553 -351.584 -351.652 -351.716 -351.736 -351.828 -351.94 -352.021 -351.975 -351.955 -351.917 -351.826 -351.789 -351.851 -351.894 -351.964 -352.062 -352.065 -352.004 -351.893 -351.781 -351.72 -351.638 -351.565 -351.701 -350.771 -350.888 -351.016 -351.12 -351.17 -351.193 -351.322 -351.458 -351.382 -351.341 -351.427 -351.547 -351.643 -351.784 -352.014 -351.98 -351.813 -351.749 -351.679 -351.656 -351.677 -351.671 -351.796 -351.988 -352.036 -352.038 -352.027 -351.937 -351.848 -351.774 -351.589 -351.574 -350.812 -350.931 -350.99 -350.886 -350.807 -350.863 -351.019 -351.024 -351.052 -351.089 -351.136 -351.213 -351.277 -351.402 -351.485 -351.522 -351.562 -351.537 -351.538 -351.614 -351.638 -351.707 -351.793 -351.758 -351.709 -351.784 -351.81 -351.8 -351.738 -351.657 -351.604 -351.672 -350.749 -350.901 -350.962 -351.034 -351.136 -351.232 -351.241 -351.244 -351.348 -351.455 -351.545 -351.64 -351.744 -351.866 -351.858 -351.812 -351.767 -351.783 -351.845 -351.853 -351.886 -351.924 -351.96 -352.055 -352.17 -352.064 -351.898 -351.811 -351.752 -351.68 -351.751 -351.87 -350.683 -350.778 -350.892 -351.091 -351.225 -351.325 -351.437 -351.515 -351.541 -351.601 -351.663 -351.697 -351.806 -351.926 -352.017 -351.973 -351.956 -351.918 -351.827 -351.785 -351.828 -351.86 -351.922 -352.026 -352.067 -352.019 -351.919 -351.8 -351.728 -351.642 -351.584 -351.703 -350.763 -350.879 -351.007 -351.091 -351.118 -351.154 -351.289 -351.399 -351.313 -351.281 -351.369 -351.484 -351.594 -351.766 -352.014 -351.988 -351.819 -351.748 -351.677 -351.647 -351.666 -351.654 -351.747 -351.926 -352.007 -352.024 -352.01 -351.923 -351.832 -351.749 -351.576 -351.605 -350.804 -350.917 -350.988 -350.908 -350.848 -350.93 -351.086 -351.054 -351.078 -351.109 -351.148 -351.22 -351.29 -351.417 -351.504 -351.53 -351.548 -351.525 -351.528 -351.585 -351.63 -351.72 -351.792 -351.756 -351.719 -351.783 -351.808 -351.789 -351.727 -351.656 -351.613 -351.697 -350.757 -350.901 -350.991 -351.052 -351.142 -351.222 -351.228 -351.26 -351.374 -351.466 -351.543 -351.629 -351.737 -351.868 -351.878 -351.83 -351.772 -351.776 -351.849 -351.862 -351.891 -351.925 -351.969 -352.065 -352.173 -352.068 -351.898 -351.812 -351.761 -351.699 -351.775 -351.875 -350.689 -350.781 -350.883 -351.065 -351.186 -351.301 -351.412 -351.477 -351.493 -351.546 -351.614 -351.66 -351.787 -351.917 -352.015 -351.97 -351.954 -351.928 -351.845 -351.797 -351.823 -351.843 -351.898 -352.001 -352.065 -352.025 -351.939 -351.824 -351.754 -351.668 -351.602 -351.725 -350.762 -350.864 -350.986 -351.056 -351.081 -351.133 -351.245 -351.341 -351.256 -351.233 -351.321 -351.427 -351.551 -351.746 -352.001 -351.985 -351.823 -351.759 -351.693 -351.651 -351.659 -351.645 -351.714 -351.88 -351.983 -352.02 -352.008 -351.924 -351.834 -351.753 -351.577 -351.635 -350.799 -350.904 -350.979 -350.929 -350.887 -350.976 -351.113 -351.087 -351.106 -351.131 -351.163 -351.23 -351.3 -351.412 -351.496 -351.522 -351.539 -351.518 -351.514 -351.552 -351.606 -351.715 -351.783 -351.759 -351.73 -351.794 -351.815 -351.79 -351.725 -351.659 -351.609 -351.712 -350.762 -350.902 -351.007 -351.065 -351.147 -351.208 -351.204 -351.26 -351.384 -351.475 -351.545 -351.62 -351.714 -351.856 -351.888 -351.844 -351.774 -351.766 -351.842 -351.868 -351.891 -351.923 -351.977 -352.08 -352.173 -352.063 -351.892 -351.81 -351.769 -351.715 -351.786 -351.865 -350.696 -350.79 -350.896 -351.05 -351.157 -351.273 -351.368 -351.427 -351.444 -351.499 -351.567 -351.63 -351.774 -351.908 -352.01 -351.968 -351.948 -351.924 -351.845 -351.798 -351.806 -351.818 -351.869 -351.979 -352.063 -352.029 -351.955 -351.839 -351.759 -351.667 -351.617 -351.748 -350.763 -350.86 -350.983 -351.027 -351.057 -351.109 -351.183 -351.27 -351.199 -351.182 -351.269 -351.376 -351.514 -351.73 -351.998 -351.991 -351.827 -351.756 -351.696 -351.646 -351.636 -351.631 -351.692 -351.846 -351.957 -352.003 -351.99 -351.908 -351.818 -351.729 -351.571 -351.628 -350.794 -350.891 -350.971 -350.95 -350.923 -351.004 -351.117 -351.12 -351.123 -351.147 -351.182 -351.258 -351.339 -351.447 -351.512 -351.525 -351.537 -351.521 -351.516 -351.54 -351.607 -351.738 -351.782 -351.75 -351.729 -351.791 -351.813 -351.783 -351.717 -351.657 -351.623 -351.702 -350.768 -350.905 -351.014 -351.053 -351.135 -351.19 -351.191 -351.272 -351.406 -351.487 -351.539 -351.611 -351.709 -351.861 -351.904 -351.859 -351.786 -351.765 -351.834 -351.877 -351.895 -351.919 -351.982 -352.096 -352.179 -352.064 -351.889 -351.815 -351.788 -351.739 -351.795 -351.895 -350.706 -350.794 -350.893 -351.028 -351.14 -351.26 -351.331 -351.379 -351.395 -351.451 -351.531 -351.613 -351.767 -351.905 -352.008 -351.969 -351.95 -351.93 -351.857 -351.808 -351.801 -351.805 -351.852 -351.962 -352.057 -352.029 -351.965 -351.854 -351.776 -351.686 -351.639 -351.721 -350.767 -350.851 -350.966 -351.005 -351.05 -351.08 -351.114 -351.198 -351.153 -351.143 -351.234 -351.345 -351.493 -351.721 -351.983 -351.991 -351.834 -351.759 -351.708 -351.654 -351.627 -351.624 -351.682 -351.821 -351.942 -351.999 -351.987 -351.905 -351.816 -351.734 -351.581 -351.669 -350.793 -350.881 -350.961 -350.964 -350.956 -351.024 -351.105 -351.151 -351.143 -351.164 -351.203 -351.29 -351.386 -351.492 -351.536 -351.527 -351.535 -351.531 -351.52 -351.526 -351.595 -351.745 -351.778 -351.746 -351.736 -351.795 -351.821 -351.789 -351.72 -351.665 -351.636 -351.695 -350.769 -350.904 -351.037 -351.056 -351.134 -351.174 -351.171 -351.268 -351.413 -351.498 -351.543 -351.601 -351.7 -351.851 -351.9 -351.865 -351.789 -351.76 -351.819 -351.877 -351.897 -351.912 -351.98 -352.109 -352.183 -352.059 -351.883 -351.82 -351.805 -351.756 -351.82 -351.911 -350.717 -350.807 -350.911 -351.023 -351.136 -351.237 -351.276 -351.321 -351.351 -351.415 -351.501 -351.596 -351.76 -351.897 -351.998 -351.96 -351.947 -351.93 -351.86 -351.807 -351.78 -351.775 -351.826 -351.947 -352.057 -352.033 -351.976 -351.865 -351.776 -351.679 -351.634 -351.756 -350.772 -350.853 -350.968 -350.995 -351.037 -351.035 -351.055 -351.132 -351.106 -351.102 -351.195 -351.311 -351.472 -351.713 -351.97 -351.988 -351.84 -351.755 -351.708 -351.649 -351.605 -351.61 -351.671 -351.801 -351.926 -351.983 -351.971 -351.89 -351.801 -351.713 -351.579 -351.676 -350.793 -350.871 -350.956 -350.977 -350.979 -351.046 -351.098 -351.156 -351.151 -351.174 -351.229 -351.331 -351.446 -351.557 -351.593 -351.542 -351.526 -351.535 -351.54 -351.54 -351.592 -351.749 -351.772 -351.745 -351.732 -351.79 -351.818 -351.784 -351.713 -351.662 -351.644 -351.708 -350.773 -350.898 -351.055 -351.041 -351.112 -351.151 -351.161 -351.278 -351.436 -351.515 -351.546 -351.594 -351.708 -351.858 -351.911 -351.884 -351.807 -351.764 -351.813 -351.881 -351.907 -351.91 -351.976 -352.119 -352.19 -352.06 -351.885 -351.842 -351.837 -351.782 -351.822 -351.889 -350.731 -350.812 -350.911 -351.016 -351.137 -351.228 -351.238 -351.28 -351.317 -351.38 -351.483 -351.598 -351.769 -351.905 -351.994 -351.953 -351.934 -351.928 -351.874 -351.825 -351.782 -351.767 -351.808 -351.931 -352.051 -352.031 -351.98 -351.871 -351.785 -351.69 -351.659 -351.773 -350.779 -350.849 -350.955 -350.987 -351.032 -351.009 -351.012 -351.079 -351.073 -351.077 -351.18 -351.305 -351.478 -351.718 -351.956 -351.973 -351.833 -351.752 -351.719 -351.661 -351.611 -351.612 -351.663 -351.79 -351.922 -351.979 -351.968 -351.887 -351.796 -351.718 -351.595 -351.67 -350.797 -350.862 -350.95 -350.986 -350.995 -351.075 -351.108 -351.15 -351.163 -351.189 -351.256 -351.363 -351.48 -351.579 -351.628 -351.567 -351.529 -351.538 -351.547 -351.545 -351.584 -351.734 -351.768 -351.743 -351.739 -351.795 -351.834 -351.795 -351.718 -351.668 -351.661 -351.679 -350.777 -350.887 -351.095 -351.052 -351.106 -351.133 -351.148 -351.277 -351.447 -351.532 -351.561 -351.603 -351.716 -351.862 -351.918 -351.892 -351.812 -351.762 -351.799 -351.873 -351.914 -351.908 -351.967 -352.12 -352.189 -352.059 -351.894 -351.863 -351.858 -351.799 -351.849 -351.92 -350.743 -350.825 -350.928 -351.022 -351.143 -351.201 -351.182 -351.23 -351.291 -351.362 -351.47 -351.593 -351.769 -351.903 -351.986 -351.947 -351.921 -351.913 -351.871 -351.826 -351.773 -351.743 -351.782 -351.917 -352.047 -352.035 -351.987 -351.874 -351.78 -351.678 -351.643 -351.76 -350.786 -350.855 -350.957 -350.986 -351.016 -350.974 -350.987 -351.036 -351.043 -351.053 -351.156 -351.291 -351.468 -351.711 -351.949 -351.971 -351.83 -351.741 -351.716 -351.66 -351.602 -351.596 -351.652 -351.78 -351.917 -351.973 -351.956 -351.873 -351.78 -351.7 -351.59 -351.728 -350.8 -350.857 -350.947 -350.997 -351.004 -351.086 -351.113 -351.128 -351.16 -351.192 -351.274 -351.392 -351.5 -351.605 -351.664 -351.586 -351.527 -351.532 -351.556 -351.566 -351.591 -351.731 -351.773 -351.739 -351.736 -351.789 -351.831 -351.787 -351.711 -351.669 -351.67 -351.678 -350.787 -350.867 -351.11 -351.056 -351.085 -351.108 -351.145 -351.292 -351.475 -351.56 -351.574 -351.617 -351.732 -351.88 -351.937 -351.913 -351.832 -351.772 -351.801 -351.875 -351.927 -351.913 -351.965 -352.12 -352.194 -352.069 -351.914 -351.893 -351.885 -351.824 -351.871 -351.932 -350.755 -350.83 -350.93 -351.029 -351.143 -351.182 -351.151 -351.208 -351.281 -351.35 -351.463 -351.598 -351.782 -351.915 -351.992 -351.948 -351.914 -351.908 -351.876 -351.843 -351.789 -351.745 -351.771 -351.903 -352.042 -352.033 -351.983 -351.87 -351.781 -351.683 -351.664 -351.799 -350.792 -350.853 -350.944 -350.986 -351.009 -350.964 -350.978 -351.011 -351.029 -351.049 -351.161 -351.298 -351.476 -351.712 -351.937 -351.964 -351.829 -351.737 -351.718 -351.677 -351.62 -351.606 -351.655 -351.777 -351.919 -351.972 -351.955 -351.868 -351.772 -351.702 -351.614 -351.696 -350.807 -350.855 -350.941 -351.005 -351.025 -351.095 -351.122 -351.121 -351.159 -351.2 -351.292 -351.403 -351.506 -351.616 -351.676 -351.611 -351.534 -351.54 -351.567 -351.575 -351.59 -351.717 -351.772 -351.749 -351.749 -351.805 -351.848 -351.799 -351.719 -351.681 -351.679 -351.714 -350.796 -350.851 -351.13 -351.086 -351.088 -351.1 -351.143 -351.297 -351.492 -351.583 -351.594 -351.636 -351.756 -351.896 -351.944 -351.914 -351.84 -351.776 -351.794 -351.865 -351.935 -351.913 -351.961 -352.119 -352.192 -352.079 -351.935 -351.922 -351.897 -351.837 -351.881 -351.919 -350.765 -350.843 -350.944 -351.037 -351.144 -351.144 -351.101 -351.175 -351.272 -351.35 -351.457 -351.594 -351.776 -351.907 -351.979 -351.943 -351.902 -351.889 -351.867 -351.841 -351.791 -351.732 -351.758 -351.89 -352.035 -352.037 -351.985 -351.869 -351.776 -351.675 -351.649 -351.799 -350.799 -350.861 -350.94 -350.984 -350.993 -350.938 -350.973 -350.996 -351.018 -351.043 -351.151 -351.289 -351.457 -351.683 -351.91 -351.957 -351.832 -351.736 -351.715 -351.679 -351.621 -351.596 -351.646 -351.774 -351.921 -351.969 -351.947 -351.853 -351.759 -351.689 -351.604 -351.727 -350.812 -350.857 -350.939 -351.001 -351.031 -351.077 -351.118 -351.113 -351.147 -351.193 -351.291 -351.399 -351.515 -351.644 -351.683 -351.627 -351.539 -351.535 -351.57 -351.588 -351.603 -351.716 -351.779 -351.753 -351.749 -351.806 -351.846 -351.79 -351.713 -351.681 -351.694 -351.766 -350.808 -350.829 -351.113 -351.108 -351.084 -351.09 -351.15 -351.321 -351.527 -351.61 -351.605 -351.652 -351.784 -351.907 -351.948 -351.919 -351.857 -351.79 -351.801 -351.865 -351.947 -351.918 -351.962 -352.121 -352.196 -352.094 -351.963 -351.946 -351.913 -351.854 -351.895 -351.923 -350.776 -350.848 -350.946 -351.052 -351.134 -351.112 -351.083 -351.174 -351.282 -351.349 -351.451 -351.599 -351.775 -351.907 -351.972 -351.939 -351.885 -351.874 -351.863 -351.849 -351.814 -351.74 -351.755 -351.885 -352.033 -352.038 -351.977 -351.861 -351.775 -351.672 -351.66 -351.8 -350.806 -350.859 -350.925 -350.984 -350.984 -350.934 -350.986 -350.997 -351.021 -351.051 -351.164 -351.305 -351.46 -351.672 -351.876 -351.931 -351.813 -351.727 -351.716 -351.695 -351.64 -351.605 -351.654 -351.777 -351.924 -351.971 -351.945 -351.848 -351.751 -351.688 -351.634 -351.754 -350.819 -350.858 -350.933 -350.994 -351.037 -351.065 -351.128 -351.123 -351.143 -351.201 -351.3 -351.397 -351.53 -351.656 -351.689 -351.642 -351.552 -351.541 -351.576 -351.601 -351.614 -351.707 -351.783 -351.766 -351.769 -351.828 -351.865 -351.797 -351.72 -351.693 -351.711 -351.803 -350.819 -350.823 -351.1 -351.139 -351.104 -351.105 -351.167 -351.345 -351.548 -351.622 -351.616 -351.667 -351.809 -351.915 -351.945 -351.915 -351.861 -351.787 -351.795 -351.859 -351.947 -351.919 -351.959 -352.118 -352.192 -352.108 -351.99 -351.969 -351.918 -351.856 -351.89 -351.963 -350.786 -350.859 -350.951 -351.052 -351.125 -351.073 -351.048 -351.156 -351.282 -351.356 -351.459 -351.598 -351.767 -351.892 -351.952 -351.93 -351.878 -351.848 -351.843 -351.84 -351.814 -351.733 -351.748 -351.879 -352.028 -352.042 -351.978 -351.861 -351.776 -351.667 -351.644 -351.879 -350.814 -350.867 -350.913 -350.973 -350.967 -350.912 -350.994 -351.003 -351.023 -351.059 -351.168 -351.302 -351.446 -351.643 -351.836 -351.906 -351.8 -351.706 -351.703 -351.695 -351.64 -351.602 -351.654 -351.778 -351.928 -351.972 -351.941 -351.836 -351.743 -351.684 -351.631 -351.695 -350.823 -350.862 -350.93 -350.981 -351.019 -351.036 -351.124 -351.132 -351.133 -351.196 -351.285 -351.387 -351.529 -351.65 -351.693 -351.66 -351.565 -351.541 -351.576 -351.603 -351.617 -351.713 -351.796 -351.773 -351.775 -351.833 -351.859 -351.781 -351.712 -351.693 -351.734 -351.893 -350.829 -350.813 -351.063 -351.154 -351.117 -351.121 -351.199 -351.397 -351.586 -351.638 -351.624 -351.684 -351.833 -351.913 -351.935 -351.909 -351.862 -351.803 -351.808 -351.861 -351.951 -351.922 -351.956 -352.121 -352.196 -352.126 -352.016 -351.988 -351.93 -351.869 -351.887 -351.969 -350.794 -350.865 -350.957 -351.068 -351.109 -351.043 -351.053 -351.175 -351.307 -351.365 -351.458 -351.599 -351.77 -351.896 -351.951 -351.926 -351.871 -351.839 -351.84 -351.845 -351.832 -351.745 -351.747 -351.878 -352.029 -352.042 -351.971 -351.858 -351.779 -351.663 -351.653 -351.924 -350.822 -350.866 -350.902 -350.969 -350.954 -350.915 -351.019 -351.022 -351.04 -351.074 -351.189 -351.326 -351.469 -351.655 -351.816 -351.881 -351.788 -351.69 -351.696 -351.704 -351.655 -351.614 -351.668 -351.787 -351.933 -351.972 -351.94 -351.836 -351.74 -351.685 -351.657 -351.637 -350.829 -350.86 -350.924 -350.975 -351.007 -351.031 -351.141 -351.154 -351.139 -351.21 -351.296 -351.4 -351.537 -351.635 -351.692 -351.664 -351.576 -351.556 -351.587 -351.615 -351.627 -351.712 -351.803 -351.801 -351.798 -351.857 -351.871 -351.785 -351.719 -351.705 -351.763 -351.981 -350.837 -350.82 -351.042 -351.168 -351.143 -351.154 -351.24 -351.433 -351.597 -351.639 -351.635 -351.71 -351.846 -351.917 -351.939 -351.915 -351.86 -351.802 -351.809 -351.865 -351.947 -351.922 -351.954 -352.113 -352.19 -352.134 -352.035 -352.004 -351.931 -351.859 -351.887 -351.97 -350.801 -350.876 -350.951 -351.057 -351.094 -351.015 -351.038 -351.167 -351.31 -351.379 -351.469 -351.61 -351.765 -351.882 -351.933 -351.922 -351.866 -351.819 -351.821 -351.835 -351.824 -351.738 -351.743 -351.873 -352.026 -352.047 -351.973 -351.861 -351.783 -351.662 -351.648 -351.935 -350.828 -350.876 -350.885 -350.95 -350.935 -350.897 -351.031 -351.04 -351.054 -351.097 -351.204 -351.336 -351.471 -351.639 -351.792 -351.862 -351.784 -351.676 -351.682 -351.7 -351.645 -351.61 -351.679 -351.796 -351.935 -351.976 -351.939 -351.826 -351.736 -351.689 -351.65 -351.659 -350.833 -350.858 -350.916 -350.96 -350.979 -351.02 -351.139 -351.169 -351.152 -351.208 -351.281 -351.392 -351.514 -351.594 -351.701 -351.672 -351.587 -351.56 -351.585 -351.62 -351.632 -351.706 -351.81 -351.822 -351.804 -351.859 -351.86 -351.766 -351.709 -351.702 -351.764 -352.037 -350.841 -350.821 -351.011 -351.175 -351.163 -351.183 -351.289 -351.481 -351.623 -351.647 -351.638 -351.726 -351.86 -351.912 -351.925 -351.902 -351.858 -351.817 -351.824 -351.876 -351.949 -351.919 -351.945 -352.107 -352.188 -352.15 -352.056 -352.016 -351.942 -351.874 -351.89 -352.015 -350.807 -350.884 -350.967 -351.072 -351.077 -350.992 -351.058 -351.196 -351.346 -351.399 -351.475 -351.618 -351.774 -351.895 -351.941 -351.923 -351.858 -351.816 -351.82 -351.845 -351.832 -351.745 -351.743 -351.874 -352.027 -352.047 -351.968 -351.861 -351.787 -351.662 -351.67 -351.926 -350.833 -350.878 -350.891 -350.945 -350.921 -350.917 -351.066 -351.072 -351.088 -351.125 -351.234 -351.379 -351.512 -351.663 -351.785 -351.841 -351.777 -351.674 -351.679 -351.709 -351.651 -351.622 -351.705 -351.815 -351.937 -351.976 -351.937 -351.828 -351.74 -351.696 -351.679 -351.724 -350.84 -350.853 -350.907 -350.958 -350.976 -351.052 -351.161 -351.196 -351.19 -351.232 -351.305 -351.414 -351.51 -351.566 -351.7 -351.668 -351.605 -351.574 -351.597 -351.623 -351.629 -351.697 -351.82 -351.859 -351.835 -351.881 -351.873 -351.777 -351.72 -351.71 -351.774 -352.052 -350.846 -350.834 -351 -351.182 -351.189 -351.219 -351.332 -351.502 -351.623 -351.64 -351.643 -351.752 -351.867 -351.915 -351.934 -351.914 -351.853 -351.806 -351.828 -351.874 -351.944 -351.919 -351.944 -352.101 -352.178 -352.151 -352.063 -352.024 -351.946 -351.87 -351.883 -352.098 -350.814 -350.893 -350.952 -351.048 -351.052 -350.979 -351.059 -351.198 -351.357 -351.416 -351.494 -351.634 -351.78 -351.878 -351.918 -351.916 -351.847 -351.793 -351.802 -351.837 -351.821 -351.732 -351.743 -351.879 -352.026 -352.052 -351.972 -351.865 -351.797 -351.672 -351.67 -351.906 -350.835 -350.885 -350.877 -350.925 -350.9 -350.915 -351.08 -351.095 -351.114 -351.158 -351.261 -351.395 -351.52 -351.643 -351.761 -351.817 -351.761 -351.664 -351.668 -351.698 -351.635 -351.617 -351.72 -351.831 -351.94 -351.979 -351.941 -351.824 -351.742 -351.705 -351.673 -351.791 -350.845 -350.85 -350.896 -350.956 -350.985 -351.08 -351.154 -351.208 -351.226 -351.239 -351.299 -351.399 -351.472 -351.51 -351.686 -351.664 -351.61 -351.581 -351.599 -351.63 -351.637 -351.693 -351.809 -351.869 -351.84 -351.875 -351.855 -351.756 -351.706 -351.704 -351.766 -352.081 -350.848 -350.837 -350.985 -351.188 -351.204 -351.251 -351.373 -351.527 -351.631 -351.647 -351.659 -351.768 -351.882 -351.919 -351.922 -351.907 -351.854 -351.818 -351.836 -351.889 -351.943 -351.915 -351.94 -352.096 -352.177 -352.16 -352.079 -352.034 -351.963 -351.894 -351.908 -352.111 -350.821 -350.902 -350.986 -351.06 -351.034 -350.97 -351.09 -351.241 -351.404 -351.446 -351.506 -351.654 -351.806 -351.893 -351.922 -351.92 -351.85 -351.788 -351.8 -351.846 -351.824 -351.737 -351.75 -351.885 -352.027 -352.049 -351.969 -351.868 -351.807 -351.683 -351.703 -351.926 -350.837 -350.89 -350.907 -350.922 -350.887 -350.961 -351.13 -351.14 -351.163 -351.197 -351.296 -351.44 -351.565 -351.661 -351.752 -351.793 -351.748 -351.66 -351.671 -351.704 -351.638 -351.637 -351.75 -351.858 -351.949 -351.982 -351.943 -351.83 -351.752 -351.717 -351.706 -351.819 -350.851 -350.847 -350.892 -350.968 -351.03 -351.138 -351.165 -351.227 -351.271 -351.273 -351.334 -351.424 -351.46 -351.478 -351.655 -351.653 -351.625 -351.603 -351.611 -351.638 -351.638 -351.681 -351.802 -351.891 -351.872 -351.9 -351.869 -351.767 -351.718 -351.714 -351.778 -352.081 -350.856 -350.848 -350.98 -351.193 -351.229 -351.293 -351.409 -351.538 -351.629 -351.645 -351.673 -351.797 -351.887 -351.91 -351.921 -351.91 -351.847 -351.809 -351.841 -351.888 -351.936 -351.919 -351.951 -352.1 -352.171 -352.154 -352.081 -352.037 -351.976 -351.907 -351.919 -352.104 -350.825 -350.9 -350.968 -351.025 -351.004 -350.977 -351.108 -351.26 -351.418 -351.459 -351.535 -351.687 -351.819 -351.875 -351.891 -351.899 -351.842 -351.764 -351.78 -351.837 -351.812 -351.731 -351.757 -351.896 -352.033 -352.056 -351.975 -351.876 -351.822 -351.702 -351.717 -351.95 -350.835 -350.892 -350.895 -350.904 -350.882 -350.989 -351.15 -351.167 -351.194 -351.237 -351.334 -351.463 -351.57 -351.637 -351.725 -351.754 -351.716 -351.635 -351.651 -351.688 -351.625 -351.63 -351.755 -351.874 -351.963 -351.993 -351.95 -351.829 -351.755 -351.729 -351.701 -351.854 -350.853 -350.846 -350.88 -350.967 -351.063 -351.152 -351.126 -351.215 -351.291 -351.281 -351.328 -351.396 -351.408 -351.429 -351.632 -351.637 -351.621 -351.607 -351.607 -351.626 -351.636 -351.683 -351.803 -351.898 -351.881 -351.892 -351.845 -351.742 -351.701 -351.707 -351.787 -352.092 -350.863 -350.855 -350.974 -351.197 -351.242 -351.321 -351.438 -351.547 -351.631 -351.656 -351.69 -351.805 -351.885 -351.917 -351.922 -351.913 -351.863 -351.821 -351.847 -351.896 -351.939 -351.922 -351.952 -352.101 -352.171 -352.159 -352.094 -352.047 -351.987 -351.936 -351.963 -352.119 -350.829 -350.907 -351.012 -351.037 -350.997 -350.987 -351.151 -351.312 -351.472 -351.506 -351.568 -351.712 -351.841 -351.889 -351.893 -351.892 -351.843 -351.758 -351.773 -351.838 -351.813 -351.741 -351.767 -351.908 -352.038 -352.057 -351.978 -351.887 -351.836 -351.721 -351.769 -351.909 -350.837 -350.901 -350.936 -350.908 -350.895 -351.056 -351.204 -351.223 -351.26 -351.289 -351.37 -351.504 -351.611 -351.656 -351.724 -351.73 -351.692 -351.62 -351.644 -351.685 -351.629 -351.639 -351.762 -351.889 -351.971 -351.994 -351.95 -351.836 -351.769 -351.744 -351.724 -351.904 -350.858 -350.847 -350.883 -350.973 -351.091 -351.171 -351.107 -351.209 -351.313 -351.309 -351.357 -351.417 -351.4 -351.409 -351.629 -351.653 -351.638 -351.627 -351.622 -351.633 -351.649 -351.71 -351.834 -351.922 -351.91 -351.91 -351.851 -351.75 -351.716 -351.717 -351.808 -352.1 -350.875 -350.867 -350.964 -351.192 -351.265 -351.362 -351.467 -351.555 -351.633 -351.664 -351.7 -351.824 -351.889 -351.903 -351.912 -351.908 -351.856 -351.811 -351.845 -351.89 -351.93 -351.93 -351.967 -352.11 -352.173 -352.153 -352.09 -352.042 -351.998 -351.972 -351.993 -352.138 -350.828 -350.896 -350.986 -351.001 -350.971 -351.013 -351.184 -351.339 -351.489 -351.521 -351.591 -351.734 -351.848 -351.877 -351.87 -351.869 -351.833 -351.738 -351.749 -351.825 -351.803 -351.739 -351.773 -351.917 -352.047 -352.067 -351.988 -351.898 -351.846 -351.75 -351.799 -351.921 -350.833 -350.896 -350.922 -350.898 -350.919 -351.1 -351.217 -351.253 -351.287 -351.321 -351.404 -351.522 -351.609 -351.636 -351.703 -351.701 -351.66 -351.594 -351.619 -351.663 -351.615 -351.626 -351.75 -351.889 -351.981 -352.012 -351.955 -351.831 -351.771 -351.753 -351.736 -351.884 -350.856 -350.847 -350.869 -350.954 -351.086 -351.138 -351.042 -351.174 -351.303 -351.307 -351.344 -351.37 -351.338 -351.355 -351.612 -351.674 -351.643 -351.642 -351.635 -351.644 -351.67 -351.733 -351.854 -351.928 -351.914 -351.892 -351.821 -351.724 -351.698 -351.717 -351.82 -352.131 -350.884 -350.88 -350.964 -351.192 -351.28 -351.383 -351.477 -351.556 -351.632 -351.672 -351.716 -351.824 -351.88 -351.916 -351.928 -351.935 -351.887 -351.817 -351.851 -351.906 -351.94 -351.941 -351.977 -352.114 -352.169 -352.154 -352.097 -352.053 -352.016 -352.008 -352.037 -352.114 -350.832 -350.905 -351.024 -351.016 -350.986 -351.045 -351.231 -351.392 -351.543 -351.577 -351.62 -351.755 -351.864 -351.888 -351.876 -351.869 -351.843 -351.74 -351.742 -351.819 -351.799 -351.751 -351.788 -351.93 -352.055 -352.072 -351.995 -351.909 -351.862 -351.779 -351.847 -351.97 -350.836 -350.909 -350.959 -350.916 -350.955 -351.162 -351.266 -351.312 -351.358 -351.375 -351.433 -351.555 -351.644 -351.662 -351.714 -351.701 -351.657 -351.593 -351.617 -351.655 -351.616 -351.634 -351.749 -351.887 -351.983 -352.009 -351.949 -351.832 -351.784 -351.771 -351.749 -351.945 -350.86 -350.852 -350.876 -350.95 -351.078 -351.121 -351.014 -351.155 -351.306 -351.323 -351.358 -351.39 -351.351 -351.358 -351.618 -351.717 -351.671 -351.674 -351.667 -351.663 -351.704 -351.78 -351.897 -351.941 -351.923 -351.895 -351.823 -351.734 -351.719 -351.739 -351.84 -352.142 -350.891 -350.89 -350.949 -351.18 -351.294 -351.411 -351.493 -351.564 -351.637 -351.676 -351.724 -351.832 -351.896 -351.914 -351.915 -351.927 -351.876 -351.821 -351.851 -351.893 -351.932 -351.947 -352.002 -352.131 -352.173 -352.147 -352.089 -352.047 -352.021 -352.031 -352.015 -352.136 -350.83 -350.891 -350.993 -350.985 -350.966 -351.083 -351.271 -351.419 -351.555 -351.569 -351.62 -351.772 -351.874 -351.884 -351.863 -351.86 -351.846 -351.735 -351.723 -351.802 -351.79 -351.749 -351.794 -351.942 -352.066 -352.081 -352.003 -351.921 -351.875 -351.809 -351.894 -351.962 -350.831 -350.899 -350.942 -350.917 -350.994 -351.205 -351.264 -351.337 -351.368 -351.379 -351.452 -351.572 -351.641 -351.638 -351.695 -351.685 -351.642 -351.579 -351.601 -351.632 -351.605 -351.625 -351.739 -351.882 -351.985 -352.02 -351.95 -351.828 -351.785 -351.778 -351.772 -352.041 -350.856 -350.851 -350.859 -350.919 -351.046 -351.072 -350.951 -351.104 -351.276 -351.307 -351.337 -351.335 -351.278 -351.301 -351.594 -351.74 -351.684 -351.688 -351.7 -351.712 -351.762 -351.828 -351.911 -351.937 -351.92 -351.879 -351.797 -351.716 -351.707 -351.733 -351.846 -352.122 -350.899 -350.906 -350.962 -351.176 -351.3 -351.413 -351.487 -351.557 -351.63 -351.678 -351.738 -351.836 -351.89 -351.922 -351.942 -351.964 -351.904 -351.834 -351.864 -351.908 -351.946 -351.964 -352.027 -352.147 -352.171 -352.14 -352.093 -352.061 -352.043 -352.048 -352.026 -352.214 -350.837 -350.905 -351.014 -351.003 -351.004 -351.131 -351.313 -351.462 -351.594 -351.612 -351.658 -351.8 -351.888 -351.892 -351.872 -351.871 -351.864 -351.752 -351.73 -351.796 -351.787 -351.758 -351.817 -351.964 -352.08 -352.091 -352.012 -351.933 -351.888 -351.838 -351.896 -352.031 -350.835 -350.914 -350.965 -350.946 -351.04 -351.247 -351.298 -351.383 -351.422 -351.427 -351.484 -351.603 -351.67 -351.668 -351.717 -351.703 -351.658 -351.593 -351.612 -351.635 -351.615 -351.644 -351.751 -351.881 -351.981 -352.015 -351.943 -351.828 -351.797 -351.796 -351.784 -352.076 -350.861 -350.86 -350.869 -350.915 -351.025 -351.043 -350.927 -351.073 -351.266 -351.312 -351.341 -351.346 -351.311 -351.343 -351.61 -351.769 -351.713 -351.71 -351.723 -351.756 -351.82 -351.89 -351.939 -351.935 -351.921 -351.884 -351.808 -351.736 -351.733 -351.767 -351.863 -352.118 -350.901 -350.909 -350.948 -351.165 -351.304 -351.426 -351.493 -351.562 -351.636 -351.68 -351.741 -351.837 -351.907 -351.943 -351.955 -351.971 -351.903 -351.846 -351.867 -351.899 -351.941 -351.968 -352.056 -352.168 -352.171 -352.129 -352.082 -352.05 -352.039 -352.04 -352.022 -352.276 -350.835 -350.892 -350.984 -350.981 -350.988 -351.166 -351.346 -351.481 -351.596 -351.589 -351.659 -351.823 -351.901 -351.895 -351.866 -351.873 -351.875 -351.753 -351.727 -351.786 -351.783 -351.753 -351.824 -351.98 -352.095 -352.099 -352.022 -351.946 -351.899 -351.854 -351.925 -352.147 -350.831 -350.901 -350.947 -350.952 -351.077 -351.278 -351.284 -351.397 -351.417 -351.412 -351.502 -351.625 -351.666 -351.647 -351.698 -351.692 -351.653 -351.59 -351.608 -351.626 -351.615 -351.65 -351.759 -351.881 -351.981 -352.024 -351.946 -351.827 -351.799 -351.797 -351.782 -352.106 -350.858 -350.859 -350.852 -350.885 -350.99 -350.995 -350.875 -351.026 -351.232 -351.291 -351.318 -351.294 -351.256 -351.301 -351.594 -351.78 -351.722 -351.716 -351.734 -351.794 -351.862 -351.919 -351.936 -351.925 -351.918 -351.88 -351.792 -351.723 -351.721 -351.746 -351.875 -352.177 -350.908 -350.926 -350.972 -351.161 -351.306 -351.417 -351.475 -351.548 -351.624 -351.679 -351.752 -351.844 -351.904 -351.945 -351.98 -352.007 -351.933 -351.877 -351.902 -351.915 -351.959 -351.995 -352.082 -352.165 -352.15 -352.112 -352.078 -352.057 -352.051 -352.04 -352.051 -352.297 -350.847 -350.911 -350.987 -351 -351.046 -351.229 -351.381 -351.513 -351.615 -351.627 -351.712 -351.851 -351.908 -351.899 -351.882 -351.896 -351.89 -351.769 -351.747 -351.788 -351.783 -351.762 -351.85 -351.996 -352.1 -352.105 -352.029 -351.952 -351.903 -351.87 -351.926 -352.252 -350.836 -350.917 -350.954 -350.985 -351.122 -351.287 -351.302 -351.429 -351.451 -351.464 -351.548 -351.649 -351.684 -351.674 -351.733 -351.726 -351.68 -351.616 -351.627 -351.638 -351.628 -351.674 -351.783 -351.883 -351.971 -352.012 -351.937 -351.825 -351.804 -351.803 -351.789 -352.182 -350.864 -350.873 -350.866 -350.889 -350.975 -350.964 -350.857 -351.003 -351.217 -351.288 -351.317 -351.316 -351.31 -351.373 -351.642 -351.805 -351.745 -351.731 -351.753 -351.823 -351.899 -351.953 -351.942 -351.921 -351.912 -351.88 -351.801 -351.743 -351.748 -351.79 -351.92 -352.209 -350.909 -350.925 -350.964 -351.156 -351.307 -351.422 -351.477 -351.552 -351.627 -351.676 -351.749 -351.839 -351.913 -351.967 -352.014 -352.035 -351.949 -351.893 -351.915 -351.916 -351.955 -351.992 -352.085 -352.171 -352.154 -352.104 -352.069 -352.049 -352.041 -352.032 -352.076 -352.28 -350.846 -350.903 -350.968 -350.988 -351.038 -351.252 -351.401 -351.524 -351.617 -351.616 -351.716 -351.868 -351.918 -351.902 -351.882 -351.903 -351.901 -351.771 -351.752 -351.792 -351.78 -351.761 -351.852 -352.002 -352.104 -352.108 -352.034 -351.959 -351.908 -351.871 -351.917 -352.28 -350.833 -350.908 -350.943 -350.989 -351.144 -351.305 -351.293 -351.441 -351.446 -351.451 -351.561 -351.667 -351.682 -351.662 -351.722 -351.72 -351.679 -351.618 -351.629 -351.639 -351.629 -351.679 -351.794 -351.887 -351.969 -352.012 -351.938 -351.822 -351.803 -351.8 -351.787 -352.283 -350.862 -350.872 -350.856 -350.871 -350.954 -350.935 -350.831 -350.983 -351.196 -351.273 -351.302 -351.275 -351.261 -351.35 -351.641 -351.814 -351.75 -351.734 -351.752 -351.832 -351.904 -351.951 -351.94 -351.91 -351.911 -351.871 -351.789 -351.733 -351.737 -351.781 -351.926 -352.251 -350.918 -350.945 -350.996 -351.158 -351.311 -351.41 -351.454 -351.529 -351.608 -351.671 -351.762 -351.849 -351.911 -351.96 -352.026 -352.057 -351.992 -351.939 -351.948 -351.941 -351.981 -352.029 -352.121 -352.174 -352.129 -352.079 -352.061 -352.054 -352.045 -352.031 -352.081 -352.259 -350.863 -350.928 -350.959 -351.007 -351.111 -351.33 -351.437 -351.558 -351.629 -351.652 -351.77 -351.886 -351.913 -351.902 -351.903 -351.936 -351.91 -351.778 -351.771 -351.802 -351.788 -351.778 -351.884 -352.01 -352.096 -352.11 -352.043 -351.958 -351.904 -351.875 -351.941 -352.254 -350.84 -350.925 -350.939 -351.024 -351.189 -351.292 -351.305 -351.465 -351.459 -351.502 -351.612 -351.677 -351.684 -351.688 -351.766 -351.764 -351.71 -351.646 -351.65 -351.654 -351.642 -351.699 -351.817 -351.892 -351.959 -351.991 -351.918 -351.813 -351.803 -351.8 -351.805 -352.264 -350.869 -350.889 -350.873 -350.883 -350.948 -350.907 -350.822 -350.973 -351.183 -351.268 -351.295 -351.296 -351.348 -351.472 -351.718 -351.838 -351.774 -351.751 -351.774 -351.854 -351.906 -351.946 -351.939 -351.903 -351.897 -351.856 -351.788 -351.749 -351.762 -351.83 -351.968 -352.214 -) -; +internalField uniform 324; boundaryField { diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/controlDict b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/controlDict index 3982848c..9e131b07 100644 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/controlDict +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/controlDict @@ -51,6 +51,63 @@ libs ( functions { + Tave + { + type volFieldValue; + libs ("libfieldFunctionObjects.so"); + + log true; + writeControl timeStep; + writeInterval 10; + writeFields false; + + regionType all; + operation volAverage; + + weightField voidfractionRec; + + fields + ( + T + ); + } + + fluxprobe0 + { + type surfaceFieldValue; + libs ("libfieldFunctionObjects.so"); + writeControl timeStep; + writeInterval 100; + log true; + writeFields false; + regionType faceZone; + name fzcenter; + operation sum; + + fields + ( + phi + ); + } + + fluxprobe1 + { + type surfaceFieldValue; + libs ("libfieldFunctionObjects.so"); + writeControl timeStep; + writeInterval 100; + log true; + writeFields false; + regionType faceZone; + name fz0; + operation sum; + + fields + ( + phi + ); + } + fieldAverage1 { type fieldAverage; @@ -125,13 +182,12 @@ functions ); } - fieldOutput { type writeObjects; functionObjectLibs ( "libutilityFunctionObjects.so" ); exclusiveWriting true; - objects ("rhoRecMean" "voidfraction" "voidfractionRec" "voidfractionMean" "voidfractionRecMean" "addSourceMean" "phiSMean" "TMean" "T" "particleTemp" "particleTempMean"); + objects ("rhoRecMean" "voidfraction" "voidfractionRec" "voidfractionMean" "voidfractionRecMean" "addSourceMean" "TMean" "T" "partTemp" "partTempMean"); writeControl timeStep; writeInterval 40000; } @@ -177,10 +233,10 @@ functions scalarList newWeights(2); newWeights[0] = w0; newWeights[1] = 1-w0; -/* - scalarList newWeights(1); - newWeights[0] = 1.0; -*/ + +// scalarList newWeights(1); +// newWeights[0] = 1.0; + weightDict.set("weights",newWeights); #}; } diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSchemes b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSchemes index d5d5f7d5..64b9cdd0 100644 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSchemes +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSchemes @@ -28,13 +28,6 @@ gradSchemes divSchemes { default Gauss linear; - div(phi,U) Gauss limitedLinearV 1; - div(phi,k) Gauss limitedLinear 1; - div(phi,epsilon) Gauss limitedLinear 1; - div(phi,R) Gauss limitedLinear 1; - div(R) Gauss linear; - div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; div(phi,T) Gauss limitedLinear 1; // div(phi,T) Gauss upwind; } @@ -57,7 +50,6 @@ snGradSchemes fluxRequired { default no; - p ; T ; } diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSolution b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSolution index b77a3d41..3e21b282 100644 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSolution +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/CFD/system/fvSolution @@ -17,14 +17,6 @@ FoamFile solvers { - "(p|rho)" - { - solver PCG; - preconditioner DIC; - tolerance 1e-6; - relTol 0.01; - } - "(correctedField)" { solver PCG; @@ -33,26 +25,6 @@ solvers relTol 0.05; } - "(p|rho)Final" - { - $p; - relTol 0; - } - - "(U|k|e|epsilon|R|nuTilda|c)" - { - solver smoothSolver; - smoother GaussSeidel; - tolerance 1e-05; - relTol 0; - } - - "(U|e|k|nuTilda)Final" - { - $U; - relTol 0; - } - T { solver PBiCG; diff --git a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/DEM/in.liggghts_run b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/DEM/in.liggghts_run index d63ff06f..4348a54a 100755 --- a/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/DEM/in.liggghts_run +++ b/tutorials/rcfdemSolverCoupledHeatTransfer/FluidizedBed_HeatSources/rCFD/DEM/in.liggghts_run @@ -39,7 +39,6 @@ variable rfPW2 equal 0.1 variable Tpart equal 330 variable dt equal 0.0025 -#0.001 variable skin equal 0.0005 ############################################### @@ -112,13 +111,9 @@ variable Tave equal v_sumT1/v_np fix printheat all print 10 "${time} ${Tave}" file ../DEM/temp_ave.txt title "#time T_ave" -#fix tdist1 all ave/histo 1000 1 1000 324 380 56 f_Temp[0] mode vector file ../DEM/temp_histo.txt title1 "Particle temperatures [K]" -#fix tdist2 all ave/histo 1000 1 1000 324 380 448 f_Temp[0] mode vector file ../DEM/temp_histo_fine.txt title1 "Particle temperatures [K]" - fix tdist1 all ave/histo 400 1 400 324 380 56 f_Temp[0] mode vector file ../DEM/temp_histo.txt title1 "Particle temperatures [K]" fix tdist2 all ave/histo 400 1 400 324 380 448 f_Temp[0] mode vector file ../DEM/temp_histo_fine.txt title1 "Particle temperatures [K]" - fix integr all nve/sphere #screen output @@ -131,3 +126,6 @@ dump dmp all custom/vtk 10000 ../DEM/post/dump*.liggghts_coupled.vtk id type x run 1 set region total property/atom Temp ${Tpart} + +# heat sources are already set in the restart file; if they would not have been - or if restarting in a different way -, set them now +#set region insReg property/atom heatSource 3.3379e-04 # = V_p x \dot{q} From e95e1ec6adb184979edc8c3b67535ffcbb2c50a2 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 09:57:58 +0200 Subject: [PATCH 08/44] clean up ParmarBassetForce --- .../ParmarBassetForce/ParmarBassetForce.C | 38 ------------------- 1 file changed, 38 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index 79a72b32..b311f7f6 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -134,10 +134,6 @@ ParmarBassetForce::ParmarBassetForce particleCloud_.probeM().vectorFields_.append("ParmarBassetForce"); //first entry must the be the force particleCloud_.probeM().vectorFields_.append("Urel"); particleCloud_.probeM().vectorFields_.append("ddtUrel"); - // - particleCloud_.probeM().vectorFields_.append("UrelNoSmooth"); - particleCloud_.probeM().vectorFields_.append("ddtUrelNoSmooth"); - // particleCloud_.probeM().vectorFields_.append("Fshort"); particleCloud_.probeM().vectorFields_.append("Flong1"); particleCloud_.probeM().vectorFields_.append("Flong2"); @@ -220,22 +216,12 @@ void ParmarBassetForce::setForce() const Urel_ = Us_ - U_; ddtUrel_ = fvc::ddt(Us_) - fvc::ddt(U_) - (Us_ & fvc::grad(U_)); - // - volVectorField UrelNoSmooth_ = Urel_; - volVectorField ddtUrelNoSmooth_ = ddtUrel_; - // - smoothingM().smoothen(Urel_); smoothingM().smoothen(ddtUrel_); interpolationCellPoint UrelInterpolator_(Urel_); interpolationCellPoint ddtUrelInterpolator_(ddtUrel_); - // - interpolationCellPoint UrelNoSmoothInterpolator_(UrelNoSmooth_); - interpolationCellPoint ddtUrelNoSmoothInterpolator_(ddtUrelNoSmooth_); - // - for(int index = 0;index < particleCloud_.numberOfParticles(); index++) { vector ParmarBassetForce(0,0,0); @@ -412,34 +398,10 @@ void ParmarBassetForce::setForce() const Flong2[i] = FHist_[1][0][index][i]; } - // - // relative velocity (m/s) - vector UrelNoSmooth; - vector ddtUrelNoSmooth; - - if(forceSubM(0).interpolation()) - UrelNoSmooth = UrelNoSmoothInterpolator_.interpolate(position,cellI); - else - UrelNoSmooth = UrelNoSmooth_[cellI]; - - // acceleration (m/s2) - if(forceSubM(0).interpolation()) - ddtUrelNoSmooth = ddtUrelNoSmoothInterpolator_.interpolate(position,cellI); - else - ddtUrelNoSmooth = ddtUrelNoSmooth_[cellI]; - - UrelNoSmooth /= mps; - ddtUrelNoSmooth /= mpss; - // - #include "setupProbeModelfields.H" vValues.append(ParmarBassetForce); //first entry must the be the force vValues.append(Urel); vValues.append(ddtUrel); - // - vValues.append(UrelNoSmooth); - vValues.append(ddtUrelNoSmooth); - // vValues.append(Fshort); vValues.append(Flong1); vValues.append(Flong2); From d35249aa3c661440190c42b7415bb202a89ce415 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 10:03:11 +0200 Subject: [PATCH 09/44] clean up ParmarBassetForce --- .../forceModel/ParmarBassetForce/ParmarBassetForce.C | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index b311f7f6..1d8ff351 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -184,8 +184,6 @@ void ParmarBassetForce::setForce() const vector Urel(0,0,0); vector ddtUrel(0,0,0); - scalar t0min = 0.00; - const volScalarField& nufField = forceSubM(0).nuField(); const volScalarField& rhoField = forceSubM(0).rhoField(); @@ -294,14 +292,6 @@ void ParmarBassetForce::setForce() const update_ddtUrelHist(ddtUrel,index); // add current dim.less ddtUrel to history update_rHist(r,index); // add current r to history - // warning and reset for too small t0 - if (t0(FHistSize_,NULL)), // FHist_[k={1,2}-1][ndt in past][particle ID][dim] - gH0_(NULL), - tRef_(NULL), - mRef_(NULL), - lRef_(NULL), + ddtUrelHistRegName_(typeName + "ddtUrelHist"), // indexed as: ddtUrelHist_[particle ID][iDim*nHist_+iHist] + rHistRegName_(typeName + "rHist"), // indexed as: rHist_[particle ID][iHist] + FHistRegName_(typeName + "FHist"), // indexed as: ddtUrelHist_[particle ID][iDim*FHistSize_*2+iHist*2+k] + gH0RegName_(typeName + "gH0"), + tRefRegName_(typeName + "tRef"), + mRefRegName_(typeName + "mRef"), + lRefRegName_(typeName + "lRef"), Urel_ ( IOobject ( @@ -116,6 +116,15 @@ ParmarBassetForce::ParmarBassetForce ) { + // allocate particle properties + particleCloud_.registerParticleProperty(ddtUrelHistRegName_, 3*nHist_,NOTONCPU,false); + particleCloud_.registerParticleProperty( rHistRegName_, nHist_,NOTONCPU,false); + particleCloud_.registerParticleProperty( FHistRegName_,6*FHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( gH0RegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( tRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( mRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( lRefRegName_, 1 ,NOTONCPU,false); + // init force sub model setForceSubModels(propsDict_); // define switches which can be read from dict @@ -154,20 +163,6 @@ ParmarBassetForce::ParmarBassetForce ParmarBassetForce::~ParmarBassetForce() { - particleCloud_.dataExchangeM().destroy(gH0_, 1); - particleCloud_.dataExchangeM().destroy(tRef_, 1); - particleCloud_.dataExchangeM().destroy(mRef_, 1); - particleCloud_.dataExchangeM().destroy(lRef_, 1); - - for (int i=0; i(ddtUrelHistRegName_); + double**& rHist_ = particleCloud_.getParticlePropertyRef( rHistRegName_); + double**& FHist_ = particleCloud_.getParticlePropertyRef( FHistRegName_); + double**& gH0_ = particleCloud_.getParticlePropertyRef( gH0RegName_); + double**& tRef_ = particleCloud_.getParticlePropertyRef( tRefRegName_); + double**& mRef_ = particleCloud_.getParticlePropertyRef( mRefRegName_); + double**& lRef_ = particleCloud_.getParticlePropertyRef( lRefRegName_); vector position(0,0,0); vector Urel(0,0,0); @@ -256,8 +255,8 @@ void ParmarBassetForce::setForce() const if (r<0.25 || r>2.0) { - gH0_[index][0] = NOTONCPU; //reset reference - ddtUrelHist_[0][index][0] = NOTONCPU; //reset ddtU history (only component used for checking nKnown) + gH0_[index][0] = NOTONCPU; //reset reference + ddtUrelHist_[index][0] = NOTONCPU; //reset ddtU history (only component used for checking nKnown) } } @@ -269,7 +268,7 @@ void ParmarBassetForce::setForce() const scalar Vs = rs*rs*rs*M_PI*4/3; scalar mRef = Vs*rhoField[cellI] * gH * 5.2863; // 9/(2*sqrt(pi))*(256/pi)^(1/6) = 5.2863 (Eq. 3.2) - gH0_[index][0] = gH; + gH0_[index][0] = gH; tRef_[index][0] = tRef; mRef_[index][0] = mRef; lRef_[index][0] = rs; @@ -289,14 +288,14 @@ void ParmarBassetForce::setForce() const ddtUrel /= mpss; // update ddtUrel and r history - update_ddtUrelHist(ddtUrel,index); // add current dim.less ddtUrel to history - update_rHist(r,index); // add current r to history + update_ddtUrelHist(ddtUrelHist_,ddtUrel,index); // add current dim.less ddtUrel to history + update_rHist(rHist_,r,index); // add current r to history // check length of known history int nKnown = 0; for (int j=0; j0) { for (int i=0; i<3; i++) // loop over dimensions - Fshort[i] = -calculateK0(r,dt) * ddtUrelHist_[0][index][i]; + Fshort[i] = -calculateK0(r,dt) * ddtUrelHist_[index][i*nHist_]; } // int_dt^t0 K(r,xi) * ddtU(t-xi) dxi (trapezoid rule) @@ -320,32 +319,32 @@ void ParmarBassetForce::setForce() const for (int j=1; j0; j--) // loop over past times - ddtUrelHist_[j][index][i] = ddtUrelHist_[j-1][index][i]; + ddtUrelHist_[index][i*nHist_+j] = ddtUrelHist_[index][i*nHist_+j-1]; - ddtUrelHist_[0][index][i] = ddtUrel[i]; + ddtUrelHist_[index][i*nHist_] = ddtUrel[i]; } } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -void Foam::ParmarBassetForce::update_rHist(scalar r, int index) const +void Foam::ParmarBassetForce::update_rHist(double**& rHist_, scalar r, int index) const { for (int j=nHist_-1; j>0; j--) // loop over past times - rHist_[j][index][0] = rHist_[j-1][index][0]; + rHist_[index][j] = rHist_[index][j-1]; - rHist_[0][index][0] = r; + rHist_[index][0] = r; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -void Foam::ParmarBassetForce::update_FHist(const vector& F1, const vector& F2, int index) const +void Foam::ParmarBassetForce::update_FHist(double**& FHist_, const vector& F1, const vector& F2, int index) const { for (int i=0; i<3; i++) // loop over dimensions { for (int k=0; k<2; k++) // loop over F1, F2 for (int j=FHistSize_-1; j>0; j--) // loop over past times - FHist_[k][j][index][i] = FHist_[k][j-1][index][i]; + FHist_[index][i*FHistSize_*2+j*2+k] = FHist_[index][i*FHistSize_*2+(j-1)*2+k]; - FHist_[0][0][index][i] = F1[i]; - FHist_[1][0][index][i] = F2[i]; + FHist_[index][i*FHistSize_*2 ] = F1[i]; + FHist_[index][i*FHistSize_*2+1] = F2[i]; } } @@ -516,18 +494,18 @@ void Foam::ParmarBassetForce::calculateCoeffs(int k, scalar t0, scalar r, double } } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -void Foam::ParmarBassetForce::solveFlongODE(int k, double C[4], scalar dt, int index) const +void Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUrelHist_, int k, double C[4], scalar dt, int index) const { if (discOrder_==1) { for (int i=0; i<3; i++) // loop over dimensions { - FHist_[k][0][index][i] = + FHist_[index][i*FHistSize_*2+k] = ( - ( C[1]/dt+2/(dt*dt)) * FHist_[k][1][index][i] - - ( 1/(dt*dt)) * FHist_[k][2][index][i] - - (C[2]+C[3]/dt ) * ddtUrelHist_[nInt_ ][index][i] - + ( C[3]/dt ) * ddtUrelHist_[nInt_+1][index][i] + ( C[1]/dt+2/(dt*dt)) * FHist_[index][i*FHistSize_*2+1*2+k] + - ( 1/(dt*dt)) * FHist_[index][i*FHistSize_*2+2*2+k] + - (C[2]+C[3]/dt ) * ddtUrelHist_[index][i*nHist_+nInt_ ] + + ( C[3]/dt ) * ddtUrelHist_[index][i*nHist_+nInt_+1] ) / (C[0]+C[1]/dt+1/(dt*dt)); // Eq. 3.20 using first order temporal discretisation } } @@ -535,41 +513,21 @@ void Foam::ParmarBassetForce::solveFlongODE(int k, double C[4], scalar dt, int i { for (int i=0; i<3; i++) // loop over dimensions { - FHist_[k][0][index][i] = + FHist_[index][i*FHistSize_*2+k] = ( - ( 4*C[1]/(2*dt) + 24/(4*dt*dt)) * FHist_[k][1][index][i] - - ( C[1]/(2*dt) + 22/(4*dt*dt)) * FHist_[k][2][index][i] - + ( 8/(4*dt*dt)) * FHist_[k][3][index][i] - - ( 1/(4*dt*dt)) * FHist_[k][4][index][i] + ( 4*C[1]/(2*dt) + 24/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+1*2+k] + - ( C[1]/(2*dt) + 22/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+2*2+k] + + ( 8/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+3*2+k] + - ( 1/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+4*2+k] - - (C[2] + 3*C[3]/(2*dt) ) * ddtUrelHist_[nInt_ ][index][i] - + ( 4*C[3]/(2*dt) ) * ddtUrelHist_[nInt_+1][index][i] - - ( C[3]/(2*dt) ) * ddtUrelHist_[nInt_+2][index][i] + - (C[2] + 3*C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_ ] + + ( 4*C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_+1] + - ( C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_+2] ) / (C[0] + 3*C[1]/(2*dt) + 9/(4*dt*dt)); // Eq. 3.20 using second order temporal discretisation } } } -void Foam::ParmarBassetForce::rescaleHist(scalar tScale, scalar mScale, scalar lScale, scalar rScale, int index) const -{ - for (int i=0; i<3; i++) // loop over dimensions - { - // rescale ddtU history - for (int j=0; j ddtUrelHist_; + const word ddtUrelHistRegName_; - mutable List rHist_; + const word rHistRegName_; - mutable List> FHist_; + const word FHistRegName_; - mutable double** gH0_; + const word gH0RegName_; - mutable double** tRef_; + const word tRefRegName_; - mutable double** mRef_; + const word mRefRegName_; - mutable double** lRef_; + const word lRefRegName_; mutable volVectorField Urel_; @@ -101,17 +101,15 @@ private: scalar trapWeight(int i, int n) const; - void update_ddtUrelHist(const vector& ddtUrel, int index) const; + void update_ddtUrelHist(double**& ddtUrelHist_, const vector& ddtUrel, int index) const; - void update_rHist(scalar r, int index) const; + void update_rHist(double**& rHist_, scalar r, int index) const; - void update_FHist(const vector& F1, const vector& F2, int index) const; + void update_FHist(double**& FHist_, const vector& F1, const vector& F2, int index) const; void calculateCoeffs(int k, scalar t0, scalar r, double c[2][4][3], double chi[2][4][2], double C[4]) const; - void solveFlongODE(int k, double C[4], scalar dt, int index) const; - - void rescaleHist(scalar tScale, scalar mScale, scalar lScale, scalar rScale, int index) const; + void solveFlongODE(double**& FHist_, double**& ddtUrelHist_, int k, double C[4], scalar dt, int index) const; public: @@ -136,9 +134,6 @@ public: // Member Functions void setForce() const; - - void reAllocArrays() const; - inline const smoothingModel& smoothingM() const { return smoothingModel_; From c3f609b0e9180955cd1f5c430a5cf568570daab3 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:05:48 +0200 Subject: [PATCH 11/44] allocate uRelOld only when needed, save memory --- .../forceModel/virtualMassForce/virtualMassForce.C | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C index 4ef36cf9..70789880 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C @@ -99,7 +99,12 @@ virtualMassForce::virtualMassForce ) ) { - particleCloud_.registerParticleProperty(UrelOldRegName_,3,NOTONCPU,false); + // allocate UrelOld only if needed + int UrelOldSize = 0; + if(!splitUrelCalculation_ || !useUs_ ) + UrelOldSize = 3; + + particleCloud_.registerParticleProperty(UrelOldRegName_,UrelOldSize,NOTONCPU,false); // init force sub model setForceSubModels(propsDict_); From 7ce49bf21ce3b46f81fd5d53169314e47e6dfb18 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:20:29 +0200 Subject: [PATCH 12/44] minor cleanup --- .../subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index d8603504..7263f28f 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -34,7 +34,6 @@ Description #include "ParmarBassetForce.H" #include "addToRunTimeSelectionTable.H" #include "smoothingModel.H" -#include "constDiffSmoothing.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // From 19e780f93bebacdf29b17865272c637d04080bd6 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:48:50 +0200 Subject: [PATCH 13/44] added verbose mode for ParmarBassetForce --- .../ParmarBassetForce/ParmarBassetForce.C | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index 7263f28f..604cf816 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -129,6 +129,7 @@ ParmarBassetForce::ParmarBassetForce // define switches which can be read from dict forceSubM(0).setSwitchesList(SW_TREAT_FORCE_EXPLICIT,true); // activate treatExplicit switch forceSubM(0).setSwitchesList(SW_INTERPOLATION,true); // activate search for interpolate switch + forceSubM(0).setSwitchesList(SW_VERBOSE,true); // activate search for verbose switch forceSubM(0).readSwitches(); //Extra switches/settings @@ -372,6 +373,25 @@ void ParmarBassetForce::setForce() const } ParmarBassetForce *= newton; + if (forceSubM(0).verbose() && index >= 0 && index < 2) + { + vector Flong1(0,0,0); + vector Flong2(0,0,0); + + for (int i=0; i<3; i++) // loop over dimensions + { + Flong1[i] = FHist_[index][i*FHistSize_*2 ]*newton; + Flong2[i] = FHist_[index][i*FHistSize_*2+1]*newton; + } + + Pout << "cellI = " << cellI << endl; + Pout << "index = " << index << endl; + Pout << "Fshort = " << Fshort*newton << endl; + Pout << "Flong1 = " << Flong1 << endl; + Pout << "Flong2 = " << Flong2 << endl; + Pout << "Ftotal = " << ParmarBassetForce << endl; + } + // Set value fields and write the probe if(probeIt_) { From a10c773e3125f44fda58adc60b2dbc290c664c3f Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:49:16 +0200 Subject: [PATCH 14/44] [DOC] added verbose mode for ParmarBassetForce --- doc/forceModel_ParmarBassetForce.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/forceModel_ParmarBassetForce.txt b/doc/forceModel_ParmarBassetForce.txt index f18206ca..bc022f53 100644 --- a/doc/forceModel_ParmarBassetForce.txt +++ b/doc/forceModel_ParmarBassetForce.txt @@ -23,7 +23,8 @@ ParmarBassetForceProps nIntegral scalar1; discretisationOrder scalar2; treatForceExplicit switch1; - interpolation switch2; + verbose switch2; + interpolation switch3; smoothingModel "smoothingModel"; \} :pre @@ -33,6 +34,7 @@ ParmarBassetForceProps {scalar2} = (1 or 2) discretisation order of the far history differential equations :l {switch1} = (optional, default true) sub model switch, see "forceSubModel"_forceSubModel.html for details :l {switch2} = (optional, default false) sub model switch, see "forceSubModel"_forceSubModel.html for details :l +{switch3} = (optional, default false) sub model switch, see "forceSubModel"_forceSubModel.html for details :l {smoothingModel} = name of smoothing model for the dU/dt field :l :ule From dc2be65fe3cfc1c889fe8296b57d61ecd899a16b Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 21 Oct 2022 16:22:00 +0200 Subject: [PATCH 15/44] reorder FHist to save memory --- .../ParmarBassetForce/ParmarBassetForce.C | 67 +++++++------------ .../ParmarBassetForce/ParmarBassetForce.H | 2 +- 2 files changed, 26 insertions(+), 43 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index 604cf816..d841f3d1 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -73,7 +73,7 @@ ParmarBassetForce::ParmarBassetForce nInt_(readLabel(propsDict_.lookup("nIntegral"))), discOrder_(readLabel(propsDict_.lookup("discretisationOrder"))), nHist_(nInt_+discOrder_+1), - FHistSize_(2*discOrder_+1), + FHistSize_(2*discOrder_), ddtUrelHistRegName_(typeName + "ddtUrelHist"), // indexed as: ddtUrelHist_[particle ID][iDim*nHist_+iHist] rHistRegName_(typeName + "rHist"), // indexed as: rHist_[particle ID][iHist] FHistRegName_(typeName + "FHist"), // indexed as: ddtUrelHist_[particle ID][iDim*FHistSize_*2+iHist*2+k] @@ -223,6 +223,7 @@ void ParmarBassetForce::setForce() const { vector ParmarBassetForce(0,0,0); vector Fshort(0,0,0); + vector Flong[2]={vector::zero, vector::zero}; label cellI = particleCloud_.cellIDs()[index][0]; if (cellI > -1) // particle Found @@ -328,9 +329,6 @@ void ParmarBassetForce::setForce() const //********* long term force computing (differential form) *********// - // update F1, F2 history - update_FHist(FHist_,vector::zero,vector::zero,index); - // initialise ddtUrel(t0) and Flong(:) as 0 and r(t0) as 1 if (nKnown == nInt_) { @@ -358,37 +356,28 @@ void ParmarBassetForce::setForce() const calculateCoeffs(k,t0,rHist_[index][nInt_],c,chi,C); // solve Eq. 3.20 - solveFlongODE(FHist_,ddtUrelHist_,k,C,dt,index); + Flong[k] = solveFlongODE(FHist_,ddtUrelHist_,k,C,dt,index); } } + // update F1, F2 history + update_FHist(FHist_,Flong[0],Flong[1],index); + //********* total force *********// // sum and convert to N - for (int i=0; i<3; i++) // loop over dimensions - { - ParmarBassetForce[i] = Fshort[i]; - for (int k=0; k<2; k++) // loop over F1, F2 - ParmarBassetForce[i] += FHist_[index][i*FHistSize_*2+k]; - } + ParmarBassetForce = Fshort; + for (int k=0; k<2; k++) // loop over F1, F2 + ParmarBassetForce += Flong[k]; ParmarBassetForce *= newton; if (forceSubM(0).verbose() && index >= 0 && index < 2) { - vector Flong1(0,0,0); - vector Flong2(0,0,0); - - for (int i=0; i<3; i++) // loop over dimensions - { - Flong1[i] = FHist_[index][i*FHistSize_*2 ]*newton; - Flong2[i] = FHist_[index][i*FHistSize_*2+1]*newton; - } - Pout << "cellI = " << cellI << endl; Pout << "index = " << index << endl; Pout << "Fshort = " << Fshort*newton << endl; - Pout << "Flong1 = " << Flong1 << endl; - Pout << "Flong2 = " << Flong2 << endl; + Pout << "Flong1 = " << Flong[0]*newton << endl; + Pout << "Flong2 = " << Flong[1]*newton << endl; Pout << "Ftotal = " << ParmarBassetForce << endl; } @@ -397,22 +386,13 @@ void ParmarBassetForce::setForce() const { scalar ReRef = 0.75/(gH0_[index][0]-0.105); - vector Flong1(0,0,0); - vector Flong2(0,0,0); - - for (int i=0; i<3; i++) // loop over dimensions - { - Flong1[i] = FHist_[index][i*FHistSize_*2 ]; - Flong2[i] = FHist_[index][i*FHistSize_*2+1]; - } - #include "setupProbeModelfields.H" vValues.append(ParmarBassetForce); //first entry must the be the force vValues.append(Urel); vValues.append(ddtUrel); vValues.append(Fshort); - vValues.append(Flong1); - vValues.append(Flong2); + vValues.append(Flong[0]); + vValues.append(Flong[1]); sValues.append(ReRef); sValues.append(tRef_[index][0]); sValues.append(mRef_[index][0]); @@ -513,16 +493,18 @@ void Foam::ParmarBassetForce::calculateCoeffs(int k, scalar t0, scalar r, double } } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -void Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUrelHist_, int k, double C[4], scalar dt, int index) const +vector Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUrelHist_, int k, double C[4], scalar dt, int index) const { + vector Flong = vector::zero; + if (discOrder_==1) { for (int i=0; i<3; i++) // loop over dimensions { - FHist_[index][i*FHistSize_*2+k] = + Flong[i] = ( - ( C[1]/dt+2/(dt*dt)) * FHist_[index][i*FHistSize_*2+1*2+k] - - ( 1/(dt*dt)) * FHist_[index][i*FHistSize_*2+2*2+k] + ( C[1]/dt+2/(dt*dt)) * FHist_[index][i*FHistSize_*2 +k] + - ( 1/(dt*dt)) * FHist_[index][i*FHistSize_*2+2+k] - (C[2]+C[3]/dt ) * ddtUrelHist_[index][i*nHist_+nInt_ ] + ( C[3]/dt ) * ddtUrelHist_[index][i*nHist_+nInt_+1] ) / (C[0]+C[1]/dt+1/(dt*dt)); // Eq. 3.20 using first order temporal discretisation @@ -532,12 +514,12 @@ void Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUrelH { for (int i=0; i<3; i++) // loop over dimensions { - FHist_[index][i*FHistSize_*2+k] = + Flong[i] = ( - ( 4*C[1]/(2*dt) + 24/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+1*2+k] - - ( C[1]/(2*dt) + 22/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+2*2+k] - + ( 8/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+3*2+k] - - ( 1/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+4*2+k] + ( 4*C[1]/(2*dt) + 24/(4*dt*dt)) * FHist_[index][i*FHistSize_*2 +k] + - ( C[1]/(2*dt) + 22/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+2+k] + + ( 8/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+4+k] + - ( 1/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+6+k] - (C[2] + 3*C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_ ] + ( 4*C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_+1] @@ -545,6 +527,7 @@ void Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUrelH ) / (C[0] + 3*C[1]/(2*dt) + 9/(4*dt*dt)); // Eq. 3.20 using second order temporal discretisation } } + return Flong; } } // End namespace Foam diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H index 03051678..df6e20a8 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H @@ -109,7 +109,7 @@ private: void calculateCoeffs(int k, scalar t0, scalar r, double c[2][4][3], double chi[2][4][2], double C[4]) const; - void solveFlongODE(double**& FHist_, double**& ddtUrelHist_, int k, double C[4], scalar dt, int index) const; + vector solveFlongODE(double**& FHist_, double**& ddtUrelHist_, int k, double C[4], scalar dt, int index) const; public: From ab73bf86ac1ef834243f1b4653c680ea07182c23 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Mon, 24 Oct 2022 09:42:25 +0200 Subject: [PATCH 16/44] reorder ddtUrelHist and rHist to save memory --- .../ParmarBassetForce/ParmarBassetForce.C | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index d841f3d1..17052c57 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -72,7 +72,7 @@ ParmarBassetForce::ParmarBassetForce Us_(sm.mesh().lookupObject (UsFieldName_)), nInt_(readLabel(propsDict_.lookup("nIntegral"))), discOrder_(readLabel(propsDict_.lookup("discretisationOrder"))), - nHist_(nInt_+discOrder_+1), + nHist_(nInt_+discOrder_), FHistSize_(2*discOrder_), ddtUrelHistRegName_(typeName + "ddtUrelHist"), // indexed as: ddtUrelHist_[particle ID][iDim*nHist_+iHist] rHistRegName_(typeName + "rHist"), // indexed as: rHist_[particle ID][iHist] @@ -282,18 +282,12 @@ void ParmarBassetForce::setForce() const scalar dt = U_.mesh().time().deltaT().value() / tRef_[index][0]; // dim.less scalar t0 = nInt_*dt; // dim.less - //********* update histories *********// - // non-dimensionlise Urel /= mps; ddtUrel /= mpss; - // update ddtUrel and r history - update_ddtUrelHist(ddtUrelHist_,ddtUrel,index); // add current dim.less ddtUrel to history - update_rHist(rHist_,r,index); // add current r to history - // check length of known history - int nKnown = 0; + int nKnown = 1; // we always know the current step for (int j=0; j0) - { - for (int i=0; i<3; i++) // loop over dimensions - Fshort[i] = -calculateK0(r,dt) * ddtUrelHist_[index][i*nHist_]; - } + for (int i=0; i<3; i++) // loop over dimensions + Fshort[i] = -calculateK0(r,dt) * ddtUrel[i]; // int_dt^t0 K(r,xi) * ddtU(t-xi) dxi (trapezoid rule) if (nShort>2) { - for (int j=1; j Date: Mon, 24 Oct 2022 11:47:51 +0200 Subject: [PATCH 17/44] remove unneeded component of rHist to save memory --- .../ParmarBassetForce/ParmarBassetForce.C | 53 ++++++++++--------- .../ParmarBassetForce/ParmarBassetForce.H | 6 ++- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index 17052c57..2446796b 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -72,9 +72,10 @@ ParmarBassetForce::ParmarBassetForce Us_(sm.mesh().lookupObject (UsFieldName_)), nInt_(readLabel(propsDict_.lookup("nIntegral"))), discOrder_(readLabel(propsDict_.lookup("discretisationOrder"))), - nHist_(nInt_+discOrder_), + ddtUrelHistSize_(nInt_+discOrder_), + rHistSize_(nInt_), FHistSize_(2*discOrder_), - ddtUrelHistRegName_(typeName + "ddtUrelHist"), // indexed as: ddtUrelHist_[particle ID][iDim*nHist_+iHist] + ddtUrelHistRegName_(typeName + "ddtUrelHist"), // indexed as: ddtUrelHist_[particle ID][iDim*ddtUrelHistSize_+iHist] rHistRegName_(typeName + "rHist"), // indexed as: rHist_[particle ID][iHist] FHistRegName_(typeName + "FHist"), // indexed as: ddtUrelHist_[particle ID][iDim*FHistSize_*2+iHist*2+k] gH0RegName_(typeName + "gH0"), @@ -116,13 +117,13 @@ ParmarBassetForce::ParmarBassetForce { // allocate particle properties - particleCloud_.registerParticleProperty(ddtUrelHistRegName_, 3*nHist_,NOTONCPU,false); - particleCloud_.registerParticleProperty( rHistRegName_, nHist_,NOTONCPU,false); - particleCloud_.registerParticleProperty( FHistRegName_,6*FHistSize_,NOTONCPU,false); - particleCloud_.registerParticleProperty( gH0RegName_, 1 ,NOTONCPU,false); - particleCloud_.registerParticleProperty( tRefRegName_, 1 ,NOTONCPU,false); - particleCloud_.registerParticleProperty( mRefRegName_, 1 ,NOTONCPU,false); - particleCloud_.registerParticleProperty( lRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty(ddtUrelHistRegName_,3*ddtUrelHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( rHistRegName_, rHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( FHistRegName_, 6*FHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( gH0RegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( tRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( mRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( lRefRegName_, 1 ,NOTONCPU,false); // init force sub model setForceSubModels(propsDict_); @@ -288,7 +289,7 @@ void ParmarBassetForce::setForce() const // check length of known history int nKnown = 1; // we always know the current step - for (int j=0; j0; j--) // loop over past times - ddtUrelHist_[index][i*nHist_+j] = ddtUrelHist_[index][i*nHist_+j-1]; + for (int j=ddtUrelHistSize_-1; j>0; j--) // loop over past times + ddtUrelHist_[index][i*ddtUrelHistSize_+j] = ddtUrelHist_[index][i*ddtUrelHistSize_+j-1]; - ddtUrelHist_[index][i*nHist_] = ddtUrel[i]; + ddtUrelHist_[index][i*ddtUrelHistSize_] = ddtUrel[i]; } } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // void Foam::ParmarBassetForce::update_rHist(double**& rHist_, scalar r, int index) const { - for (int j=nHist_-1; j>0; j--) // loop over past times + for (int j=rHistSize_-1; j>0; j--) // loop over past times rHist_[index][j] = rHist_[index][j-1]; rHist_[index][0] = r; @@ -499,8 +500,8 @@ vector Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUre ( ( C[1]/dt+2/(dt*dt)) * FHist_[index][i*FHistSize_*2 +k] - ( 1/(dt*dt)) * FHist_[index][i*FHistSize_*2+2+k] - - (C[2]+C[3]/dt ) * ddtUrelHist_[index][i*nHist_+nInt_-1] - + ( C[3]/dt ) * ddtUrelHist_[index][i*nHist_+nInt_ ] + - (C[2]+C[3]/dt ) * ddtUrelHist_[index][i*ddtUrelHistSize_+nInt_-1] + + ( C[3]/dt ) * ddtUrelHist_[index][i*ddtUrelHistSize_+nInt_ ] ) / (C[0]+C[1]/dt+1/(dt*dt)); // Eq. 3.20 using first order temporal discretisation } } @@ -515,9 +516,9 @@ vector Foam::ParmarBassetForce::solveFlongODE(double**& FHist_, double**& ddtUre + ( 8/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+4+k] - ( 1/(4*dt*dt)) * FHist_[index][i*FHistSize_*2+6+k] - - (C[2] + 3*C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_-1] - + ( 4*C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_ ] - - ( C[3]/(2*dt) ) * ddtUrelHist_[index][i*nHist_+nInt_+1] + - (C[2] + 3*C[3]/(2*dt) ) * ddtUrelHist_[index][i*ddtUrelHistSize_+nInt_-1] + + ( 4*C[3]/(2*dt) ) * ddtUrelHist_[index][i*ddtUrelHistSize_+nInt_ ] + - ( C[3]/(2*dt) ) * ddtUrelHist_[index][i*ddtUrelHistSize_+nInt_+1] ) / (C[0] + 3*C[1]/(2*dt) + 9/(4*dt*dt)); // Eq. 3.20 using second order temporal discretisation } } diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H index df6e20a8..1d89695d 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H @@ -71,9 +71,11 @@ private: label discOrder_; //ODE discretisation order - label nHist_; //no of timesteps to save ddtUrel history for + label ddtUrelHistSize_; //no of timesteps to save ddtUrel history for - label FHistSize_; + label rHistSize_; //no of timesteps to save r history for + + label FHistSize_; //no of timesteps to save Flong history for const word ddtUrelHistRegName_; From 2aa5c7880b26b329042951bc5674480244b4eb6c Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Mon, 24 Oct 2022 12:21:29 +0200 Subject: [PATCH 18/44] rework input --- doc/forceModel_ParmarBassetForce.txt | 6 ++--- .../ParmarBassetForce/ParmarBassetForce.C | 26 ++++++++++--------- .../ParmarBassetForce/ParmarBassetForce.H | 14 +++++----- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/doc/forceModel_ParmarBassetForce.txt b/doc/forceModel_ParmarBassetForce.txt index bc022f53..a5e41730 100644 --- a/doc/forceModel_ParmarBassetForce.txt +++ b/doc/forceModel_ParmarBassetForce.txt @@ -30,12 +30,12 @@ ParmarBassetForceProps {U} = name of the finite volume fluid velocity field :ulb,l {Us} = name of the finite volume cell averaged particle velocity field :l -{scalar1} = number of timesteps considered in the near history :l -{scalar2} = (1 or 2) discretisation order of the far history differential equations :l +{scalar1} = number of timesteps considered in the near history (integer > 1):l +{scalar2} = (optional, default 1) discretisation order of the far history differential equations (1 or 2) :l {switch1} = (optional, default true) sub model switch, see "forceSubModel"_forceSubModel.html for details :l {switch2} = (optional, default false) sub model switch, see "forceSubModel"_forceSubModel.html for details :l {switch3} = (optional, default false) sub model switch, see "forceSubModel"_forceSubModel.html for details :l -{smoothingModel} = name of smoothing model for the dU/dt field :l +{smoothingModel} = name of smoothing model for the dUrel/dt field :l :ule [Examples:] diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index 2446796b..6ccc631b 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -70,8 +70,8 @@ ParmarBassetForce::ParmarBassetForce U_(sm.mesh().lookupObject (velFieldName_)), UsFieldName_(propsDict_.lookup("granVelFieldName")), Us_(sm.mesh().lookupObject (UsFieldName_)), - nInt_(readLabel(propsDict_.lookup("nIntegral"))), - discOrder_(readLabel(propsDict_.lookup("discretisationOrder"))), + nInt_(propsDict_.lookupOrDefault("nIntegral", -1)), + discOrder_(propsDict_.lookupOrDefault("discretisationOrder", 1)), ddtUrelHistSize_(nInt_+discOrder_), rHistSize_(nInt_), FHistSize_(2*discOrder_), @@ -115,16 +115,6 @@ ParmarBassetForce::ParmarBassetForce ) ) { - - // allocate particle properties - particleCloud_.registerParticleProperty(ddtUrelHistRegName_,3*ddtUrelHistSize_,NOTONCPU,false); - particleCloud_.registerParticleProperty( rHistRegName_, rHistSize_,NOTONCPU,false); - particleCloud_.registerParticleProperty( FHistRegName_, 6*FHistSize_,NOTONCPU,false); - particleCloud_.registerParticleProperty( gH0RegName_, 1 ,NOTONCPU,false); - particleCloud_.registerParticleProperty( tRefRegName_, 1 ,NOTONCPU,false); - particleCloud_.registerParticleProperty( mRefRegName_, 1 ,NOTONCPU,false); - particleCloud_.registerParticleProperty( lRefRegName_, 1 ,NOTONCPU,false); - // init force sub model setForceSubModels(propsDict_); // define switches which can be read from dict @@ -139,6 +129,18 @@ ParmarBassetForce::ParmarBassetForce if (discOrder_ < 1 || discOrder_ > 2) FatalError << "Parmar Basset Force: Discretisation order > 2 not implemented!" << abort(FatalError); + if (nInt_ < 1) + FatalError << "Parmar Basset Force: nIntegral missing or invalid, must be > 1" << abort(FatalError); + + // allocate particle properties + particleCloud_.registerParticleProperty(ddtUrelHistRegName_,3*ddtUrelHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( rHistRegName_, rHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( FHistRegName_, 6*FHistSize_,NOTONCPU,false); + particleCloud_.registerParticleProperty( gH0RegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( tRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( mRefRegName_, 1 ,NOTONCPU,false); + particleCloud_.registerParticleProperty( lRefRegName_, 1 ,NOTONCPU,false); + //Append the field names to be probed particleCloud_.probeM().initialize(typeName, typeName+".logDat"); particleCloud_.probeM().vectorFields_.append("ParmarBassetForce"); //first entry must the be the force diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H index 1d89695d..122e9172 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.H @@ -59,23 +59,23 @@ class ParmarBassetForce private: dictionary propsDict_; - word velFieldName_; + const word velFieldName_; const volVectorField& U_; - word UsFieldName_; + const word UsFieldName_; const volVectorField& Us_; - label nInt_; //no of timesteps to solve full integral + const int nInt_; //no of timesteps to solve full integral - label discOrder_; //ODE discretisation order + const int discOrder_; //ODE discretisation order - label ddtUrelHistSize_; //no of timesteps to save ddtUrel history for + const int ddtUrelHistSize_; //no of timesteps to save ddtUrel history for - label rHistSize_; //no of timesteps to save r history for + const int rHistSize_; //no of timesteps to save r history for - label FHistSize_; //no of timesteps to save Flong history for + const int FHistSize_; //no of timesteps to save Flong history for const word ddtUrelHistRegName_; From 20e75cf64fc44d125d8a247c91f11521a4da7a5c Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Mon, 24 Oct 2022 12:31:19 +0200 Subject: [PATCH 19/44] eliminate pow() for performance --- .../forceModel/ParmarBassetForce/ParmarBassetForce.C | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C index 6ccc631b..5dcb7e39 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/ParmarBassetForce/ParmarBassetForce.C @@ -255,7 +255,8 @@ void ParmarBassetForce::setForce() const if (gH0_[index][0]!=NOTONCPU) { - r = pow(gH0_[index][0]/gH,1.5); // Eq. 3.4 + scalar gHratio = gH0_[index][0]/gH; + r = gHratio*sqrt(gHratio); // gHratio^1.5, Eq. 3.4 if (r<0.25 || r>2.0) { @@ -314,7 +315,8 @@ void ParmarBassetForce::setForce() const for (int j=0; j<(nShort-1); j++) // we don't use the current step here, hence nShort-1 { scalar xi = (j+1)*dt; - scalar K = pow((pow(xi,.25) + rHist_[index][j]*xi),-2.); // Eq. 3.4 + scalar invsqrtK = sqrt(sqrt(xi)) + rHist_[index][j]*xi; // K^-0.5 + scalar K = 1./(invsqrtK*invsqrtK); // Eq. 3.4 for (int i=0; i<3; i++) // loop over dimensions Fshort[i] -= trapWeight(j,nShort-1) * K * ddtUrelHist_[index][i*ddtUrelHistSize_+j] * dt; @@ -416,7 +418,7 @@ void ParmarBassetForce::setForce() const scalar Foam::ParmarBassetForce::calculateK0(scalar r, scalar dt) const { scalar cbrtr = cbrt(r); // cube root of r - scalar gamma = cbrtr*pow(dt,0.25); + scalar gamma = cbrtr*sqrt(sqrt(dt)); /* scalar K0 = 2./(9.*pow(r,0.666)) * From 4ddf691936fe0bd7173ea2ba6415bea203184b33 Mon Sep 17 00:00:00 2001 From: tmjnijssen Date: Thu, 14 Apr 2022 15:29:10 +0200 Subject: [PATCH 20/44] add transfer of fluid properties to LIGGGHTS --- src/lagrangian/cfdemParticle/Make/files | 1 + .../transferFluidProperties.C | 108 ++++++++++++++++++ .../transferFluidProperties.H | 80 +++++++++++++ src/lagrangian/cfdemParticleComp/Make/files | 1 + 4 files changed, 190 insertions(+) create mode 100644 src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C create mode 100644 src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files index 00d33dbd..b0f4449f 100644 --- a/src/lagrangian/cfdemParticle/Make/files +++ b/src/lagrangian/cfdemParticle/Make/files @@ -96,6 +96,7 @@ $(forceModels)/potentialRelaxation/potentialRelaxation.C $(forceModels)/BeetstraDrag/BeetstraDrag.C $(forceModels)/BeetstraDragPoly/BeetstraDragPoly.C $(forceModels)/dSauter/dSauter.C +$(forceModels)/transferFluidProperties/transferFluidProperties.C $(forceModels)/Fines/Fines.C $(forceModels)/Fines/FinesFields.C $(forceModels)/Fines/FanningDynFines.C diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C new file mode 100644 index 00000000..5faf375d --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C @@ -0,0 +1,108 @@ +/*---------------------------------------------------------------------------*\ +License + This is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This code is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + You should have received a copy of the GNU General Public License + along with this code. If not, see . + + Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria + +Description + transfer fluid properties to LIGGGHTS + +SourceFiles + transferFluidProperties.C +\*---------------------------------------------------------------------------*/ + +#include "error.H" + +#include "transferFluidProperties.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(transferFluidProperties, 0); + +addToRunTimeSelectionTable +( + forceModel, + transferFluidProperties, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +transferFluidProperties::transferFluidProperties +( + const dictionary& dict, + cfdemCloud& sm +) +: + forceModel(dict,sm), + propsDict_(dict.subDict(typeName + "Props")), + verbose_(propsDict_.lookupOrDefault("verbose",false)) +{ + particleCloud_.registerParticleProperty("fluidDensity",1); + particleCloud_.registerParticleProperty("fluidViscosity",1); + + // init force sub model + setForceSubModels(propsDict_); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +transferFluidProperties::~transferFluidProperties() +{ +} + +// * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // + + +// * * * * * * * * * * * * * * * public Member Functions * * * * * * * * * * * * * // + +void transferFluidProperties::setForce() const +{ + double**& fluidDensity_ = particleCloud_.getParticlePropertyRef("fluidDensity"); + double**& fluidViscosity_ = particleCloud_.getParticlePropertyRef("fluidViscosity"); + + const volScalarField& rhoField = forceSubM(0).rhoField(); + const volScalarField& nufField = forceSubM(0).nuField(); + + label cellI = 0; + + for(int index = 0; index < particleCloud_.numberOfParticles(); ++index) + { + cellI = particleCloud_.cellIDs()[index][0]; + if (cellI >= 0) + { + fluidDensity_[index][0] = rhoField[cellI]; + fluidViscosity_[index][0] = nufField[cellI] * rhoField[cellI]; + } + } + + particleCloud_.dataExchangeM().giveData("fluidDensity","scalar-atom",fluidDensity_); + particleCloud_.dataExchangeM().giveData("fluidViscosity","scalar-atom",fluidViscosity_); + + if (verbose_) Info << "give data done" << endl; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H new file mode 100644 index 00000000..9a2853ae --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H @@ -0,0 +1,80 @@ +/*---------------------------------------------------------------------------*\ +License + This is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This code is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + You should have received a copy of the GNU General Public License + along with this code. If not, see . + + Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria + +Description + transfer fluid properties to LIGGGHTS + +SourceFiles + transferFluidProperties.C +\*---------------------------------------------------------------------------*/ + +#ifndef transferFluidProperties_H +#define transferFluidProperties_H + +#include "forceModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class transferFluidProperties Declaration +\*---------------------------------------------------------------------------*/ + +class transferFluidProperties +: + public forceModel +{ +private: + + dictionary propsDict_; + + bool verbose_; + +public: + + //- Runtime type information + TypeName("transferFluidProperties"); + + // Constructors + + //- Construct from components + transferFluidProperties + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Destructor + + ~transferFluidProperties(); + + + // Member Functions + void setForce() const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticleComp/Make/files b/src/lagrangian/cfdemParticleComp/Make/files index 2907a3ea..dfccc6e6 100644 --- a/src/lagrangian/cfdemParticleComp/Make/files +++ b/src/lagrangian/cfdemParticleComp/Make/files @@ -90,6 +90,7 @@ $(forceModels)/directedDiffusiveRelaxation/directedDiffusiveRelaxation.C $(forceModels)/BeetstraDrag/BeetstraDrag.C $(forceModels)/BeetstraDragPoly/BeetstraDragPoly.C $(forceModels)/dSauter/dSauter.C +$(forceModels)/transferFluidProperties/transferFluidProperties.C $(forceModels)/Fines/Fines.C $(forceModels)/Fines/FinesFields.C $(forceModels)/Fines/FanningDynFines.C From d6dab59bfde879c7e3f75db4de1e6d06a8416322 Mon Sep 17 00:00:00 2001 From: tmjnijssen Date: Thu, 14 Apr 2022 15:50:22 +0200 Subject: [PATCH 21/44] add interpolation --- .../transferFluidProperties.C | 31 ++++++++++++++++--- .../transferFluidProperties.H | 3 +- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C index 5faf375d..5c2695d5 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.C @@ -52,14 +52,17 @@ transferFluidProperties::transferFluidProperties ) : forceModel(dict,sm), - propsDict_(dict.subDict(typeName + "Props")), - verbose_(propsDict_.lookupOrDefault("verbose",false)) + propsDict_(dict.subDict(typeName + "Props")) { particleCloud_.registerParticleProperty("fluidDensity",1); particleCloud_.registerParticleProperty("fluidViscosity",1); // init force sub model setForceSubModels(propsDict_); + // define switches which can be read from dict + forceSubM(0).setSwitchesList(SW_VERBOSE,true); // activate search for verbose switch + forceSubM(0).setSwitchesList(SW_INTERPOLATION,true); // activate search for interpolate switch + forceSubM(0).readSwitches(); } @@ -82,22 +85,40 @@ void transferFluidProperties::setForce() const const volScalarField& rhoField = forceSubM(0).rhoField(); const volScalarField& nufField = forceSubM(0).nuField(); + interpolationCellPoint rhoInterpolator_(rhoField); + interpolationCellPoint nufInterpolator_(nufField); + label cellI = 0; + double rho = 0.; + double nuf = 0.; + vector position(0,0,0); for(int index = 0; index < particleCloud_.numberOfParticles(); ++index) { cellI = particleCloud_.cellIDs()[index][0]; if (cellI >= 0) { - fluidDensity_[index][0] = rhoField[cellI]; - fluidViscosity_[index][0] = nufField[cellI] * rhoField[cellI]; + if(forceSubM(0).interpolation()) + { + position = particleCloud_.position(index); + rho = rhoInterpolator_.interpolate(position,cellI); + nuf = nufInterpolator_.interpolate(position,cellI); + } + else + { + rho = rhoField[cellI]; + nuf = nufField[cellI]; + } + + fluidDensity_[index][0] = rho; + fluidViscosity_[index][0] = nuf*rho; } } particleCloud_.dataExchangeM().giveData("fluidDensity","scalar-atom",fluidDensity_); particleCloud_.dataExchangeM().giveData("fluidViscosity","scalar-atom",fluidViscosity_); - if (verbose_) Info << "give data done" << endl; + if (forceSubM(0).verbose()) Info << "give data done" << endl; } diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H index 9a2853ae..1dc52f85 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/transferFluidProperties/transferFluidProperties.H @@ -24,6 +24,7 @@ SourceFiles #define transferFluidProperties_H #include "forceModel.H" +#include "interpolationCellPoint.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,8 +43,6 @@ private: dictionary propsDict_; - bool verbose_; - public: //- Runtime type information From 57c8c1c7623ea061801c0c83e21ac774840424a8 Mon Sep 17 00:00:00 2001 From: tmjnijssen Date: Thu, 14 Apr 2022 15:50:39 +0200 Subject: [PATCH 22/44] add doc --- doc/CFDEMcoupling_models.txt | 1 + doc/forceModel_transferFluidProperties.txt | 42 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 doc/forceModel_transferFluidProperties.txt diff --git a/doc/CFDEMcoupling_models.txt b/doc/CFDEMcoupling_models.txt index 00ce8e28..073082dd 100644 --- a/doc/CFDEMcoupling_models.txt +++ b/doc/CFDEMcoupling_models.txt @@ -124,6 +124,7 @@ particleDeformation, potentialRelaxation, "surfaceTensionForce"_forceModel_surfaceTensionForce.html, terminalVelocity, +"transferFluidProperties"_forceModel_transferFluidProperties.html, turbulentDispersion, turbulentVelocityFluctuations, "virtualMassForce"_forceModel_virtualMassForce.html, diff --git a/doc/forceModel_transferFluidProperties.txt b/doc/forceModel_transferFluidProperties.txt new file mode 100644 index 00000000..8606da78 --- /dev/null +++ b/doc/forceModel_transferFluidProperties.txt @@ -0,0 +1,42 @@ +"CFDEMproject Website"_lws - "Main Page"_main :c + +:link(lws,http://www.cfdem.com) +:link(main,CFDEMcoupling_Manual.html) + +:line + +forceModel transferFluidProperties command :h3 + +[Syntax:] + +Defined in "couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties +dictionary. + +forceModels +( + transferFluidProperties +); +transferFluidPropertiesProps +\{ + verbose switch1; + interpolation switch2; +\} :pre + +{switch1} = (optional, default false) sub model switch, see "forceSubModel"_forceSubModel.html for details :ulb,l +{switch2} = (optional, default false) sub model switch, see "forceSubModel"_forceSubModel.html for details :l +:ule + +[Description:] + +This "force model" does not influence the particles or the flow - it transfer to fluid density and (dynamic) +viscosity from OpenFOAM to LIGGGHTS. + + +[Restrictions:] + +This model requires {fix cfd/coupling/fluidproperties} to work. + +[Related commands:] + +"forceModel"_forceModel.html + From 8ba87ddedb181f2a47ebbddb6ca93e0f6de1d554 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Wed, 26 Oct 2022 16:01:58 +0200 Subject: [PATCH 23/44] probe bugfixes --- .../subModels/forceModel/BeetstraDrag/BeetstraDrag.C | 1 - .../subModels/probeModel/particleProbe/particleProbe.C | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C index b52f2a7b..345b27c7 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C @@ -77,7 +77,6 @@ BeetstraDrag::BeetstraDrag particleCloud_.probeM().vectorFields_.append("dragForce"); //first entry must be the force particleCloud_.probeM().vectorFields_.append("Urel"); particleCloud_.probeM().scalarFields_.append("Rep"); - particleCloud_.probeM().scalarFields_.append("betaP"); particleCloud_.probeM().scalarFields_.append("voidfraction"); particleCloud_.probeM().writeHeader(); diff --git a/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.C b/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.C index 5a0441d9..6060b38b 100644 --- a/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.C +++ b/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.C @@ -219,7 +219,7 @@ void particleProbe::writeProbe(int index, Field sValues, Field v *sPtr << setprecision(writePrecision_); forAll(vValues, iter) { - // if(!probeDebug_ && iter>0) break; + if(!probeDebug_ && iter>0) break; *sPtr << vValues[iter][0] << " "; *sPtr << vValues[iter][1] << " "; *sPtr << vValues[iter][2] << " "; From 3b7724003a1da69e9c40f2f2c638f41602f58b05 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:32:00 +0100 Subject: [PATCH 24/44] Update smoothingModel_constDiffSmoothing.txt --- doc/smoothingModel_constDiffSmoothing.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/smoothingModel_constDiffSmoothing.txt b/doc/smoothingModel_constDiffSmoothing.txt index 34b0c3e4..99c06c58 100644 --- a/doc/smoothingModel_constDiffSmoothing.txt +++ b/doc/smoothingModel_constDiffSmoothing.txt @@ -18,7 +18,7 @@ constDiffSmoothingProps lowerLimit number1; upperLimit number2; smoothingLength lengthScale; - smoothingLengthReference lengthScaleRefField; + smoothingLengthReference lengthScaleRef; smoothingLengthFieldName fieldName1; smoothingLengthReferenceFieldName fieldName2; verbose; @@ -27,7 +27,7 @@ constDiffSmoothingProps {number1} = scalar fields will be bound to this lower value :ulb,l {number2} = scalar fields will be bound to this upper value :l {lengthScale} = length scale over which the exchange fields will be smoothed out :l -{lengthScaleRefField} = (optional) length scale over which reference fields (e.g., the average particle velocity) will be smoothed out. Should be always larger than lengthScale. If not specified, will be equal to lengthScale. :l +{lengthScaleRef} = (optional) length scale over which reference fields (e.g., the average particle velocity) will be smoothed out. Should be always larger than lengthScale. If not specified, will be equal to lengthScale. :l {fieldName1} = (optional) name of scalar field to be used as local smoothing length. :l {fieldName2} = (optional) name of scalar field to be used as local smoothing length for reference fields. :l @@ -56,7 +56,7 @@ which these reference fields are not specified. Values calculated in the cells e.g. the average particle velocity, which are not specified in all cells in case the flow is rather dilute. -Alternative to {smoothingLength} and {smoothingLengthReferenceField}, +Alternative to {smoothingLength} and {smoothingLengthReference}, {smoothingLengthFieldName} and/or {smoothingLengthReferenceFieldName} can be used to define spatial variation of the smoothing lengths. Either the scalar or field options must be used, giving both will result in errors. From 41b516c1e8cadd61a3e8b379333ec12d73abf40a Mon Sep 17 00:00:00 2001 From: Thomas Lichtenegger Date: Tue, 8 Nov 2022 17:41:17 +0100 Subject: [PATCH 25/44] Check out fields manually checked into registry. --- .../standardRecModel/standardRecModel.C | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/recurrence/recModel/standardRecModel/standardRecModel.C b/src/recurrence/recModel/standardRecModel/standardRecModel.C index 36407588..d8b5cf00 100644 --- a/src/recurrence/recModel/standardRecModel/standardRecModel.C +++ b/src/recurrence/recModel/standardRecModel/standardRecModel.C @@ -159,7 +159,24 @@ standardRecModel::standardRecModel // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // standardRecModel::~standardRecModel() -{} +{ + const objectRegistry& objReg = base_.mesh().thisDb(); + + for(int j=0; j Date: Thu, 17 Nov 2022 14:35:17 +0100 Subject: [PATCH 26/44] rename cfdemSolverMultiphaseScalar/multiphaseMixture to cfdemSolverMultiphaseScalar/multiphaseMixtureScalar --- .../cfdemSolverMultiphaseScalar/Allwclean | 2 +- .../cfdemSolverMultiphaseScalar/Allwmake | 2 +- .../cfdemSolverMultiphaseScalar/Make/options | 2 +- .../cfdemSolverMultiphaseScalar.C | 2 +- .../createFields.H | 2 +- .../Make/files | 2 +- .../Make/options | 0 .../alphaContactAngleFvPatchScalarField.C | 0 .../alphaContactAngleFvPatchScalarField.H | 8 +-- .../multiphaseMixtureScalar.C} | 58 +++++++++---------- .../multiphaseMixtureScalar.H} | 18 +++--- .../phase/phase.C | 0 .../phase/phase.H | 2 +- etc/library-list.txt | 2 +- 14 files changed, 50 insertions(+), 50 deletions(-) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture => multiphaseMixtureScalar}/Make/files (83%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture => multiphaseMixtureScalar}/Make/options (100%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture => multiphaseMixtureScalar}/alphaContactAngle/alphaContactAngleFvPatchScalarField.C (100%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture => multiphaseMixtureScalar}/alphaContactAngle/alphaContactAngleFvPatchScalarField.H (96%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture/multiphaseMixture.C => multiphaseMixtureScalar/multiphaseMixtureScalar.C} (93%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture/multiphaseMixture.H => multiphaseMixtureScalar/multiphaseMixtureScalar.H} (96%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture => multiphaseMixtureScalar}/phase/phase.C (100%) rename applications/solvers/cfdemSolverMultiphaseScalar/{multiphaseMixture => multiphaseMixtureScalar}/phase/phase.H (98%) diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/Allwclean b/applications/solvers/cfdemSolverMultiphaseScalar/Allwclean index 1c8a5a68..8f8e3fe7 100755 --- a/applications/solvers/cfdemSolverMultiphaseScalar/Allwclean +++ b/applications/solvers/cfdemSolverMultiphaseScalar/Allwclean @@ -2,7 +2,7 @@ cd ${0%/*} || exit 1 # Run from this directory set -x -wclean libso multiphaseMixture +wclean libso multiphaseMixtureScalar wclean #------------------------------------------------------------------------------ diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/Allwmake b/applications/solvers/cfdemSolverMultiphaseScalar/Allwmake index fbe71a59..2e60481b 100755 --- a/applications/solvers/cfdemSolverMultiphaseScalar/Allwmake +++ b/applications/solvers/cfdemSolverMultiphaseScalar/Allwmake @@ -6,7 +6,7 @@ targetType=libso . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments set -x -wmake $targetType multiphaseMixture +wmake $targetType multiphaseMixtureScalar wmake #------------------------------------------------------------------------------ diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/Make/options b/applications/solvers/cfdemSolverMultiphaseScalar/Make/options index 72a134ad..ce909f3b 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/Make/options +++ b/applications/solvers/cfdemSolverMultiphaseScalar/Make/options @@ -6,7 +6,7 @@ include $(CFDEM_ADD_LIBS_DIR)/additionalLibs EXE_INC = \ $(PFLAGS) \ -I$(CFDEM_OFVERSION_DIR) \ - -ImultiphaseMixture/lnInclude \ + -ImultiphaseMixtureScalar/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/cfdemSolverMultiphaseScalar.C b/applications/solvers/cfdemSolverMultiphaseScalar/cfdemSolverMultiphaseScalar.C index 504450fc..0ce0ae16 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/cfdemSolverMultiphaseScalar.C +++ b/applications/solvers/cfdemSolverMultiphaseScalar/cfdemSolverMultiphaseScalar.C @@ -30,7 +30,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "multiphaseMixture.H" +#include "multiphaseMixtureScalar.H" #include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvOptions.H" diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/createFields.H b/applications/solvers/cfdemSolverMultiphaseScalar/createFields.H index 009bd16d..d3b65ec2 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/createFields.H +++ b/applications/solvers/cfdemSolverMultiphaseScalar/createFields.H @@ -88,7 +88,7 @@ surfaceScalarField phi linearInterpolate(U*voidfraction) & mesh.Sf() ); -multiphaseMixture mixture(U, phi, voidfraction); +multiphaseMixtureScalar mixture(U, phi, voidfraction); // Need to store rho for ddt(rho, U) volScalarField rho diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/Make/files b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/Make/files similarity index 83% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/Make/files rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/Make/files index 998255e4..91bbae6b 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/Make/files +++ b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/Make/files @@ -1,5 +1,5 @@ phase/phase.C alphaContactAngle/alphaContactAngleFvPatchScalarField.C -multiphaseMixture.C +multiphaseMixtureScalar.C LIB = $(CFDEM_LIB_DIR)/libcfdemMultiphaseInterFoamScalar diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/Make/options b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/Make/options similarity index 100% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/Make/options rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/Make/options diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/alphaContactAngle/alphaContactAngleFvPatchScalarField.C b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/alphaContactAngle/alphaContactAngleFvPatchScalarField.C similarity index 100% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/alphaContactAngle/alphaContactAngleFvPatchScalarField.C rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/alphaContactAngle/alphaContactAngleFvPatchScalarField.C diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/alphaContactAngle/alphaContactAngleFvPatchScalarField.H b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/alphaContactAngle/alphaContactAngleFvPatchScalarField.H similarity index 96% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/alphaContactAngle/alphaContactAngleFvPatchScalarField.H rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/alphaContactAngle/alphaContactAngleFvPatchScalarField.H index 09249c72..bbad25b3 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/alphaContactAngle/alphaContactAngleFvPatchScalarField.H +++ b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/alphaContactAngle/alphaContactAngleFvPatchScalarField.H @@ -26,7 +26,7 @@ Class Description Contact-angle boundary condition for multi-phase interface-capturing - simulations. Used in conjuction with multiphaseMixture. + simulations. Used in conjuction with multiphaseMixtureScalar. SourceFiles alphaContactAngleFvPatchScalarField.C @@ -37,7 +37,7 @@ SourceFiles #define alphaContactAngleFvPatchScalarField_H #include "zeroGradientFvPatchFields.H" -#include "multiphaseMixture.H" +#include "multiphaseMixtureScalar.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -117,8 +117,8 @@ public: typedef HashTable < interfaceThetaProps, - multiphaseMixture::interfacePair, - multiphaseMixture::interfacePair::hash + multiphaseMixtureScalar::interfacePair, + multiphaseMixtureScalar::interfacePair::hash > thetaPropsTable; diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/multiphaseMixture.C b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/multiphaseMixtureScalar.C similarity index 93% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/multiphaseMixture.C rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/multiphaseMixtureScalar.C index 9d6cc130..0445368f 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/multiphaseMixture.C +++ b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/multiphaseMixtureScalar.C @@ -18,7 +18,7 @@ License \*---------------------------------------------------------------------------*/ -#include "multiphaseMixture.H" +#include "multiphaseMixtureScalar.H" #include "alphaContactAngleFvPatchScalarField.H" #include "Time.H" #include "subCycle.H" @@ -31,13 +31,13 @@ License // * * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * // -const Foam::scalar Foam::multiphaseMixture::convertToRad = +const Foam::scalar Foam::multiphaseMixtureScalar::convertToRad = Foam::constant::mathematical::pi/180.0; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::multiphaseMixture::calcAlphas() +void Foam::multiphaseMixtureScalar::calcAlphas() { scalar level = 0.0; alphas_ == 0.0; @@ -51,7 +51,7 @@ void Foam::multiphaseMixture::calcAlphas() Foam::tmp -Foam::multiphaseMixture::calcNu() const +Foam::multiphaseMixtureScalar::calcNu() const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -74,7 +74,7 @@ Foam::multiphaseMixture::calcNu() const } Foam::tmp -Foam::multiphaseMixture::calcStf() const +Foam::multiphaseMixtureScalar::calcStf() const { tmp tstf ( @@ -134,7 +134,7 @@ Foam::multiphaseMixture::calcStf() const // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::multiphaseMixture::multiphaseMixture +Foam::multiphaseMixtureScalar::multiphaseMixtureScalar ( const volVectorField& U, const surfaceScalarField& phi, @@ -230,7 +230,7 @@ Foam::multiphaseMixture::multiphaseMixture // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // Foam::tmp -Foam::multiphaseMixture::rho() const +Foam::multiphaseMixtureScalar::rho() const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -247,7 +247,7 @@ Foam::multiphaseMixture::rho() const Foam::tmp -Foam::multiphaseMixture::rho(const label patchi) const +Foam::multiphaseMixtureScalar::rho(const label patchi) const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -264,9 +264,9 @@ Foam::multiphaseMixture::rho(const label patchi) const Foam::tmp -Foam::multiphaseMixture::mu() const +Foam::multiphaseMixtureScalar::mu() const { - Info << "In multiphasemixture mu()" << endl; + Info << "In multiphaseMixtureScalar mu()" << endl; return rho()*nu(); // PtrDictionary::const_iterator iter = phases_.begin(); @@ -283,7 +283,7 @@ Foam::multiphaseMixture::mu() const Foam::tmp -Foam::multiphaseMixture::mu(const label patchi) const +Foam::multiphaseMixtureScalar::mu(const label patchi) const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -306,7 +306,7 @@ Foam::multiphaseMixture::mu(const label patchi) const Foam::tmp -Foam::multiphaseMixture::muf() const +Foam::multiphaseMixtureScalar::muf() const { return nuf()*fvc::interpolate(rho()); @@ -327,13 +327,13 @@ Foam::multiphaseMixture::muf() const Foam::tmp -Foam::multiphaseMixture::nu() const +Foam::multiphaseMixtureScalar::nu() const { return nu_; } Foam::tmp -Foam::multiphaseMixture::nu(const label patchi) const +Foam::multiphaseMixtureScalar::nu(const label patchi) const { //return nu_.boundaryField()[patchi]; PtrDictionary::const_iterator iter = phases_.begin(); @@ -355,7 +355,7 @@ Foam::multiphaseMixture::nu(const label patchi) const Foam::tmp -Foam::multiphaseMixture::nuf() const +Foam::multiphaseMixtureScalar::nuf() const { //return muf()/fvc::interpolate(rho()); PtrDictionary::const_iterator iter = phases_.begin(); @@ -374,7 +374,7 @@ Foam::multiphaseMixture::nuf() const } Foam::tmp -Foam::multiphaseMixture::Cp() const +Foam::multiphaseMixtureScalar::Cp() const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -395,7 +395,7 @@ Foam::multiphaseMixture::Cp() const } Foam::tmp -Foam::multiphaseMixture::kf() const +Foam::multiphaseMixtureScalar::kf() const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -417,7 +417,7 @@ Foam::multiphaseMixture::kf() const } Foam::tmp -Foam::multiphaseMixture::D() const +Foam::multiphaseMixtureScalar::D() const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -439,7 +439,7 @@ Foam::multiphaseMixture::D() const } Foam::tmp -Foam::multiphaseMixture::Cs() const +Foam::multiphaseMixtureScalar::Cs() const { PtrDictionary::const_iterator iter = phases_.begin(); @@ -456,7 +456,7 @@ Foam::multiphaseMixture::Cs() const } Foam::tmp -Foam::multiphaseMixture::diffusionCorrection() const +Foam::multiphaseMixtureScalar::diffusionCorrection() const { surfaceScalarField numerator @@ -517,7 +517,7 @@ Foam::multiphaseMixture::diffusionCorrection() const return correction; } -void Foam::multiphaseMixture::solve() +void Foam::multiphaseMixtureScalar::solve() { correct(); @@ -570,7 +570,7 @@ void Foam::multiphaseMixture::solve() } -void Foam::multiphaseMixture::correct() +void Foam::multiphaseMixtureScalar::correct() { forAllIter(PtrDictionary, phases_, iter) { @@ -579,7 +579,7 @@ void Foam::multiphaseMixture::correct() } -Foam::tmp Foam::multiphaseMixture::nHatfv +Foam::tmp Foam::multiphaseMixtureScalar::nHatfv ( const volScalarField& alpha1, const volScalarField& alpha2 @@ -605,7 +605,7 @@ Foam::tmp Foam::multiphaseMixture::nHatfv } -Foam::tmp Foam::multiphaseMixture::nHatf +Foam::tmp Foam::multiphaseMixtureScalar::nHatf ( const volScalarField& alpha1, const volScalarField& alpha2 @@ -622,7 +622,7 @@ Foam::tmp Foam::multiphaseMixture::nHatf // The dynamic contact angle is calculated from the component of the // velocity on the direction of the interface, parallel to the wall. -void Foam::multiphaseMixture::correctContactAngle +void Foam::multiphaseMixtureScalar::correctContactAngle ( const phase& alpha1, const phase& alpha2, @@ -726,7 +726,7 @@ void Foam::multiphaseMixture::correctContactAngle } -Foam::tmp Foam::multiphaseMixture::K +Foam::tmp Foam::multiphaseMixtureScalar::K ( const phase& alpha1, const phase& alpha2 @@ -742,7 +742,7 @@ Foam::tmp Foam::multiphaseMixture::K Foam::tmp -Foam::multiphaseMixture::nearInterface() const +Foam::multiphaseMixtureScalar::nearInterface() const { tmp tnearInt ( @@ -768,7 +768,7 @@ Foam::multiphaseMixture::nearInterface() const } -void Foam::multiphaseMixture::solveAlphas +void Foam::multiphaseMixtureScalar::solveAlphas ( const scalar cAlpha ) @@ -901,7 +901,7 @@ void Foam::multiphaseMixture::solveAlphas } -bool Foam::multiphaseMixture::read() +bool Foam::multiphaseMixtureScalar::read() { if (transportModel::read()) { diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/multiphaseMixture.H b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/multiphaseMixtureScalar.H similarity index 96% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/multiphaseMixture.H rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/multiphaseMixtureScalar.H index 5fe5a939..f1fbd153 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/multiphaseMixture.H +++ b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/multiphaseMixtureScalar.H @@ -17,10 +17,10 @@ License Copyright (C) 2018- Mathias Vångö, JKU Linz, Austria Class - multiphaseMixture + multiphaseMixtureScalar Description - This class is based on the OpenFOAM(R) Foam::multiphaseMixture class, + This class is based on the OpenFOAM(R) Foam::multiphaseMixtureScalar class, which is an incompressible multi-phase mixture with built in solution for the phase fractions with interface compression for interface-capturing. It has been extended to include the void fraction in the volume fraction @@ -33,11 +33,11 @@ Description between each phase-pair. SourceFiles - multiphaseMixture.C + multiphaseMixtureScalar.C \*---------------------------------------------------------------------------*/ -#ifndef multiphaseMixture_H -#define multiphaseMixture_H +#ifndef multiphaseMixtureScalar_H +#define multiphaseMixtureScalar_H #include "incompressible/transportModel/transportModel.H" #include "IOdictionary.H" @@ -52,10 +52,10 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class multiphaseMixture Declaration + Class multiphaseMixtureScalar Declaration \*---------------------------------------------------------------------------*/ -class multiphaseMixture +class multiphaseMixtureScalar : public IOdictionary, public transportModel @@ -191,7 +191,7 @@ public: // Constructors //- Construct from components - multiphaseMixture + multiphaseMixtureScalar ( const volVectorField& U, const surfaceScalarField& phi, @@ -200,7 +200,7 @@ public: //- Destructor - virtual ~multiphaseMixture() + virtual ~multiphaseMixtureScalar() {} diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/phase/phase.C b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/phase/phase.C similarity index 100% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/phase/phase.C rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/phase/phase.C diff --git a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/phase/phase.H b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/phase/phase.H similarity index 98% rename from applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/phase/phase.H rename to applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/phase/phase.H index 8237f374..0bab2d57 100644 --- a/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/phase/phase.H +++ b/applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/phase/phase.H @@ -26,7 +26,7 @@ Class Description Single incompressible phase derived from the phase-fraction. - Used as part of the multiPhaseMixture for interface-capturing multi-phase + Used as part of the multiphaseMixtureScalar for interface-capturing multi-phase simulations. SourceFiles diff --git a/etc/library-list.txt b/etc/library-list.txt index aa1be375..d26022e4 100644 --- a/etc/library-list.txt +++ b/etc/library-list.txt @@ -3,4 +3,4 @@ lagrangian/cfdemParticleComp/dir recurrence/dir finiteVolume/dir ../applications/solvers/cfdemSolverMultiphase/multiphaseMixture/dir -../applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixture/dir +../applications/solvers/cfdemSolverMultiphaseScalar/multiphaseMixtureScalar/dir From e7db2ab2f0f938efa0873f8a4b5297284b6ac1e4 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:22:00 +0100 Subject: [PATCH 27/44] use unique tags --- .../subModels/dataExchangeModel/twoWayOne2One/one2one.C | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C index db4c918b..be6372f2 100644 --- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C +++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C @@ -143,6 +143,8 @@ void One2One::exchange(T *&src, T *&dst, int data_length) { if (src_procs_[i] != me_) { + int tag = (src_procs_[i] << 16) | me_; + #ifdef O2ODEBUG std::cout<< "[" << me_ << "]" << " RCV " << i @@ -159,7 +161,7 @@ void One2One::exchange(T *&src, T *&dst, int data_length) natoms_[src_procs_[i]]*data_length, wrap.mpi_type, src_procs_[i], - MPI_ANY_TAG, + tag, comm_, &request_[requesti] ); @@ -185,6 +187,7 @@ void One2One::exchange(T *&src, T *&dst, int data_length) { if (dst_procs_[i] != me_) { + int tag = (me_ << 16) | dst_procs_[i]; #ifdef O2ODEBUG std::cout<< "[" << me_ << "]" << " SEND to: " << dst_procs_[i] @@ -198,7 +201,7 @@ void One2One::exchange(T *&src, T *&dst, int data_length) nlocal_*data_length, wrap.mpi_type, dst_procs_[i], - 0, + tag, comm_ ); } From a00d3fdec188e2ac646ff7b9a044fde095f3947b Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:26:38 +0100 Subject: [PATCH 28/44] use nonblocking sends --- .../dataExchangeModel/twoWayOne2One/one2one.C | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C index be6372f2..ee14d499 100644 --- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C +++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C @@ -100,6 +100,7 @@ void One2One::setup comm_ ); + // count number of receives ncollected_ = 0; int nrequests = 0; for (int i = 0; i < nsrc_procs_; i++) @@ -115,6 +116,18 @@ void One2One::setup } } + // count number of sends + if (nlocal_ > 0) + { + for (int i = 0; i < ndst_procs_; i++) + { + if (dst_procs_[i] != me_) + { + nrequests++; + } + } + } + if (nrequests > 0) { request_ = new MPI_Request[nrequests]; @@ -175,11 +188,7 @@ void One2One::exchange(T *&src, T *&dst, int data_length) offset += natoms_[src_procs_[i]]*data_length; } - // make sure all receives are posted - MPI_Barrier(comm_); - - // blocking sends - do nonblocking instead - // since doing many-2-many here? + // nonblocking sends // only do sends if I have particles if (nlocal_ > 0) { @@ -195,15 +204,17 @@ void One2One::exchange(T *&src, T *&dst, int data_length) << " data_length " << data_length << std::endl; #endif - MPI_Send + MPI_Isend ( src, nlocal_*data_length, wrap.mpi_type, dst_procs_[i], tag, - comm_ + comm_, + &request_[requesti] ); + requesti++; } } } @@ -226,6 +237,9 @@ void One2One::exchange(T *&src, T *&dst, int data_length) dst[locali+offset_local] = src[locali]; } } + + // wait for all procs to complete data exchange + MPI_Barrier(comm_); } template void One2One::exchange(int*&, int*&, int); From 6ce64cf663428bfb6ffac0593f69d935df59c479 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Wed, 30 Nov 2022 11:37:46 +0100 Subject: [PATCH 29/44] update debug output --- .../dataExchangeModel/twoWayOne2One/one2one.C | 92 +++++++++++++++---- 1 file changed, 75 insertions(+), 17 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C index ee14d499..86373511 100644 --- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C +++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/one2one.C @@ -158,16 +158,18 @@ void One2One::exchange(T *&src, T *&dst, int data_length) { int tag = (src_procs_[i] << 16) | me_; - #ifdef O2ODEBUG - std::cout<< "[" << me_ << "]" - << " RCV " << i - << " of " << nsrc_procs_ - << " from: " << src_procs_[i] - << " natoms_[src_procs_[i]] " << natoms_[src_procs_[i]] - << " datalength " << data_length - << " offset " << offset - << std::endl; - #endif + #ifdef O2ODEBUG + std::cout<< "[" << me_ << "]" + << " RCV " << (i+1) + << " of " << nsrc_procs_ + << " from: " << src_procs_[i] + << " natoms_[src_procs_[i]] " << natoms_[src_procs_[i]] + << " data_length " << data_length + << " offset " << offset + << " tag " << tag + << std::endl; + #endif + MPI_Irecv ( &dst[offset], @@ -183,8 +185,30 @@ void One2One::exchange(T *&src, T *&dst, int data_length) else // data is available on-proc { offset_local = offset; + + #ifdef O2ODEBUG + std::cout<< "[" << me_ << "]" + << " RCV " << (i+1) + << " of " << nsrc_procs_ + << " from: " << src_procs_[i] + << " skipped (self)" + << " offset_local " << offset_local + << std::endl; + #endif } } + #ifdef O2ODEBUG + else + { + std::cout<< "[" << me_ << "]" + << " RCV " << (i+1) + << " of " << nsrc_procs_ + << " from: " << src_procs_[i] + << " skipped (no data)" + << std::endl; + } + #endif + offset += natoms_[src_procs_[i]]*data_length; } @@ -197,13 +221,16 @@ void One2One::exchange(T *&src, T *&dst, int data_length) if (dst_procs_[i] != me_) { int tag = (me_ << 16) | dst_procs_[i]; - #ifdef O2ODEBUG - std::cout<< "[" << me_ << "]" - << " SEND to: " << dst_procs_[i] - << " nlocal_ " << nlocal_ - << " data_length " << data_length - << std::endl; - #endif + + #ifdef O2ODEBUG + std::cout<< "[" << me_ << "]" + << " SEND to: " << dst_procs_[i] + << " nlocal_ " << nlocal_ + << " data_length " << data_length + << " tag " << tag + << std::endl; + #endif + MPI_Isend ( src, @@ -216,12 +243,39 @@ void One2One::exchange(T *&src, T *&dst, int data_length) ); requesti++; } + #ifdef O2ODEBUG + else + { + std::cout<< "[" << me_ << "]" + << " SEND to: " << dst_procs_[i] + << " skipped (self)" << std::endl; + } + #endif } } + #ifdef O2ODEBUG + else + { + std::cout<< "[" << me_ << "]" << " SEND skipped (no data)" << std::endl; + } + #endif // only wait if requests were actually posted if (requesti > 0) + { + #ifdef O2ODEBUG + std::cout<< "[" << me_ << "]" + << " WAIT for: " << requesti << " requests" << std::endl; + #endif + MPI_Waitall(requesti, request_, status_); + } + #ifdef O2ODEBUG + else + { + std::cout<< "[" << me_ << "]" << " WAIT skipped (no requests)" << std::endl; + } + #endif // copy on-proc data if (offset_local > -1) @@ -239,6 +293,10 @@ void One2One::exchange(T *&src, T *&dst, int data_length) } // wait for all procs to complete data exchange + #ifdef O2ODEBUG + std::cout<< "[" << me_ << "] BARRIER" << std::endl; + #endif + MPI_Barrier(comm_); } From 60983f8e96e147849cac383b4078a9c7b2f68079 Mon Sep 17 00:00:00 2001 From: Tim MJ Nijssen <37873965+tmjnijssen@users.noreply.github.com> Date: Fri, 2 Dec 2022 14:51:12 +0100 Subject: [PATCH 30/44] fix memory leak --- .../dataExchangeModel/twoWayOne2One/twoWayOne2One.C | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/twoWayOne2One.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/twoWayOne2One.C index 43a1c236..fe7d2d10 100644 --- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/twoWayOne2One.C +++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayOne2One/twoWayOne2One.C @@ -230,6 +230,7 @@ twoWayOne2One::~twoWayOne2One() { delete foam2lig_; delete lig2foam_; + delete [] lig2foam_mask_; destroy(lig2foam_ids_); destroy(foam2lig_ids_); @@ -777,10 +778,7 @@ void twoWayOne2One::locateParticles() lig2foam_->exchange(my_prev_cell_ids, prev_cell_ids_); } - if (lig2foam_mask_) - { - delete [] lig2foam_mask_; - } + delete [] lig2foam_mask_; lig2foam_mask_ = new bool[lig2foam_->ncollected_]; DynamicList