ODT
Loading...
Searching...
No Matches
domaincase_odt_jetFlame.cc
Go to the documentation of this file.
1
7#include "domain.h"
8#include "dv.h"
9#include "dv_pos.h"
10#include "dv_posf.h"
11#include "dv_rho.h"
12#include "dv_dvisc.h"
13#include "dv_uvw.h"
14#include "dv_enth.h"
15#include "dv_temp.h"
16#include "dv_ygas.h"
17#include "dv_mixf.h"
18#include "dv_chi.h"
19#include "dv_hr.h"
20#include "dv_aDL.h"
21
22#include "interp_linear.h"
23
24#include <cmath>
25#include <string>
26#include <sstream>
27
29
36
37 domn = p_domn;
38
39 LisFlameD = domn->io->initParams["LisFlameD"] ? domn->io->initParams["LisFlameD"].as<bool>() : false;
40
41 vector<double> gammas(4,0.0);
42 gammas[0] = 2.0/domn->gas->atomicWeight(domn->gas->elementIndex("C"));
43 gammas[1] = 0.5/domn->gas->atomicWeight(domn->gas->elementIndex("H"));
44 gammas[2] = -1.0/domn->gas->atomicWeight(domn->gas->elementIndex("O"));
45 gammas[3] = 0.0;
46 if(LisFlameD) gammas[2] = 0.0;
47 domn->strm->init(domn, gammas);
48
49 domn->v.push_back(new dv_pos( domn, "pos", false, true )); // last are: L_transported, L_output
50 domn->v.push_back(new dv_posf( domn, "posf", false, true ));
51 domn->v.push_back(new dv_rho( domn, "rho", false, true ));
52 domn->v.push_back(new dv_dvisc( domn, "dvisc", false, true ));
53 domn->v.push_back(new dv_uvw( domn, "uvel", true, true ));
54 domn->v.push_back(new dv_uvw( domn, "vvel", true, true ));
55 domn->v.push_back(new dv_uvw( domn, "wvel", true, true ));
56 domn->v.push_back(new dv_temp( domn, "temp", false, true ));
57 domn->v.push_back(new dv_mixf( domn, "mixf", false, true ));
58 domn->v.push_back(new dv_chi( domn, "chi", false, true ));
59 domn->v.push_back(new dv_hr( domn, "hr", false, true ));
60 if (domn->pram->LdoDL)
61 domn->v.push_back(new dv_aDL( domn, "aDL", false, false ));
62 for(int k=0; k<domn->gas->nSpecies(); k++)
63 domn->v.push_back(new dv_ygas(domn, "y_"+domn->gas->speciesName(k), true, true ));
64 domn->v.push_back(new dv_enth( domn, "enth", true, true )); // enth AFTER ygas for enth flux (see dv_enth)
65
66 int ii = 0;
67 domn->pos = domn->v.at(ii++);
68 domn->posf = domn->v.at(ii++);
69 domn->rho = domn->v.at(ii++);
70 domn->dvisc = domn->v.at(ii++);
71 domn->uvel = domn->v.at(ii++);
72 domn->vvel = domn->v.at(ii++);
73 domn->wvel = domn->v.at(ii++);
74 domn->temp = domn->v.at(ii++);
75 domn->mixf = domn->v.at(ii++);
76 domn->chi = domn->v.at(ii++);
77 domn->hr = domn->v.at(ii++);
78 if (domn->pram->LdoDL)
79 domn->aDL = domn->v.at(ii++);
80 domn->ysp = domn->v.begin()+ii; // access as domn->ysp[k]->d[i], etc. where k is the species starting from 0.
81 ii += domn->gas->nSpecies();
82 domn->enth = domn->v.at(ii++);
83
84 //------------------- set variables used for mesh adaption
85
86 vector<dv*> phi;
87 phi.push_back(domn->uvel);
88 phi.push_back(domn->temp);
89 domn->mesher->init(domn, phi);
90
91 //------------------- set profiles
92
93 double d_f = domn->io->initParams["d_f"].as<double>();
94 double d_p = domn->io->initParams["d_p"].as<double>();
95 double Z_p = domn->io->initParams["Z_p"].as<double>();
96 double dTrans = domn->io->initParams["dTrans"].as<double>();
97 double U_f = domn->io->initParams["U_f"].as<double>();
98 double U_p = domn->io->initParams["U_p"].as<double>();
99 double U_a = domn->io->initParams["U_a"].as<double>();
100
101 //--------------------
102
103 double r_f = d_f/2.0;
104 double r_p = d_p/2.0;
105 double p1; // dummy for setting profiles
106 double p2; // dummy for setting profiles
107
108 for(int i=0; i<domn->ngrd; i++){
109 p1 = 0.5*(1.0+tanh(2.0/dTrans*(domn->pos->d.at(i)+r_f))) *
110 0.5*(1.0+tanh(2.0/dTrans*(r_f-domn->pos->d.at(i))));
111 p2 = 0.5*(1.0+tanh(2.0/dTrans*(domn->pos->d.at(i)+r_p))) *
112 0.5*(1.0+tanh(2.0/dTrans*(r_p-domn->pos->d.at(i))));
113 domn->mixf->d.at(i) = p1*(1.0-Z_p) + p2*Z_p;
114 if(U_f > 0)
115 domn->uvel->d.at(i) = p1*(U_f-U_p-U_a) + p2*(U_p-U_a) + U_a;
116 }
117
118 if(U_f < 0) {
119 vector<double> xprof, uprof;
120 for(int i=0; i<domn->io->initParams["vprof"].size(); i++){
121 xprof.push_back(domn->io->initParams["vprof"][i][0].as<double>());
122 uprof.push_back(domn->io->initParams["vprof"][i][1].as<double>());
123 }
124 Linear_interp Linterp(xprof, uprof);
125 for(int i=0; i<domn->ngrd; i++)
126 domn->uvel->d.at(i) = Linterp.interp(domn->pos->d.at(i));
127 }
128
129 //--------------------
130
131 int nsp = domn->gas->nSpecies();
132 vector<double> ysp(nsp); // dummy storage
133 for(int i=0; i<domn->ngrd; i++) {
134 if ( domn->pram->Lignition ) {
135 /* non-reacting mixing for ignition */
136 domn->strm->getMixingState(domn->mixf->d.at(i), ysp, domn->enth->d.at(i), domn->temp->d.at(i));
137 }
138 else {
139 /* products of combustion for equilibrium initial state */
140 domn->strm->getProdOfCompleteComb(domn->mixf->d.at(i), ysp, domn->enth->d.at(i), domn->temp->d.at(i));
141 }
142 for(int k=0; k<nsp; k++)
143 domn->ysp[k]->d.at(i) = ysp.at(k);
144 }
145
147
148 domn->rho->setVar();
149 domn->dvisc->setVar();
150
151}
152
154
160
161 int nsp = domn->gas->nSpecies();
162 vector<double> yi(nsp);
163 for(int k=0; k<nsp; k++) {
164 yi.at(k) = domn->ysp[k]->d.at(ipt);
165 }
166
167 domn->gas->setState_PY(domn->pram->pres, &yi.at(0));
168 domn->gas->setState_HP(domn->enth->d.at(ipt), domn->pram->pres, 1.E-10);
169
170}
171
173
178
180 domn->enth->setVar();
181 domn->rho->setVar();
182 domn->dvisc->setVar();
183 domn->temp->setVar();
184 domn->chi->setVar();
185
186 domn->enth->LagSrc = false; // reset to false; in enth source the src is computed if false, then set to true on subsequent calls.
187}
188
190
195
196 domn->rho->setVar(ipt);
197 domn->temp->setVar(ipt);
198}
double interp(double x)
int ngrd
number of grid cells
Definition domain.h:42
dv * enth
Definition domain.h:57
IdealGasPhase * gas
pointer to cantera thermochemistry object (reaction rates, Cp, etc.)
Definition domain.h:69
dv * uvel
Definition domain.h:51
dv * hr
Definition domain.h:61
dv * posf
access as: posf->d[i], or posf->var_name, etc.
Definition domain.h:48
dv * vvel
Definition domain.h:52
dv * wvel
Definition domain.h:53
dv * aDL
Definition domain.h:62
dv * pos
pointers to gas properties
Definition domain.h:47
meshManager * mesher
pointer to mesh manager object
Definition domain.h:78
inputoutput * io
pointer to input/output object
Definition domain.h:72
dv * dvisc
Definition domain.h:50
dv * mixf
Definition domain.h:59
streams * strm
pointer to gas stream properties
Definition domain.h:71
vector< dv * > v
All domain variables are stored in here.
Definition domain.h:45
vector< dv * >::iterator ysp
access as: ysp=v.begin(), (*ysp)->d[i] or (*(ysp+k))->d[i], or ysp[k]->d[i].
Definition domain.h:63
dv * chi
Definition domain.h:60
param * pram
pointer to the parameters object
Definition domain.h:73
dv * rho
Definition domain.h:49
dv * temp
Definition domain.h:58
virtual void setCaseSpecificVars_cvode(const int &ipt)
virtual void init(domain *p_domn)
virtual void setGasStateAtPt(const int &ipt)
virtual void enforceMassFractions()
Definition domaincase.cc:12
domain * domn
pointer to domain object (parent)
Definition domaincase.h:28
Definition dv_hr.h:23
vector< double > d
the data
Definition dv.h:30
bool LagSrc
flag to lag source term in implicit solve (initially put in for enthalpy radiation)
Definition dv.h:33
virtual void setVar(const int ipt=-1)
Definition dv.h:44
YAML::Node initParams
yaml sub node
Definition inputoutput.h:42
void init(domain *p_domn, const vector< dv * > p_phi)
bool Lignition
true if starting with unreacted mixing profile to allow ignition
Definition param.h:65
bool LdoDL
flag to do the DL energy from the DL instability
Definition param.h:54
double pres
initial pressure (Pa)
Definition param.h:40
void init(domain *p_domn, const vector< double > &gammas)
Definition streams.cc:18
void getMixingState(const double mixf, vector< double > &ymix, double &hmix, double &Tmix)
Definition streams.cc:106
void getProdOfCompleteComb(const double mixf, vector< double > &ypcc, double &hpcc, double &Tpcc)
Definition streams.cc:128
Header file for class domain.
Header file for class domaincase_odt_jetFlame.
Header file for class dv.
Header file for class dv_aDL.
Header file for class dv_chi.
Header file for class dv_dvisc.
Header file for class dv_enth.
Header file for class dv_hr.
Header file for class dv_mixf.
Header file for class dv_pos.
Header file for class dv_posf.
Header file for class dv_rho.
Header file for class dv_temp.
Header file for class dv_uvw.
Header file for class dv_ygas.