1 #ifndef __VISCID_TEST_FIXTURES_H__ 2 #define __VISCID_TEST_FIXTURES_H__ 13 inline double Parabola(
double amp,
double centerX,
double centerY,
double centerZ,
14 double x,
double y,
double z,
int direction)
16 double xTerm = (x-centerX);
17 double yTerm = (y-centerY);
18 double zTerm = (z-centerZ);
24 eTerm = zTerm*zTerm + xTerm*xTerm + yTerm*yTerm;
25 }
else if(direction == 0){
27 }
else if(direction == 1){
29 }
else if(direction == 2){
35 inline double Linear(std::vector<double> amp,
double x0,
double y0,
double z0,
36 double x,
double y,
double z,
int direction)
38 double xTerm = (x-x0);
39 double yTerm = (y-y0);
40 double zTerm = (z-z0);
44 eTerm = amp[0]*xTerm + amp[1]*yTerm + amp[2]*zTerm;
45 }
else if(direction == 0){
47 }
else if(direction == 1){
49 }
else if(direction == 2){
56 inline double Cosine(std::vector<double> amp, std::vector<double> period,
double x0,
double y0,
double z0,
57 double x,
double y,
double z,
int direction)
59 const double PI = 3.14159265359;
60 double xTerm = (x-x0);
61 double yTerm = (y-y0);
62 double zTerm = (z-z0);
68 eTerm = amp[0]*cos(2*PI*xTerm/period[0])
69 + amp[1]*cos(2*PI*yTerm/period[1])
70 + amp[2]*cos(2*PI*zTerm/period[2]);
71 }
else if(direction == 0){
72 eTerm = -2.0*PI*amp[0]/period[0]*sin(2*PI*xTerm/period[0]);
73 }
else if(direction == 1){
74 eTerm = -2.0*PI*amp[1]/period[1]*sin(2*PI*yTerm/period[1]);
75 }
else if(direction == 2){
76 eTerm = -2.0*PI*amp[2]/period[2]*sin(2*PI*zTerm/period[2]);
102 template<
typename Gr
idType,
typename StateType>
107 const std::vector<size_t> &
bufferSizes(inGrid.BufferSizes());
108 const std::vector<size_t> &
gridSizes(inGrid.GridSizes());
112 inState.AddField(
"simTime",
's',1,8,
"s");
115 inState.AddField(
"rho",
'n',1,8,
"mass");
116 inState.AddField(
"rhoV",
'n',3,8,
"momentum");
117 inState.AddField(
"rhoE",
'n',1,8,
"energy");
119 inState.AddField(
"scalarVars",
'n',numScalars,8,
"m/M");
122 inState.AddField(
"pressure",
'n',1,8,
"pressure");
123 inState.AddField(
"temperature",
'n',1,8,
"temperature");
124 inState.AddField(
"rhom1",
'n',1,8,
"volume");
125 inState.AddField(
"velocity",
'n',1,8,
"velocity");
129 inState.AddField(
"massFlux",
'n',3,8,
"");
130 inState.AddField(
"mom1Flux",
'n',3,8,
"");
131 inState.AddField(
"mom2Flux",
'n',3,8,
"");
132 inState.AddField(
"mom3Flux",
'n',3,8,
"");
133 inState.AddField(
"energyFlux",
'n',3,8,
"");
136 inState.Create(numPointsBuffer,0);
138 inState.SetStateFields(
"rho rhoV rhoE");
140 inState.SetStateFields(
"rho rhoV rhoE scalarVars");
141 inState.InitializeFieldHandles();
143 inParams.AddField(
"gamma",
's',1,8,
"");
144 inParams.AddField(
"inputDT",
's',1,8,
"s");
145 inParams.AddField(
"inputCFL",
's',1,8,
"");
146 inParams.AddField(
"refRe",
's',1,8,
"");
147 inParams.AddField(
"refPr",
's',1,8,
"");
148 inParams.AddField(
"Numbers",
's',3,8,
"");
149 inParams.AddField(
"Flags",
's',1,4,
"");
150 inParams.AddField(
"power",
's',1,8,
"");
151 inParams.AddField(
"beta",
's',1,8,
"");
152 inParams.AddField(
"bulkViscFac",
's',1,8,
"");
154 inParams.Create(numPointsBuffer,0);
160 template<
typename Gr
idType,
typename StateType>
163 int rhoHandle = inState.GetDataIndex(
"rho");
167 double *rhoPtr = rhoData.
Data<
double>();
171 int rhoVHandle = inState.GetDataIndex(
"rhoV");
175 double *rhoVPtr = rhoVData.
Data<
double>();
179 int rhoEHandle = inState.GetDataIndex(
"rhoE");
183 double *rhoEPtr = rhoEData.
Data<
double>();
188 const std::vector<size_t> &
bufferSizes(inGrid.BufferSizes());
189 const std::vector<size_t> &
gridSizes(inGrid.GridSizes());
193 double rhoE = 1.0/.4;
196 rhoPtr[iPoint] = 1.0;
197 rhoEPtr[iPoint] = rhoE;
200 rhoVPtr[iPoint] = 0.0;
203 size_t iStart = partitionBufferInterval[0].first;
204 size_t iEnd = partitionBufferInterval[0].second;
205 size_t jStart = partitionBufferInterval[1].first;
206 size_t jEnd = partitionBufferInterval[1].second;
207 size_t kStart = partitionBufferInterval[2].first;
208 size_t kEnd = partitionBufferInterval[2].second;
210 for(
size_t kIndex = kStart;kIndex <= kEnd;kIndex++){
211 size_t kBufferIndex = kIndex*nPlane;
212 for(
size_t jIndex = jStart;jIndex <= jEnd;jIndex++){
213 size_t jkBufferIndex = kBufferIndex + jIndex*bufferSizes[0];
214 for(
size_t iIndex = iStart;iIndex <= iEnd;iIndex++){
215 size_t bufferIndex = jkBufferIndex + iIndex;
216 rhoPtr[bufferIndex] = 1.0;
217 rhoEPtr[bufferIndex] = rhoE;
218 rhoVPtr[bufferIndex] = 0.0;
224 }
else if (numDim == 2) {
225 size_t iStart = partitionBufferInterval[0].first;
226 size_t iEnd = partitionBufferInterval[0].second;
227 size_t jStart = partitionBufferInterval[1].first;
228 size_t jEnd = partitionBufferInterval[1].second;
229 for(
size_t jIndex = jStart;jIndex <= jEnd;jIndex++){
231 for(
size_t iIndex = iStart;iIndex <= iEnd;iIndex++){
232 size_t bufferIndex = jBufferIndex + iIndex;
233 rhoPtr[bufferIndex] = 1.0;
234 rhoEPtr[bufferIndex] = rhoE;
235 rhoVPtr[bufferIndex] = 0.0;
239 }
else if (numDim == 1) {
240 size_t iStart = partitionBufferInterval[0].first;
241 size_t iEnd = partitionBufferInterval[0].second;
242 for(
size_t iIndex = iStart;iIndex <= iEnd;iIndex++){
243 rhoPtr[iIndex] = 1.0;
244 rhoEPtr[iIndex] = rhoE;
245 rhoVPtr[iIndex] = 0.0;
double Cosine(std::vector< double > amp, std::vector< double > period, double x0, double y0, double z0, double x, double y, double z, int direction)
int InitializeQuiescentFlow(const GridType &inGrid, StateType &inState, bool everyWhere=false)
simulation::state::base state_t
std::vector< DomainBaseType > domainvector
void const size_t const size_t * gridSizes
void const size_t const size_t const size_t const double const double double * y
double Parabola(double amp, double centerX, double centerY, double centerZ, double x, double y, double z, int direction)
int GeneratePoiseuilleExact(pbsgrid_t &exactGrid, state_t &exactState, const int direction)
void const size_t const size_t const size_t const double const double * x
plascom2::application::domainvector DomainVector
double Linear(std::vector< double > amp, double x0, double y0, double z0, double x, double y, double z, int direction)
int SetupViscidState(const GridType &inGrid, StateType &inState, StateType &inParams, int numScalars, bool withFluxes=false)
void const size_t const size_t * bufferSizes
void const size_t const size_t const size_t const int * numScalars
simulation::grid::parallel_blockstructured pbsgrid_t
int GenerateViscidShockExact(pbsgrid_t &exactGrid, state_t &exactState, const int direction)
Simple Block Structured Mesh object.
void const size_t * numPointsBuffer