From 6adba987a2cff3f54f8d5d9eac299ab3a1214876 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 23 Aug 2013 13:38:33 +0100 Subject: [PATCH 01/20] ENH: Updated cloud for topology change in parallel --- .../clouds/Templates/KinematicCloud/KinematicCloud.C | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index acf9e8c235..7cab777680 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -652,7 +652,11 @@ void Foam::KinematicCloud::scaleSources() template void Foam::KinematicCloud::preEvolve() { - Info<< "\nSolving cloud " << this->name() << endl; + // force calculaion of mesh dimensions - needed for parallel runs + // with topology change due to lazy evaluation of valid mesh dimensions + label nGeometricD = mesh_.nGeometricD(); + + Info<< "\nSolving " << nGeometricD << "-D cloud " << this->name() << endl; this->dispersion().cacheFields(true); forces_.cacheFields(true); From 7c3d2ec15eaf88998cbf61ac014617029f8f0018 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 23 Aug 2013 14:19:32 +0100 Subject: [PATCH 02/20] ENH: Updated R utility to include compressible cases --- .../postProcessing/turbulence/R/Make/options | 18 ++- .../utilities/postProcessing/turbulence/R/R.C | 141 +++++++++++++++--- .../turbulence/R/createFields.H | 22 --- 3 files changed, 135 insertions(+), 46 deletions(-) delete mode 100644 applications/utilities/postProcessing/turbulence/R/createFields.H diff --git a/applications/utilities/postProcessing/turbulence/R/Make/options b/applications/utilities/postProcessing/turbulence/R/Make/options index a136b16661..27b70cae0a 100644 --- a/applications/utilities/postProcessing/turbulence/R/Make/options +++ b/applications/utilities/postProcessing/turbulence/R/Make/options @@ -1,13 +1,19 @@ EXE_INC = \ - -I$(LIB_SRC)/postProcessing/postCalc \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions \ + -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ - $(FOAM_LIBBIN)/postCalc.o \ - -lincompressibleRASModels \ -lincompressibleTransportModels \ + -lincompressibleRASModels \ + -lfluidThermophysicalModels \ + -lspecie \ + -lcompressibleRASModels \ -lfiniteVolume \ - -lgenericPatchFields + -lgenericPatchFields \ + -lmeshTools \ + -lsampling diff --git a/applications/utilities/postProcessing/turbulence/R/R.C b/applications/utilities/postProcessing/turbulence/R/R.C index b96bb03947..708cda7214 100644 --- a/applications/utilities/postProcessing/turbulence/R/R.C +++ b/applications/utilities/postProcessing/turbulence/R/R.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,35 +29,140 @@ Description \*---------------------------------------------------------------------------*/ -#include "calc.H" #include "fvCFD.H" #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "RASModel.H" +#include "incompressible/turbulenceModel/turbulenceModel.H" + +#include "fluidThermo.H" +#include "compressible/turbulenceModel/turbulenceModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) +void calcIncompressibleR +( + const fvMesh& mesh, + const Time& runTime, + const volVectorField& U +) { - #include "createFields.H" + #include "createPhi.H" - Info<< "\nCalculating the Reynolds Stress R\n" << endl; + singlePhaseTransportModel laminarTransport(U, phi); - volSymmTensorField R + autoPtr model ( - IOobject - ( - "R", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - RASModel->R() + incompressible::turbulenceModel::New(U, phi, laminarTransport) ); - R.write(); + Info<< "Writing R field" << nl << endl; - Info<< "End" << endl; + model->R()().write(); +} + + +void calcCompressibleR +( + const fvMesh& mesh, + const Time& runTime, + const volVectorField& U +) +{ + IOobject rhoHeader + ( + "rho", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ); + + if (!rhoHeader.headerOk()) + { + Info<< " no " << rhoHeader.name() <<" field" << endl; + return; + } + + Info<< "Reading field rho\n" << endl; + volScalarField rho(rhoHeader, mesh); + + #include "compressibleCreatePhi.H" + + autoPtr pThermo(fluidThermo::New(mesh)); + fluidThermo& thermo = pThermo(); + + autoPtr model + ( + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + Info<< "Writing R field" << nl << endl; + + model->R()().write(); +} + + +int main(int argc, char *argv[]) +{ + timeSelector::addOptions(); + + #include "addRegionOption.H" + + argList::addBoolOption + ( + "compressible", + "calculate compressible R" + ); + + #include "setRootCase.H" + #include "createTime.H" + instantList timeDirs = timeSelector::select0(runTime, args); + #include "createNamedMesh.H" + + const bool compressible = args.optionFound("compressible"); + + forAll(timeDirs, timeI) + { + runTime.setTime(timeDirs[timeI], timeI); + Info<< "Time = " << runTime.timeName() << endl; + + IOobject UHeader + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ); + + if (UHeader.headerOk()) + { + Info<< "Reading field " << UHeader.name() << nl << endl; + volVectorField U(UHeader, mesh); + + if (compressible) + { + calcCompressibleR(mesh, runTime, U); + } + else + { + calcIncompressibleR(mesh, runTime, U); + } + } + else + { + Info<< " no " << UHeader.name() << " field" << endl; + } + } + + Info<< "End\n" << endl; + + return 0; } diff --git a/applications/utilities/postProcessing/turbulence/R/createFields.H b/applications/utilities/postProcessing/turbulence/R/createFields.H deleted file mode 100644 index 7c07f44f8b..0000000000 --- a/applications/utilities/postProcessing/turbulence/R/createFields.H +++ /dev/null @@ -1,22 +0,0 @@ - Info<< "Reading field U\n" << endl; - volVectorField U - ( - IOobject - ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - #include "createPhi.H" - - singlePhaseTransportModel laminarTransport(U, phi); - - autoPtr RASModel - ( - incompressible::RASModel::New(U, phi, laminarTransport) - ); From 2f04e9754b683472baac761ace02d111a4f69eef Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 27 Aug 2013 11:22:27 +0100 Subject: [PATCH 03/20] ENH: Updated error messages --- .../StandardWallInteraction/StandardWallInteraction.C | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C index d9b38daccf..fa86f67ca9 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,7 +57,7 @@ Foam::StandardWallInteraction::StandardWallInteraction "StandardWallInteraction::StandardWallInteraction" "(" "const dictionary&, " - "CloudType& cloud" + "CloudType&" ")" ) << "Unknown interaction result type " << interactionTypeName @@ -174,10 +174,11 @@ bool Foam::StandardWallInteraction::correct ( "bool StandardWallInteraction::correct" "(" + "typename CloudType::parcelType&, " "const polyPatch&, " - "const label, " - "bool&, " - "vector&" + "bool& keepParticle, " + "const scalar, " + "const tetIndices&" ") const" ) << "Unknown interaction type " << this->interactionTypeToWord(interactionType_) From 6a1b56732771973dfd1ee7ef7b8551959c59eeb7 Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 27 Aug 2013 18:11:13 +0100 Subject: [PATCH 04/20] ENH: Cloud tracking - handle case where tracking stalls due to stepFraction --- src/lagrangian/basic/particle/particle.C | 4 ++- src/lagrangian/basic/particle/particle.H | 3 ++ .../KinematicParcel/KinematicParcel.C | 30 ++++++++++++++----- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/lagrangian/basic/particle/particle.C b/src/lagrangian/basic/particle/particle.C index 8ffb988d45..c71559d042 100644 --- a/src/lagrangian/basic/particle/particle.C +++ b/src/lagrangian/basic/particle/particle.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,6 +34,8 @@ const Foam::scalar Foam::particle::trackingCorrectionTol = 1e-5; const Foam::scalar Foam::particle::lambdaDistanceToleranceCoeff = 1e3*SMALL; +const Foam::scalar Foam::particle::minStepFractionTol = 1e5*SMALL; + namespace Foam { defineTypeNameAndDebug(particle, 0); diff --git a/src/lagrangian/basic/particle/particle.H b/src/lagrangian/basic/particle/particle.H index 15742cacc9..0275cc5fd1 100644 --- a/src/lagrangian/basic/particle/particle.H +++ b/src/lagrangian/basic/particle/particle.H @@ -307,6 +307,9 @@ public: // for the denominator and numerator of lambda static const scalar lambdaDistanceToleranceCoeff; + //- Minimum stepFraction tolerance + static const scalar minStepFractionTol; + // Constructors diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 8cf9317c86..10bd38d62e 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -271,6 +271,8 @@ bool Foam::KinematicParcel::move scalar tEnd = (1.0 - p.stepFraction())*trackTime; const scalar dtMax = tEnd; + bool moving = true; + while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) { // Apply correction to position for reduced-D cases @@ -281,22 +283,36 @@ bool Foam::KinematicParcel::move // Set the Lagrangian time-step scalar dt = min(dtMax, tEnd); - // Remember which cell the parcel is in since this will change if - // a face is hit + // Cache the parcel current cell as this will change if a face is hit const label cellI = p.cell(); const scalar magU = mag(U_); - if (p.active() && magU > ROOTVSMALL) + if (p.active()) { const scalar d = dt*magU; const scalar dCorr = min(d, maxCo*cbrt(V[cellI])); - dt *= - dCorr/d - *p.trackToFace(p.position() + dCorr*U_/magU, td); + dt *= dCorr/d; + + if (moving && (magU > ROOTVSMALL)) + { + dt *= p.trackToFace(p.position() + dCorr*U_/magU, td); + } } tEnd -= dt; - p.stepFraction() = 1.0 - tEnd/trackTime; + + scalar newStepFraction = 1.0 - tEnd/trackTime; + + if + ( + mag(p.stepFraction() - newStepFraction) + < particle::minStepFractionTol + ) + { + moving = false; + } + + p.stepFraction() = newStepFraction; // Avoid problems with extremely small timesteps if (dt > ROOTVSMALL) From d62efed988908822280370de0fb4b68a58ed6a31 Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 27 Aug 2013 18:11:35 +0100 Subject: [PATCH 05/20] ENH: CollidingParcel - refactored to remove code duplication --- .../CollidingParcel/CollidingParcel.C | 72 +------------------ 1 file changed, 1 insertion(+), 71 deletions(-) diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C index f04ac77a15..f422f7ea37 100644 --- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C @@ -69,13 +69,6 @@ bool Foam::CollidingParcel::move typename TrackData::cloudType::parcelType& p = static_cast(*this); - td.switchProcessor = false; - td.keepParticle = true; - - const polyMesh& mesh = td.cloud().pMesh(); - const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); - const scalarField& V = mesh.cellVolumes(); - switch (td.part()) { case TrackData::tpVelocityHalfStep: @@ -92,70 +85,7 @@ bool Foam::CollidingParcel::move case TrackData::tpLinearTrack: { - scalar tEnd = (1.0 - p.stepFraction())*trackTime; - const scalar dtMax = tEnd; - - while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) - { - // Apply correction to position for reduced-D cases - meshTools::constrainToMeshCentre(mesh, p.position()); - - const point start(p.position()); - - // Set the Lagrangian time-step - scalar dt = min(dtMax, tEnd); - - // Remember which cell the parcel is in since this - // will change if a face is hit - const label cellI = p.cell(); - - const scalar magU = mag(p.U()); - if (p.active() && magU > ROOTVSMALL) - { - const scalar d = dt*magU; - const scalar maxCo = td.cloud().solution().maxCo(); - const scalar dCorr = min(d, maxCo*cbrt(V[cellI])); - dt *= - dCorr/d - *p.trackToFace(p.position() + dCorr*p.U()/magU, td); - } - - tEnd -= dt; - p.stepFraction() = 1.0 - tEnd/trackTime; - - // Avoid problems with extremely small timesteps - if (dt > ROOTVSMALL) - { - // Update cell based properties - p.setCellValues(td, dt, cellI); - - if (td.cloud().solution().cellValueSourceCorrection()) - { - p.cellValueSourceCorrection(td, dt, cellI); - } - - p.calc(td, dt, cellI); - } - - if (p.onBoundary() && td.keepParticle) - { - if (isA(pbMesh[p.patch(p.face())])) - { - td.switchProcessor = true; - } - } - - p.age() += dt; - - td.cloud().functions().postMove - ( - p, - cellI, - dt, - start, - td.keepParticle - ); - } + ParcelType::move(td, trackTime); break; } From 14a309d4c29f01fcc95c778d7531a8e5e550bd37 Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 28 Aug 2013 09:16:31 +0100 Subject: [PATCH 06/20] ENH: cloudSolution - maxCo available for both steady state and transient --- .../Templates/KinematicCloud/cloudSolution/cloudSolution.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C index fd7bf31706..c2bea38236 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -110,11 +110,11 @@ void Foam::cloudSolution::read() dict_.lookup("transient") >> transient_; dict_.lookup("coupled") >> coupled_; dict_.lookup("cellValueSourceCorrection") >> cellValueSourceCorrection_; + dict_.lookup("maxCo") >> maxCo_; if (steadyState()) { dict_.lookup("calcFrequency") >> calcFrequency_; - dict_.lookup("maxCo") >> maxCo_; dict_.lookup("maxTrackTime") >> maxTrackTime_; if (coupled_) From df2273f0c46b8f4fe0279fcd4888c079ea0d1842 Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 28 Aug 2013 10:28:10 +0100 Subject: [PATCH 07/20] ENH: Refactored code --- .../reactingParcelFilmFoam/reactingParcelFilmFoam.C | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C index 65cfcb4516..4067c125eb 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C @@ -104,13 +104,9 @@ int main(int argc, char *argv[]) } rho = thermo.rho(); + } - runTime.write(); - } - else - { - runTime.write(); - } + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" From d7f67c78b1a35b15680e2a6b218ebf6cbf9c7ade Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 28 Aug 2013 10:44:09 +0100 Subject: [PATCH 08/20] ENH: Tutorial update --- .../les/oppositeBurningPanels/constant/reactingCloud1Properties | 1 + .../les/smallPoolFire2D/constant/reactingCloud1Properties | 1 + .../les/smallPoolFire3D/constant/reactingCloud1Properties | 1 + .../simplifiedSiwek/constant/coalCloud1Properties | 1 + .../simplifiedSiwek/constant/limestoneCloud1Properties | 1 + .../hopper/hopperEmptying/constant/kinematicCloudProperties | 1 + .../hopper/hopperInitialState/constant/kinematicCloudProperties | 1 + .../cylinder/constant/reactingCloud1Properties | 1 + .../hotBoxes/constant/reactingCloud1Properties | 1 + .../splashPanel/constant/reactingCloud1Properties | 1 + .../reactingParcelFoam/filter/constant/reactingCloud1Properties | 1 + .../parcelInBox/constant/reactingCloud1Properties | 1 + .../verticalChannel/constant/reactingCloud1Properties | 1 + .../sprayFoam/aachenBomb/constant/sprayCloudProperties | 1 + 14 files changed, 14 insertions(+) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties index 5408eb7928..9228607e91 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled yes; transient yes; cellValueSourceCorrection yes; + maxCo 0.3; sourceTerms { diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties index 5408eb7928..9228607e91 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled yes; transient yes; cellValueSourceCorrection yes; + maxCo 0.3; sourceTerms { diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties index 5408eb7928..9228607e91 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled yes; transient yes; cellValueSourceCorrection yes; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties index 7c71c8971e..e164395342 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties @@ -21,6 +21,7 @@ solution transient yes; coupled true; cellValueSourceCorrection on; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties index 4b5b5393e4..36b287137d 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties @@ -21,6 +21,7 @@ solution coupled true; transient yes; cellValueSourceCorrection on; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties index 06571ffdd1..150adb2953 100644 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties +++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties @@ -21,6 +21,7 @@ solution coupled false; transient yes; cellValueSourceCorrection off; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties index 874c386653..2fa48b6da0 100644 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties +++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties @@ -21,6 +21,7 @@ solution coupled false; transient yes; cellValueSourceCorrection off; + maxCo 0.3; interpolationSchemes { diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties index c96b27a4b4..6e01c75332 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled no; transient yes; cellValueSourceCorrection no; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties index e6afd3b55d..4e8221412f 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled yes; transient yes; cellValueSourceCorrection yes; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties index 5652c17be9..e38561ee8f 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled no; transient yes; cellValueSourceCorrection no; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties index 2ba702faa8..2eba294927 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled true; transient yes; cellValueSourceCorrection on; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties index 41fe1084d4..1ce6679e09 100644 --- a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled false; transient yes; cellValueSourceCorrection off; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties index 70524de8a8..c6e386958c 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties @@ -21,6 +21,7 @@ solution coupled true; transient yes; cellValueSourceCorrection on; + maxCo 0.3; sourceTerms { diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties index b0989cc8b9..4d9cfe2711 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties @@ -21,6 +21,7 @@ solution coupled true; transient yes; cellValueSourceCorrection on; + maxCo 0.3; sourceTerms { From 668cd823b5c302ab70b6fe3afc9f86580cb812d2 Mon Sep 17 00:00:00 2001 From: andy Date: Thu, 29 Aug 2013 17:24:30 +0100 Subject: [PATCH 09/20] BUG: corrected steadyParticleTracks utility --- .../steadyParticleTracks.C | 42 ++++++++---- .../steadyParticleTracksTemplates.C | 66 ++++++++++++------- .../steadyParticleTracksTemplates.H | 4 +- 3 files changed, 73 insertions(+), 39 deletions(-) diff --git a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C index 5a6fad75a6..4d2ab943ac 100644 --- a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C +++ b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -184,6 +184,7 @@ int main(int argc, char *argv[]) } } + if (nTracks == 0) { Info<< "\n No track data" << endl; @@ -202,11 +203,13 @@ int main(int argc, char *argv[]) // particle "age" property used to sort the tracks List > agePerTrack(nTracks); + List > particleMap(nTracks); forAll(trackLengths, i) { const label length = trackLengths[i]; agePerTrack[i].setSize(length); + particleMap[i].setSize(length); } // store the particle age per track @@ -228,6 +231,7 @@ int main(int argc, char *argv[]) const label trackI = particleToTrack[i]; const label sampleI = trackSamples[trackI]; agePerTrack[trackI][sampleI] = age[i]; + particleMap[trackI][sampleI] = i; trackSamples[trackI]++; } tage.clear(); @@ -251,21 +255,30 @@ int main(int argc, char *argv[]) Info<< "\n Writing points" << endl; { - label offset = 0; forAll(agePerTrack, i) { agePerTrack[i].sort(); + const labelList& ids = agePerTrack[i].indices(); + labelList& particleIds = particleMap[i]; + + { + // update addressing + List