Files
OpenFOAM-6/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.H
Henry Weller e3c67dc111 fvOptions: The "<type>Coeffs" sub-dictionary is now optional
For example the actuationDiskSource fvOption may now be specified

disk1
{
    type            actuationDiskSource;

    fields      (U);

    selectionMode   cellSet;
    cellSet         actuationDisk1;
    diskDir         (1 0 0);    // Orientation of the disk
    Cp              0.386;
    Ct              0.58;
    diskArea        40;
    upstreamPoint   (581849 4785810 1065);
}

rather than

disk1
{
    type            actuationDiskSource;
    active          on;

    actuationDiskSourceCoeffs
    {
        fields      (U);

        selectionMode   cellSet;
        cellSet         actuationDisk1;
        diskDir         (1 0 0);    // Orientation of the disk
        Cp              0.386;
        Ct              0.58;
        diskArea        40;
        upstreamPoint   (581849 4785810 1065);
    }
}

but this form is supported for backward compatibility.
2017-04-13 13:30:17 +01:00

284 lines
7.4 KiB
C++

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2013-2017 OpenFOAM Foundation
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
Class
Foam::fv::effectivenessHeatExchangerSource
Description
Heat exchanger source model, in which the heat exchanger is defined as a
selection of cells.
The total heat exchange source is given by:
\f[
Q_t = e(\phi, \dot{m}_2) (T_2 - T_1) \phi c_p
\f]
where:
\vartable
Q_t | total heat source
e(\phi,\dot{m}_2) | effectivenes table
\phi | net mass flux entering heat exchanger [kg/s]
\dot{m}_2 | secondary mass flow rate [kg/s]
T_1 | primary inlet temperature [K]
T_2 | secondary inlet temperature [K]
c_p | specific heat capacity [J/kg/K]
\endvartable
The distribution inside the hear exchanger is given by:
\f[
Q_c = \frac{V_c |U_c| (T_c - T_{ref})}{\sum(V_c |U_c| (T_c - T_{ref}))}
\f]
where:
\vartable
Q_c | source for cell
V_c | volume of the cell [m3]
U_c | local cell velocity [m/s]
T_c | local call temperature [K]
T_{ref} | min or max(T) in cell zone depending on the sign of Q_t [K]
\endvartable
Usage
Example usage:
\verbatim
effectivenessHeatExchangerSource1
{
type effectivenessHeatExchangerSource;
active yes;
selectionMode cellZone;
cellZone porosity;
secondaryMassFlowRate 1.0;
secondaryInletT 336;
primaryInletT 293;
faceZone facesZoneInletOriented;
outOfBounds clamp;
fileName "effTable";
}
\endverbatim
The effectiveness table is described in terms of the primary and secondary
mass flow rates. For example, the table:
secondary MFR
| 0.1 0.2 0.3
-----+-----------------
0.02 | A B C
primary MFR 0.04 | D E F
0.06 | G H I
Is specified by the following:
(
0.02
(
(0.1 A)
(0.2 B)
(0.3 C)
),
0.04
(
(0.1 D)
(0.2 E)
(0.3 F)
),
0.06
(
(0.1 G)
(0.2 H)
(0.3 I)
)
);
Note
- the table with name "file" should have the same units as the
secondary mass flow rate and kg/s for phi
- faceZone is the faces at the inlet of the cellzone, it needs to be
created with flip map flags. It is used to integrate the net mass flow
rate into the heat exchanger
SourceFiles
effectivenessHeatExchangerSource.C
\*---------------------------------------------------------------------------*/
#ifndef effectivenessHeatExchangerSource_H
#define effectivenessHeatExchangerSource_H
#include "cellSetOption.H"
#include "autoPtr.H"
#include "interpolation2DTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace fv
{
/*---------------------------------------------------------------------------*\
Class effectivenessHeatExchangerSource Declaration
\*---------------------------------------------------------------------------*/
class effectivenessHeatExchangerSource
:
public cellSetOption
{
protected:
// Protected data
//- Secondary flow mass rate [kg/s]
scalar secondaryMassFlowRate_;
//- Inlet secondary temperature [K]
scalar secondaryInletT_;
//- Primary air temperature at the heat exchanger inlet [K]
scalar primaryInletT_;
//- 2D look up table efficiency = function of primary and secondary
// mass flow rates [kg/s]
autoPtr<interpolation2DTable<scalar>> eTable_;
//- Name of velocity field; default = U
word UName_;
//- Name of temperature field; default = T
word TName_;
//- Name of the flux
word phiName_;
//- Name of the faceZone at the heat exchange inlet
word faceZoneName_;
//- Id for the face zone
label zoneID_;
//- Local list of face IDs
labelList faceId_;
//- Local list of patch ID per face
labelList facePatchId_;
//- List of +1/-1 representing face flip map (1 use as is, -1 negate)
labelList faceSign_;
//- Area of the face zone
scalar faceZoneArea_;
private:
// Private Member Functions
//- Disallow default bitwise copy construct
effectivenessHeatExchangerSource
(
const effectivenessHeatExchangerSource&
);
//- Disallow default bitwise assignment
void operator=(const effectivenessHeatExchangerSource&);
//- Initialise heat exchanger source model
void initialise();
//- Calculate total area of faceZone accross processors
void calculateTotalArea(scalar& area);
public:
//- Runtime type information
TypeName("effectivenessHeatExchangerSource");
// Constructors
//- Construct from components
effectivenessHeatExchangerSource
(
const word& name,
const word& modelType,
const dictionary& dict,
const fvMesh& mesh
);
//- Destructor
virtual ~effectivenessHeatExchangerSource()
{}
// Member Functions
// Explicit and implicit source
//- Scalar
virtual void addSup
(
fvMatrix<scalar>& eqn,
const label fieldi
)
{
NotImplemented;
}
// Explicit and implicit source for compressible equation
//- Scalar
virtual void addSup
(
const volScalarField& rho,
fvMatrix<scalar>& eqn,
const label fieldi
);
// IO
//- Read dictionary
virtual bool read(const dictionary& dict);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace fv
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //