1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the
13 Free Software Foundation; either version 2 of the License, or (at your
14 option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM; if not, write to the Free Software Foundation,
23 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "SingleMixtureFraction.H"
29 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
31 template<class CloudType>
32 Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction
34 const dictionary& dict,
38 CompositionModel<CloudType>(dict, owner, typeName),
40 gasNames_(this->coeffDict().lookup("gasNames")),
41 gasGlobalIds_(gasNames_.size(), -1),
42 YGas0_(this->coeffDict().lookup("YGas0")),
43 YGasTot0_(readScalar(this->coeffDict().lookup("YGasTot0"))),
45 liquidNames_(this->coeffDict().lookup("liquidNames")),
46 liquidGlobalIds_(liquidNames_.size(), -1),
47 YLiquid0_(this->coeffDict().lookup("YLiquid0")),
48 YLiquidTot0_(readScalar(this->coeffDict().lookup("YLiquidTot0"))),
50 solidNames_(this->coeffDict().lookup("solidNames")),
51 solidGlobalIds_(solidNames_.size(), -1),
52 YSolid0_(this->coeffDict().lookup("YSolid0")),
53 YSolidTot0_(readScalar(this->coeffDict().lookup("YSolidTot0"))),
57 // Construct gasGlobalIds_ list
60 forAll (this->carrierThermo().composition().Y(), j)
62 word specieName(this->carrierThermo().composition().Y()[j].name());
64 if (specieName == gasNames_[i])
70 if (gasGlobalIds_[i] == -1)
72 Info<< "\nThermo package species composition comprises:" << endl;
73 forAll (this->carrierThermo().composition().Y(), k)
75 Info<< this->carrierThermo().composition().Y()[k].name()
81 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
82 "(const dictionary&, CloudType&)"
83 ) << "Could not find gas species " << gasNames_[i]
84 << " in species list" << exit(FatalError);
88 // Construct liquidGlobalIds_ list
89 forAll(liquidNames_, i)
91 forAll (this->liquids().components(), j)
93 word specieName(this->liquids().components()[j]);
95 if (specieName == liquidNames_[i])
97 liquidGlobalIds_[i] = j;
101 if (liquidGlobalIds_[i] == -1)
103 Info<< "\nLiquid mixture species composition comprises:" << endl;
104 forAll (this->liquids().components(), k)
106 Info<< this->liquids().components()[k] << endl;
111 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
112 "(const dictionary&, CloudType&)"
113 ) << "Could not find liquid species " << liquidNames_[i]
114 << " in species list" << exit(FatalError);
118 // Construct solidGlobalIds_ list
119 forAll(solidNames_, i)
121 forAll (this->solids().components(), j)
123 word specieName(this->solids().components()[j]);
125 if (specieName == solidNames_[i])
127 solidGlobalIds_[i] = j;
131 if (solidGlobalIds_[i] == -1)
133 Info<< "\nSolid mixture species composition comprises:" << endl;
134 forAll (this->solids().components(), k)
136 Info<< this->solids().components()[k] << endl;
141 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
142 "(const dictionary&, CloudType&)"
143 ) << "Could not find solid species " << solidNames_[i]
144 << " in species list" << exit(FatalError);
148 // Set mixture fractions
149 YMixture0_[0] = YGasTot0_;
150 YMixture0_[1] = YLiquidTot0_;
151 YMixture0_[2] = YSolidTot0_;
153 // Check that total mass fractions = 1
157 if (mag(sum(YGas0_) - 1) > SMALL)
161 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
162 "(const dictionary&, CloudType&)"
163 )<< "Mass fractions of YGas0 must sum to unity"
172 if (YLiquid0_.size())
174 if (mag(sum(YLiquid0_) - 1) > SMALL)
178 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
179 "(const dictionary&, CloudType&)"
180 )<< "Mass fractions of YLiquid0 must sum to unity"
191 if (mag(sum(YSolid0_) - 1) > SMALL)
195 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
196 "(const dictionary&, CloudType&)"
197 )<< "Mass fractions of YSolid0 must sum to unity"
206 // Check total mixture fraction sums to 1
207 if (mag(sum(YMixture0_) - 1) > SMALL)
211 "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction"
212 "(const dictionary&, CloudType&)"
213 ) << "Mass fractions YGasTot0 + YSolidTot0 + YSolidTot0 must sum "
214 << "to unity" << exit(FatalError);
219 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
221 template<class CloudType>
222 Foam::SingleMixtureFraction<CloudType>::~SingleMixtureFraction()
226 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
228 template<class CloudType>
230 Foam::SingleMixtureFraction<CloudType>::compositionNames() const
239 template<class CloudType>
240 const Foam::wordList&
241 Foam::SingleMixtureFraction<CloudType>::gasNames() const
247 template<class CloudType>
249 Foam::SingleMixtureFraction<CloudType>::gasLocalId(const word& gasName) const
253 if (gasName == gasNames_[i])
261 "Foam::label SingleMixtureFraction<CloudType>::"
262 "gasLocalId(const word& gasName) const"
263 )<< "Gas name " << gasName << " not found in gasNames_"
270 template<class CloudType>
272 Foam::SingleMixtureFraction<CloudType>::gasGlobalId(const word& gasName) const
276 if (gasName == gasNames_[i])
278 return gasGlobalIds_[i];
284 "Foam::label SingleMixtureFraction<CloudType>::"
285 "gasGlobalId(const word& gasName) const"
286 )<< "Gas name " << gasName << " not found in gasNames_"
293 template<class CloudType>
294 const Foam::labelList&
295 Foam::SingleMixtureFraction<CloudType>::gasGlobalIds() const
297 return gasGlobalIds_;
301 template<class CloudType>
302 const Foam::scalarField&
303 Foam::SingleMixtureFraction<CloudType>::YGas0() const
309 template<class CloudType>
310 Foam::scalar Foam::SingleMixtureFraction<CloudType>::YGasTot0() const
316 template<class CloudType>
317 const Foam::wordList&
318 Foam::SingleMixtureFraction<CloudType>::liquidNames() const
324 template<class CloudType>
325 Foam::label Foam::SingleMixtureFraction<CloudType>::liquidLocalId
327 const word& liquidName
330 forAll(liquidNames_, i)
332 if (liquidName == liquidNames_[i])
340 "Foam::label SingleMixtureFraction<CloudType>::"
341 "liquidLocalId(const word& liquidName) const"
342 )<< "Liquid name " << liquidName << " not found in liquidNames_"
349 template<class CloudType>
350 Foam::label Foam::SingleMixtureFraction<CloudType>::liquidGlobalId
352 const word& liquidName
355 forAll(liquidNames_, i)
357 if (liquidName == liquidNames_[i])
359 return liquidGlobalIds_[i];
365 "Foam::label SingleMixtureFraction<CloudType>::"
366 "liquidGlobalId(const word& liquidName) const"
367 )<< "Liquid name " << liquidName << " not found in liquidNames_"
374 template<class CloudType>
375 const Foam::labelList&
376 Foam::SingleMixtureFraction<CloudType>::liquidGlobalIds() const
378 return liquidGlobalIds_;
382 template<class CloudType>
383 const Foam::scalarField&
384 Foam::SingleMixtureFraction<CloudType>::YLiquid0() const
390 template<class CloudType>
391 Foam::scalar Foam::SingleMixtureFraction<CloudType>::YLiquidTot0() const
397 template<class CloudType>
398 const Foam::wordList&
399 Foam::SingleMixtureFraction<CloudType>::solidNames() const
405 template<class CloudType>
406 Foam::label Foam::SingleMixtureFraction<CloudType>::solidLocalId
408 const word& solidName
411 forAll(solidNames_, i)
413 if (solidName == solidNames_[i])
421 "Foam::label SingleMixtureFraction<CloudType>::"
422 "SolididLocalId(const word& solidName) const"
423 )<< "Solid name " << solidName << " not found in solidNames_"
430 template<class CloudType>
432 Foam::SingleMixtureFraction<CloudType>::solidGlobalId
434 const word& solidName
437 forAll(solidNames_, i)
439 if (solidName == solidNames_[i])
441 return solidGlobalIds_[i];
447 "Foam::label SingleMixtureFraction<CloudType>::"
448 "solidGlobalId(const word& solidName) const"
449 )<< "Solid name " << solidName << " not found in solidNames_"
456 template<class CloudType>
457 const Foam::labelList&
458 Foam::SingleMixtureFraction<CloudType>::solidGlobalIds() const
460 return solidGlobalIds_;
464 template<class CloudType>
465 const Foam::scalarField&
466 Foam::SingleMixtureFraction<CloudType>::YSolid0() const
472 template<class CloudType>
474 Foam::SingleMixtureFraction<CloudType>::YSolidTot0() const
480 template<class CloudType>
481 const Foam::scalarField&
482 Foam::SingleMixtureFraction<CloudType>::YMixture0() const
488 template<class CloudType>
489 Foam::scalar Foam::SingleMixtureFraction<CloudType>::RGas
491 const scalarField& YGas
494 scalar RGasMixture = 0.0;
497 label id = gasGlobalIds_[i];
498 RGasMixture += YGas[i]*this->gases()[id].R();
504 template<class CloudType>
505 Foam::scalar Foam::SingleMixtureFraction<CloudType>::HGas
507 const scalarField& YGas,
512 scalar HMixture = 0.0;
515 label id = gasGlobalIds_[i];
516 HMixture += YGas[i]*this->gases()[id].H(T);
522 template<class CloudType>
523 Foam::scalar Foam::SingleMixtureFraction<CloudType>::cpGas
525 const scalarField& YGas,
530 scalar cpMixture = 0.0;
533 label id = gasGlobalIds_[i];
534 cpMixture += YGas[i]*this->gases()[id].Cp(T);
540 template<class CloudType>
541 Foam::scalar Foam::SingleMixtureFraction<CloudType>::cpLiquid
543 const scalarField& YLiquid,
549 scalar cpMixture = 0.0;
552 label id = liquidGlobalIds_[i];
553 cpMixture += YLiquid[i]*this->liquids().properties()[id].cp(p, T);
560 template<class CloudType>
561 Foam::scalar Foam::SingleMixtureFraction<CloudType>::cpSolid
563 const scalarField& YSolid
567 scalar cpMixture = 0.0;
570 label id = solidGlobalIds_[i];
571 cpMixture += YSolid[i]*this->solids().properties()[id].cp();
578 // ************************************************************************* //