Created new functionObject for dsmcFields, renamed post processing utility dsmcFields to dsmcFieldsCalc and calling function object from there.

This commit is contained in:
graham
2009-03-09 19:29:08 +00:00
parent a7341a7e95
commit e49d70a85a
14 changed files with 590 additions and 96 deletions

View File

@ -1,3 +0,0 @@
dsmcFields.C
EXE = $(FOAM_APPBIN)/dsmcFields

View File

@ -0,0 +1,3 @@
dsmcFieldsCalc.C
EXE = $(FOAM_APPBIN)/dsmcFieldsCalc

View File

@ -2,6 +2,7 @@ EXE_INC = \
-I$(LIB_SRC)/postProcessing/postCalc \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/postProcessing/functionObjects/utilities/lnInclude \
-I$(LIB_SRC)/lagrangian/dsmc/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
@ -9,6 +10,7 @@ EXE_LIBS = \
$(FOAM_LIBBIN)/postCalc.o \
-lmeshTools \
-lfiniteVolume \
-lutilityFunctionObjects \
-llagrangian \
-ldsmc

View File

@ -34,6 +34,7 @@ Description
#include "calc.H"
#include "fvc.H"
#include "dsmcCloud.H"
#include "dsmcFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -133,97 +134,17 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
Info<< "Reading field iDofMean" << endl;
volScalarField iDofMean(iDofMeanheader, mesh);
// Check if there are any zero values in the density fields
dsmcFields dF
(
"dsmcFieldsUtility",
mesh,
dictionary(),
false
);
if (min(rhoNMean).value() > VSMALL)
if (writeResults)
{
// TODO Sort out boundary field values if required
Info<< nl << "Calculating UMean field." << endl;
volVectorField UMean
(
IOobject
(
"UMean",
runTime.timeName(),
mesh,
IOobject::NO_READ
),
momentumMean/rhoMMean
);
Info<< nl << "Calculating translationalTMean field." << endl;
volScalarField translationalTMean
(
IOobject
(
"translationalTMean",
runTime.timeName(),
mesh,
IOobject::NO_READ
),
2.0/(3.0*dsmcCloud::kb*rhoNMean)
*(linearKEMean - 0.5*rhoMMean*(UMean & UMean))
);
Info<< nl << "Calculating internalTMean field." << endl;
volScalarField internalTMean
(
IOobject
(
"internalTMean",
runTime.timeName(),
mesh,
IOobject::NO_READ
),
2.0/(dsmcCloud::kb*iDofMean)*internalEMean
);
Info<< nl << "Calculating overallTMean field." << endl;
volScalarField overallTMean
(
IOobject
(
"overallTMean",
runTime.timeName(),
mesh,
IOobject::NO_READ
),
2.0/(dsmcCloud::kb*(3.0*rhoNMean + iDofMean))
*(linearKEMean - 0.5*rhoMMean*(UMean & UMean) + internalEMean)
);
Info<< nl << "mag(UMean) max/min : "
<< max(mag(UMean)).value() << " "
<< min(mag(UMean)).value() << endl;
Info<< nl << "translationalTMean max/min : "
<< max(translationalTMean).value() << " "
<< min(translationalTMean).value() << endl;
Info<< nl << "internalTMean max/min : "
<< max(internalTMean).value() << " "
<< min(internalTMean).value() << endl;
Info<< nl << "overallTMean max/min : "
<< max(overallTMean).value() << " "
<< min(overallTMean).value() << endl;
if (writeResults)
{
UMean.write();
translationalTMean.write();
internalTMean.write();
overallTMean.write();
}
}
else
{
Info<< "Small or negative value (" << min(rhoNMean)
<< ") found in rhoNMean field. "
<< "Not calculating fields to avoid division by zero "
<< "or invalid results."
<< endl;
dF.write();
}
}
}

View File

@ -6,6 +6,7 @@ wmake libso basic
wmake libso solidParticle
wmake libso intermediate
wmake libso dieselSpray
wmake libso dsmc
molecularDynamics/Allwmake

View File

@ -85,6 +85,8 @@ void Foam::DsmcCloud<ParcelType>::initialise
const IOdictionary& dsmcInitialiseDict
)
{
Info<< nl << "Initialising particles" << endl;
const scalar temperature
(
readScalar(dsmcInitialiseDict.lookup("temperature"))
@ -619,6 +621,9 @@ void Foam::DsmcCloud<ParcelType>::evolve()
{
typename ParcelType::trackData td(*this);
// Reset the surface data collection fields
resetSurfaceDataFields();
if (debug)
{
this->dumpParticlePositions();
@ -627,9 +632,6 @@ void Foam::DsmcCloud<ParcelType>::evolve()
// Insert new particles from the inflow boundary
this->inflowBoundary().inflow();
// Reset the surface data collection fields
resetSurfaceDataFields();
// Move the particles ballistically with their current velocities
Cloud<ParcelType>::move(td);

View File

@ -358,6 +358,10 @@ Foam::DsmcCloud<ParcelType>::rhoN() const
rhoN *= nParticle_/mesh().cellVolumes();
trhoN().boundaryField() = trhoN().boundaryField().boundaryInternalField();
trhoN().correctBoundaryConditions();
return trhoN;
}
@ -395,6 +399,10 @@ Foam::DsmcCloud<ParcelType>::rhoM() const
rhoM *= nParticle_/mesh().cellVolumes();
trhoM().boundaryField() = trhoM().boundaryField().boundaryInternalField();
trhoM().correctBoundaryConditions();
return trhoM;
}
@ -430,6 +438,11 @@ Foam::DsmcCloud<ParcelType>::dsmcRhoN() const
dsmcRhoN[cellI]++;
}
tdsmcRhoN().boundaryField() =
tdsmcRhoN().boundaryField().boundaryInternalField();
tdsmcRhoN().correctBoundaryConditions();
return tdsmcRhoN;
}
@ -472,6 +485,11 @@ Foam::DsmcCloud<ParcelType>::momentum() const
momentum *= nParticle_/mesh().cellVolumes();
tmomentum().boundaryField() =
tmomentum().boundaryField().boundaryInternalField();
tmomentum().correctBoundaryConditions();
return tmomentum;
}
@ -509,6 +527,11 @@ Foam::DsmcCloud<ParcelType>::linearKE() const
linearKE *= nParticle_/mesh().cellVolumes();
tlinearKE().boundaryField() =
tlinearKE().boundaryField().boundaryInternalField();
tlinearKE().correctBoundaryConditions();
return tlinearKE;
}
@ -546,6 +569,11 @@ Foam::DsmcCloud<ParcelType>::internalE() const
internalE *= nParticle_/mesh().cellVolumes();
tinternalE().boundaryField() =
tinternalE().boundaryField().boundaryInternalField();
tinternalE().correctBoundaryConditions();
return tinternalE;
}
@ -584,6 +612,11 @@ Foam::DsmcCloud<ParcelType>::iDof() const
iDof *= nParticle_/mesh().cellVolumes();
tiDof().boundaryField() =
tiDof().boundaryField().boundaryInternalField();
tiDof().correctBoundaryConditions();
return tiDof;
}

View File

@ -1,4 +1,7 @@
dynamicPressure/dynamicPressure.C
dynamicPressure/dynamicPressureFunctionObject.C
dsmcFields/dsmcFields.C
dsmcFields/dsmcFieldsFunctionObject.C
LIB = $(FOAM_LIBBIN)/libutilityFunctionObjects

View File

@ -1,9 +1,13 @@
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/lagrangian/dsmc/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude
LIB_LIBS = \
-lfiniteVolume \
-lmeshTools \
-lsampling
-lsampling \
-llagrangian \
-ldsmc

View File

@ -0,0 +1,50 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Typedef
Foam::IOdsmcFields
Description
Instance of the generic IOOutputFilter for dsmcFields.
\*---------------------------------------------------------------------------*/
#ifndef IOdsmcFields_H
#define IOdsmcFields_H
#include "dsmcFields.H"
#include "IOOutputFilter.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
typedef IOOutputFilter<dsmcFields> IOdsmcFields;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,236 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "dsmcFields.H"
#include "volFields.H"
#include "dictionary.H"
#include "dsmcCloud.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(dsmcFields, 0);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::dsmcFields::dsmcFields
(
const word& name,
const objectRegistry& obr,
const dictionary& dict,
const bool loadFromFiles
)
:
name_(name),
obr_(obr),
active_(true)
{
// Check if the available mesh is an fvMesh, otherwise deactivate
if (!isA<fvMesh>(obr_))
{
active_ = false;
WarningIn
(
"dsmcFields::dsmcFields"
"(const objectRegistry&, const dictionary&)"
) << "No fvMesh available, deactivating." << nl
<< endl;
}
read(dict);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::dsmcFields::~dsmcFields()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::dsmcFields::read(const dictionary& dict)
{
if (active_)
{
}
}
void Foam::dsmcFields::execute()
{
// Do nothing - only valid on write
}
void Foam::dsmcFields::end()
{
// Do nothing - only valid on write
}
void Foam::dsmcFields::write()
{
if (active_)
{
word rhoNMeanName = "rhoNMean";
word rhoMMeanName = "rhoMMean";
word momentumMeanName = "momentumMean";
word linearKEMeanName = "linearKEMean";
word internalEMeanName = "internalEMean";
word iDofMeanName = "iDofMean";
const volScalarField& rhoNMean = obr_.lookupObject<volScalarField>
(
rhoNMeanName
);
const volScalarField& rhoMMean = obr_.lookupObject<volScalarField>
(
rhoMMeanName
);
const volVectorField& momentumMean = obr_.lookupObject<volVectorField>
(
momentumMeanName
);
const volScalarField& linearKEMean = obr_.lookupObject<volScalarField>
(
linearKEMeanName
);
const volScalarField& internalEMean = obr_.lookupObject<volScalarField>
(
internalEMeanName
);
const volScalarField& iDofMean = obr_.lookupObject<volScalarField>
(
iDofMeanName
);
if (min(rhoNMean).value() > VSMALL)
{
Info<< "Calculating dsmcFields." << endl;
Info<< " Calculating UMean field." << endl;
volVectorField UMean
(
IOobject
(
"UMean",
obr_.time().timeName(),
obr_,
IOobject::NO_READ
),
momentumMean/rhoMMean
);
Info<< " Calculating translationalT field." << endl;
volScalarField translationalT
(
IOobject
(
"translationalT",
obr_.time().timeName(),
obr_,
IOobject::NO_READ
),
2.0/(3.0*dsmcCloud::kb*rhoNMean)
*(linearKEMean - 0.5*rhoMMean*(UMean & UMean))
);
Info<< " Calculating internalT field." << endl;
volScalarField internalT
(
IOobject
(
"internalT",
obr_.time().timeName(),
obr_,
IOobject::NO_READ
),
2.0/(dsmcCloud::kb*iDofMean)*internalEMean
);
Info<< " Calculating overallT field." << endl;
volScalarField overallT
(
IOobject
(
"overallT",
obr_.time().timeName(),
obr_,
IOobject::NO_READ
),
2.0/(dsmcCloud::kb*(3.0*rhoNMean + iDofMean))
*(linearKEMean - 0.5*rhoMMean*(UMean & UMean) + internalEMean)
);
Info<< " mag(UMean) max/min : "
<< max(mag(UMean)).value() << " "
<< min(mag(UMean)).value() << endl;
Info<< " translationalT max/min : "
<< max(translationalT).value() << " "
<< min(translationalT).value() << endl;
Info<< " internalT max/min : "
<< max(internalT).value() << " "
<< min(internalT).value() << endl;
Info<< " overallT max/min : "
<< max(overallT).value() << " "
<< min(overallT).value() << endl;
UMean.write();
translationalT.write();
internalT.write();
overallT.write();
Info<< "dsmcFields written." << nl << endl;
}
else
{
Info<< "Small or negative value (" << min(rhoNMean)
<< ") found in rhoNMean field. "
<< "Not calculating dsmcFields to avoid division by zero "
<< "or invalid results."
<< endl;
}
}
}
// ************************************************************************* //

View File

@ -0,0 +1,144 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::dsmcFields
Description
Calculate intensive fields:
- UMean
- translationalT
- internalT
- overallT
from averaged extensive fields from a DSMC calculation.
SourceFiles
dsmcFields.C
IOdsmcFields.H
\*---------------------------------------------------------------------------*/
#ifndef dsmcFields_H
#define dsmcFields_H
#include "pointFieldFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
class dictionary;
class mapPolyMesh;
/*---------------------------------------------------------------------------*\
Class dsmcFields Declaration
\*---------------------------------------------------------------------------*/
class dsmcFields
{
// Private data
//- Name of this set of dsmcFields objects
word name_;
const objectRegistry& obr_;
//- on/off switch
bool active_;
// Private Member Functions
//- Disallow default bitwise copy construct
dsmcFields(const dsmcFields&);
//- Disallow default bitwise assignment
void operator=(const dsmcFields&);
public:
//- Runtime type information
TypeName("dsmcFields");
// Constructors
//- Construct for given objectRegistry and dictionary.
// Allow the possibility to load fields from files
dsmcFields
(
const word& name,
const objectRegistry&,
const dictionary&,
const bool loadFromFiles = false
);
// Destructor
virtual ~dsmcFields();
// Member Functions
//- Return name of the set of dsmcFields
virtual const word& name() const
{
return name_;
}
//- Read the dsmcFields data
virtual void read(const dictionary&);
//- Execute, currently does nothing
virtual void execute();
//- Execute at the final time-loop, currently does nothing
virtual void end();
//- Calculate the dsmcFields and write
virtual void write();
//- Update for changes of mesh
virtual void updateMesh(const mapPolyMesh&)
{}
//- Update for changes of mesh
virtual void movePoints(const pointField&)
{}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,43 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "dsmcFieldsFunctionObject.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineNamedTemplateTypeNameAndDebug(dsmcFieldsFunctionObject, 0);
addToRunTimeSelectionTable
(
functionObject,
dsmcFieldsFunctionObject,
dictionary
);
}
// ************************************************************************* //

View File

@ -0,0 +1,55 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Typedef
Foam::dsmcFieldsFunctionObject
Description
FunctionObject wrapper around dsmcFields to allow it to be created via
the functions list within controlDict.
SourceFiles
dsmcFieldsFunctionObject.C
\*---------------------------------------------------------------------------*/
#ifndef dsmcFieldsFunctionObject_H
#define dsmcFieldsFunctionObject_H
#include "dsmcFields.H"
#include "OutputFilterFunctionObject.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
typedef OutputFilterFunctionObject<dsmcFields>
dsmcFieldsFunctionObject;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //