33 template<
class chemistryType>
37 if (writeToFile() && !prodFilePtr_.valid())
39 prodFilePtr_ = createFile(
"production");
41 writeFileHeader(prodFilePtr_());
43 consFilePtr_ = createFile(
"consumption");
45 writeFileHeader(consFilePtr_());
47 prodIntFilePtr_ = createFile(
"productionInt");
49 writeFileHeader(prodIntFilePtr_());
51 consIntFilePtr_ = createFile(
"consumptionInt");
53 writeFileHeader(consIntFilePtr_());
58 template<
class chemistryType>
65 writeCommented(os,
"Reaction");
69 os <<
tab << speciesNames_[
k] <<
tab;
76 template<
class chemistryType>
80 const basicChemistryModel& basicChemistry
83 auto RRt = tmp<DimensionedField<scalar, volMesh>>
::New
98 scalar dt = time_.deltaT().value();
102 forAll(production_, speciei)
104 forAll(production_[speciei], reactioni)
106 RR = basicChemistry.calculateRR(reactioni, speciei);
110 production_[speciei][reactioni] =
RR[0];
111 productionInt_[speciei][reactioni] += dt*
RR[0];
113 else if (
RR[0] < 0.0)
115 consumption_[speciei][reactioni] =
RR[0];
116 consumptionInt_[speciei][reactioni] += dt*
RR[0];
120 production_[speciei][reactioni] = 0.0;
121 consumption_[speciei][reactioni] = 0.0;
128 template<
class chemistryType>
134 consFilePtr_() <<
"delta T : "<< mesh_.time().deltaT().value() <<
nl <<
nl;
135 prodFilePtr_() <<
"time : " << mesh_.time().value() <<
tab <<
nl;
136 prodFilePtr_() <<
"delta T : "<< mesh_.time().deltaT().value() <<
nl <<
nl;
138 consIntFilePtr_() <<
"start time : " << startTime_ <<
tab
139 <<
"end time :" << endTime_ <<
nl;
141 prodIntFilePtr_() <<
"start time : " << startTime_ <<
tab
142 <<
"end time :" << endTime_ <<
nl;
144 for (label reactioni = 0; reactioni < nReactions_; ++reactioni)
146 consFilePtr_() << reactioni <<
tab;
147 consIntFilePtr_() << reactioni <<
tab;
148 prodFilePtr_() << reactioni <<
tab;
149 prodIntFilePtr_() << reactioni <<
tab;
153 prodFilePtr_() << production_[i][reactioni] <<
tab;
154 consFilePtr_() << consumption_[i][reactioni] <<
tab;
155 prodIntFilePtr_() << productionInt_[i][reactioni] <<
tab;
156 consIntFilePtr_() << consumptionInt_[i][reactioni] <<
tab;
157 consumptionInt_[i][reactioni] = 0.0;
158 productionInt_[i][reactioni] = 0.0;
160 consFilePtr_() <<
nl;
161 consIntFilePtr_() <<
nl;
162 prodFilePtr_() <<
nl;
163 prodIntFilePtr_() <<
nl;
165 consFilePtr_() <<
nl <<
nl;
166 consIntFilePtr_() <<
nl <<
nl;
167 prodFilePtr_() <<
nl <<
nl;
168 prodIntFilePtr_() <<
nl <<
nl;
174 template<
class chemistryType>
200 if (mesh_.nCells() != 1)
203 <<
"Function object only applicable to single cell cases"
207 if (foundObject<basicChemistryModel>(
"chemistryProperties"))
209 const chemistryType&
chemistry = refCast<const chemistryType>
211 lookupObject<basicChemistryModel>(
"chemistryProperties")
214 speciesNames_.setSize
216 chemistry.thermo().composition().species().size()
221 speciesNames_[i] =
chemistry.thermo().composition().species()[i];
226 if (production_.size() == 0)
228 production_.setSize(speciesNames_.size());
229 consumption_.setSize(production_.size());
230 productionInt_.setSize(production_.size());
231 consumptionInt_.setSize(production_.size());
235 production_[i].setSize(nReactions_, 0.0);
236 consumption_[i].setSize(nReactions_, 0.0);
237 productionInt_[i].setSize(nReactions_, 0.0);
238 consumptionInt_[i].setSize(nReactions_, 0.0);
245 <<
" No chemistry model found. "
246 <<
" Objects available are : " << mesh_.names()
254 template<
class chemistryType>
267 template<
class chemistryType>
274 lookupObject<basicChemistryModel>(
"chemistryProperties");
281 template<
class chemistryType>
285 if (Pstream::master())
289 startTime_ = endTime_;