fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / lagrangian / intermediate / submodels / ReactingMultiphase / InjectionModel / ReactingMultiphaseLookupTableInjection / ReactingMultiphaseLookupTableInjection.C
blobcf303b0888b427211fd36a33e6bf6014f78fa46d
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
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
19     for more details.
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 "ReactingMultiphaseLookupTableInjection.H"
29 // * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
31 template<class CloudType>
32 Foam::label
33 Foam::ReactingMultiphaseLookupTableInjection<CloudType>::parcelsToInject
35     const scalar time0,
36     const scalar time1
37 ) const
39     if ((time0 >= 0.0) && (time0 < duration_))
40     {
41         return round(injectorCells_.size()*(time1 - time0)*nParcelsPerSecond_);
42     }
43     else
44     {
45         return 0;
46     }
50 template<class CloudType>
51 Foam::scalar
52 Foam::ReactingMultiphaseLookupTableInjection<CloudType>::volumeToInject
54     const scalar time0,
55     const scalar time1
56 ) const
58     scalar volume = 0.0;
59     if ((time0 >= 0.0) && (time0 < duration_))
60     {
61         forAll(injectors_, i)
62         {
63             volume += injectors_[i].mDot()/injectors_[i].rho()*(time1 - time0);
64         }
65     }
67     return volume;
71 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
73 template<class CloudType>
74 Foam::ReactingMultiphaseLookupTableInjection<CloudType>::
75 ReactingMultiphaseLookupTableInjection
77     const dictionary& dict,
78     CloudType& owner
81     InjectionModel<CloudType>(dict, owner, typeName),
82     inputFileName_(this->coeffDict().lookup("inputFile")),
83     duration_(readScalar(this->coeffDict().lookup("duration"))),
84     nParcelsPerSecond_
85     (
86         readScalar(this->coeffDict().lookup("parcelsPerSecond"))
87     ),
88     injectors_
89     (
90         IOobject
91         (
92             inputFileName_,
93             owner.db().time().constant(),
94             owner.db(),
95             IOobject::MUST_READ,
96             IOobject::NO_WRITE
97         )
98     ),
99     injectorCells_(0)
101     // Set/cache the injector cells
102     injectorCells_.setSize(injectors_.size());
103     forAll(injectors_, i)
104     {
105         this->findCellAtPosition(injectorCells_[i], injectors_[i].x());
106     }
108     // Determine volume of particles to inject
109     this->volumeTotal_ = 0.0;
110     forAll(injectors_, i)
111     {
112         this->volumeTotal_ += injectors_[i].mDot()/injectors_[i].rho();
113     }
114     this->volumeTotal_ *= duration_;
118 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
120 template<class CloudType>
121 Foam::ReactingMultiphaseLookupTableInjection<CloudType>::
122 ~ReactingMultiphaseLookupTableInjection()
126 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
128 template<class CloudType>
129 bool Foam::ReactingMultiphaseLookupTableInjection<CloudType>::active() const
131     return true;
135 template<class CloudType>
136 Foam::scalar
137 Foam::ReactingMultiphaseLookupTableInjection<CloudType>::timeEnd() const
139     return this->SOI_ + duration_;
143 template<class CloudType>
144 void Foam::ReactingMultiphaseLookupTableInjection<CloudType>::setPositionAndCell
146     const label parcelI,
147     const label nParcels,
148     const scalar time,
149     vector& position,
150     label& cellOwner
153     label injectorI = parcelI*injectorCells_.size()/nParcels;
155     position = injectors_[injectorI].x();
156     cellOwner = injectorCells_[injectorI];
160 template<class CloudType>
161 void Foam::ReactingMultiphaseLookupTableInjection<CloudType>::setProperties
163     const label parcelI,
164     const label nParcels,
165     const scalar,
166     typename CloudType::parcelType& parcel
169     label injectorI = parcelI*injectorCells_.size()/nParcels;
171     // set particle velocity
172     parcel.U() = injectors_[injectorI].U();
174     // set particle diameter
175     parcel.d() = injectors_[injectorI].d();
177     // set particle density
178     parcel.rho() = injectors_[injectorI].rho();
180     // set particle temperature
181     parcel.T() = injectors_[injectorI].T();
183     // set particle specific heat capacity
184     parcel.cp() = injectors_[injectorI].cp();
186     // set particle component mass fractions
187     parcel.Y() = injectors_[injectorI].Y();
189     // set particle gaseous component mass fractions
190     parcel.YGas() = injectors_[injectorI].YGas();
192     // set particle liquid component mass fractions
193     parcel.YLiquid() = injectors_[injectorI].YLiquid();
195     // set particle solid component mass fractions
196     parcel.YSolid() = injectors_[injectorI].YSolid();
200 template<class CloudType>
201 bool
202 Foam::ReactingMultiphaseLookupTableInjection<CloudType>::fullyDescribed() const
204     return true;
208 template<class CloudType>
209 bool Foam::ReactingMultiphaseLookupTableInjection<CloudType>::validInjection
211     const label
214     return true;
218 // ************************************************************************* //