ODT
Loading...
Searching...
No Matches
dv.cc
Go to the documentation of this file.
1
6#include "dv.h"
7#include "domain.h"
8
10
17 const string s,
18 const bool Lt,
19 const bool Lo) {
20
21 domn = line;
22 var_name = s;
23 L_transported = Lt;
24 L_output = Lo;
25 d = vector<double>(domn->ngrd, 0.0);
26
27 LagSrc = false;
28
29}
30
32
39void dv::splitCell(const int isplt,
40 const int nsplt,
41 const vector<double> &cellFaces) {
42
43 d.insert( d.begin() + isplt, nsplt, d.at(isplt) );
44
45}
46
48
60void dv::merge2cells(const int imrg,
61 const double m1,
62 const double m2,
63 const bool LconstVolume) {
64
65 d.at(imrg) = (d.at(imrg)*m1 + d.at(imrg+1)*m2 ) / (m1+m2);
66
67 d.erase(d.begin() + imrg+1);
68
69}
70
72
75void dv::interpVarToFacesHarmonic(const vector<double> &cvar, vector<double> &fvar){
76
77 // todo: fill this in
78
79 double dx1, dx2, k1, k2;
80 int i, im;
81
82 double dfirst; // store the first face diff till end
83 double dlast; // store the last face diff till end
84 double denom;
85
86 //------ do edges
87
88 if (domn->pram->Lperiodic) {
89 i = 0;
90 im = domn->ngrd - 1;
91
92 dx1 = domn->posf->d.at(domn->ngrd) - domn->pos->d.at(im);
93 dx2 = domn->pos->d.at(i) - domn->posf->d.at(i);
94 k1 = cvar.at(im);
95 k2 = cvar.at(i);
96 denom = k1*dx2+k2*dx1;
97 if(abs(denom)==0.0)
98 dfirst = 0.0;
99 else
100 dfirst = k1 * k2 * (dx1 + dx2) / denom; // first face
101 dlast = dfirst; // last face
102 }
103 else {
104 dfirst = cvar.at(0); // first face
105 dlast = cvar.at(domn->ngrd-1); // last face
106 }
107
108 //------ do interior faces
109 // we assume pos[i] is located right in the middle of posf[i] and posf[i+1]
110 // so we take always the left half of cells
111
112 for (i=1, im=0; i < domn->ngrd; i++, im++) {
113 dx1 = domn->pos->d.at(im) - domn->posf->d.at(im);
114 dx2 = domn->pos->d.at(i) - domn->posf->d.at(i);
115 k1 = cvar.at(im);
116 k2 = cvar.at(i);
117 denom = k1*dx2+k2*dx1;
118 if(abs(denom)==0.0)
119 fvar.at(i) = 0.0;
120 else
121 fvar.at(i) = k1 * k2 * (dx1 + dx2) / denom;
122 }
123
124 fvar.at(0) = dfirst; // insert the first face flux
125 fvar.at(domn->ngrd) = dlast; // insert the last face flux
126
127}
128
130
136double dv::linearInterpToFace(const int &iface, const vector<double> &vec) {
137
138 double x1, x2, y1, y2;
139
140 if (iface == 0) {
141 if (domn->pram->Lperiodic) {
142 x1 = domn->pos->d.at(domn->ngrd - 1) - domn->Ldomain();
143 x2 = domn->pos->d.at(0);
144 y1 = vec.at(domn->ngrd - 1);
145 y2 = vec.at(0);
146 } else {
147 return vec.at(0);
148 }
149 } else if (iface == domn->ngrd) {
150 if (domn->pram->Lperiodic) {
151 x1 = domn->pos->d.at(domn->ngrd - 1);
152 x2 = domn->pos->d.at(0) + domn->Ldomain();
153 y1 = vec.at(domn->ngrd - 1);
154 y2 = vec.at(0);
155 } else {
156 return vec.at(domn->ngrd - 1);
157 }
158 } else {
159 x1 = domn->pos->d.at(iface - 1);
160 x2 = domn->pos->d.at(iface);
161 y1 = vec.at(iface - 1);
162 y2 = vec.at(iface);
163 }
164
165 return y1 + (y2 - y1) / (x2 - x1) * (domn->posf->d.at(iface) - x1);
166}
167
169
175void dv::setDvFromRegion(const int i1, const int i2){
176
177 // note, we are owned by the eddyline, so domn is eddl, so to get domn data, use domn->domn
178 const vector<double> &domn_data = domn->domn->varMap.find(var_name)->second->d;
179
180 if(i2 >= i1)
181 d.assign(domn_data.begin()+i1, domn_data.begin()+i2+1 );
182 else { // wrap around (periodic assignment)
183 d.assign(domn_data.begin()+i1, domn_data.end());
184 d.insert(d.end(), domn_data.begin(), domn_data.begin()+i2+1 );
185 }
186
187}
188
190
194 d.resize(domn->ngrd);
195}
int ngrd
number of grid cells
Definition domain.h:42
double Ldomain()
Definition domain.cc:156
dv * posf
access as: posf->d[i], or posf->var_name, etc.
Definition domain.h:48
map< string, dv * > varMap
Definition domain.h:67
dv * pos
pointers to gas properties
Definition domain.h:47
domain * domn
(for one domain to point to another (eddl))
Definition domain.h:40
param * pram
pointer to the parameters object
Definition domain.h:73
vector< double > d
the data
Definition dv.h:30
virtual void interpVarToFacesHarmonic(const vector< double > &cvar, vector< double > &fvar)
Definition dv.cc:75
bool L_transported
flag true if var is transported
Definition dv.h:31
bool LagSrc
flag to lag source term in implicit solve (initially put in for enthalpy radiation)
Definition dv.h:33
string var_name
name of variable
Definition dv.h:29
virtual void splitCell(const int isplt, const int nsplt, const vector< double > &cellFaces)
Definition dv.cc:39
bool L_output
flag true if included in output
Definition dv.h:32
dv()
Definition dv.h:68
virtual void merge2cells(const int imrg, const double m2, const double m1, const bool LconstVolume=false)
Definition dv.cc:60
virtual void resize()
Definition dv.cc:193
virtual double linearInterpToFace(const int &iface, const vector< double > &vec)
Definition dv.cc:136
domain * domn
pointer to domain object (parent)
Definition dv.h:35
virtual void setDvFromRegion(const int i1, const int i2)
Definition dv.cc:175
bool Lperiodic
periodic if true
Definition param.h:61
Header file for class domain.
Header file for class dv.