From Niklas Nordin:

New fuels are iso/n-propanol and urea.  Although urea is a bit dodgy, but that's
all of the properties Ive found so far.

I've also added a variation of temperature instead of constant temperature for
some injector-classes so Im sending you the new version of the dieselFoam
tutorial also.
This commit is contained in:
henry
2008-12-18 16:58:29 +00:00
parent 9663072b5f
commit e1d7916c3b
54 changed files with 2048 additions and 395 deletions

View File

@ -26,6 +26,7 @@ $(injector)/injector/injector.C
$(injector)/injector/injectorIO.C $(injector)/injector/injectorIO.C
$(injector)/injectorType/injectorType.C $(injector)/injectorType/injectorType.C
$(injector)/unitInjector/unitInjector.C $(injector)/unitInjector/unitInjector.C
$(injector)/multiHoleInjector/multiHoleInjector.C
$(injector)/commonRailInjector/commonRailInjector.C $(injector)/commonRailInjector/commonRailInjector.C
$(injector)/swirlInjector/swirlInjector.C $(injector)/swirlInjector/swirlInjector.C
$(injector)/definedInjector/definedInjector.C $(injector)/definedInjector/definedInjector.C

View File

@ -187,13 +187,14 @@ Foam::label Foam::commonRailInjector::nParcelsToInject
return nParcels; return nParcels;
} }
const Foam::vector Foam::commonRailInjector::position() const const Foam::vector Foam::commonRailInjector::position(const label n) const
{ {
return position_; return position_;
} }
Foam::vector Foam::commonRailInjector::position Foam::vector Foam::commonRailInjector::position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -236,12 +237,21 @@ Foam::vector Foam::commonRailInjector::position
return position_; return position_;
} }
Foam::label Foam::commonRailInjector::nHoles() const
{
return 1;
}
Foam::scalar Foam::commonRailInjector::d() const Foam::scalar Foam::commonRailInjector::d() const
{ {
return d_; return d_;
} }
const Foam::vector& Foam::commonRailInjector::direction() const const Foam::vector& Foam::commonRailInjector::direction
(
const label i,
const scalar time
) const
{ {
return direction_; return direction_;
} }
@ -358,7 +368,7 @@ void Foam::commonRailInjector::correctProfiles
forAll(velocityProfile_, i) forAll(velocityProfile_, i)
{ {
scalar Pinj = getTableValue(injectionPressureProfile_, massFlowRateProfile_[i][0]); scalar Pinj = getTableValue(injectionPressureProfile_, velocityProfile_[i][0]);
scalar Vinj = sqrt(2.0*(Pinj - referencePressure)/rho); scalar Vinj = sqrt(2.0*(Pinj - referencePressure)/rho);
scalar mfr = massFlowRateProfile_[i][1]/(rho*A); scalar mfr = massFlowRateProfile_[i][1]/(rho*A);
scalar Cd = mfr/Vinj; scalar Cd = mfr/Vinj;
@ -367,4 +377,14 @@ void Foam::commonRailInjector::correctProfiles
} }
} }
Foam::vector Foam::commonRailInjector::tan1(const label n) const
{
return tangentialInjectionVector1_;
}
Foam::vector Foam::commonRailInjector::tan2(const label n) const
{
return tangentialInjectionVector2_;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -132,11 +132,12 @@ public:
) const; ) const;
//- Return the injection position //- Return the injection position
const vector position() const; const vector position(const label n) const;
//- Return the injection position //- Return the injection position
vector position vector position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -146,11 +147,18 @@ public:
Random& rndGen Random& rndGen
) const; ) const;
//- Return the number of holes
label nHoles() const;
//- Return the injector diameter //- Return the injector diameter
scalar d() const; scalar d() const;
//- Return the injection direction //- Return the injection direction
const vector& direction() const; const vector& direction
(
const label i,
const scalar time
) const;
//- Return the mass of the injected particle //- Return the mass of the injected particle
scalar mass scalar mass
@ -206,6 +214,9 @@ public:
List<pair> CdProfile() const; List<pair> CdProfile() const;
scalar Cd(const scalar time) const; scalar Cd(const scalar time) const;
vector tan1(const label n) const;
vector tan2(const label n) const;
void correctProfiles void correctProfiles
( (
const liquidMixture& fuel, const liquidMixture& fuel,

View File

@ -178,13 +178,14 @@ Foam::label Foam::definedInjector::nParcelsToInject
return nParcels; return nParcels;
} }
const Foam::vector Foam::definedInjector::position() const const Foam::vector Foam::definedInjector::position(const label n) const
{ {
return position_; return position_;
} }
Foam::vector Foam::definedInjector::position Foam::vector Foam::definedInjector::position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -227,12 +228,21 @@ Foam::vector Foam::definedInjector::position
return position_; return position_;
} }
Foam::label Foam::definedInjector::nHoles() const
{
return 1;
}
Foam::scalar Foam::definedInjector::d() const Foam::scalar Foam::definedInjector::d() const
{ {
return d_; return d_;
} }
const Foam::vector& Foam::definedInjector::direction() const const Foam::vector& Foam::definedInjector::direction
(
const label i,
const scalar time
) const
{ {
return direction_; return direction_;
} }
@ -344,4 +354,14 @@ void Foam::definedInjector::correctProfiles
} }
} }
Foam::vector Foam::definedInjector::tan1(const label n) const
{
return tangentialInjectionVector1_;
}
Foam::vector Foam::definedInjector::tan2(const label n) const
{
return tangentialInjectionVector2_;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -132,11 +132,12 @@ public:
) const; ) const;
//- Return the injection position //- Return the injection position
const vector position() const; const vector position(const label n) const;
//- Return the injection position //- Return the injection position
vector position vector position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -146,11 +147,18 @@ public:
Random& rndGen Random& rndGen
) const; ) const;
//- Return the number of holes
label nHoles() const;
//- Return the injector diameter //- Return the injector diameter
scalar d() const; scalar d() const;
//- Return the injection direction //- Return the injection direction
const vector& direction() const; const vector& direction
(
const label i,
const scalar time
) const;
//- Return the mass of the injected particle //- Return the mass of the injected particle
scalar mass scalar mass
@ -210,6 +218,9 @@ public:
scalar Cd(const scalar time) const; scalar Cd(const scalar time) const;
vector tan1(const label n) const;
vector tan2(const label n) const;
void correctProfiles void correctProfiles
( (
const liquidMixture& fuel, const liquidMixture& fuel,

View File

@ -114,11 +114,12 @@ public:
) const = 0; ) const = 0;
//- Return the injection position //- Return the injection position
virtual const vector position() const = 0; virtual const vector position(const label n) const = 0;
//- Return the injection position //- Return the injection position
virtual vector position virtual vector position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -128,11 +129,18 @@ public:
Random& rndGen Random& rndGen
) const = 0; ) const = 0;
//- Return the number of holes
virtual label nHoles() const = 0;
//- Return the injector diameter //- Return the injector diameter
virtual scalar d() const = 0; virtual scalar d() const = 0;
//- Return the injection direction //- Return the injection direction for hole i
virtual const vector& direction() const = 0; virtual const vector& direction
(
const label i,
const scalar time
) const = 0;
//- Return the mass of the injected liquid between times //- Return the mass of the injected liquid between times
virtual scalar mass virtual scalar mass
@ -189,6 +197,12 @@ public:
virtual bool pressureIndependentVelocity() const = 0; virtual bool pressureIndependentVelocity() const = 0;
//- Return a vector perpendicular to the injection direction and tan2 for hole n
virtual vector tan1(const label n) const = 0;
//- Return a vector perpendicular to the injection direction and tan1 for hole n
virtual vector tan2(const label n) const = 0;
scalar getTableValue scalar getTableValue
( (
const List<pair>& table, const List<pair>& table,

View File

@ -0,0 +1,420 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2008 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 "multiHoleInjector.H"
#include "addToRunTimeSelectionTable.H"
#include "Random.H"
#include "mathematicalConstants.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(multiHoleInjector, 0);
addToRunTimeSelectionTable
(
injectorType,
multiHoleInjector,
dictionary
);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::multiHoleInjector::multiHoleInjector
(
const Foam::Time& t,
const Foam::dictionary& dict
)
:
injectorType(t, dict),
propsDict_(dict.subDict(typeName + "Props")),
centerPosition_(propsDict_.lookup("position")),
xyAngle_(readScalar(propsDict_.lookup("xyAngle"))),
zAngle_(readScalar(propsDict_.lookup("zAngle"))),
nHoles_(readLabel(propsDict_.lookup("nHoles"))),
umbrellaAngle_(readScalar(propsDict_.lookup("umbrellaAngle"))),
nozzleTipDiameter_(readScalar(propsDict_.lookup("nozzleTipDiameter"))),
angleSpacing_(propsDict_.lookup("angleSpacing")),
d_(readScalar(propsDict_.lookup("diameter"))),
Cd_(readScalar(propsDict_.lookup("Cd"))),
mass_(readScalar(propsDict_.lookup("mass"))),
nParcels_(readLabel(propsDict_.lookup("nParcels"))),
X_(propsDict_.lookup("X")),
massFlowRateProfile_(propsDict_.lookup("massFlowRateProfile")),
velocityProfile_(massFlowRateProfile_),
injectionPressureProfile_(massFlowRateProfile_),
CdProfile_(massFlowRateProfile_),
TProfile_(propsDict_.lookup("temperatureProfile")),
averageParcelMass_(nHoles_*mass_/nParcels_),
direction_(nHoles_),
position_(nHoles_),
pressureIndependentVelocity_(true),
tangentialInjectionVector1_(nHoles_),
tangentialInjectionVector2_(nHoles_)
{
// check if time entries for soi and eoi match
if (mag(massFlowRateProfile_[0][0]-TProfile_[0][0]) > SMALL)
{
FatalError << "multiHoleInjector::multiHoleInjector(const time& t, const dictionary dict) " << endl
<< " start-times do not match for TemperatureProfile and massFlowRateProfile."
<< abort(FatalError);
}
if (mag(massFlowRateProfile_[massFlowRateProfile_.size()-1][0]-TProfile_[TProfile_.size()-1][0]) > SMALL)
{
FatalError << "multiHoleInjector::multiHoleInjector(const time& t, const dictionary dict) " << endl
<< " end-times do not match for TemperatureProfile and massFlowRateProfile."
<< abort(FatalError);
}
// convert CA to real time
forAll(massFlowRateProfile_, i)
{
massFlowRateProfile_[i][0] = t.userTimeToTime(massFlowRateProfile_[i][0]);
velocityProfile_[i][0] = massFlowRateProfile_[i][0];
injectionPressureProfile_[i][0] = massFlowRateProfile_[i][0];
}
forAll(TProfile_, i)
{
TProfile_[i][0] = t.userTimeToTime(TProfile_[i][0]);
}
scalar integratedMFR = integrateTable(massFlowRateProfile_);
forAll(massFlowRateProfile_, i)
{
// correct the massFlowRateProfile to match the injected mass
massFlowRateProfile_[i][1] *= mass_/integratedMFR;
CdProfile_[i][0] = massFlowRateProfile_[i][0];
CdProfile_[i][1] = Cd_;
}
setTangentialVectors();
// check molar fractions
scalar Xsum = 0.0;
forAll(X_, i)
{
Xsum += X_[i];
}
if (mag(Xsum - 1.0) > SMALL)
{
Info << "Warning!!!\n multiHoleInjector::multiHoleInjector(const time& t, Istream& is)"
<< "X does not add up to 1.0, correcting molar fractions."
<< endl;
forAll(X_, i)
{
X_[i] /= Xsum;
}
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::multiHoleInjector::~multiHoleInjector()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::multiHoleInjector::setTangentialVectors()
{
scalar pi180 = mathematicalConstant::pi/180.0;
scalar alpha = xyAngle_*pi180;
scalar phi = zAngle_*pi180;
vector xp(cos(alpha), sin(alpha), 0.0);
vector zp(cos(alpha)*sin(phi), sin(alpha)*sin(phi), cos(phi));
if (mag(zp-xp) < 1.0e-15)
{
xp = vector(0.0, 0.0, -1.0);
xp -= (xp & zp)*zp;
xp /= mag(xp);
}
vector yp = zp^xp;
// Info << "xp = " << xp << endl;
// Info << "yp = " << yp << endl;
// Info << "zp = " << zp << endl;
scalar angle = 0.0;
scalar u = umbrellaAngle_*pi180/2.0;
for(label i=0; i<nHoles_; i++)
{
angle += angleSpacing_[i];
scalar v = angle*pi180;
direction_[i] = cos(v)*sin(u)*xp + sin(v)*sin(u)*yp + cos(u)*zp;
vector dp = direction_[i] - (direction_[i] & zp)*direction_[i];
if (mag(dp) > SMALL)
{
dp /= mag(dp);
}
position_[i] = centerPosition_ + 0.5*nozzleTipDiameter_*dp;
// Info << "i = " << i << ", dir = " << direction_[i] << ", pos = " << position_[i] << endl;
}
Random rndGen(label(0));
for(label i=0; i<nHoles_; i++)
{
vector tangent(vector::zero);
scalar magV = 0;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & direction_[i])*direction_[i];
magV = mag(tangent);
}
tangentialInjectionVector1_[i] = tangent/magV;
tangentialInjectionVector2_[i] = direction_[i] ^ tangentialInjectionVector1_[i];
}
}
Foam::label Foam::multiHoleInjector::nParcelsToInject
(
const scalar time0,
const scalar time1
) const
{
scalar mInj = mass_*(fractionOfInjection(time1)-fractionOfInjection(time0));
label nParcels = label(mInj/averageParcelMass_ + 0.49);
return nParcels;
}
const Foam::vector Foam::multiHoleInjector::position(const label n) const
{
return position_[n];
}
Foam::vector Foam::multiHoleInjector::position
(
const label n,
const scalar time,
const bool twoD,
const scalar angleOfWedge,
const vector& axisOfSymmetry,
const vector& axisOfWedge,
const vector& axisOfWedgeNormal,
Random& rndGen
) const
{
if (twoD)
{
scalar is = position_[n] & axisOfSymmetry;
scalar magInj = mag(position_[n] - is*axisOfSymmetry);
vector halfWedge =
axisOfWedge*cos(0.5*angleOfWedge)
+ axisOfWedgeNormal*sin(0.5*angleOfWedge);
halfWedge /= mag(halfWedge);
return (is*axisOfSymmetry + magInj*halfWedge);
}
else
{
// otherwise, disc injection
scalar iRadius = d_*rndGen.scalar01();
scalar iAngle = 2.0*mathematicalConstant::pi*rndGen.scalar01();
return
(
position_[n]
+ iRadius
* (
tangentialInjectionVector1_[n]*cos(iAngle)
+ tangentialInjectionVector2_[n]*sin(iAngle)
)
);
}
return position_[0];
}
Foam::label Foam::multiHoleInjector::nHoles() const
{
return nHoles_;
}
Foam::scalar Foam::multiHoleInjector::d() const
{
return d_;
}
const Foam::vector& Foam::multiHoleInjector::direction
(
const label i,
const scalar time
) const
{
return direction_[i];
}
Foam::scalar Foam::multiHoleInjector::mass
(
const scalar time0,
const scalar time1,
const bool twoD,
const scalar angleOfWedge
) const
{
scalar mInj = mass_*(fractionOfInjection(time1)-fractionOfInjection(time0));
// correct mass if calculation is 2D
if (twoD)
{
mInj *= 0.5*angleOfWedge/mathematicalConstant::pi;
}
return mInj;
}
Foam::scalar Foam::multiHoleInjector::mass() const
{
return mass_;
}
const Foam::scalarField& Foam::multiHoleInjector::X() const
{
return X_;
}
Foam::List<Foam::multiHoleInjector::pair> Foam::multiHoleInjector::T() const
{
return TProfile_;
}
Foam::scalar Foam::multiHoleInjector::T(const scalar time) const
{
return getTableValue(TProfile_, time);
}
Foam::scalar Foam::multiHoleInjector::tsoi() const
{
return massFlowRateProfile_[0][0];
}
Foam::scalar Foam::multiHoleInjector::teoi() const
{
return massFlowRateProfile_[massFlowRateProfile_.size()-1][0];
}
Foam::scalar Foam::multiHoleInjector::massFlowRate
(
const scalar time
) const
{
return getTableValue(massFlowRateProfile_, time);
}
Foam::scalar Foam::multiHoleInjector::injectionPressure
(
const scalar time
) const
{
return getTableValue(injectionPressureProfile_, time);
}
Foam::scalar Foam::multiHoleInjector::velocity
(
const scalar time
) const
{
return getTableValue(velocityProfile_, time);
}
Foam::List<Foam::multiHoleInjector::pair> Foam::multiHoleInjector::CdProfile() const
{
return CdProfile_;
}
Foam::scalar Foam::multiHoleInjector::Cd
(
const scalar time
) const
{
return Cd_;
}
Foam::scalar Foam::multiHoleInjector::fractionOfInjection(const scalar time) const
{
return integrateTable(massFlowRateProfile_, time)/mass_;
}
Foam::scalar Foam::multiHoleInjector::injectedMass
(
const scalar t
) const
{
return mass_*fractionOfInjection(t);
}
void Foam::multiHoleInjector::correctProfiles
(
const liquidMixture& fuel,
const scalar referencePressure
)
{
scalar A = nHoles_*0.25*mathematicalConstant::pi*pow(d_, 2.0);
forAll(velocityProfile_, i)
{
scalar time = velocityProfile_[i][0];
scalar rho = fuel.rho(referencePressure, T(time), X_);
scalar v = massFlowRateProfile_[i][1]/(Cd_*rho*A);
velocityProfile_[i][1] = v;
injectionPressureProfile_[i][1] = referencePressure + 0.5*rho*v*v;
}
}
Foam::vector Foam::multiHoleInjector::tan1(const label n) const
{
return tangentialInjectionVector1_[n];
}
Foam::vector Foam::multiHoleInjector::tan2(const label n) const
{
return tangentialInjectionVector2_[n];
}
// ************************************************************************* //

View File

@ -0,0 +1,248 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2008 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::multiHoleInjector
Description
The unit injector
SourceFiles
multiHoleInjectorI.H
multiHoleInjector.C
multiHoleInjectorIO.C
\*---------------------------------------------------------------------------*/
#ifndef multiHoleInjector_H
#define multiHoleInjector_H
#include "injectorType.H"
#include "vector.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class multiHoleInjector Declaration
\*---------------------------------------------------------------------------*/
class multiHoleInjector
:
public injectorType
{
private:
typedef VectorSpace<Vector<scalar>, scalar, 2> pair;
// Private data
dictionary propsDict_;
vector centerPosition_;
scalar xyAngle_;
scalar zAngle_;
label nHoles_;
scalar umbrellaAngle_;
scalar nozzleTipDiameter_;
List<scalar> angleSpacing_;
scalar d_;
scalar Cd_;
scalar mass_;
label nParcels_;
scalarField X_;
List<pair> massFlowRateProfile_;
List<pair> velocityProfile_;
List<pair> injectionPressureProfile_;
List<pair> CdProfile_;
List<pair> TProfile_;
scalar averageParcelMass_;
List<vector> direction_;
List<vector> position_;
bool pressureIndependentVelocity_;
//- two orthogonal vectors that are also orthogonal
// to the injection direction
List<vector> tangentialInjectionVector1_, tangentialInjectionVector2_;
// Private Member Functions
//- Disallow default bitwise copy construct
multiHoleInjector(const multiHoleInjector&);
//- Disallow default bitwise assignment
void operator=(const multiHoleInjector&);
//- Create two vectors orthonoal to each other
// and the injection vector
void setTangentialVectors();
//- Return the fraction of the total injected liquid
scalar fractionOfInjection(const scalar time) const;
public:
//- Runtime type information
TypeName("multiHoleInjector");
// Constructors
//- Construct from components
multiHoleInjector
(
const Time& t,
const dictionary& dict
);
// Destructor
~multiHoleInjector();
// Member Functions
//- Return number of particles to inject
label nParcelsToInject
(
const scalar t0,
const scalar t1
) const;
//- Return the injection position
const vector position(const label n) const;
//- Return the injection position
vector position
(
const label n,
const scalar time,
const bool twoD,
const scalar angleOfWedge,
const vector& axisOfSymmetry,
const vector& axisOfWedge,
const vector& axisOfWedgeNormal,
Random& rndGen
) const;
//- Return the number of holes
label nHoles() const;
//- Return the injector diameter
scalar d() const;
//- Return the injection direction
const vector& direction
(
const label i,
const scalar time
) const;
//- Return the mass of the injected particle
scalar mass
(
const scalar t0,
const scalar t1,
const bool twoD,
const scalar angleOfWedge
) const;
//- Return the mass injected by the injector
scalar mass() const;
//- Return the fuel mass fractions of the injected particle
const scalarField& X() const;
//- Return the temperature profile of the injected particle
List<pair> T() const;
//- Return the temperature of the injected particle
scalar T(const scalar time) const;
//- Return the start-of-injection time
scalar tsoi() const;
//- Return the end-of-injection time
scalar teoi() const;
//- Return the injected liquid mass
scalar injectedMass(const scalar t) const;
List<pair> massFlowRateProfile() const
{
return massFlowRateProfile_;
}
scalar massFlowRate(const scalar time) const;
List<pair> injectionPressureProfile() const
{
return injectionPressureProfile_;
}
scalar injectionPressure(const scalar time) const;
List<pair> velocityProfile() const
{
return velocityProfile_;
}
scalar velocity(const scalar time) const;
List<pair> CdProfile() const;
scalar Cd(const scalar time) const;
vector tan1(const label n) const;
vector tan2(const label n) const;
void correctProfiles
(
const liquidMixture& fuel,
const scalar referencePressure
);
bool pressureIndependentVelocity() const
{
return pressureIndependentVelocity_;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -187,13 +187,14 @@ Foam::label Foam::swirlInjector::nParcelsToInject
return nParcels; return nParcels;
} }
const Foam::vector Foam::swirlInjector::position() const const Foam::vector Foam::swirlInjector::position(const label n) const
{ {
return position_; return position_;
} }
Foam::vector Foam::swirlInjector::position Foam::vector Foam::swirlInjector::position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -236,12 +237,21 @@ Foam::vector Foam::swirlInjector::position
return position_; return position_;
} }
Foam::label Foam::swirlInjector::nHoles() const
{
return 1;
}
Foam::scalar Foam::swirlInjector::d() const Foam::scalar Foam::swirlInjector::d() const
{ {
return d_; return d_;
} }
const Foam::vector& Foam::swirlInjector::direction() const const Foam::vector& Foam::swirlInjector::direction
(
const label i,
const scalar time
) const
{ {
return direction_; return direction_;
} }
@ -370,4 +380,14 @@ void Foam::swirlInjector::correctProfiles
} }
} }
Foam::vector Foam::swirlInjector::tan1(const label n) const
{
return tangentialInjectionVector1_;
}
Foam::vector Foam::swirlInjector::tan2(const label n) const
{
return tangentialInjectionVector2_;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -146,11 +146,12 @@ public:
) const; ) const;
//- Return the injection position //- Return the injection position
const vector position() const; const vector position(const label n) const;
//- Return the injection position //- Return the injection position
vector position vector position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -160,11 +161,18 @@ public:
Random& rndGen Random& rndGen
) const; ) const;
//- Return the number of holes
label nHoles() const;
//- Return the injector diameter //- Return the injector diameter
scalar d() const; scalar d() const;
//- Return the injection direction //- Return the injection direction
const vector& direction() const; const vector& direction
(
const label i,
const scalar time
) const;
//- Return the mass of the injected particle //- Return the mass of the injected particle
scalar mass scalar mass
@ -220,6 +228,9 @@ public:
//- Return the injected liquid mass //- Return the injected liquid mass
scalar injectedMass(const scalar t) const; scalar injectedMass(const scalar t) const;
vector tan1(const label n) const;
vector tan2(const label n) const;
void correctProfiles void correctProfiles
( (
const liquidMixture& fuel, const liquidMixture& fuel,

View File

@ -60,17 +60,32 @@ Foam::unitInjector::unitInjector
d_(readScalar(propsDict_.lookup("diameter"))), d_(readScalar(propsDict_.lookup("diameter"))),
Cd_(readScalar(propsDict_.lookup("Cd"))), Cd_(readScalar(propsDict_.lookup("Cd"))),
mass_(readScalar(propsDict_.lookup("mass"))), mass_(readScalar(propsDict_.lookup("mass"))),
T_(readScalar(propsDict_.lookup("temperature"))),
nParcels_(readLabel(propsDict_.lookup("nParcels"))), nParcels_(readLabel(propsDict_.lookup("nParcels"))),
X_(propsDict_.lookup("X")), X_(propsDict_.lookup("X")),
massFlowRateProfile_(propsDict_.lookup("massFlowRateProfile")), massFlowRateProfile_(propsDict_.lookup("massFlowRateProfile")),
velocityProfile_(massFlowRateProfile_), velocityProfile_(massFlowRateProfile_),
injectionPressureProfile_(massFlowRateProfile_), injectionPressureProfile_(massFlowRateProfile_),
CdProfile_(massFlowRateProfile_), CdProfile_(massFlowRateProfile_),
TProfile_(massFlowRateProfile_), TProfile_(propsDict_.lookup("temperatureProfile")),
averageParcelMass_(mass_/nParcels_), averageParcelMass_(mass_/nParcels_),
pressureIndependentVelocity_(true) pressureIndependentVelocity_(true)
{ {
// check if time entries for soi and eoi match
if (mag(massFlowRateProfile_[0][0]-TProfile_[0][0]) > SMALL)
{
FatalError << "unitInjector::unitInjector(const time& t, const dictionary dict) " << endl
<< " start-times do not match for TemperatureProfile and massFlowRateProfile."
<< abort(FatalError);
}
if (mag(massFlowRateProfile_[massFlowRateProfile_.size()-1][0]-TProfile_[TProfile_.size()-1][0]) > SMALL)
{
FatalError << "unitInjector::unitInjector(const time& t, const dictionary dict) " << endl
<< " end-times do not match for TemperatureProfile and massFlowRateProfile."
<< abort(FatalError);
}
// convert CA to real time // convert CA to real time
forAll(massFlowRateProfile_, i) forAll(massFlowRateProfile_, i)
{ {
@ -79,6 +94,11 @@ Foam::unitInjector::unitInjector
injectionPressureProfile_[i][0] = massFlowRateProfile_[i][0]; injectionPressureProfile_[i][0] = massFlowRateProfile_[i][0];
} }
forAll(TProfile_, i)
{
TProfile_[i][0] = t.userTimeToTime(TProfile_[i][0]);
}
scalar integratedMFR = integrateTable(massFlowRateProfile_); scalar integratedMFR = integrateTable(massFlowRateProfile_);
forAll(massFlowRateProfile_, i) forAll(massFlowRateProfile_, i)
@ -86,9 +106,6 @@ Foam::unitInjector::unitInjector
// correct the massFlowRateProfile to match the injected mass // correct the massFlowRateProfile to match the injected mass
massFlowRateProfile_[i][1] *= mass_/integratedMFR; massFlowRateProfile_[i][1] *= mass_/integratedMFR;
TProfile_[i][0] = massFlowRateProfile_[i][0];
TProfile_[i][1] = T_;
CdProfile_[i][0] = massFlowRateProfile_[i][0]; CdProfile_[i][0] = massFlowRateProfile_[i][0];
CdProfile_[i][1] = Cd_; CdProfile_[i][1] = Cd_;
} }
@ -159,13 +176,14 @@ Foam::label Foam::unitInjector::nParcelsToInject
return nParcels; return nParcels;
} }
const Foam::vector Foam::unitInjector::position() const const Foam::vector Foam::unitInjector::position(const label n) const
{ {
return position_; return position_;
} }
Foam::vector Foam::unitInjector::position Foam::vector Foam::unitInjector::position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -208,12 +226,21 @@ Foam::vector Foam::unitInjector::position
return position_; return position_;
} }
Foam::label Foam::unitInjector::nHoles() const
{
return 1;
}
Foam::scalar Foam::unitInjector::d() const Foam::scalar Foam::unitInjector::d() const
{ {
return d_; return d_;
} }
const Foam::vector& Foam::unitInjector::direction() const const Foam::vector& Foam::unitInjector::direction
(
const label i,
const scalar time
) const
{ {
return direction_; return direction_;
} }
@ -254,7 +281,7 @@ Foam::List<Foam::unitInjector::pair> Foam::unitInjector::T() const
Foam::scalar Foam::unitInjector::T(const scalar time) const Foam::scalar Foam::unitInjector::T(const scalar time) const
{ {
return T_; return getTableValue(TProfile_, time);
} }
Foam::scalar Foam::unitInjector::tsoi() const Foam::scalar Foam::unitInjector::tsoi() const
@ -328,14 +355,24 @@ void Foam::unitInjector::correctProfiles
scalar A = 0.25*mathematicalConstant::pi*pow(d_, 2.0); scalar A = 0.25*mathematicalConstant::pi*pow(d_, 2.0);
scalar pDummy = 1.0e+5; scalar pDummy = 1.0e+5;
scalar rho = fuel.rho(pDummy, T_, X_);
forAll(velocityProfile_, i) forAll(velocityProfile_, i)
{ {
scalar time = velocityProfile_[i][0];
scalar rho = fuel.rho(pDummy, T(time), X_);
scalar v = massFlowRateProfile_[i][1]/(Cd_*rho*A); scalar v = massFlowRateProfile_[i][1]/(Cd_*rho*A);
velocityProfile_[i][1] = v; velocityProfile_[i][1] = v;
injectionPressureProfile_[i][1] = referencePressure + 0.5*rho*v*v; injectionPressureProfile_[i][1] = referencePressure + 0.5*rho*v*v;
} }
} }
Foam::vector Foam::unitInjector::tan1(const label n) const
{
return tangentialInjectionVector1_;
}
Foam::vector Foam::unitInjector::tan2(const label n) const
{
return tangentialInjectionVector2_;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -68,7 +68,6 @@ private:
scalar d_; scalar d_;
scalar Cd_; scalar Cd_;
scalar mass_; scalar mass_;
scalar T_;
label nParcels_; label nParcels_;
scalarField X_; scalarField X_;
List<pair> massFlowRateProfile_; List<pair> massFlowRateProfile_;
@ -132,11 +131,12 @@ public:
) const; ) const;
//- Return the injection position //- Return the injection position
const vector position() const; const vector position(const label n) const;
//- Return the injection position //- Return the injection position
vector position vector position
( (
const label n,
const scalar time, const scalar time,
const bool twoD, const bool twoD,
const scalar angleOfWedge, const scalar angleOfWedge,
@ -146,11 +146,18 @@ public:
Random& rndGen Random& rndGen
) const; ) const;
//- Return the number of holes
label nHoles() const;
//- Return the injector diameter //- Return the injector diameter
scalar d() const; scalar d() const;
//- Return the injection direction //- Return the injection direction
const vector& direction() const; const vector& direction
(
const label i,
const scalar time
) const;
//- Return the mass of the injected particle //- Return the mass of the injected particle
scalar mass scalar mass
@ -206,6 +213,9 @@ public:
List<pair> CdProfile() const; List<pair> CdProfile() const;
scalar Cd(const scalar time) const; scalar Cd(const scalar time) const;
vector tan1(const label n) const;
vector tan2(const label n) const;
void correctProfiles void correctProfiles
( (
const liquidMixture& fuel, const liquidMixture& fuel,

View File

@ -86,6 +86,7 @@ void parcel::setRelaxationTimes
W = 1.0/W; W = 1.0/W;
scalarField Xf(Nf, 0.0); scalarField Xf(Nf, 0.0);
scalarField Yf(Nf, 0.0);
scalarField psat(Nf, 0.0); scalarField psat(Nf, 0.0);
scalarField msat(Nf, 0.0); scalarField msat(Nf, 0.0);
@ -94,6 +95,7 @@ void parcel::setRelaxationTimes
label j = sDB.liquidToGasIndex()[i]; label j = sDB.liquidToGasIndex()[i];
scalar Y = sDB.composition().Y()[j][celli]; scalar Y = sDB.composition().Y()[j][celli];
scalar Wi = sDB.gasProperties()[j].W(); scalar Wi = sDB.gasProperties()[j].W();
Yf[i] = Y;
Xf[i] = Y*W/Wi; Xf[i] = Y*W/Wi;
psat[i] = fuels.properties()[i].pv(pressure, temperature); psat[i] = fuels.properties()[i].pv(pressure, temperature);
msat[i] = min(1.0, psat[i]/pressure)*Wi/W; msat[i] = min(1.0, psat[i]/pressure)*Wi/W;
@ -116,6 +118,22 @@ void parcel::setRelaxationTimes
scalar rhoFuelVap = pressureAtSurface*fuels.W(X())/(specie::RR*Tf); scalar rhoFuelVap = pressureAtSurface*fuels.W(X())/(specie::RR*Tf);
scalarField Xs(sDB.fuels().Xs(pressure, temperature, T(), Xf, X())); scalarField Xs(sDB.fuels().Xs(pressure, temperature, T(), Xf, X()));
scalarField Ys(Nf, 0.0);
scalar Wliq = 0.0;
for(label i=0; i<Nf; i++)
{
label j = sDB.liquidToGasIndex()[i];
scalar Wi = sDB.gasProperties()[j].W();
Wliq += Xs[i]*Wi;
}
for(label i=0; i<Nf; i++)
{
label j = sDB.liquidToGasIndex()[i];
scalar Wi = sDB.gasProperties()[j].W();
Ys[i] = Xs[i]*Wi/Wliq;
}
scalar Reynolds = Re(Up, nuf); scalar Reynolds = Re(Up, nuf);
scalar Prandtl = Pr(cpMixture, muf, kMixture); scalar Prandtl = Pr(cpMixture, muf, kMixture);
@ -238,7 +256,6 @@ void parcel::setRelaxationTimes
dp0 = dp; dp0 = dp;
} }
label j = sDB.liquidToGasIndex()[i];
scalar vapourSurfaceEnthalpy = 0.0; scalar vapourSurfaceEnthalpy = 0.0;
scalar vapourFarEnthalpy = 0.0; scalar vapourFarEnthalpy = 0.0;
@ -266,8 +283,6 @@ void parcel::setRelaxationTimes
vapourSurfaceEnthalpy, vapourSurfaceEnthalpy,
vapourFarEnthalpy, vapourFarEnthalpy,
cpMixture, cpMixture,
Xs[i],
Xf[j],
temperature, temperature,
kLiquid kLiquid
); );

View File

@ -22,7 +22,7 @@ reduce(foundCell, orOp<bool>());
if (!foundCell) if (!foundCell)
{ {
injectionPosition = it.position(); injectionPosition = it->position(n);
injectorCell = mesh_.findCell(injectionPosition); injectorCell = mesh_.findCell(injectionPosition);
if (injectorCell >= 0) if (injectorCell >= 0)

View File

@ -52,6 +52,7 @@ defineTemplateTypeNameAndDebug(IOPtrList<injector>, 0);
// Construct from components // Construct from components
Foam::spray::spray Foam::spray::spray
( (
const volPointInterpolation& vpi,
const volVectorField& U, const volVectorField& U,
const volScalarField& rho, const volScalarField& rho,
const volScalarField& p, const volScalarField& p,
@ -66,6 +67,7 @@ Foam::spray::spray
runTime_(U.time()), runTime_(U.time()),
time0_(runTime_.value()), time0_(runTime_.value()),
mesh_(U.mesh()), mesh_(U.mesh()),
volPointInterpolation_(vpi),
rndGen_(label(0)), rndGen_(label(0)),
U_(U), U_(U),
@ -261,7 +263,7 @@ Foam::spray::spray
{ {
FatalErrorIn FatalErrorIn
( (
"spray::spray(const volVectorField& U, " "spray::spray(const pointMesh& pMesh, const volVectorField& U, "
"const volScalarField& rho, const volScalarField& p, " "const volScalarField& rho, const volScalarField& p, "
"const volScalarField& T, const combustionMixture& composition," "const volScalarField& T, const combustionMixture& composition,"
"const PtrList<specieProperties>& gaseousFuelProperties, " "const PtrList<specieProperties>& gaseousFuelProperties, "

View File

@ -36,6 +36,7 @@ Description
#include "parcel.H" #include "parcel.H"
#include "injector.H" #include "injector.H"
#include "IOPtrList.H" #include "IOPtrList.H"
#include "volPointInterpolation.H"
#include "interpolation.H" #include "interpolation.H"
#include "liquid.H" #include "liquid.H"
#include "sprayThermoTypes.H" #include "sprayThermoTypes.H"
@ -75,6 +76,7 @@ class spray
const Time& runTime_; const Time& runTime_;
scalar time0_; scalar time0_;
const fvMesh& mesh_; const fvMesh& mesh_;
const volPointInterpolation& volPointInterpolation_;
//- Random number generator //- Random number generator
Random rndGen_; Random rndGen_;
@ -187,6 +189,7 @@ public:
//- Construct from components //- Construct from components
spray spray
( (
const volPointInterpolation& vpi,
const volVectorField& U, const volVectorField& U,
const volScalarField& rho, const volScalarField& rho,
const volScalarField& p, const volScalarField& p,

View File

@ -246,7 +246,23 @@ scalar spray::liquidPenetration
const scalar prc const scalar prc
) const ) const
{ {
vector ip = injectors_[nozzlei].properties()->position();
label nHoles = injectors_[nozzlei].properties()->nHoles();
vector ip(vector::zero);
if (nHoles > 1)
{
for(label i=0;i<nHoles;i++)
{
ip += injectors_[nozzlei].properties()->position(i);
}
ip /= nHoles;
}
else
{
ip = injectors_[nozzlei].properties()->position(0);
}
// vector ip = injectors_[nozzlei].properties()->position();
scalar d = 0.0; scalar d = 0.0;
scalar mTot = 0.0; scalar mTot = 0.0;

View File

@ -45,24 +45,31 @@ void spray::inject()
// Inject the parcels for each injector sequentially // Inject the parcels for each injector sequentially
forAll(injectors_, i) forAll(injectors_, i)
{ {
const injectorType& it = injectors_[i].properties(); autoPtr<injectorType>& it = injectors()[i].properties();
if (!it->pressureIndependentVelocity())
{
scalar referencePressure = p().average().value();
it->correctProfiles(fuels(), referencePressure);
}
const label nHoles = it->nHoles();
// parcels have the same mass during a timestep // parcels have the same mass during a timestep
scalar mass = it.mass(time0, time, twoD_, angleOfWedge_); scalar mass = it->mass(time0, time, twoD_, angleOfWedge_);
label Np = it.nParcelsToInject(time0, time); label Np = it->nParcelsToInject(time0, time);
if (mass > 0) if (mass > 0)
{ {
Np = max(1, Np); Np = max(1, Np);
scalar mp = mass/Np; scalar mp = mass/Np/nHoles;
// constT is only larger than zero for the first // constT is only larger than zero for the first
// part of the injection // part of the injection
scalar constT = max scalar constT = max
( (
0.0, 0.0,
it.tsoi() - time0 it->tsoi() - time0
); );
// deltaT is the duration of injection during this timestep // deltaT is the duration of injection during this timestep
@ -71,8 +78,8 @@ void spray::inject()
runTime_.deltaT().value(), runTime_.deltaT().value(),
min min
( (
time - it.tsoi(), time - it->tsoi(),
it.teoi() - time0 it->teoi() - time0
) )
); );
@ -81,9 +88,13 @@ void spray::inject()
// calculate the time of injection for parcel 'j' // calculate the time of injection for parcel 'j'
scalar toi = time0 + constT + deltaT*j/scalar(Np); scalar toi = time0 + constT + deltaT*j/scalar(Np);
for(label n=0; n<nHoles; n++)
{
// calculate the velocity of the injected parcel // calculate the velocity of the injected parcel
vector injectionPosition = it.position vector injectionPosition = it->position
( (
n,
toi, toi,
twoD_, twoD_,
angleOfWedge_, angleOfWedge_,
@ -94,7 +105,7 @@ void spray::inject()
); );
scalar diameter = injection().d0(i, toi); scalar diameter = injection().d0(i, toi);
vector direction = injection().direction(i, toi, diameter); vector direction = injection().direction(i, n, toi, diameter);
vector U = injection().velocity(i, toi)*direction; vector U = injection().velocity(i, toi)*direction;
scalar symComponent = direction & axisOfSymmetry_; scalar symComponent = direction & axisOfSymmetry_;
@ -122,7 +133,7 @@ void spray::inject()
injectorCell, injectorCell,
normal, normal,
diameter, diameter,
it.T(toi), it->T(toi),
mp, mp,
deviation, deviation,
ddev, ddev,
@ -133,7 +144,7 @@ void spray::inject()
scalar(i), scalar(i),
U, U,
vector::zero, vector::zero,
it.X(), it->X(),
fuels_->components() fuels_->components()
); );
@ -158,10 +169,11 @@ void spray::inject()
{ {
delete pPtr; delete pPtr;
} }
} } // if (injectorCell....
} } // for(label n=0...
} } // for(label j=0....
} } // if (mass>0)...
} // forAll(injectors)...
time0_ = time; time0_ = time;
} }

View File

@ -140,12 +140,18 @@ void LISA::atomizeParcel
const injectorType& it = const injectorType& it =
spray_.injectors()[label(p.injector())].properties(); spray_.injectors()[label(p.injector())].properties();
const vector itPosition = it.position(); if (it.nHoles() > 1)
{
Info << "Warning: This atomization model is not suitable for multihole injector." << endl
<< "Only the first hole will be used." << endl;
}
const vector itPosition = it.position(0);
scalar pWalk = mag(p.position() - itPosition); scalar pWalk = mag(p.position() - itPosition);
// Updating liquid sheet tickness... that is the droplet diameter // Updating liquid sheet tickness... that is the droplet diameter
const vector direction = it.direction(); const vector direction = it.direction(0, spray_.runTime().value());
scalar h = (p.position() - itPosition) & direction; scalar h = (p.position() - itPosition) & direction;

View File

@ -112,7 +112,22 @@ void blobsSheetAtomization::atomizeParcel
const injectorType& it = const injectorType& it =
spray_.injectors()[label(p.injector())].properties(); spray_.injectors()[label(p.injector())].properties();
const vector itPosition = it.position(); vector itPosition(vector::zero);
label nHoles = it.nHoles();
if (nHoles > 1)
{
for(label i=0; i<nHoles;i++)
{
itPosition += it.position(i);
}
itPosition /= nHoles;
}
else
{
itPosition = it.position(0);
}
// const vector itPosition = it.position();
scalar lBU = B_ * sqrt scalar lBU = B_ * sqrt
( (

View File

@ -169,7 +169,7 @@ void reitzKHRT::breakupParcel
// check if we have RT breakup // check if we have RT breakup
if ((p.ct() > tauRT) && (lambdaRT < p.d())) if ((p.ct() > tauRT) && (lambdaRT < p.d()))
{ {
// the RT breakup creates diameter/lmbdaRT new droplets // the RT breakup creates diameter/lambdaRT new droplets
p.ct() = -GREAT; p.ct() = -GREAT;
scalar multiplier = p.d()/lambdaRT; scalar multiplier = p.d()/lambdaRT;
scalar nDrops = multiplier*Np; scalar nDrops = multiplier*Np;
@ -200,8 +200,6 @@ void reitzKHRT::breakupParcel
scalar averageParcelMass = spray_.injectors()[injector].properties()->mass()/nParcels; scalar averageParcelMass = spray_.injectors()[injector].properties()->mass()/nParcels;
// NN. Since the parcel doesn't know from which injector
// it comes we use the first one to obtain a 'reference' mass
if if
( (
(p.ms()/averageParcelMass > msLimit_) (p.ms()/averageParcelMass > msLimit_)

View File

@ -196,8 +196,6 @@ scalar RutlandFlashBoil::boilingTime
const scalar vapourSurfaceEnthalpy, const scalar vapourSurfaceEnthalpy,
const scalar vapourFarEnthalpy, const scalar vapourFarEnthalpy,
const scalar cpGas, const scalar cpGas,
const scalar Xs,
const scalar Xf,
const scalar temperature, const scalar temperature,
const scalar kLiq const scalar kLiq
) const ) const

View File

@ -135,8 +135,6 @@ public:
const scalar vapourSurfaceEnthalpy, const scalar vapourSurfaceEnthalpy,
const scalar vapourFarEnthalpy, const scalar vapourFarEnthalpy,
const scalar cpGas, const scalar cpGas,
const scalar Xs,
const scalar Xf,
const scalar temperature, const scalar temperature,
const scalar kLiquid const scalar kLiquid
) const; ) const;

View File

@ -143,8 +143,6 @@ public:
const scalar vapourSurfaceEnthalpy, const scalar vapourSurfaceEnthalpy,
const scalar vapourFarEnthalpy, const scalar vapourFarEnthalpy,
const scalar cpGas, const scalar cpGas,
const scalar Xs,
const scalar Xf,
const scalar temperature, const scalar temperature,
const scalar kLiq const scalar kLiq
) const = 0; ) const = 0;

View File

@ -114,8 +114,6 @@ scalar noEvaporation::boilingTime
const scalar, const scalar,
const scalar, const scalar,
const scalar, const scalar,
const scalar,
const scalar,
const scalar const scalar
) const ) const
{ {

View File

@ -111,8 +111,6 @@ public:
const scalar vapourSurfaceEnthalpy, const scalar vapourSurfaceEnthalpy,
const scalar vapourFarEnthalpy, const scalar vapourFarEnthalpy,
const scalar cpGas, const scalar cpGas,
const scalar Xs,
const scalar Xf,
const scalar temperature, const scalar temperature,
const scalar kLiq const scalar kLiq
) const; ) const;

View File

@ -117,8 +117,6 @@ scalar saturateEvaporationModel::boilingTime
const scalar, const scalar,
const scalar, const scalar,
const scalar, const scalar,
const scalar,
const scalar,
const scalar const scalar
) const ) const
{ {

View File

@ -123,8 +123,6 @@ public:
const scalar, const scalar,
const scalar, const scalar,
const scalar, const scalar,
const scalar,
const scalar,
const scalar const scalar
) const; ) const;

View File

@ -181,8 +181,6 @@ scalar standardEvaporationModel::boilingTime
const scalar, const scalar,
const scalar, const scalar,
const scalar, const scalar,
const scalar,
const scalar,
const scalar const scalar
) const ) const
{ {

View File

@ -127,8 +127,6 @@ public:
const scalar, const scalar,
const scalar, const scalar,
const scalar, const scalar,
const scalar,
const scalar,
const scalar const scalar
) const; ) const;

View File

@ -64,9 +64,7 @@ ChomiakInjector::ChomiakInjector
sm.rndGen() sm.rndGen()
) )
), ),
maxSprayAngle_(ChomiakDict_.lookup("maxSprayConeAngle")), maxSprayAngle_(ChomiakDict_.lookup("maxSprayConeAngle"))
tan1_(maxSprayAngle_.size()),
tan2_(maxSprayAngle_.size())
{ {
if (sm.injectors().size() != maxSprayAngle_.size()) if (sm.injectors().size() != maxSprayAngle_.size())
@ -77,24 +75,6 @@ ChomiakInjector::ChomiakInjector
<< abort(FatalError); << abort(FatalError);
} }
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.p().average().value(); scalar referencePressure = sm.p().average().value();
// correct velocityProfile // correct velocityProfile
@ -127,7 +107,8 @@ scalar ChomiakInjector::d0
vector ChomiakInjector::direction vector ChomiakInjector::direction
( (
const label n, const label n,
const scalar, const label hole,
const scalar time,
const scalar d const scalar d
) const ) const
{ {
@ -162,13 +143,13 @@ vector ChomiakInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(hole, time) + normal;
dir /= mag(dir); dir /= mag(dir);
return dir; return dir;

View File

@ -67,10 +67,6 @@ private:
autoPtr<pdf> dropletPDF_; autoPtr<pdf> dropletPDF_;
scalarList maxSprayAngle_; scalarList maxSprayAngle_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
public: public:
//- Runtime type information //- Runtime type information
@ -101,6 +97,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -67,9 +67,7 @@ blobsSwirlInjector::blobsSwirlInjector
angle_(0.0), angle_(0.0),
u_(0.0), u_(0.0),
x_(0.0), x_(0.0),
h_(0.0), h_(0.0)
tan1_(coneAngle_.size()),
tan2_(coneAngle_.size())
{ {
if (sm.injectors().size() != coneAngle_.size()) if (sm.injectors().size() != coneAngle_.size())
@ -80,26 +78,6 @@ blobsSwirlInjector::blobsSwirlInjector
<< abort(FatalError); << abort(FatalError);
} }
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.p().average().value(); scalar referencePressure = sm.p().average().value();
// correct velocityProfile // correct velocityProfile
@ -156,8 +134,9 @@ scalar blobsSwirlInjector::d0
vector blobsSwirlInjector::direction vector blobsSwirlInjector::direction
( (
const label n, const label n,
const scalar, const label hole,
const scalar const scalar time,
const scalar d
) const ) const
{ {
@ -186,13 +165,13 @@ vector blobsSwirlInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(hole, time) + normal;
dir /= mag(dir); dir /= mag(dir);
return dir; return dir;

View File

@ -90,10 +90,6 @@ private:
mutable scalar h_; mutable scalar h_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
// private member functions // private member functions
scalar kv scalar kv
@ -142,6 +138,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -57,9 +57,7 @@ constInjector::constInjector
injectorModel(dict, sm), injectorModel(dict, sm),
specDict_(dict.subDict(typeName + "Coeffs")), specDict_(dict.subDict(typeName + "Coeffs")),
dropletNozzleDiameterRatio_(specDict_.lookup("dropletNozzleDiameterRatio")), dropletNozzleDiameterRatio_(specDict_.lookup("dropletNozzleDiameterRatio")),
sprayAngle_(specDict_.lookup("sprayAngle")), sprayAngle_(specDict_.lookup("sprayAngle"))
tan1_(sprayAngle_.size()),
tan2_(sprayAngle_.size())
{ {
if (sm.injectors().size() != dropletNozzleDiameterRatio_.size()) if (sm.injectors().size() != dropletNozzleDiameterRatio_.size())
{ {
@ -77,26 +75,6 @@ constInjector::constInjector
<< abort(FatalError); << abort(FatalError);
} }
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.p().average().value(); scalar referencePressure = sm.p().average().value();
// correct velocity and pressure profiles // correct velocity and pressure profiles
@ -129,12 +107,11 @@ scalar constInjector::d0
vector constInjector::direction vector constInjector::direction
( (
const label n, const label n,
const scalar, const label hole,
const scalar const scalar time,
const scalar d
) const ) const
{ {
// return sprayAngle_[n];
/* /*
randomly distribute parcels in a solid cone randomly distribute parcels in a solid cone
@ -179,13 +156,13 @@ vector constInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(n, time) + normal;
dir /= mag(dir); dir /= mag(dir);
return dir; return dir;

View File

@ -59,10 +59,6 @@ private:
scalarList dropletNozzleDiameterRatio_; scalarList dropletNozzleDiameterRatio_;
scalarList sprayAngle_; scalarList sprayAngle_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
public: public:
//- Runtime type information //- Runtime type information
@ -93,6 +89,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -65,9 +65,7 @@ definedHollowConeInjector::definedHollowConeInjector
) )
), ),
innerConeAngle_(definedHollowConeDict_.lookup("innerConeAngle")), innerConeAngle_(definedHollowConeDict_.lookup("innerConeAngle")),
outerConeAngle_(definedHollowConeDict_.lookup("outerConeAngle")), outerConeAngle_(definedHollowConeDict_.lookup("outerConeAngle"))
tan1_(sm.injectors().size()),
tan2_(sm.injectors().size())
{ {
// convert CA to real time - inner cone angle // convert CA to real time - inner cone angle
@ -109,26 +107,6 @@ definedHollowConeInjector::definedHollowConeInjector
<< abort(FatalError); << abort(FatalError);
} }
// initialise injectors
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.p().average().value(); scalar referencePressure = sm.p().average().value();
// correct pressureProfile // correct pressureProfile
forAll(sm.injectors(), i) forAll(sm.injectors(), i)
@ -162,6 +140,7 @@ scalar definedHollowConeInjector::d0
vector definedHollowConeInjector::direction vector definedHollowConeInjector::direction
( (
const label n, const label n,
const label hole,
const scalar t, const scalar t,
const scalar d const scalar d
) const ) const
@ -201,13 +180,13 @@ vector definedHollowConeInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(hole, t) + normal;
// normailse direction vector // normailse direction vector
dir /= mag(dir); dir /= mag(dir);

View File

@ -68,11 +68,6 @@ private:
List<pair> innerConeAngle_; List<pair> innerConeAngle_;
List<pair> outerConeAngle_; List<pair> outerConeAngle_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
public: public:
//- Runtime type information //- Runtime type information
@ -103,6 +98,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -61,32 +61,9 @@ definedPressureSwirlInjector::definedPressureSwirlInjector
coneInterval_(definedPressureSwirlInjectorDict_.lookup("ConeInterval")), coneInterval_(definedPressureSwirlInjectorDict_.lookup("ConeInterval")),
maxKv_(definedPressureSwirlInjectorDict_.lookup("maxKv")), maxKv_(definedPressureSwirlInjectorDict_.lookup("maxKv")),
angle_(0.0), angle_(0.0)
tan1_(coneAngle_.size()),
tan2_(coneAngle_.size())
{ {
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.p().average().value(); scalar referencePressure = sm.p().average().value();
// correct velocityProfile // correct velocityProfile
@ -219,8 +196,9 @@ scalar definedPressureSwirlInjector::d0
vector definedPressureSwirlInjector::direction vector definedPressureSwirlInjector::direction
( (
const label n, const label n,
const scalar, const label hole,
const scalar const scalar time,
const scalar d
) const ) const
{ {
@ -249,13 +227,13 @@ vector definedPressureSwirlInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(hole, time) + normal;
dir /= mag(dir); dir /= mag(dir);
return dir; return dir;

View File

@ -71,10 +71,6 @@ private:
// The initial velocity for the parcels // The initial velocity for the parcels
mutable scalar u_; mutable scalar u_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
// private member functions // private member functions
scalar kv scalar kv
@ -118,6 +114,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -65,9 +65,7 @@ hollowConeInjector::hollowConeInjector
) )
), ),
innerAngle_(hollowConeDict_.lookup("innerConeAngle")), innerAngle_(hollowConeDict_.lookup("innerConeAngle")),
outerAngle_(hollowConeDict_.lookup("outerConeAngle")), outerAngle_(hollowConeDict_.lookup("outerConeAngle"))
tan1_(outerAngle_.size()),
tan2_(outerAngle_.size())
{ {
if (sm.injectors().size() != innerAngle_.size()) if (sm.injectors().size() != innerAngle_.size())
@ -86,26 +84,8 @@ hollowConeInjector::hollowConeInjector
<< abort(FatalError); << abort(FatalError);
} }
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.ambientPressure(); scalar referencePressure = sm.ambientPressure();
// correct velocityProfile // correct velocityProfile
forAll(sm.injectors(), i) forAll(sm.injectors(), i)
{ {
@ -136,8 +116,9 @@ scalar hollowConeInjector::d0
vector hollowConeInjector::direction vector hollowConeInjector::direction
( (
const label n, const label n,
const scalar, const label hole,
const scalar const scalar time,
const scalar d
) const ) const
{ {
scalar angle = innerAngle_[n] + rndGen_.scalar01()*(outerAngle_[n]-innerAngle_[n]); scalar angle = innerAngle_[n] + rndGen_.scalar01()*(outerAngle_[n]-innerAngle_[n]);
@ -166,13 +147,13 @@ vector hollowConeInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(hole, time) + normal;
dir /= mag(dir); dir /= mag(dir);
return dir; return dir;

View File

@ -63,10 +63,6 @@ private:
scalarList innerAngle_; scalarList innerAngle_;
scalarList outerAngle_; scalarList outerAngle_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
public: public:
//- Runtime type information //- Runtime type information
@ -97,6 +93,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -118,6 +118,7 @@ public:
virtual vector direction virtual vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const = 0; ) const = 0;

View File

@ -61,9 +61,7 @@ pressureSwirlInjector::pressureSwirlInjector
coneInterval_(pressureSwirlInjectorDict_.lookup("ConeInterval")), coneInterval_(pressureSwirlInjectorDict_.lookup("ConeInterval")),
maxKv_(pressureSwirlInjectorDict_.lookup("maxKv")), maxKv_(pressureSwirlInjectorDict_.lookup("maxKv")),
angle_(0.0), angle_(0.0)
tan1_(coneAngle_.size()),
tan2_(coneAngle_.size())
{ {
if (sm.injectors().size() != coneAngle_.size()) if (sm.injectors().size() != coneAngle_.size())
@ -74,26 +72,6 @@ pressureSwirlInjector::pressureSwirlInjector
<< abort(FatalError); << abort(FatalError);
} }
forAll(sm.injectors(), i)
{
Random rndGen(label(0));
vector dir = sm.injectors()[i].properties()->direction();
scalar magV = 0.0;
vector tangent;
while (magV < SMALL)
{
vector testThis = rndGen.vector01();
tangent = testThis - (testThis & dir)*dir;
magV = mag(tangent);
}
tan1_[i] = tangent/magV;
tan2_[i] = dir ^ tan1_[i];
}
scalar referencePressure = sm.p().average().value(); scalar referencePressure = sm.p().average().value();
// correct velocityProfile // correct velocityProfile
@ -147,8 +125,9 @@ scalar pressureSwirlInjector::d0
vector pressureSwirlInjector::direction vector pressureSwirlInjector::direction
( (
const label n, const label n,
const scalar, const label hole,
const scalar const scalar time,
const scalar d
) const ) const
{ {
@ -177,13 +156,13 @@ vector pressureSwirlInjector::direction
{ {
normal = alpha* normal = alpha*
( (
tan1_[n]*cos(beta) + injectors_[n].properties()->tan1(hole)*cos(beta) +
tan2_[n]*sin(beta) injectors_[n].properties()->tan2(hole)*sin(beta)
); );
} }
// set the direction of injection by adding the normal vector // set the direction of injection by adding the normal vector
vector dir = dcorr*injectors_[n].properties()->direction() + normal; vector dir = dcorr*injectors_[n].properties()->direction(hole, time) + normal;
dir /= mag(dir); dir /= mag(dir);
return dir; return dir;

View File

@ -68,10 +68,6 @@ private:
// The initial velocity for the parcels // The initial velocity for the parcels
mutable scalar u_; mutable scalar u_;
// two perpendicular vectors, perpendicular to injection direction
List<vector> tan1_;
List<vector> tan2_;
// private member functions // private member functions
scalar kv scalar kv
@ -114,6 +110,7 @@ public:
vector direction vector direction
( (
const label injector, const label injector,
const label hole,
const scalar time, const scalar time,
const scalar d const scalar d
) const; ) const;

View File

@ -0,0 +1,48 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2005 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
Description
-------------------------------------------------------------------------------
*/
#include "CH4N2O.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(CH4N2O, 0);
addToRunTimeSelectionTable(liquid, CH4N2O,);
addToRunTimeSelectionTable(liquid, CH4N2O, Istream);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,285 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2008 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::CH4N2O
Description
urea, note that some of the properties are unavailable in the literature and have been copied from water.
SourceFiles
CH4N2O.C
\*---------------------------------------------------------------------------*/
#ifndef CH4N2O_H
#define CH4N2O_H
#include "liquid.H"
#include "NSRDSfunc0.H"
#include "NSRDSfunc1.H"
#include "NSRDSfunc2.H"
#include "NSRDSfunc3.H"
#include "NSRDSfunc4.H"
#include "NSRDSfunc5.H"
#include "NSRDSfunc6.H"
#include "NSRDSfunc7.H"
#include "NSRDSfunc14.H"
#include "APIdiffCoefFunc.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class CH4N2O Declaration
\*---------------------------------------------------------------------------*/
class CH4N2O
:
public liquid
{
// Private data
NSRDSfunc0 rho_;
NSRDSfunc1 pv_;
NSRDSfunc6 hl_;
NSRDSfunc0 cp_;
NSRDSfunc0 h_;
NSRDSfunc7 cpg_;
NSRDSfunc4 B_;
NSRDSfunc1 mu_;
NSRDSfunc2 mug_;
NSRDSfunc0 K_;
NSRDSfunc2 Kg_;
NSRDSfunc6 sigma_;
APIdiffCoefFunc D_;
public:
//- Runtime type information
TypeName("CH4N2O");
// Constructors
//- Construct null
CH4N2O()
:
liquid(60.056, 705.0, 9.050e+6, 0.218, 0.337, 405.85, 9.3131e+1, 465.0, 1.52e-29, 0.3449, 4.7813e+4),
rho_(1230.006936, 0, 0, 0, 0, 0),
pv_(12.06, -3992.0, 0, 0, 0),
// hl_(1463034.50113228, 0, 0, 0, 0, 0),
// NN. we cant use constant heat of vapourisation, the below value is linear (sqrt) interpolation to critical temp
hl_(705.0, 2534249.0, 0.5, 0.0, 0.0, 0.0),
cp_(2006.46063673904, 0, 0, 0, 0, 0),
// NN: enthalpy, h_, is not used in the sprayModel.
// For consistency, the enthalpy is derived from hlat and hl.
// It is, however, convenient to have it available.
h_(-6154107.41641135, 2006.46063673904, 0, 0, 0, 0),
cpg_(811.875582789397, 2099.04089516451, 1627.3, 1603.63660583455, 724.41),
B_(-0.000383641934194752, 0.447249234048222, -469062.208605302, 5.5628080458239e+18, -2.3040162514986e+21),
mu_(-51.964, 3670.6, 5.7331, -5.3495e-29, 10),
mug_(2.6986e-06, 0.498, 1257.7, -19570),
K_(-0.4267, 0.0056903, -8.0065e-06, 1.815e-09, 0, 0),
Kg_(6.977e-05, 1.1243, 844.9, -148850),
sigma_(705.0, 1.0, 0.0, 0.0, 0.0, 0), // set to constant
D_(147.18, 20.1, 60.056, 28) // NN: Same as nHeptane
{}
CH4N2O
(
const liquid& l,
const NSRDSfunc0& density,
const NSRDSfunc1& vapourPressure,
const NSRDSfunc6& heatOfVapourisation,
const NSRDSfunc0& heatCapacity,
const NSRDSfunc0& enthalpy,
const NSRDSfunc7& idealGasHeatCapacity,
const NSRDSfunc4& secondVirialCoeff,
const NSRDSfunc1& dynamicViscosity,
const NSRDSfunc2& vapourDynamicViscosity,
const NSRDSfunc0& thermalConductivity,
const NSRDSfunc2& vapourThermalConductivity,
const NSRDSfunc6& surfaceTension,
const APIdiffCoefFunc& vapourDiffussivity
)
:
liquid(l),
rho_(density),
pv_(vapourPressure),
hl_(heatOfVapourisation),
cp_(heatCapacity),
h_(enthalpy),
cpg_(idealGasHeatCapacity),
B_(secondVirialCoeff),
mu_(dynamicViscosity),
mug_(vapourDynamicViscosity),
K_(thermalConductivity),
Kg_(vapourThermalConductivity),
sigma_(surfaceTension),
D_(vapourDiffussivity)
{}
//- Construct from Istream
CH4N2O(Istream& is)
:
liquid(is),
rho_(is),
pv_(is),
hl_(is),
cp_(is),
h_(is),
cpg_(is),
B_(is),
mu_(is),
mug_(is),
K_(is),
Kg_(is),
sigma_(is),
D_(is)
{}
// Member Functions
//- Liquid density [kg/m^3]
scalar rho(scalar p, scalar T) const
{
return rho_.f(p, T);
}
//- Vapour pressure [Pa]
scalar pv(scalar p, scalar T) const
{
return pv_.f(p, T);
}
//- Heat of vapourisation [J/kg]
scalar hl(scalar p, scalar T) const
{
return hl_.f(p, T);
}
//- Liquid heat capacity [J/(kg K)]
scalar cp(scalar p, scalar T) const
{
return cp_.f(p, T);
}
//- Liquid Enthalpy [J/(kg)]
scalar h(scalar p, scalar T) const
{
return h_.f(p, T);
}
//- Ideal gas heat capacity [J/(kg K)]
scalar cpg(scalar p, scalar T) const
{
return cpg_.f(p, T);
}
//- Second Virial Coefficient [m^3/kg]
scalar B(scalar p, scalar T) const
{
return B_.f(p, T);
}
//- Liquid viscosity [Pa s]
scalar mu(scalar p, scalar T) const
{
return mu_.f(p, T);
}
//- Vapour viscosity [Pa s]
scalar mug(scalar p, scalar T) const
{
return mug_.f(p, T);
}
//- Liquid thermal conductivity [W/(m K)]
scalar K(scalar p, scalar T) const
{
return K_.f(p, T);
}
//- Vapour thermal conductivity [W/(m K)]
scalar Kg(scalar p, scalar T) const
{
return Kg_.f(p, T);
}
//- Surface tension [N/m]
scalar sigma(scalar p, scalar T) const
{
return sigma_.f(p, T);
}
//- Vapour diffussivity [m2/s]
scalar D(scalar p, scalar T) const
{
return D_.f(p, T);
}
//- Write the function coefficients
void writeData(Ostream& os) const
{
liquid::writeData(os); os << nl;
rho_.writeData(os); os << nl;
pv_.writeData(os); os << nl;
hl_.writeData(os); os << nl;
cp_.writeData(os); os << nl;
cpg_.writeData(os); os << nl;
B_.writeData(os); os << nl;
mu_.writeData(os); os << nl;
mug_.writeData(os); os << nl;
K_.writeData(os); os << nl;
Kg_.writeData(os); os << nl;
sigma_.writeData(os); os << nl;
D_.writeData(os); os << endl;
}
// Ostream Operator
friend Ostream& operator<<(Ostream& os, const CH4N2O& l)
{
l.writeData(os);
return os;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -26,5 +26,8 @@ C2H5OH/C2H5OH.C
Ar/Ar.C Ar/Ar.C
N2/N2.C N2/N2.C
MB/MB.C MB/MB.C
CH4N2O/CH4N2O.C
nC3H8O/nC3H8O.C
iC3H8O/iC3H8O.C
LIB = $(FOAM_LIBBIN)/libliquids LIB = $(FOAM_LIBBIN)/libliquids

View File

@ -0,0 +1,48 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2005 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
Description
-------------------------------------------------------------------------------
*/
#include "iC3H8O.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(iC3H8O, 0);
addToRunTimeSelectionTable(liquid, iC3H8O,);
addToRunTimeSelectionTable(liquid, iC3H8O, Istream);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,269 @@
// The FOAM Project // File: iC3H8O/iC3H8O.H
/*
-------------------------------------------------------------------------------
========= | Class Interface
\\ / |
\\ / | Name: iC3H8O
\\ / | Family: iC3H8O
\\/ |
F ield | FOAM version: 2.2
O peration |
A and | Copyright (C) 1991-2000 Nabla Ltd.
M anipulation | All Rights Reserved.
-------------------------------------------------------------------------------
CLASS
iC3H8O
DESCRIPTION
iso-propanol
*/
// ------------------------------------------------------------------------- //
#ifndef iC3H8O_H
#define iC3H8O_H
#include "liquid.H"
#include "NSRDSfunc0.H"
#include "NSRDSfunc1.H"
#include "NSRDSfunc2.H"
#include "NSRDSfunc3.H"
#include "NSRDSfunc4.H"
#include "NSRDSfunc5.H"
#include "NSRDSfunc6.H"
#include "NSRDSfunc7.H"
#include "NSRDSfunc14.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class iC3H8O Declaration
\*---------------------------------------------------------------------------*/
class iC3H8O
:
public liquid
{
// Private data
NSRDSfunc5 rho_;
NSRDSfunc1 pv_;
NSRDSfunc6 hl_;
NSRDSfunc0 cp_;
NSRDSfunc0 h_;
NSRDSfunc7 cpg_;
NSRDSfunc4 B_;
NSRDSfunc1 mu_;
NSRDSfunc2 mug_;
NSRDSfunc0 K_;
NSRDSfunc2 Kg_;
NSRDSfunc0 sigma_;
NSRDSfunc1 D_;
public:
//- Runtime type information
TypeName("iC3H8O");
// Constructors
//- Construct null
iC3H8O()
:
liquid(60.096, 508.31, 4.7643e+6, 0.22013, 0.248, 185.28, 3.20e-2, 355.41, 5.5372e-30, 0.6689, 2.3575e+4),
rho_(70.91328, 0.26475, 508.31, 0.243),
pv_(92.935, -8177.1, -10.031, 3.9988e-06, 2),
hl_(508.31, 948149.627263046, 0.087, 0.3007, 0, 0),
cp_(7760.91586794462, -68.3672790202343, 0.241380457933972, -0.000235057241746539, 0, 0),
// NN: enthalpy, h_, is not used in the sprayModel.
// For consistency, the enthalpy is derived from hlat and hl.
// It is, however, convenient to have it available.
h_(-6227786.27583977, 7760.91586794462, -34.1836395101172, 0.0804601526446574, -5.87643104366347e-05, 0),
cpg_(789.73642172524, 3219.8482428115, 1124, 1560.83599574015, 460),
B_(0.000502529286474973, -0.104665867944622, -717185.83599574, 3.3047124600639e+18, -1.43270766773163e+21),
mu_(-8.23, 2282.2, -0.98495, 0, 0),
mug_(1.993e-07, 0.7233, 178, 0),
K_(0.2029, -0.0002278, 0, 0, 0, 0),
Kg_(-80.642, -1.4549, -604.42, 0),
sigma_(0.03818, -3.818e-05, -6.51e-08, 0, 0, 0),
D_(4.75e-10, 1.75, 0.0, 0.0, 0.0) // NN. same as iC3H8O
{}
iC3H8O
(
const liquid& l,
const NSRDSfunc5& density,
const NSRDSfunc1& vapourPressure,
const NSRDSfunc6& heatOfVapourisation,
const NSRDSfunc0& heatCapacity,
const NSRDSfunc0& enthalpy,
const NSRDSfunc7& idealGasHeatCapacity,
const NSRDSfunc4& secondVirialCoeff,
const NSRDSfunc1& dynamicViscosity,
const NSRDSfunc2& vapourDynamicViscosity,
const NSRDSfunc0& thermalConductivity,
const NSRDSfunc2& vapourThermalConductivity,
const NSRDSfunc0& surfaceTension,
const NSRDSfunc1& vapourDiffussivity
)
:
liquid(l),
rho_(density),
pv_(vapourPressure),
hl_(heatOfVapourisation),
cp_(heatCapacity),
h_(enthalpy),
cpg_(idealGasHeatCapacity),
B_(secondVirialCoeff),
mu_(dynamicViscosity),
mug_(vapourDynamicViscosity),
K_(thermalConductivity),
Kg_(vapourThermalConductivity),
sigma_(surfaceTension),
D_(vapourDiffussivity)
{}
//- Construct from Istream
iC3H8O(Istream& is)
:
liquid(is),
rho_(is),
pv_(is),
hl_(is),
cp_(is),
h_(is),
cpg_(is),
B_(is),
mu_(is),
mug_(is),
K_(is),
Kg_(is),
sigma_(is),
D_(is)
{}
// Member Functions
//- Liquid density [kg/m^3]
scalar rho(scalar p, scalar T) const
{
return rho_.f(p, T);
}
//- Vapour pressure [Pa]
scalar pv(scalar p, scalar T) const
{
return pv_.f(p, T);
}
//- Heat of vapourisation [J/kg]
scalar hl(scalar p, scalar T) const
{
return hl_.f(p, T);
}
//- Liquid heat capacity [J/(kg K)]
scalar cp(scalar p, scalar T) const
{
return cp_.f(p, T);
}
//- Liquid Enthalpy [J/(kg)]
scalar h(scalar p, scalar T) const
{
return h_.f(p, T);
}
//- Ideal gas heat capacity [J/(kg K)]
scalar cpg(scalar p, scalar T) const
{
return cpg_.f(p, T);
}
//- Second Virial Coefficient [m^3/kg]
scalar B(scalar p, scalar T) const
{
return B_.f(p, T);
}
//- Liquid viscosity [Pa s]
scalar mu(scalar p, scalar T) const
{
return mu_.f(p, T);
}
//- Vapour viscosity [Pa s]
scalar mug(scalar p, scalar T) const
{
return mug_.f(p, T);
}
//- Liquid thermal conductivity [W/(m K)]
scalar K(scalar p, scalar T) const
{
return K_.f(p, T);
}
//- Vapour thermal conductivity [W/(m K)]
scalar Kg(scalar p, scalar T) const
{
return Kg_.f(p, T);
}
//- Surface tension [N/m]
scalar sigma(scalar p, scalar T) const
{
return sigma_.f(p, T);
}
//- Vapour diffussivity [m2/s]
scalar D(scalar p, scalar T) const
{
return D_.f(p, T);
}
//- Write the function coefficients
void writeData(Ostream& os) const
{
liquid::writeData(os); os << nl;
rho_.writeData(os); os << nl;
pv_.writeData(os); os << nl;
hl_.writeData(os); os << nl;
cp_.writeData(os); os << nl;
cpg_.writeData(os); os << nl;
B_.writeData(os); os << nl;
mu_.writeData(os); os << nl;
mug_.writeData(os); os << nl;
K_.writeData(os); os << nl;
Kg_.writeData(os); os << nl;
sigma_.writeData(os); os << nl;
D_.writeData(os); os << endl;
}
// Ostream Operator
friend Ostream& operator<<(Ostream& os, const iC3H8O& l)
{
l.writeData(os);
return os;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,48 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2005 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
Description
-------------------------------------------------------------------------------
*/
#include "nC3H8O.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(nC3H8O, 0);
addToRunTimeSelectionTable(liquid, nC3H8O,);
addToRunTimeSelectionTable(liquid, nC3H8O, Istream);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,267 @@
/*
-------------------------------------------------------------------------------
========= | Class Interface
\\ / |
\\ / | Name: nC3H8O
\\ / | Family: nC3H8O
\\/ |
F ield | FOAM version: 2.2
O peration |
A and | Copyright (C) 1991-2000 Nabla Ltd.
M anipulation | All Rights Reserved.
-------------------------------------------------------------------------------
CLASS
nC3H8O
DESCRIPTION
propanol
*/
// ------------------------------------------------------------------------- //
#ifndef nC3H8O_H
#define nC3H8O_H
#include "liquid.H"
#include "NSRDSfunc0.H"
#include "NSRDSfunc1.H"
#include "NSRDSfunc2.H"
#include "NSRDSfunc3.H"
#include "NSRDSfunc4.H"
#include "NSRDSfunc5.H"
#include "NSRDSfunc6.H"
#include "NSRDSfunc7.H"
#include "NSRDSfunc14.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class nC3H8O Declaration
\*---------------------------------------------------------------------------*/
class nC3H8O
:
public liquid
{
// Private data
NSRDSfunc5 rho_;
NSRDSfunc1 pv_;
NSRDSfunc6 hl_;
NSRDSfunc0 cp_;
NSRDSfunc0 h_;
NSRDSfunc7 cpg_;
NSRDSfunc4 B_;
NSRDSfunc1 mu_;
NSRDSfunc2 mug_;
NSRDSfunc0 K_;
NSRDSfunc2 Kg_;
NSRDSfunc0 sigma_;
NSRDSfunc1 D_;
public:
//- Runtime type information
TypeName("nC3H8O");
// Constructors
//- Construct null
nC3H8O()
:
liquid(60.096, 536.71, 5.1696e+6, 0.21853, 0.253, 146.95, 6.5112e-7, 370.35, 5.6039e-30, 0.6279, 2.4557e+4),
rho_(75.300288, 0.272, 536.71, 0.2494),
pv_(77.46, -7960, -7.5235, 3e-07, 2),
hl_(536.71, 1098242.8115016, 0.647, -0.783, 0.613, 0),
cp_(216.320553780618, 18.5203674121406, -0.0751797124600639, 0.000126464323748669, 0, 0),
// NN: enthalpy, h_, is not used in the sprayModel.
// For consistency, the enthalpy is derived from hlat and hl.
// It is, however, convenient to have it available.
h_(-5533091.96851587, 216.320553780618, 9.26018370607029, -0.0250599041533546, 3.16160809371672e-05, 0),
cpg_(961.794462193823, 3467.78487752929, 1542, 2046.72523961661, 649),
B_(0.000933506389776358, -1.09325079872204, -531649.361022364, -2.32627795527157e+17, -3.81888977635783e+20),
mu_(0.571, 1521, -2.0894, 0, 0),
mug_(7.942e-07, 0.5491, 415.8, 0),
K_(0.204, -0.000169, 0, 0, 0, 0),
Kg_(-613.84, 0.7927, -1157400000, 0),
sigma_(0.04533, -6.88e-05, -1.6e-08, 0, 0, 0),
D_(4.75e-10, 1.75, 0.0, 0.0, 0.0) // NN. same as iC3H8O
{}
nC3H8O
(
const liquid& l,
const NSRDSfunc5& density,
const NSRDSfunc1& vapourPressure,
const NSRDSfunc6& heatOfVapourisation,
const NSRDSfunc0& heatCapacity,
const NSRDSfunc0& enthalpy,
const NSRDSfunc7& idealGasHeatCapacity,
const NSRDSfunc4& secondVirialCoeff,
const NSRDSfunc1& dynamicViscosity,
const NSRDSfunc2& vapourDynamicViscosity,
const NSRDSfunc0& thermalConductivity,
const NSRDSfunc2& vapourThermalConductivity,
const NSRDSfunc0& surfaceTension,
const NSRDSfunc1& vapourDiffussivity
)
:
liquid(l),
rho_(density),
pv_(vapourPressure),
hl_(heatOfVapourisation),
cp_(heatCapacity),
h_(enthalpy),
cpg_(idealGasHeatCapacity),
B_(secondVirialCoeff),
mu_(dynamicViscosity),
mug_(vapourDynamicViscosity),
K_(thermalConductivity),
Kg_(vapourThermalConductivity),
sigma_(surfaceTension),
D_(vapourDiffussivity)
{}
//- Construct from Istream
nC3H8O(Istream& is)
:
liquid(is),
rho_(is),
pv_(is),
hl_(is),
cp_(is),
h_(is),
cpg_(is),
B_(is),
mu_(is),
mug_(is),
K_(is),
Kg_(is),
sigma_(is),
D_(is)
{}
// Member Functions
//- Liquid density [kg/m^3]
scalar rho(scalar p, scalar T) const
{
return rho_.f(p, T);
}
//- Vapour pressure [Pa]
scalar pv(scalar p, scalar T) const
{
return pv_.f(p, T);
}
//- Heat of vapourisation [J/kg]
scalar hl(scalar p, scalar T) const
{
return hl_.f(p, T);
}
//- Liquid heat capacity [J/(kg K)]
scalar cp(scalar p, scalar T) const
{
return cp_.f(p, T);
}
//- Liquid Enthalpy [J/(kg)]
scalar h(scalar p, scalar T) const
{
return h_.f(p, T);
}
//- Ideal gas heat capacity [J/(kg K)]
scalar cpg(scalar p, scalar T) const
{
return cpg_.f(p, T);
}
//- Second Virial Coefficient [m^3/kg]
scalar B(scalar p, scalar T) const
{
return B_.f(p, T);
}
//- Liquid viscosity [Pa s]
scalar mu(scalar p, scalar T) const
{
return mu_.f(p, T);
}
//- Vapour viscosity [Pa s]
scalar mug(scalar p, scalar T) const
{
return mug_.f(p, T);
}
//- Liquid thermal conductivity [W/(m K)]
scalar K(scalar p, scalar T) const
{
return K_.f(p, T);
}
//- Vapour thermal conductivity [W/(m K)]
scalar Kg(scalar p, scalar T) const
{
return Kg_.f(p, T);
}
//- Surface tension [N/m]
scalar sigma(scalar p, scalar T) const
{
return sigma_.f(p, T);
}
//- Vapour diffussivity [m2/s]
scalar D(scalar p, scalar T) const
{
return D_.f(p, T);
}
//- Write the function coefficients
void writeData(Ostream& os) const
{
liquid::writeData(os); os << nl;
rho_.writeData(os); os << nl;
pv_.writeData(os); os << nl;
hl_.writeData(os); os << nl;
cp_.writeData(os); os << nl;
cpg_.writeData(os); os << nl;
B_.writeData(os); os << nl;
mu_.writeData(os); os << nl;
mug_.writeData(os); os << nl;
K_.writeData(os); os << nl;
Kg_.writeData(os); os << nl;
sigma_.writeData(os); os << nl;
D_.writeData(os); os << endl;
}
// Ostream Operator
friend Ostream& operator<<(Ostream& os, const nC3H8O& l)
{
l.writeData(os);
return os;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -25,7 +25,6 @@ FoamFile
diameter 0.00019; diameter 0.00019;
Cd 0.9; Cd 0.9;
mass 6e-06; mass 6e-06;
temperature 320;
nParcels 5000; nParcels 5000;
X X
@ -67,6 +66,14 @@ FoamFile
(0.00120833 5.1737) (0.00120833 5.1737)
(0.00125 3.9213) (0.00125 3.9213)
); );
temperatureProfile
(
(0.0 320.0)
(0.00125 320.0)
);
} }
commonRailInjectorProps commonRailInjectorProps

View File

@ -1,27 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format binary;
class polyBoundaryMesh;
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
1
(
walls
{
type wall;
nFaces 19762;
startFace 494419;
}
)
// ************************************************************************* //