ODT
Loading...
Searching...
No Matches
dv_pos.cc
Go to the documentation of this file.
1
6#include "dv_pos.h"
7#include "domain.h"
8#include <cstdlib>
9
11
18 const string s,
19 const bool Lt,
20 const bool Lo) {
21
22 domn = line;
23 var_name = s;
24 L_transported = Lt;
25 L_output = Lo;
26 d = vector<double>(domn->ngrd, 0.0);
27
28 double dx = domn->pram->domainLength / domn->ngrd;
29 d.at(0) = domn->pram->xDomainCenter + 0.5*(-domn->pram->domainLength + dx);
30 for(int i=1; i<domn->ngrd; i++)
31 d.at(i) = d.at(i-1) + dx;
32
33}
34
36
47void dv_pos::splitCell(const int isplt,
48 const int nsplt,
49 const vector<double> &cellFaces) {
50
51 d.insert( d.begin() +isplt+1, nsplt, 0.0);
52 for(int i=isplt, j=0; i<=isplt+nsplt; i++,j++)
53 d.at(i) = 0.5*(cellFaces.at(j)+cellFaces.at(j+1));
54
55}
56
58
73void dv_pos::merge2cells(const int imrg,
74 const double m1,
75 const double m2,
76 const bool LconstVolume) {
77
78 if(LconstVolume || domn->pram->bcType=="WALL") {
79 d.erase(d.begin() + imrg+1);
80 d.at(imrg) = 0.5*(domn->posf->d.at(imrg) + domn->posf->d.at(imrg+1));
81 }
82 else
83 setVar();
84}
85
87
95void dv_pos::setVar(const int ipt){
96
97 if(ipt != -1) {
98 cout << endl << "ERROR in setVar: ipt must be = -1" << endl;
99 exit(0);
100 }
101
102 d.resize(domn->posf->d.size()-1);
103
104 for(int i=0; i<d.size(); i++)
105 d.at(i) = 0.5*(domn->posf->d.at(i) + domn->posf->d.at(i+1));
106
107}
108
110
116void dv_pos::setDvFromRegion(const int i1, const int i2){
117
118 // note, we are owned by the eddyline, so domn is eddl, so to get domn data, use domn->domn
119 const vector<double> &domn_data = domn->domn->varMap.find(var_name)->second->d;
120
121 if(i2 >= i1)
122 d.assign(domn_data.begin()+i1, domn_data.begin()+i2+1 );
123 else { // wrap around (periodic assignment)
124 d.assign(domn_data.begin()+i1, domn_data.end());
125 d.insert(d.end(), domn_data.begin(), domn_data.begin()+i2+1 );
126 int idmb = d.size();
127 for(int i=idmb; i<d.size(); i++)
128 d.at(i)+=domn->domn->Ldomain();
129 }
130
131}
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
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
dv_pos()
Definition dv_pos.h:52
virtual void setVar(const int ipt=-1)
Definition dv_pos.cc:95
virtual void setDvFromRegion(const int i1, const int i2)
Definition dv_pos.cc:116
virtual void splitCell(const int isplt, const int nsplt, const vector< double > &cellFaces)
Definition dv_pos.cc:47
virtual void merge2cells(const int imrg, const double m2, const double m1, const bool LconstVolume=false)
Definition dv_pos.cc:73
vector< double > d
the data
Definition dv.h:30
bool L_transported
flag true if var is transported
Definition dv.h:31
string var_name
name of variable
Definition dv.h:29
bool L_output
flag true if included in output
Definition dv.h:32
domain * domn
pointer to domain object (parent)
Definition dv.h:35
double domainLength
length of domain (m)
Definition param.h:34
double xDomainCenter
position of the center of the domain
Definition param.h:69
string bcType
OUTFLOW, PERIODIC, WALL, WALL_OUT.
Definition param.h:67
Header file for class domain.
Header file for class dv_pos.