Ignis
Loading...
Searching...
No Matches
ignis.h
Go to the documentation of this file.
1#pragma once
2
3#include "cantera/base/Solution.h"
4#include "cantera/thermo.h"
5#include "cantera/kinetics.h"
6#include "cantera/transport.h"
7#include "streams.h"
8#include "rad_planck_mean.h"
9#include "rad_rcslw.h"
10#include "rad_wsgg.h"
11#include "linearInterp.h"
12#include "sootHeaders.h"
13
14#include <highfive/highfive.hpp>
15
16#include <vector>
17#include <memory>
18#include <string>
19
28
29class ignis {
30
31public:
32
33 size_t ngrd;
34 size_t nsp;
35 size_t nsoot;
36 size_t nvar;
37 size_t nvarA;
38
39 double P;
40 std::vector<std::vector<double> > y;
41 std::vector<double> T;
42 std::vector<std::vector<double> > sootvars;
43
44 double Pstore;
45 std::vector<std::vector<double> > ystore;
46 std::vector<double> Tstore;
47 std::vector<std::vector<double> > sootstore;
48
49 std::vector<double> yLbc, yRbc;
50 double TLbc, TRbc;
51 double hLbc, hRbc;
52 double cpLbc,cpRbc;
53 std::vector<double> hspLbc;
54 std::vector<double> hspRbc;
55
56 double L;
57 std::vector<double> x;
58 std::vector<double> dx;
59 std::vector<double> fl;
60 std::vector<double> fr;
61
62 double Tscale;
63 double hscale;
64 std::vector<double> sootScales;
65
66 std::vector<double> vars0;
67 std::vector<double> F0;
68 double s;
69
70 std::shared_ptr<Cantera::ThermoPhase> gas;
71 std::shared_ptr<Cantera::Kinetics> kin;
72 std::shared_ptr<Cantera::Transport> trn;
73
74 std::shared_ptr<streams> strm;
75 std::shared_ptr<rad> radProps;
76 std::string radType;
78 std::vector<double> kabs_sur;
79 std::vector<double> awts_sur;
80
81 bool doLe1 = false;
82
83 double Ttarget;
84 double dT;
85 int isave;
86
87 std::vector<std::vector<double> > flux_y;
88 std::vector<std::vector<double> > flux_soot;
89 std::vector<double> flux_h;
90
91 bool isFlamelet = false;
92 std::vector<double> chi;
93 double chi0;
94
95 bool isPremixed = false;
96 double mflux = 0.0;
97
98 bool doEnergyEqn = true;
99 std::shared_ptr<linearInterp> LI;
100 std::vector<double> Tprof_h;
101 std::vector<double> Tprof_T;
102
103 //---------------------
104
105 bool doSoot = false;
106 std::shared_ptr<soot::sootModel> SM;
107 std::shared_ptr<soot::state> SMstate;
108
109 //---------------------
110
111 std::shared_ptr<HighFive::File> fh5;
112
114
115 void setIC(const std::string icType, const std::string fname="");
116 void storeState();
117 void setFluxesUnity();
118 void setFluxes();
119 void setGrid(double _L);
120 void writeFileHdf5(const std::string gname, const std::string timeType);
121 void writeFile(const std::string fname);
122 void solveSS();
123 void setChi(const double _chi0);
124 void solveUnsteady(const double nTauRun, const int nsteps, const bool doWriteTime=true,
125 const double Tmin=0, const double Tmax=0);
126 int Func(const double *vars, double *F);
127 int rhsf(const double *vars, double *dvarsdt);
128 int rhsf_flamelet(const double *vars, double *dvarsdt);
129 void setQrad(std::vector<double> &Q);
130 void setTprof(const std::vector<double> &_Tprof_h, const std::vector<double> &_Tprof_T) {
131 Tprof_h = _Tprof_h;
132 Tprof_T = _Tprof_T;
133 LI = std::make_shared<linearInterp>(Tprof_h, Tprof_T);
134 }
135 void setDerivative2(const double vL, const double vR,
136 const std::vector<double> &v,
137 std::vector<double> &d2vdx2);
138 void setDerivative( const double vL, const double vR,
139 const std::vector<double> &v,
140 std::vector<double> &dvdx);
141
142 size_t I( size_t i, size_t k) { return i*nsp + k; } // y[I(i,k)] in 1D --> y[i,k] in 2D
143 size_t Ia(size_t i, size_t k) { return i*nvar + k; } // for indexing combined (a for all) vars
144
146
147 ignis(const bool _isPremixed, const bool _doEnergyEqn, const bool _isFlamelet, const bool _doSoot,
148 const size_t _ngrd, const double _L, const double _P,
149 std::shared_ptr<Cantera::Solution> csol, std::string _radType,
150 const std::vector<double> &_yLbc, const std::vector<double> &_yRbc,
151 const double _TLbc, const double _TRbc,
152 std::shared_ptr<soot::sootModel> _SM,
153 std::shared_ptr<soot::state> _SMstate);
154
155};
Definition ignis.h:29
std::vector< double > dx
grid spacing (m), nonuniform is fine
Definition ignis.h:58
void setGrid(double _L)
Definition ignis.cc:202
std::vector< double > T
temperature (K)
Definition ignis.h:41
size_t nsp
number of gas species
Definition ignis.h:34
std::vector< double > F0
for homotopy approaches
Definition ignis.h:67
std::vector< double > Tprof_T
temperature profile T values
Definition ignis.h:101
bool doRadiation
radiation flag
Definition ignis.h:77
std::vector< std::vector< double > > flux_soot
species fluxes: [I(igrid, ksoot)]
Definition ignis.h:88
size_t nvarA
nvar * ngrd
Definition ignis.h:37
double hRbc
h boundary values: left and right (as needed)
Definition ignis.h:51
void setTprof(const std::vector< double > &_Tprof_h, const std::vector< double > &_Tprof_T)
Definition ignis.h:130
size_t ngrd
number of interior grid points
Definition ignis.h:33
double TRbc
T boundary values: left and right (as needed)
Definition ignis.h:50
double L
domain size (m)
Definition ignis.h:56
double hscale
scaling value for enthalpy (for solvers)
Definition ignis.h:63
std::vector< double > hspRbc
species enthalpies on right boundary
Definition ignis.h:54
double hLbc
Definition ignis.h:51
size_t Ia(size_t i, size_t k)
Definition ignis.h:143
std::vector< double > awts_sur
awts for surroundings
Definition ignis.h:79
std::shared_ptr< Cantera::Kinetics > kin
Cantera kinetics object.
Definition ignis.h:71
double chi0
Definition ignis.h:93
std::vector< double > fl
fractions for interpolation
Definition ignis.h:59
std::vector< double > Tprof_h
temperature profile position (h is height above burner (m))
Definition ignis.h:100
double s
homotopy variable
Definition ignis.h:68
std::shared_ptr< Cantera::ThermoPhase > gas
Cantera thermo object.
Definition ignis.h:70
void writeFile(const std::string fname)
Definition ignis.cc:345
bool doLe1
true if doing unity Lewis numbers (default false)
Definition ignis.h:81
std::vector< double > yRbc
y boundary values: left and right (as needed)
Definition ignis.h:49
double cpRbc
cp boundary values: left and right (as needed)
Definition ignis.h:52
double cpLbc
Definition ignis.h:52
bool isFlamelet
true for laminar flamelet (mixture fraction coordinate)
Definition ignis.h:91
std::vector< double > sootScales
scaling value for soot variables (for solvers)
Definition ignis.h:64
std::shared_ptr< streams > strm
streams object (mixture fraction, etc.)
Definition ignis.h:74
std::vector< double > fr
fractions for interpolation
Definition ignis.h:60
bool doEnergyEqn
for premixed flames: can solve energy equation or set T profile
Definition ignis.h:98
double Tscale
scaling value for temperature (for solvers)
Definition ignis.h:62
size_t nvar
number of transported variables at each grid point
Definition ignis.h:36
void setFluxesUnity()
Definition ignis.cc:590
void setDerivative2(const double vL, const double vR, const std::vector< double > &v, std::vector< double > &d2vdx2)
Definition ignis.cc:1568
int rhsf_flamelet(const double *vars, double *dvarsdt)
Definition ignis.cc:1317
std::vector< std::vector< double > > sootstore
stored soot variables
Definition ignis.h:47
double dT
delta T increment for unsteady cases
Definition ignis.h:84
void writeFileHdf5(const std::string gname, const std::string timeType)
Definition ignis.cc:264
std::vector< double > x
grid position values (m)
Definition ignis.h:57
std::shared_ptr< HighFive::File > fh5
hdf5 file pointer
Definition ignis.h:111
std::vector< std::vector< double > > flux_y
species fluxes: [I(igrid, ksp)] I(igrid,ksp) maps 2D onto 1D
Definition ignis.h:87
int Func(const double *vars, double *F)
Definition ignis.cc:1008
void setFluxes()
Definition ignis.cc:738
std::shared_ptr< Cantera::Transport > trn
Cantera transport object.
Definition ignis.h:72
std::shared_ptr< soot::sootModel > SM
soot model
Definition ignis.h:106
std::vector< double > hspLbc
species enthalpies on left boundary
Definition ignis.h:53
std::vector< double > yLbc
Definition ignis.h:49
size_t I(size_t i, size_t k)
Definition ignis.h:142
double TLbc
Definition ignis.h:50
double P
system pressure, uniform (Pa)
Definition ignis.h:39
std::shared_ptr< linearInterp > LI
interpolator for specified temperature profiles
Definition ignis.h:99
std::vector< std::vector< double > > y
mass fractions: y[igrid][isp]
Definition ignis.h:40
std::vector< std::vector< double > > ystore
stored mass fractions
Definition ignis.h:45
void storeState()
Definition ignis.cc:469
void setDerivative(const double vL, const double vR, const std::vector< double > &v, std::vector< double > &dvdx)
Definition ignis.cc:1538
std::vector< double > kabs_sur
kabs for surroundings
Definition ignis.h:78
std::shared_ptr< rad > radProps
radiation object
Definition ignis.h:75
double Ttarget
for unsteady cases, run until this max T instead of for a given time
Definition ignis.h:83
std::vector< double > flux_h
species fluxes: [igrid]
Definition ignis.h:89
void setChi(const double _chi0)
Definition ignis.cc:1607
double mflux
premixed flame mass flux (kg/m2*s)
Definition ignis.h:96
std::shared_ptr< soot::state > SMstate
holds state variables (gas and soot) for soot model
Definition ignis.h:107
std::vector< std::vector< double > > sootvars
soot moments or sections; sootvars[igrid][isoot]
Definition ignis.h:42
int isave
file counter for save during unsteady cases
Definition ignis.h:85
void setIC(const std::string icType, const std::string fname="")
Definition ignis.cc:485
void setQrad(std::vector< double > &Q)
Definition ignis.cc:1082
std::vector< double > vars0
for homotopy approaches
Definition ignis.h:66
bool doSoot
soot flag
Definition ignis.h:105
std::vector< double > chi
dissipation rate profile
Definition ignis.h:92
std::vector< double > Tstore
stored temperature
Definition ignis.h:46
int rhsf(const double *vars, double *dvarsdt)
Definition ignis.cc:1215
void solveUnsteady(const double nTauRun, const int nsteps, const bool doWriteTime=true, const double Tmin=0, const double Tmax=0)
Definition ignis.cc:1122
bool isPremixed
true of the case is a premixed flame, (only left boundary condition, constant mass flux through domai...
Definition ignis.h:95
size_t nsoot
number of soot variables
Definition ignis.h:35
std::string radType
radiation model name
Definition ignis.h:76
void solveSS()
Definition ignis.cc:942
double Pstore
stored system pressure (for initializing from stored state)
Definition ignis.h:44