155 const std::vector<double *> &stateBuffers,
156 std::vector<double *> &dvBuffers)
159 int numDim = bufferSizes.size();
164 double *lpressurePtr = dvBuffers[0];
165 double *ltemperaturePtr = dvBuffers[1];
166 double *lrhom1Ptr = dvBuffers[2];
167 double *lV1Ptr = dvBuffers[3];
168 double *linternalEnergyPtr = dvBuffers[numDim+3];
170 const double *lrhoPtr = stateBuffers[0];
171 const double *lrhoVPtr = stateBuffers[1];
172 const double *lrhoEPtr = stateBuffers[numDim+1];
176 size_t xStart = regionInterval[0].first;
177 size_t xEnd = regionInterval[0].second;
178 size_t xSize = bufferSizes[0];
179 size_t nPoints = xSize;
181 for(
size_t iX = xStart;iX <= xEnd;iX++){
183 size_t xyzIndex = iX;
185 double rho = lrhoPtr[xyzIndex];
186 double rhom1 = 1.0/rho;
187 double rhoV1 = lrhoVPtr[xyzIndex];
188 double rhoE = lrhoEPtr[xyzIndex];
189 double kineticTerm = 0.0;
192 lrhom1Ptr[xyzIndex] = rhom1;
193 lV1Ptr[xyzIndex] = rhoV1*rhom1;
194 kineticTerm += rhoV1*rhoV1;
195 linternalEnergyPtr[xyzIndex] = rhoE - 0.5*kineticTerm*rhom1;
197 }
else if (numDim == 2){
199 double *lV2Ptr = dvBuffers[4];
201 size_t xStart = regionInterval[0].first;
202 size_t xEnd = regionInterval[0].second;
203 size_t yStart = regionInterval[1].first;
204 size_t yEnd = regionInterval[1].second;
206 size_t xSize = bufferSizes[0];
207 size_t ySize = bufferSizes[1];
208 size_t nPoints = xSize*ySize;
210 for(
size_t iY = yStart;iY <= yEnd;iY++){
211 size_t yzIndex = iY*xSize;
212 for(
size_t iX = xStart;iX <= xEnd;iX++){
214 size_t xyzIndex = yzIndex + iX;
215 size_t xyzIndex2 = xyzIndex + nPoints;
217 double rho = lrhoPtr[xyzIndex];
218 double rhom1 = 1.0/rho;
219 double rhoV1 = lrhoVPtr[xyzIndex];
220 double rhoV2 = lrhoVPtr[xyzIndex2];
221 double rhoE = lrhoEPtr[xyzIndex];
223 double kineticTerm = 0.0;
225 lrhom1Ptr[xyzIndex] = rhom1;
226 lV1Ptr[xyzIndex] = rhoV1*rhom1;
227 kineticTerm += rhoV1*rhoV1;
228 lV2Ptr[xyzIndex] = rhoV2*rhom1;
229 kineticTerm += rhoV2*rhoV2;
230 linternalEnergyPtr[xyzIndex] = rhoE - 0.5*kineticTerm*rhom1;
233 }
else if(numDim == 3) {
235 double *lV2Ptr = dvBuffers[4];
236 double *lV3Ptr = dvBuffers[5];
238 size_t xSize = bufferSizes[0];
239 size_t ySize = bufferSizes[1];
240 size_t zSize = bufferSizes[2];
242 size_t xStart = regionInterval[0].first;
243 size_t xEnd = regionInterval[0].second;
244 size_t yStart = regionInterval[1].first;
245 size_t yEnd = regionInterval[1].second;
246 size_t zStart = regionInterval[2].first;
247 size_t zEnd = regionInterval[2].second;
249 size_t nPlane = xSize*ySize;
250 size_t nPoints = xSize*ySize*zSize;
252 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
253 size_t zIndex = iZ*nPlane;
254 for(
size_t iY = yStart;iY <= yEnd;iY++){
255 size_t yzIndex = iY*xSize+zIndex;
256 for(
size_t iX = xStart;iX <= xEnd;iX++){
258 size_t xyzIndex = yzIndex + iX;
259 size_t xyzIndex2 = xyzIndex + nPoints;
260 size_t xyzIndex3 = xyzIndex + 2*nPoints;
262 double rho = lrhoPtr[xyzIndex];
263 double rhom1 = 1.0/rho;
264 double rhoV1 = lrhoVPtr[xyzIndex];
265 double rhoV2 = lrhoVPtr[xyzIndex2];
266 double rhoV3 = lrhoVPtr[xyzIndex3];
267 double rhoE = lrhoEPtr[xyzIndex];
268 double kineticTerm = 0.0;
270 lrhom1Ptr[xyzIndex] = rhom1;
271 lV1Ptr[xyzIndex] = rhoV1*rhom1;
272 kineticTerm += rhoV1*rhoV1;
273 lV2Ptr[xyzIndex] = rhoV2*rhom1;
274 kineticTerm += rhoV2*rhoV2;
275 lV3Ptr[xyzIndex] = rhoV3*rhom1;
276 kineticTerm += rhoV3*rhoV3;
277 linternalEnergyPtr[xyzIndex] = rhoE - 0.5*kineticTerm*rhom1;
287 const size_t *numPointsPtr,
289 const double *lrhoPtr,
290 const double *lrhoVPtr,
291 const double *lrhoEPtr,
292 double *lpressurePtr,
293 double *ltemperaturePtr,
299 double gammam1 = gamma-1.0;
300 double gammaR = gamma/gammam1;
302 int numDim = *numDimPtr;
310 size_t xStart = bufferInterval[0];
311 size_t xEnd = bufferInterval[1];
313 size_t xSize = bufferSize[0];
315 for(
size_t iX = xStart;iX <= xEnd;iX++){
317 size_t xyzIndex = iX;
319 double rho = lrhoPtr[xyzIndex];
320 double rhom1 = 1.0/rho;
321 double rhoV = lrhoVPtr[xyzIndex];
322 double kineticTerm = 0.0;
324 lrhom1Ptr[xyzIndex] = rhom1;
325 lVPtr[xyzIndex] = rhoV*rhom1;
326 kineticTerm += rhoV*rhoV;
328 lpressurePtr[xyzIndex] = gammam1*(lrhoEPtr[xyzIndex]
329 - 0.5*kineticTerm*rhom1);
330 ltemperaturePtr[xyzIndex] = gammaR*lpressurePtr[xyzIndex]*rhom1;
333 }
else if (numDim == 2){
335 size_t xStart = bufferInterval[0];
336 size_t xEnd = bufferInterval[1];
337 size_t yStart = bufferInterval[2];
338 size_t yEnd = bufferInterval[3];
340 size_t xSize = bufferSize[0];
341 size_t ySize = bufferSize[1];
343 for(
size_t iY = yStart;iY <= yEnd;iY++){
344 size_t yzIndex = iY*xSize;
345 for(
size_t iX = xStart;iX <= xEnd;iX++){
347 size_t xyzIndex = yzIndex + iX;
350 double rho = lrhoPtr[xyzIndex];
351 double rhom1 = 1.0/rho;
352 double rhoV1 = lrhoVPtr[xyzIndex];
353 double rhoV2 = lrhoVPtr[xyzIndex2];
354 double kineticTerm = 0.0;
356 lrhom1Ptr[xyzIndex] = rhom1;
357 lVPtr[xyzIndex] = rhoV1*rhom1;
358 kineticTerm += rhoV1*rhoV1;
359 lVPtr[xyzIndex2] = rhoV2*rhom1;
360 kineticTerm += rhoV2*rhoV2;
362 lpressurePtr[xyzIndex] = gammam1*(lrhoEPtr[xyzIndex]
363 - 0.5*kineticTerm*rhom1);
364 ltemperaturePtr[xyzIndex] = gammaR*lpressurePtr[xyzIndex]*rhom1;
370 }
else if(numDim == 3) {
372 size_t xSize = bufferSize[0];
373 size_t ySize = bufferSize[1];
374 size_t zSize = bufferSize[2];
376 size_t xStart = bufferInterval[0];
377 size_t xEnd = bufferInterval[1];
378 size_t yStart = bufferInterval[2];
379 size_t yEnd = bufferInterval[3];
380 size_t zStart = bufferInterval[4];
381 size_t zEnd = bufferInterval[5];
383 size_t nPlane = xSize*ySize;
385 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
386 size_t zIndex = iZ*nPlane;
387 for(
size_t iY = yStart;iY <= yEnd;iY++){
388 size_t yzIndex = iY*xSize+zIndex;
389 for(
size_t iX = xStart;iX <= xEnd;iX++){
391 size_t xyzIndex = yzIndex + iX;
393 size_t xyzIndex3 = xyzIndex + 2*
numPoints;
395 double rho = lrhoPtr[xyzIndex];
396 double rhom1 = 1.0/rho;
397 double rhoV1 = lrhoVPtr[xyzIndex];
398 double rhoV2 = lrhoVPtr[xyzIndex2];
399 double rhoV3 = lrhoVPtr[xyzIndex3];
400 double kineticTerm = 0.0;
402 lrhom1Ptr[xyzIndex] = rhom1;
403 lVPtr[xyzIndex] = rhoV1*rhom1;
404 kineticTerm += rhoV1*rhoV1;
405 lVPtr[xyzIndex2] = rhoV2*rhom1;
406 kineticTerm += rhoV2*rhoV2;
407 lVPtr[xyzIndex3] = rhoV3*rhom1;
408 kineticTerm += rhoV3*rhoV3;
410 lpressurePtr[xyzIndex] = gammam1*(lrhoEPtr[xyzIndex]
411 - 0.5*kineticTerm*rhom1);
412 ltemperaturePtr[xyzIndex] = gammaR*lpressurePtr[xyzIndex]*rhom1;
int ComputeDVBuffer(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSizes, const std::vector< double *> &stateBuffers, std::vector< double *> &dvBuffers)
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t * bufferSize
void const size_t * numPoints
int ComputeDVBuffer2(const int *numDimPtr, const size_t *bufferSize, const size_t *numPointsPtr, const size_t *bufferInterval, const double *rhoBuffer, const double *rhoVBuffer, const double *rhoEBuffer, double *pressureBuffer, double *tempBuffer, double *rhom1Buffer, double *velBuffer)
void const size_t const size_t * bufferSizes
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t size_t * bufferInterval
Simple Block Structured Mesh object.