Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev

This commit is contained in:
Henry Weller
2018-06-14 20:12:00 +01:00
16 changed files with 153 additions and 80 deletions

View File

@ -121,13 +121,7 @@ forAll(fluidRegions, i)
) )
); );
dimensionedScalar ghRef dimensionedScalar ghRef(- mag(gFluid[i])*hRefFluid[i]);
(
mag(gFluid[i].value()) > small
? gFluid[i]
& (cmptMag(gFluid[i].value())/mag(gFluid[i].value()))*hRefFluid[i]
: dimensionedScalar("ghRef", gFluid[i].dimensions()*dimLength, 0)
);
Info<< " Adding to ghFluid\n" << endl; Info<< " Adding to ghFluid\n" << endl;
ghFluid.set ghFluid.set

View File

@ -26,7 +26,7 @@ License
#include "twoPhaseMixtureThermo.H" #include "twoPhaseMixtureThermo.H"
#include "gradientEnergyFvPatchScalarField.H" #include "gradientEnergyFvPatchScalarField.H"
#include "mixedEnergyFvPatchScalarField.H" #include "mixedEnergyFvPatchScalarField.H"
#include "collatedFileOperation.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -50,6 +50,12 @@ Foam::twoPhaseMixtureThermo::twoPhaseMixtureThermo
thermo1_(nullptr), thermo1_(nullptr),
thermo2_(nullptr) thermo2_(nullptr)
{ {
// Note: we're writing files to be read in immediately afterwards.
// Avoid any thread-writing problems.
float bufSz =
fileOperations::collatedFileOperation::maxThreadFileBufferSize;
fileOperations::collatedFileOperation::maxThreadFileBufferSize = 0;
{ {
volScalarField T1 volScalarField T1
( (
@ -80,6 +86,10 @@ Foam::twoPhaseMixtureThermo::twoPhaseMixtureThermo
T2.write(); T2.write();
} }
fileOperations::collatedFileOperation::maxThreadFileBufferSize =
bufSz;
thermo1_ = rhoThermo::New(U.mesh(), phase1Name()); thermo1_ = rhoThermo::New(U.mesh(), phase1Name());
thermo2_ = rhoThermo::New(U.mesh(), phase2Name()); thermo2_ = rhoThermo::New(U.mesh(), phase2Name());

View File

@ -24,7 +24,7 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "phasePair.H" #include "phasePair.H"
#include "surfaceTensionModel.H" #include "phaseSystem.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
@ -165,15 +165,7 @@ Foam::tmp<Foam::volScalarField> Foam::phasePair::EoH2() const
Foam::tmp<Foam::volScalarField> Foam::phasePair::sigma() const Foam::tmp<Foam::volScalarField> Foam::phasePair::sigma() const
{ {
return return phase1().fluid().sigma(phasePair(phase1(), phase2()));
phase1().mesh().lookupObject<surfaceTensionModel>
(
IOobject::groupName
(
surfaceTensionModel::typeName,
phasePair::name()
)
).sigma();
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -626,6 +626,15 @@ class vtkPVFoam
const wordHashSet& const wordHashSet&
); );
//- Get the list of selected objects
IOobjectList getObjects
(
const wordHashSet& selected,
const fvMesh& mesh,
const fileName& instance,
const fileName& local = ""
);
//- Retrieve the current selections //- Retrieve the current selections
static wordHashSet getSelected(vtkDataArraySelection*); static wordHashSet getSelected(vtkDataArraySelection*);

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -23,37 +23,53 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "vtkPVFoam.H"
// OpenFOAM includes
#include "IOobjectList.H"
#include "vtkPVFoamReader.h"
// VTK includes // VTK includes
#include "vtkDataArraySelection.h" #include "vtkDataArraySelection.h"
#include "vtkPolyData.h" #include "vtkPolyData.h"
#include "vtkUnstructuredGrid.h" #include "vtkUnstructuredGrid.h"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // OpenFOAM includes
#include "IOobjectList.H"
#include "vtkPVFoam.H"
#include "vtkPVFoamReader.h"
#include "vtkPVFoamVolFields.H" #include "vtkPVFoamVolFields.H"
#include "vtkPVFoamPointFields.H" #include "vtkPVFoamPointFields.H"
#include "vtkPVFoamLagrangianFields.H" #include "vtkPVFoamLagrangianFields.H"
void Foam::vtkPVFoam::pruneObjectList // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::IOobjectList Foam::vtkPVFoam::getObjects
( (
IOobjectList& objects, const wordHashSet& selected,
const wordHashSet& selected const fvMesh& mesh,
const fileName& instance,
const fileName& local
) )
{ {
// hash all the selected field names // If nothing is selected then return an empty list
if (selected.empty()) if (selected.empty())
{ {
objects.clear(); return IOobjectList(0);
} }
// only keep selected fields // Create the list of objects at the instance
IOobjectList objects(mesh, instance, local);
// Add any objects from constant that are not already present
IOobjectList objectsConstant(mesh, dbPtr_().constant(), local);
forAllIter(IOobjectList, objectsConstant, iter)
{
if (!objects.found(iter.key()))
{
objects.add
(
*objectsConstant.HashPtrTable<IOobject>::remove(iter)
);
}
}
// Remove everything that is not selected
forAllIter(IOobjectList, objects, iter) forAllIter(IOobjectList, objects, iter)
{ {
if (!selected.found(iter()->name())) if (!selected.found(iter()->name()))
@ -61,6 +77,8 @@ void Foam::vtkPVFoam::pruneObjectList
objects.erase(iter); objects.erase(iter);
} }
} }
return objects;
} }
@ -83,8 +101,15 @@ void Foam::vtkPVFoam::convertVolFields
// Get objects (fields) for this time - only keep selected fields // Get objects (fields) for this time - only keep selected fields
// the region name is already in the mesh db // the region name is already in the mesh db
IOobjectList objects(mesh, dbPtr_().timeName()); IOobjectList objects
pruneObjectList(objects, selectedFields); (
getObjects
(
selectedFields,
mesh,
dbPtr_().timeName()
)
);
if (objects.empty()) if (objects.empty())
{ {
@ -174,8 +199,15 @@ void Foam::vtkPVFoam::convertPointFields
// Get objects (fields) for this time - only keep selected fields // Get objects (fields) for this time - only keep selected fields
// the region name is already in the mesh db // the region name is already in the mesh db
IOobjectList objects(mesh, dbPtr_().timeName()); IOobjectList objects
pruneObjectList(objects, selectedFields); (
getObjects
(
selectedFields,
mesh,
dbPtr_().timeName()
)
);
if (objects.empty()) if (objects.empty())
{ {
@ -267,11 +299,14 @@ void Foam::vtkPVFoam::convertLagrangianFields
// the region name is already in the mesh db // the region name is already in the mesh db
IOobjectList objects IOobjectList objects
( (
getObjects
(
selectedFields,
mesh, mesh,
dbPtr_().timeName(), dbPtr_().timeName(),
cloud::prefix/cloudName cloud::prefix/cloudName
)
); );
pruneObjectList(objects, selectedFields);
if (objects.empty()) if (objects.empty())
{ {

View File

@ -859,7 +859,7 @@ bool Foam::decomposedBlockData::writeBlocks
label startProc = 1; label startProc = 1;
label nSendProcs = nProcs-1; label nSendProcs = nProcs-1;
while (nSendProcs > 0) while (nSendProcs > 0 && startProc < nProcs)
{ {
nSendProcs = calcNumProcs nSendProcs = calcNumProcs
( (
@ -873,7 +873,7 @@ bool Foam::decomposedBlockData::writeBlocks
startProc startProc
); );
if (startProc == nProcs || nSendProcs == 0) if (nSendProcs == 0)
{ {
break; break;
} }

View File

@ -265,7 +265,11 @@ void Foam::OFstreamCollator::waitForBufferSpace(const off_t wantedSize) const
} }
} }
if (totalSize == 0 || (totalSize+wantedSize) <= maxBufferSize_) if
(
totalSize == 0
|| (wantedSize >= 0 && (totalSize+wantedSize) <= maxBufferSize_)
)
{ {
break; break;
} }
@ -354,7 +358,8 @@ bool Foam::OFstreamCollator::write
IOstream::streamFormat fmt, IOstream::streamFormat fmt,
IOstream::versionNumber ver, IOstream::versionNumber ver,
IOstream::compressionType cmp, IOstream::compressionType cmp,
const bool append const bool append,
const bool useThread
) )
{ {
// Determine (on master) sizes to receive. Note: do NOT use thread // Determine (on master) sizes to receive. Note: do NOT use thread
@ -374,7 +379,7 @@ bool Foam::OFstreamCollator::write
Pstream::scatter(maxLocalSize, Pstream::msgType(), localComm_); Pstream::scatter(maxLocalSize, Pstream::msgType(), localComm_);
} }
if (maxBufferSize_ == 0 || maxLocalSize > maxBufferSize_) if (!useThread || maxBufferSize_ == 0 || maxLocalSize > maxBufferSize_)
{ {
if (debug) if (debug)
{ {
@ -589,4 +594,20 @@ bool Foam::OFstreamCollator::write
} }
void Foam::OFstreamCollator::waitAll()
{
// Wait for all buffer space to be available i.e. wait for all jobs
// to finish
if (Pstream::master(localComm_))
{
if (debug)
{
Pout<< "OFstreamCollator : waiting for thread to have consumed all"
<< endl;
}
waitForBufferSpace(-1);
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -206,8 +206,12 @@ public:
IOstream::streamFormat, IOstream::streamFormat,
IOstream::versionNumber, IOstream::versionNumber,
IOstream::compressionType, IOstream::compressionType,
const bool append const bool append,
const bool useThread = true
); );
//- Wait for all thread actions to have finished
void waitAll();
}; };

View File

@ -556,14 +556,32 @@ bool Foam::fileOperations::collatedFileOperation::writeObject
} }
else else
{ {
// Re-check static maxThreadFileBufferSize variable to see
// if needs to use threading
bool useThread = (maxThreadFileBufferSize > 0);
if (debug) if (debug)
{ {
Pout<< "collatedFileOperation::writeObject :" Pout<< "collatedFileOperation::writeObject :"
<< " For object : " << io.name() << " For object : " << io.name()
<< " starting collating output to " << pathName << endl; << " starting collating output to " << pathName
<< " useThread:" << useThread << endl;
} }
threadedCollatedOFstream os(writer_, pathName, fmt, ver, cmp); if (!useThread)
{
writer_.waitAll();
}
threadedCollatedOFstream os
(
writer_,
pathName,
fmt,
ver,
cmp,
useThread
);
// If any of these fail, return (leave error handling to Ostream // If any of these fail, return (leave error handling to Ostream
// class) // class)

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2017 OpenFOAM Foundation \\ / A nd | Copyright (C) 2017-2018 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -35,13 +35,15 @@ Foam::threadedCollatedOFstream::threadedCollatedOFstream
const fileName& pathName, const fileName& pathName,
streamFormat format, streamFormat format,
versionNumber version, versionNumber version,
compressionType compression compressionType compression,
const bool useThread
) )
: :
OStringStream(format, version), OStringStream(format, version),
writer_(writer), writer_(writer),
pathName_(pathName), pathName_(pathName),
compression_(compression) compression_(compression),
useThread_(useThread)
{} {}
@ -57,7 +59,8 @@ Foam::threadedCollatedOFstream::~threadedCollatedOFstream()
IOstream::BINARY, IOstream::BINARY,
version(), version(),
compression_, compression_,
false // append false, // append
useThread_
); );
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2017 OpenFOAM Foundation \\ / A nd | Copyright (C) 2017-2018 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -60,6 +60,8 @@ class threadedCollatedOFstream
const IOstream::compressionType compression_; const IOstream::compressionType compression_;
const bool useThread_;
public: public:
@ -72,7 +74,8 @@ public:
const fileName& pathname, const fileName& pathname,
streamFormat format=ASCII, streamFormat format=ASCII,
versionNumber version=currentVersion, versionNumber version=currentVersion,
compressionType compression=UNCOMPRESSED compressionType compression=UNCOMPRESSED,
const bool useThread = true
); );

View File

@ -1,9 +1,4 @@
Info<< "Calculating field g.h\n" << endl; Info<< "Calculating field g.h\n" << endl;
dimensionedScalar ghRef dimensionedScalar ghRef(- mag(g)*hRef);
(
mag(g.value()) > small
? g & (cmptMag(g.value())/mag(g.value()))*hRef
: dimensionedScalar("ghRef", g.dimensions()*dimLength, 0)
);
volScalarField gh("gh", (g & mesh.C()) - ghRef); volScalarField gh("gh", (g & mesh.C()) - ghRef);
surfaceScalarField ghf("ghf", (g & mesh.Cf()) - ghRef); surfaceScalarField ghf("ghf", (g & mesh.Cf()) - ghRef);

View File

@ -118,12 +118,7 @@ updateCoeffs()
const uniformDimensionedScalarField& hRef = const uniformDimensionedScalarField& hRef =
this->db().template lookupObject<uniformDimensionedScalarField>("hRef"); this->db().template lookupObject<uniformDimensionedScalarField>("hRef");
dimensionedScalar ghRef const dimensionedScalar ghRef(- mag(g)*hRef);
(
mag(g.value()) > small
? g & (cmptMag(g.value())/mag(g.value()))*hRef
: dimensionedScalar("ghRef", g.dimensions()*dimLength, 0)
);
this->operator== this->operator==
( (

View File

@ -140,12 +140,7 @@ void Foam::uniformDensityHydrostaticPressureFvPatchScalarField::updateCoeffs()
const uniformDimensionedScalarField& hRef = const uniformDimensionedScalarField& hRef =
db().lookupObject<uniformDimensionedScalarField>("hRef"); db().lookupObject<uniformDimensionedScalarField>("hRef");
ghRef = ghRef = - mag(g.value())*hRef.value();
(
mag(g.value()) > small
? (g & (cmptMag(g.value())/mag(g.value()))*hRef).value()
: 0
);
} }
operator== operator==

View File

@ -51,12 +51,7 @@ void Foam::fv::tabulatedAccelerationSource::addSup
g = g0_ - dimensionedVector("a", dimAcceleration, acceleration.x()); g = g0_ - dimensionedVector("a", dimAcceleration, acceleration.x());
dimensionedScalar ghRef dimensionedScalar ghRef(- mag(g)*hRef);
(
mag(g.value()) > small
? g & (cmptMag(g.value())/mag(g.value()))*hRef
: dimensionedScalar("ghRef", g.dimensions()*dimLength, 0)
);
mesh_.lookupObjectRef<volScalarField>("gh") = (g & mesh_.C()) - ghRef; mesh_.lookupObjectRef<volScalarField>("gh") = (g & mesh_.C()) - ghRef;

View File

@ -520,6 +520,10 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation
// Check that model is active // Check that model is active
if (!cloud.devolatilisation().active()) if (!cloud.devolatilisation().active())
{ {
if (canCombust != -1)
{
canCombust = 1;
}
return; return;
} }