16 const double * temperatureBuffer,
17 std::vector<double *> &tvBuffer,
20 const double bulkViscFac,
21 const double specificHeat,
22 const double prandtlNumber)
24 int numDim = bufferSize.size();
29 double *lmuPtr = tvBuffer[0];
30 double *llambdaPtr = tvBuffer[1];
31 double *lkappaPtr = tvBuffer[2];
35 size_t xStart = regionInterval[0].first;
36 size_t xEnd = regionInterval[0].second;
37 size_t xSize = bufferSize[0];
38 size_t nPoints = xSize;
40 for(
size_t iX = xStart;iX <= xEnd;iX++){
42 lmuPtr[xyzIndex] = beta*pow(temperatureBuffer[xyzIndex],power);
43 llambdaPtr[xyzIndex] = (bulkViscFac - 2.0/3.0)*lmuPtr[xyzIndex];
44 lkappaPtr[xyzIndex] = specificHeat*lmuPtr[xyzIndex]/prandtlNumber;
46 }
else if (numDim == 2){
48 size_t xStart = regionInterval[0].first;
49 size_t xEnd = regionInterval[0].second;
50 size_t yStart = regionInterval[1].first;
51 size_t yEnd = regionInterval[1].second;
53 size_t xSize = bufferSize[0];
54 size_t ySize = bufferSize[1];
55 size_t nPoints = xSize*ySize;
57 for(
size_t iY = yStart;iY <= yEnd;iY++){
58 size_t yzIndex = iY*xSize;
59 for(
size_t iX = xStart;iX <= xEnd;iX++){
60 size_t xyzIndex = yzIndex + iX;
61 lmuPtr[xyzIndex] = beta*pow(temperatureBuffer[xyzIndex],power);
62 llambdaPtr[xyzIndex] = (bulkViscFac - 2.0/3.0)*lmuPtr[xyzIndex];
63 lkappaPtr[xyzIndex] = specificHeat*lmuPtr[xyzIndex]/prandtlNumber;
66 }
else if(numDim == 3) {
67 size_t xSize = bufferSize[0];
68 size_t ySize = bufferSize[1];
69 size_t zSize = bufferSize[2];
71 size_t xStart = regionInterval[0].first;
72 size_t xEnd = regionInterval[0].second;
73 size_t yStart = regionInterval[1].first;
74 size_t yEnd = regionInterval[1].second;
75 size_t zStart = regionInterval[2].first;
76 size_t zEnd = regionInterval[2].second;
78 size_t nPlane = xSize*ySize;
79 size_t nPoints = xSize*ySize*zSize;
81 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
82 size_t zIndex = iZ*nPlane;
83 for(
size_t iY = yStart;iY <= yEnd;iY++){
84 size_t yzIndex = iY*xSize+zIndex;
85 for(
size_t iX = xStart;iX <= xEnd;iX++){
86 size_t xyzIndex = yzIndex + iX;
87 lmuPtr[xyzIndex] = beta*pow(temperatureBuffer[xyzIndex],power);
88 llambdaPtr[xyzIndex] = (bulkViscFac - 2.0/3.0)*lmuPtr[xyzIndex];
89 lkappaPtr[xyzIndex] = specificHeat*lmuPtr[xyzIndex]/prandtlNumber;
99 const size_t *numPointsPtr,
101 const double *lrhoPtr,
102 const double *lrhoVPtr,
103 const double *lrhoEPtr,
104 double *lpressurePtr,
105 double *temperatureBuffer,
116 const std::vector<double> &gridMetrics,
119 const std::vector<double *> &tvBuffers,
120 const std::vector<double *> &velGradBuffers,
121 std::vector<double *> &tauBuffers)
124 int numDim = bufferSize.size();
129 double *lmuPtr = tvBuffers[0];
130 double *llambdaPtr = tvBuffers[1];
136 ReM1 *= gridJacobian[0];
140 size_t xStart = regionInterval[0].first;
141 size_t xEnd = regionInterval[0].second;
142 size_t xSize = bufferSize[0];
143 size_t nPoints = xSize;
145 double* ltau11Ptr = tauBuffers[0];
146 double* velGradData0 = velGradBuffers[0];
148 const double *ldudxiPtr = &velGradData0[0];
149 double dxidx = gridMetrics[0];
151 for(
size_t iX = xStart;iX <= xEnd;iX++){
152 size_t xyzIndex = iX;
153 double bulkTau = dxidx*ldudxiPtr[xyzIndex];
155 ltau11Ptr[xyzIndex] = ReM1*(2.0*lmuPtr[xyzIndex]*dxidx*ldudxiPtr[xyzIndex] +
156 llambdaPtr[xyzIndex]*bulkTau);
159 }
else if (numDim == 2){
161 size_t xStart = regionInterval[0].first;
162 size_t xEnd = regionInterval[0].second;
163 size_t yStart = regionInterval[1].first;
164 size_t yEnd = regionInterval[1].second;
166 size_t xSize = bufferSize[0];
167 size_t ySize = bufferSize[1];
168 size_t nPoints = xSize*ySize;
171 double* ltau11Ptr = tauBuffers[0];
172 double* ltau12Ptr = tauBuffers[1];
173 double* ltau22Ptr = tauBuffers[3];
175 double* velGradData0 = velGradBuffers[0];
176 double* velGradData1 = velGradBuffers[1];
178 const double *ldudxiPtr = &velGradData0[0];
179 const double *ldvdxiPtr = &velGradData0[nPoints];
180 const double *ldudetaPtr = &velGradData1[0];
181 const double *ldvdetaPtr = &velGradData1[nPoints];
183 double dxidx = gridMetrics[0];
184 double detady = gridMetrics[1];
186 for(
size_t iY = yStart;iY <= yEnd;iY++){
187 size_t yzIndex = iY*xSize;
188 for(
size_t iX = xStart;iX <= xEnd;iX++){
190 size_t xyzIndex = yzIndex + iX;
192 double dudx = ldudxiPtr[xyzIndex]*dxidx;
193 double dudy = ldudetaPtr[xyzIndex]*detady;
195 double dvdx = ldvdxiPtr[xyzIndex]*dxidx;
196 double dvdy = ldvdetaPtr[xyzIndex]*detady;
198 double bulkTau = dudx + dvdy;
200 ltau11Ptr[xyzIndex] = ReM1*(2.0*lmuPtr[xyzIndex]*dudx +
201 llambdaPtr[xyzIndex]*bulkTau);
203 ltau22Ptr[xyzIndex] = ReM1*(2.0*lmuPtr[xyzIndex]*dvdy +
204 llambdaPtr[xyzIndex]*bulkTau);
206 ltau12Ptr[xyzIndex] = ReM1*lmuPtr[xyzIndex]*(dudy + dvdx);
211 }
else if(numDim == 3) {
213 size_t xSize = bufferSize[0];
214 size_t ySize = bufferSize[1];
215 size_t zSize = bufferSize[2];
217 size_t xStart = regionInterval[0].first;
218 size_t xEnd = regionInterval[0].second;
219 size_t yStart = regionInterval[1].first;
220 size_t yEnd = regionInterval[1].second;
221 size_t zStart = regionInterval[2].first;
222 size_t zEnd = regionInterval[2].second;
224 size_t nPlane = xSize*ySize;
225 size_t nPoints = xSize*ySize*zSize;
228 double* ltau11Ptr = tauBuffers[0];
229 double* ltau12Ptr = tauBuffers[1];
230 double* ltau13Ptr = tauBuffers[2];
231 double* ltau22Ptr = tauBuffers[4];
232 double* ltau23Ptr = tauBuffers[5];
233 double* ltau33Ptr = tauBuffers[8];
235 double* velGradData0 = velGradBuffers[0];
236 double* velGradData1 = velGradBuffers[1];
237 double* velGradData2 = velGradBuffers[2];
239 const double* ldudxiPtr = &velGradData0[0];
240 const double* ldvdxiPtr = &velGradData0[nPoints];
241 const double* ldwdxiPtr = &velGradData0[2*nPoints];
242 const double* ldudetaPtr = &velGradData1[0];
243 const double* ldvdetaPtr = &velGradData1[nPoints];
244 const double* ldwdetaPtr = &velGradData1[2*nPoints];
245 const double* ldudzetaPtr = &velGradData2[0];
246 const double* ldvdzetaPtr = &velGradData2[nPoints];
247 const double* ldwdzetaPtr = &velGradData2[2*nPoints];
249 double dxidx = gridMetrics[0];
250 double detady = gridMetrics[1];
251 double dzetadz = gridMetrics[2];
253 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
254 size_t zIndex = iZ*nPlane;
255 for(
size_t iY = yStart;iY <= yEnd;iY++){
256 size_t yzIndex = iY*xSize+zIndex;
257 for(
size_t iX = xStart;iX <= xEnd;iX++){
258 size_t xyzIndex = yzIndex + iX;
260 double dudx = ldudxiPtr[xyzIndex]*dxidx;
261 double dvdx = ldvdxiPtr[xyzIndex]*dxidx;
262 double dwdx = ldwdxiPtr[xyzIndex]*dxidx;
264 double dudy = ldudetaPtr[xyzIndex]*detady;
265 double dvdy = ldvdetaPtr[xyzIndex]*detady;
266 double dwdy = ldwdetaPtr[xyzIndex]*detady;
268 double dudz = ldudzetaPtr[xyzIndex]*dzetadz;
269 double dvdz = ldvdzetaPtr[xyzIndex]*dzetadz;
270 double dwdz = ldwdzetaPtr[xyzIndex]*dzetadz;
272 double bulkTau = dudx + dvdy + dwdz;
274 ltau11Ptr[xyzIndex] = ReM1*(2.0*lmuPtr[xyzIndex]*dudx +
275 llambdaPtr[xyzIndex]*bulkTau);
276 ltau22Ptr[xyzIndex] = ReM1*(2.0*lmuPtr[xyzIndex]*dvdy +
277 llambdaPtr[xyzIndex]*bulkTau);
278 ltau33Ptr[xyzIndex] = ReM1*(2.0*lmuPtr[xyzIndex]*dwdz +
279 llambdaPtr[xyzIndex]*bulkTau);
281 ltau12Ptr[xyzIndex] = ReM1*lmuPtr[xyzIndex]*(dudy + dvdx);
282 ltau13Ptr[xyzIndex] = ReM1*lmuPtr[xyzIndex]*(dudz + dwdx);
283 ltau23Ptr[xyzIndex] = ReM1*lmuPtr[xyzIndex]*(dvdz + dwdy);
293 size_t xStart = regionInterval[0].first;
294 size_t xEnd = regionInterval[0].second;
295 size_t xSize = bufferSize[0];
296 size_t nPoints = xSize;
298 double* ltau11Ptr = tauBuffers[0];
299 double* velGradData0 = velGradBuffers[0];
300 const double *ldudxiPtr = &velGradData0[0];
302 for(
size_t iX = xStart;iX <= xEnd;iX++){
303 size_t xyzIndex = iX;
304 double dxidx = gridMetrics[xyzIndex];
305 double dudx = ldudxiPtr[xyzIndex]*dxidx;
306 double bulkTau = dudx;
309 ltau11Ptr[xyzIndex] = gridJacobian[xyzIndex]*ReM1*(2.0*lmuPtr[xyzIndex]*dudx +
310 llambdaPtr[xyzIndex]*bulkTau);
313 }
else if (numDim == 2){
315 size_t xStart = regionInterval[0].first;
316 size_t xEnd = regionInterval[0].second;
317 size_t yStart = regionInterval[1].first;
318 size_t yEnd = regionInterval[1].second;
320 size_t xSize = bufferSize[0];
321 size_t ySize = bufferSize[1];
322 size_t nPoints = xSize*ySize;
325 double* ltau11Ptr = tauBuffers[0];
326 double* ltau12Ptr = tauBuffers[1];
327 double* ltau22Ptr = tauBuffers[3];
329 double* velGradData0 = velGradBuffers[0];
330 double* velGradData1 = velGradBuffers[1];
332 const double *ldudxiPtr = &velGradData0[0];
333 const double *ldvdxiPtr = &velGradData0[nPoints];
334 const double *ldudetaPtr = &velGradData1[0];
335 const double *ldvdetaPtr = &velGradData1[nPoints];
337 for(
size_t iY = yStart;iY <= yEnd;iY++){
338 size_t yzIndex = iY*xSize;
339 for(
size_t iX = xStart;iX <= xEnd;iX++){
340 size_t xyzIndex = yzIndex + iX;
342 double dxidx = gridMetrics[xyzIndex];
343 double detady = gridMetrics[nPoints+xyzIndex];
346 double dudx = ldudxiPtr[xyzIndex]*dxidx;
347 double dudy = ldudetaPtr[xyzIndex]*detady;
348 double dvdx = ldvdxiPtr[xyzIndex]*dxidx;
349 double dvdy = ldvdetaPtr[xyzIndex]*detady;
351 double bulkTau = dudx + dvdy;
353 double fac = gridJacobian[xyzIndex]*ReM1;
355 ltau11Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dudx +
356 llambdaPtr[xyzIndex]*bulkTau);
357 ltau22Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dvdy +
358 llambdaPtr[xyzIndex]*bulkTau);
360 ltau12Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dudy + dvdx);
364 }
else if(numDim == 3) {
366 size_t xSize = bufferSize[0];
367 size_t ySize = bufferSize[1];
368 size_t zSize = bufferSize[2];
370 size_t xStart = regionInterval[0].first;
371 size_t xEnd = regionInterval[0].second;
372 size_t yStart = regionInterval[1].first;
373 size_t yEnd = regionInterval[1].second;
374 size_t zStart = regionInterval[2].first;
375 size_t zEnd = regionInterval[2].second;
377 size_t nPlane = xSize*ySize;
378 size_t nPoints = xSize*ySize*zSize;
381 double* ltau11Ptr = tauBuffers[0];
382 double* ltau12Ptr = tauBuffers[1];
383 double* ltau13Ptr = tauBuffers[2];
384 double* ltau22Ptr = tauBuffers[4];
385 double* ltau23Ptr = tauBuffers[5];
386 double* ltau33Ptr = tauBuffers[8];
388 double* velGradData0 = velGradBuffers[0];
389 double* velGradData1 = velGradBuffers[1];
390 double* velGradData2 = velGradBuffers[2];
392 const double* ldudxiPtr = &velGradData0[0];
393 const double* ldvdxiPtr = &velGradData0[nPoints];
394 const double* ldwdxiPtr = &velGradData0[2*nPoints];
395 const double* ldudetaPtr = &velGradData1[0];
396 const double* ldvdetaPtr = &velGradData1[nPoints];
397 const double* ldwdetaPtr = &velGradData1[2*nPoints];
398 const double* ldudzetaPtr = &velGradData2[0];
399 const double* ldvdzetaPtr = &velGradData2[nPoints];
400 const double* ldwdzetaPtr = &velGradData2[2*nPoints];
402 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
403 size_t zIndex = iZ*nPlane;
404 for(
size_t iY = yStart;iY <= yEnd;iY++){
405 size_t yzIndex = iY*xSize+zIndex;
406 for(
size_t iX = xStart;iX <= xEnd;iX++){
407 size_t xyzIndex = yzIndex + iX;
409 double dxidx = gridMetrics[xyzIndex];
410 double detady = gridMetrics[nPoints+xyzIndex];
411 double dzetadz = gridMetrics[2*nPoints+xyzIndex];
414 double dudx = ldudxiPtr[xyzIndex]*dxidx;
415 double dudy = ldudetaPtr[xyzIndex]*detady;
416 double dudz = ldudzetaPtr[xyzIndex]*dzetadz;
418 double dvdx = ldvdxiPtr[xyzIndex]*dxidx;
419 double dvdy = ldvdetaPtr[xyzIndex]*detady;
420 double dvdz = ldvdzetaPtr[xyzIndex]*dzetadz;
422 double dwdx = ldwdxiPtr[xyzIndex]*dxidx;
423 double dwdy = ldwdetaPtr[xyzIndex]*detady;
424 double dwdz = ldwdzetaPtr[xyzIndex]*dzetadz;
426 double bulkTau = dudx + dvdy + dwdz;
428 double fac = ReM1*gridJacobian[xyzIndex];
430 ltau11Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dudx +
431 llambdaPtr[xyzIndex]*bulkTau);
432 ltau22Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dvdy +
433 llambdaPtr[xyzIndex]*bulkTau);
434 ltau33Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dwdz +
435 llambdaPtr[xyzIndex]*bulkTau);
437 ltau12Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dudy + dvdx);
438 ltau13Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dudz + dwdx);
439 ltau23Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dvdz + dwdy);
449 size_t xStart = regionInterval[0].first;
450 size_t xEnd = regionInterval[0].second;
451 size_t yStart = regionInterval[1].first;
452 size_t yEnd = regionInterval[1].second;
454 size_t xSize = bufferSize[0];
455 size_t ySize = bufferSize[1];
456 size_t nPoints = xSize*ySize;
459 double* ltau11Ptr = tauBuffers[0];
460 double* ltau12Ptr = tauBuffers[1];
461 double* ltau22Ptr = tauBuffers[3];
463 double* velGradData0 = velGradBuffers[0];
464 double* velGradData1 = velGradBuffers[1];
466 const double *ldudxiPtr = &velGradData0[0];
467 const double *ldvdxiPtr = &velGradData0[nPoints];
468 const double *ldudetaPtr = &velGradData1[0];
469 const double *ldvdetaPtr = &velGradData1[nPoints];
471 const size_t offset1 = nPoints;
472 const size_t offset2 = 2*nPoints;
473 const size_t offset3 = 3*nPoints;
475 for(
size_t iY = yStart;iY <= yEnd;iY++){
476 size_t yzIndex = iY*xSize;
477 for(
size_t iX = xStart;iX <= xEnd;iX++){
478 size_t xyzIndex = yzIndex + iX;
480 double dxidx = gridMetrics[xyzIndex];
481 double dxidy = gridMetrics[offset1+xyzIndex];
483 double detadx = gridMetrics[offset2+xyzIndex];
484 double detady = gridMetrics[offset3+xyzIndex];
486 double dudx = dxidx*ldudxiPtr[xyzIndex] + detadx*ldudetaPtr[xyzIndex];
487 double dudy = dxidy*ldudxiPtr[xyzIndex] + detady*ldudetaPtr[xyzIndex];
489 double dvdx = dxidx*ldvdxiPtr[xyzIndex] + detadx*ldvdetaPtr[xyzIndex];
490 double dvdy = dxidy*ldvdxiPtr[xyzIndex] + detady*ldvdetaPtr[xyzIndex];
492 double bulkTau = dudx + dvdy;
494 double fac = ReM1*gridJacobian[xyzIndex];
496 ltau11Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dudx + llambdaPtr[xyzIndex]*bulkTau);
497 ltau22Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dvdy + llambdaPtr[xyzIndex]*bulkTau);
498 ltau12Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dudy+dvdx);
502 }
else if(numDim == 3) {
504 size_t xSize = bufferSize[0];
505 size_t ySize = bufferSize[1];
506 size_t zSize = bufferSize[2];
508 size_t xStart = regionInterval[0].first;
509 size_t xEnd = regionInterval[0].second;
510 size_t yStart = regionInterval[1].first;
511 size_t yEnd = regionInterval[1].second;
512 size_t zStart = regionInterval[2].first;
513 size_t zEnd = regionInterval[2].second;
515 size_t nPlane = xSize*ySize;
516 size_t nPoints = xSize*ySize*zSize;
518 size_t offset1 = nPoints;
519 size_t offset2 = 2*nPoints;
520 size_t offset3 = 3*nPoints;
521 size_t offset4 = 4*nPoints;
522 size_t offset5 = 5*nPoints;
523 size_t offset6 = 6*nPoints;
524 size_t offset7 = 7*nPoints;
525 size_t offset8 = 8*nPoints;
528 double* ltau11Ptr = tauBuffers[0];
529 double* ltau12Ptr = tauBuffers[1];
530 double* ltau13Ptr = tauBuffers[2];
531 double* ltau22Ptr = tauBuffers[4];
532 double* ltau23Ptr = tauBuffers[5];
533 double* ltau33Ptr = tauBuffers[8];
535 double* velGradData0 = velGradBuffers[0];
536 double* velGradData1 = velGradBuffers[1];
537 double* velGradData2 = velGradBuffers[2];
539 const double* ldudxiPtr = &velGradData0[0];
540 const double* ldvdxiPtr = &velGradData0[offset1];
541 const double* ldwdxiPtr = &velGradData0[offset2];
542 const double* ldudetaPtr = &velGradData1[0];
543 const double* ldvdetaPtr = &velGradData1[offset1];
544 const double* ldwdetaPtr = &velGradData1[offset2];
545 const double* ldudzetaPtr = &velGradData2[0];
546 const double* ldvdzetaPtr = &velGradData2[offset1];
547 const double* ldwdzetaPtr = &velGradData2[offset2];
549 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
550 size_t zIndex = iZ*nPlane;
551 for(
size_t iY = yStart;iY <= yEnd;iY++){
552 size_t yzIndex = iY*xSize+zIndex;
553 for(
size_t iX = xStart;iX <= xEnd;iX++){
554 size_t xyzIndex = yzIndex + iX;
556 double dxidx = gridMetrics[xyzIndex];
557 double dxidy = gridMetrics[offset1+xyzIndex];
558 double dxidz = gridMetrics[offset2+xyzIndex];
560 double detadx = gridMetrics[offset3+xyzIndex];
561 double detady = gridMetrics[offset4+xyzIndex];
562 double detadz = gridMetrics[offset5+xyzIndex];
564 double dzetadx = gridMetrics[offset6+xyzIndex];
565 double dzetady = gridMetrics[offset7+xyzIndex];
566 double dzetadz = gridMetrics[offset8+xyzIndex];
570 double dudx = (dxidx*ldudxiPtr[xyzIndex] +
571 detadx*ldudetaPtr[xyzIndex] +
572 dzetadx*ldudzetaPtr[xyzIndex]);
573 double dudy = (dxidy*ldudxiPtr[xyzIndex] +
574 detady*ldudetaPtr[xyzIndex] +
575 dzetady*ldudzetaPtr[xyzIndex]);
576 double dudz = (dxidz*ldudxiPtr[xyzIndex] +
577 detadz*ldudetaPtr[xyzIndex] +
578 dzetadz*ldudzetaPtr[xyzIndex]);
580 double dvdx = (dxidx*ldvdxiPtr[xyzIndex] +
581 detadx*ldvdetaPtr[xyzIndex] +
582 dzetadx*ldvdzetaPtr[xyzIndex]);
583 double dvdy = (dxidy*ldvdxiPtr[xyzIndex] +
584 detady*ldvdetaPtr[xyzIndex] +
585 dzetady*ldvdzetaPtr[xyzIndex]);
586 double dvdz = (dxidz*ldvdxiPtr[xyzIndex] +
587 detadz*ldvdetaPtr[xyzIndex] +
588 dzetadz*ldvdzetaPtr[xyzIndex]);
590 double dwdx = (dxidx*ldwdxiPtr[xyzIndex] +
591 detadx*ldwdetaPtr[xyzIndex] +
592 dzetadx*ldwdzetaPtr[xyzIndex]);
593 double dwdy = (dxidy*ldwdxiPtr[xyzIndex] +
594 detady*ldwdetaPtr[xyzIndex] +
595 dzetady*ldwdzetaPtr[xyzIndex]);
596 double dwdz = (dxidz*ldwdxiPtr[xyzIndex] +
597 detadz*ldwdetaPtr[xyzIndex] +
598 dzetadz*ldwdzetaPtr[xyzIndex]);
600 double bulkTau = dudx + dvdy + dwdz;
602 double fac = gridJacobian[xyzIndex] * ReM1;
604 ltau11Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dudx +
605 llambdaPtr[xyzIndex]*bulkTau);
607 ltau22Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dvdy +
608 llambdaPtr[xyzIndex]*bulkTau);
610 ltau33Ptr[xyzIndex] = fac*(2.0*lmuPtr[xyzIndex]*dwdz +
611 llambdaPtr[xyzIndex]*bulkTau);
613 ltau12Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dudy + dvdx);
614 ltau13Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dudz + dwdx);
615 ltau23Ptr[xyzIndex] = fac*lmuPtr[xyzIndex]*(dvdz + dwdy);
630 const std::vector<double> &gridMetrics,
633 const std::vector<double *> &tvBuffers,
634 const std::vector<double *> &temperatureGradBuffers,
635 std::vector<double *> &heatFluxBuffers)
637 int numDim = bufferSize.size();
642 double *lmuPtr = tvBuffers[0];
643 double *llambdaPtr = tvBuffers[1];
644 double *lkappaPtr = tvBuffers[2];
654 const double *gradTxi = temperatureGradBuffers[0];
656 double dXidX = gridMetrics[0];
658 ReM1 *= jacobianDeterminant*dXidX;
660 size_t xStart = regionInterval[0].first;
661 size_t xEnd = regionInterval[0].second;
662 size_t xSize = bufferSize[0];
663 size_t nPoints = xSize;
665 for(
size_t iX = xStart;iX <= xEnd;iX++){
666 size_t xyzIndex = iX;
667 heatFluxBuffers[0][xyzIndex] = lkappaPtr[xyzIndex]*ReM1*gradTxi[xyzIndex];
670 }
else if (numDim == 2){
672 double dXidX = gridMetrics[0];
673 double dEtadY = gridMetrics[1];
675 const double *gradTxi = temperatureGradBuffers[0];
676 const double *gradTeta = temperatureGradBuffers[1];
680 size_t xStart = regionInterval[0].first;
681 size_t xEnd = regionInterval[0].second;
682 size_t yStart = regionInterval[1].first;
683 size_t yEnd = regionInterval[1].second;
685 size_t xSize = bufferSize[0];
686 size_t ySize = bufferSize[1];
687 size_t nPoints = xSize*ySize;
689 for(
size_t iY = yStart;iY <= yEnd;iY++){
690 size_t yzIndex = iY*xSize;
691 for(
size_t iX = xStart;iX <= xEnd;iX++){
692 size_t xyzIndex = yzIndex + iX;
693 double fac = lkappaPtr[xyzIndex]*ReM1;
695 heatFluxBuffers[0][xyzIndex] = fac*dXidX*gradTxi[xyzIndex];
696 heatFluxBuffers[1][xyzIndex] = fac*dEtadY*gradTeta[xyzIndex];
700 }
else if(numDim == 3) {
702 double dXidX = gridMetrics[0];
703 double dEtadY = gridMetrics[1];
704 double dZetadZ = gridMetrics[2];
706 const double *gradTxi = temperatureGradBuffers[0];
707 const double *gradTeta = temperatureGradBuffers[1];
708 const double *gradTzeta = temperatureGradBuffers[2];
712 size_t xSize = bufferSize[0];
713 size_t ySize = bufferSize[1];
714 size_t zSize = bufferSize[2];
716 size_t xStart = regionInterval[0].first;
717 size_t xEnd = regionInterval[0].second;
718 size_t yStart = regionInterval[1].first;
719 size_t yEnd = regionInterval[1].second;
720 size_t zStart = regionInterval[2].first;
721 size_t zEnd = regionInterval[2].second;
723 size_t nPlane = xSize*ySize;
724 size_t nPoints = xSize*ySize*zSize;
726 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
727 size_t zIndex = iZ*nPlane;
728 for(
size_t iY = yStart;iY <= yEnd;iY++){
729 size_t yzIndex = iY*xSize+zIndex;
730 for(
size_t iX = xStart;iX <= xEnd;iX++){
731 size_t xyzIndex = yzIndex + iX;
732 double fac = lkappaPtr[xyzIndex]*ReM1;
733 heatFluxBuffers[0][xyzIndex] = fac*dXidX*gradTxi[xyzIndex];
734 heatFluxBuffers[1][xyzIndex] = fac*dEtadY*gradTeta[xyzIndex];
735 heatFluxBuffers[2][xyzIndex] = fac*dZetadZ*gradTzeta[xyzIndex];
746 const double *gradTxi = temperatureGradBuffers[0];
748 size_t xStart = regionInterval[0].first;
749 size_t xEnd = regionInterval[0].second;
750 size_t xSize = bufferSize[0];
751 size_t nPoints = xSize;
754 for(
size_t iX = xStart;iX <= xEnd;iX++){
755 size_t xyzIndex = iX;
756 heatFluxBuffers[0][xyzIndex] = lkappaPtr[xyzIndex]*ReM1*
757 gridJacobian[xyzIndex]*gridMetrics[xyzIndex]*gradTxi[xyzIndex];
760 }
else if (numDim == 2){
762 const double *gradTxi = temperatureGradBuffers[0];
763 const double *gradTeta = temperatureGradBuffers[1];
765 size_t xStart = regionInterval[0].first;
766 size_t xEnd = regionInterval[0].second;
767 size_t yStart = regionInterval[1].first;
768 size_t yEnd = regionInterval[1].second;
770 size_t xSize = bufferSize[0];
771 size_t ySize = bufferSize[1];
772 size_t nPoints = xSize*ySize;
774 for(
size_t iY = yStart;iY <= yEnd;iY++){
775 size_t yzIndex = iY*xSize;
776 for(
size_t iX = xStart;iX <= xEnd;iX++){
777 size_t xyzIndex = yzIndex + iX;
779 double dXidX = gridMetrics[xyzIndex];
780 double dEtadY = gridMetrics[xyzIndex+nPoints];
782 double fac = gridJacobian[xyzIndex]*lkappaPtr[xyzIndex]*ReM1;
784 heatFluxBuffers[0][xyzIndex] = fac*dXidX*gradTxi[xyzIndex];
785 heatFluxBuffers[1][xyzIndex] = fac*dEtadY*gradTeta[xyzIndex];
789 }
else if(numDim == 3) {
791 const double *gradTxi = temperatureGradBuffers[0];
792 const double *gradTeta = temperatureGradBuffers[1];
793 const double *gradTzeta = temperatureGradBuffers[2];
795 size_t xSize = bufferSize[0];
796 size_t ySize = bufferSize[1];
797 size_t zSize = bufferSize[2];
799 size_t xStart = regionInterval[0].first;
800 size_t xEnd = regionInterval[0].second;
801 size_t yStart = regionInterval[1].first;
802 size_t yEnd = regionInterval[1].second;
803 size_t zStart = regionInterval[2].first;
804 size_t zEnd = regionInterval[2].second;
806 size_t nPlane = xSize*ySize;
807 size_t nPoints = xSize*ySize*zSize;
809 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
810 size_t zIndex = iZ*nPlane;
811 for(
size_t iY = yStart;iY <= yEnd;iY++){
812 size_t yzIndex = iY*xSize+zIndex;
813 for(
size_t iX = xStart;iX <= xEnd;iX++){
814 size_t xyzIndex = yzIndex + iX;
816 double dXidX = gridMetrics[xyzIndex];
817 double dEtadY = gridMetrics[xyzIndex+nPoints];
818 double dZetadZ = gridMetrics[xyzIndex+2*nPoints];
820 double fac = gridJacobian[xyzIndex]*lkappaPtr[xyzIndex]*ReM1;
822 heatFluxBuffers[0][xyzIndex] = fac*dXidX*gradTxi[xyzIndex];
823 heatFluxBuffers[1][xyzIndex] = fac*dEtadY*gradTeta[xyzIndex];
824 heatFluxBuffers[2][xyzIndex] = fac*dZetadZ*gradTzeta[xyzIndex];
834 const double *gradTxi = temperatureGradBuffers[0];
835 const double *gradTeta = temperatureGradBuffers[1];
837 size_t xStart = regionInterval[0].first;
838 size_t xEnd = regionInterval[0].second;
839 size_t yStart = regionInterval[1].first;
840 size_t yEnd = regionInterval[1].second;
842 size_t xSize = bufferSize[0];
843 size_t ySize = bufferSize[1];
844 size_t nPoints = xSize*ySize;
846 const double *dXidX = &gridMetrics[0];
847 const double *dXidY = &gridMetrics[nPoints];
848 const double *dEtadX = &gridMetrics[2*nPoints];
849 const double *dEtadY = &gridMetrics[3*nPoints];
851 for(
size_t iY = yStart;iY <= yEnd;iY++){
852 size_t yzIndex = iY*xSize;
853 for(
size_t iX = xStart;iX <= xEnd;iX++){
854 size_t xyzIndex = yzIndex + iX;
856 double dxidx = dXidX[xyzIndex];
857 double dxidy = dXidY[xyzIndex];
858 double detadx = dEtadX[xyzIndex];
859 double detady = dEtadY[xyzIndex];
861 double fac = lkappaPtr[xyzIndex]*ReM1*gridJacobian[xyzIndex];
863 heatFluxBuffers[0][xyzIndex] = fac*(dxidx*gradTxi[xyzIndex] +
864 detadx*gradTeta[xyzIndex]);
865 heatFluxBuffers[1][xyzIndex] = fac*(detady*gradTeta[xyzIndex] +
866 dxidy*gradTxi[xyzIndex]);
870 }
else if(numDim == 3) {
872 const double *gradTxi = temperatureGradBuffers[0];
873 const double *gradTeta = temperatureGradBuffers[1];
874 const double *gradTzeta = temperatureGradBuffers[2];
876 size_t xSize = bufferSize[0];
877 size_t ySize = bufferSize[1];
878 size_t zSize = bufferSize[2];
880 size_t xStart = regionInterval[0].first;
881 size_t xEnd = regionInterval[0].second;
882 size_t yStart = regionInterval[1].first;
883 size_t yEnd = regionInterval[1].second;
884 size_t zStart = regionInterval[2].first;
885 size_t zEnd = regionInterval[2].second;
887 size_t nPlane = xSize*ySize;
888 size_t nPoints = xSize*ySize*zSize;
890 const double *dXidX = &gridMetrics[0];
891 const double *dXidY = &gridMetrics[nPoints];
892 const double *dXidZ = &gridMetrics[2*nPoints];
893 const double *dEtadX = &gridMetrics[3*nPoints];
894 const double *dEtadY = &gridMetrics[4*nPoints];
895 const double *dEtadZ = &gridMetrics[5*nPoints];
896 const double *dZetadX = &gridMetrics[6*nPoints];
897 const double *dZetadY = &gridMetrics[7*nPoints];
898 const double *dZetadZ = &gridMetrics[8*nPoints];
900 for(
size_t iZ = zStart;iZ <= zEnd;iZ++){
901 size_t zIndex = iZ*nPlane;
902 for(
size_t iY = yStart;iY <= yEnd;iY++){
903 size_t yzIndex = iY*xSize+zIndex;
904 for(
size_t iX = xStart;iX <= xEnd;iX++){
905 size_t xyzIndex = yzIndex + iX;
908 double dxidx = dXidX[xyzIndex];
909 double dxidy = dXidY[xyzIndex];
910 double dxidz = dXidZ[xyzIndex];
912 double detadx = dEtadX[xyzIndex];
913 double detady = dEtadY[xyzIndex];
914 double detadz = dEtadZ[xyzIndex];
916 double dzetadx = dZetadX[xyzIndex];
917 double dzetady = dZetadY[xyzIndex];
918 double dzetadz = dZetadZ[xyzIndex];
920 double fac = lkappaPtr[xyzIndex]*ReM1*gridJacobian[xyzIndex];
923 heatFluxBuffers[0][xyzIndex] = fac*(dxidx*gradTxi[xyzIndex] +
924 detadx*gradTeta[xyzIndex] +
925 dzetadx*gradTzeta[xyzIndex]);
926 heatFluxBuffers[1][xyzIndex] = fac*(dxidy*gradTxi[xyzIndex] +
927 detady*gradTeta[xyzIndex] +
928 dzetady*gradTzeta[xyzIndex]);
929 heatFluxBuffers[2][xyzIndex] = fac*(dxidz*gradTxi[xyzIndex] +
930 detadz*gradTeta[xyzIndex] +
931 dzetadz*gradTzeta[xyzIndex]);
int ComputeTauBuffer(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSize, int gridType, const std::vector< double > &gridMetrics, const std::vector< double > &gridJacobian, const double &Re, const std::vector< double *> &tvBuffers, const std::vector< double *> &velGradBuffers, std::vector< double *> &tauBuffers)
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
int ComputeHeatFluxBuffer(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSize, int gridType, const std::vector< double > &gridMetrics, const std::vector< double > &gridJacobian, const double &Re, const std::vector< double *> &tvBuffers, const std::vector< double *> &temperatureGradBuffers, std::vector< double *> &heatFluxBuffers)
void const size_t const size_t const size_t const int const int * gridType
void size_t size_t int size_t size_t size_t size_t int double double * jacobianDeterminant
int ComputeTVBuffer(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)
int ComputeTVBufferPower(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSize, const double *temperatureBuffer, std::vector< double *> &tvBuffer, const double beta, const double power, const double bulkViscFac, const double specificHeat, const double prandtlNumber)
Compute transport coefficients using the power law.
void const size_t const size_t const size_t const int const double * gridJacobian
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.