diff --git a/src/GksGpu/CellUpdate/CellUpdate.cu b/src/GksGpu/CellUpdate/CellUpdate.cu index 8efa45c2bfd0d3f25b18d2088cf67c49aecc4caf..9ffa939367d01e9fbba819189eae5e2b4ac05b30 100644 --- a/src/GksGpu/CellUpdate/CellUpdate.cu +++ b/src/GksGpu/CellUpdate/CellUpdate.cu @@ -264,7 +264,7 @@ __host__ __device__ inline void cellUpdateFunction(DataBaseStruct dataBase, Para dataBase.data[RHO_S_1(cellIndex, dataBase.numberOfCells)] = Z1 * updatedConserved.rho; dataBase.data[RHO_S_2(cellIndex, dataBase.numberOfCells)] = Z2 * updatedConserved.rho; - dataBase.data[RHO_E(cellIndex, dataBase.numberOfCells)] = updatedConserved.rhoE + releasedHeat; + dataBase.data[RHO_E(cellIndex, dataBase.numberOfCells)] = updatedConserved.rhoE + releasedHeat; } } } diff --git a/src/GksGpu/FlowStateData/FlowStateData.cuh b/src/GksGpu/FlowStateData/FlowStateData.cuh index fcfdeb541e4678be0e1a367d2a88be4beed3be5f..907a3ca3146f8586f3e8f7a3dcfb593aab01e68f 100644 --- a/src/GksGpu/FlowStateData/FlowStateData.cuh +++ b/src/GksGpu/FlowStateData/FlowStateData.cuh @@ -125,5 +125,129 @@ struct ConservedVariables ////////////////////////////////////////////////////////////////////////// }; +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +__host__ __device__ inline PrimitiveVariables operator+ ( const PrimitiveVariables& left, const PrimitiveVariables& right ) +{ + PrimitiveVariables result; + + result.rho = left.rho + right.rho ; + result.U = left.U + right.U ; + result.V = left.V + right.V ; + result.W = left.W + right.W ; + result.lambda = left.lambda + right.lambda; + +#ifdef USE_PASSIVE_SCALAR + result.S_1 = left.S_1 + right.S_1 ; + result.S_2 = left.S_2 + right.S_2 ; +#endif + + return result; +} + +__host__ __device__ inline ConservedVariables operator+ ( const ConservedVariables& left, const ConservedVariables& right ) +{ + ConservedVariables result; + + result.rho = left.rho + right.rho ; + result.rhoU = left.rhoU + right.rhoU ; + result.rhoV = left.rhoV + right.rhoV ; + result.rhoW = left.rhoW + right.rhoW ; + result.rhoE = left.rhoE + right.rhoE ; + +#ifdef USE_PASSIVE_SCALAR + result.rhoS_1 = left.rhoS_1 + right.rhoS_1; + result.rhoS_2 = left.rhoS_2 + right.rhoS_2; +#endif + + return result; +} + +////////////////////////////////////////////////////////////////////////// + +__host__ __device__ inline PrimitiveVariables operator- ( const PrimitiveVariables& left, const PrimitiveVariables& right ) +{ + PrimitiveVariables result; + + result.rho = left.rho - right.rho ; + result.U = left.U - right.U ; + result.V = left.V - right.V ; + result.W = left.W - right.W ; + result.lambda = left.lambda - right.lambda; + +#ifdef USE_PASSIVE_SCALAR + result.S_1 = left.S_1 - right.S_1 ; + result.S_2 = left.S_2 - right.S_2 ; +#endif + + return result; +} + +__host__ __device__ inline ConservedVariables operator- ( const ConservedVariables& left, const ConservedVariables& right ) +{ + ConservedVariables result; + + result.rho = left.rho - right.rho ; + result.rhoU = left.rhoU - right.rhoU ; + result.rhoV = left.rhoV - right.rhoV ; + result.rhoW = left.rhoW - right.rhoW ; + result.rhoE = left.rhoE - right.rhoE ; + +#ifdef USE_PASSIVE_SCALAR + result.rhoS_1 = left.rhoS_1 - right.rhoS_1; + result.rhoS_2 = left.rhoS_2 - right.rhoS_2; +#endif + + return result; +} + +////////////////////////////////////////////////////////////////////////// + +__host__ __device__ inline PrimitiveVariables operator* ( const real left, const PrimitiveVariables& right ) +{ + PrimitiveVariables result; + + result.rho = left * right.rho ; + result.U = left * right.U ; + result.V = left * right.V ; + result.W = left * right.W ; + result.lambda = left * right.lambda; + +#ifdef USE_PASSIVE_SCALAR + result.S_1 = left * right.S_1 ; + result.S_2 = left * right.S_2 ; +#endif + + return result; +} + +__host__ __device__ inline ConservedVariables operator* ( const real left, const ConservedVariables& right ) +{ + ConservedVariables result; + + result.rho = left * right.rho ; + result.rhoU = left * right.rhoU ; + result.rhoV = left * right.rhoV ; + result.rhoW = left * right.rhoW ; + result.rhoE = left * right.rhoE ; + +#ifdef USE_PASSIVE_SCALAR + result.rhoS_1 = left * right.rhoS_1; + result.rhoS_2 = left * right.rhoS_2; +#endif + + return result; +} + #endif diff --git a/src/GksGpu/Interface/CoarseToFineKernel.cu b/src/GksGpu/Interface/CoarseToFineKernel.cu index c43f0370a333386474923e361aea267d9a001b5a..5f7d2d36b269f33262362a9cea21ab126e1bfa16 100644 --- a/src/GksGpu/Interface/CoarseToFineKernel.cu +++ b/src/GksGpu/Interface/CoarseToFineKernel.cu @@ -9,6 +9,9 @@ #include "DataBase/DataBaseStruct.h" #include "FlowStateData/FlowStateData.cuh" +#include "FlowStateData/FlowStateDataConversion.cuh" + +#include "FlowStateData/AccessDeviceData.cuh" #include "Definitions/PassiveScalar.h" #include "Definitions/MemoryAccessPattern.h" @@ -19,7 +22,8 @@ __global__ void coarseToFineKernel ( DataBaseStruct dataBase, uint startIndex, uint numberOfEntities ); -__host__ __device__ inline void coarseToFineFunction( DataBaseStruct dataBase, uint startIndex, uint index ); +__host__ __device__ inline void coarseToFineFunction ( DataBaseStruct dataBase, uint startIndex, uint index ); +__host__ __device__ inline void coarseToFineFunctionPrimitiveInterpolation( DataBaseStruct dataBase, uint startIndex, uint index ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -51,8 +55,213 @@ __global__ void coarseToFineKernel( DataBaseStruct dataBase, uint startIndex, ui if( index >= numberOfEntities ) return; coarseToFineFunction( dataBase, startIndex, index ); + //coarseToFineFunctionPrimitiveInterpolation( dataBase, startIndex, index ); } +//__host__ __device__ inline void coarseToFineFunction( DataBaseStruct dataBase, uint startIndex, uint index ) +//{ +// index += startIndex; +// +// uint cellIndex = dataBase.coarseToFine[ COARSE_TO_FINE( index, 0, dataBase.numberOfFineGhostCells ) ]; +// +// uint cellToCell [6]; +// +// cellToCell[0] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 0, dataBase.numberOfCells ) ]; +// cellToCell[1] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 1, dataBase.numberOfCells ) ]; +// cellToCell[2] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 2, dataBase.numberOfCells ) ]; +// cellToCell[3] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 3, dataBase.numberOfCells ) ]; +// cellToCell[4] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 4, dataBase.numberOfCells ) ]; +// cellToCell[5] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 5, dataBase.numberOfCells ) ]; +// +// ConservedVariables childCons [8]; +// +// { +// real data [7]; +// +// data[0] = dataBase.data[ RHO__(cellToCell[0], dataBase.numberOfCells) ]; +// data[1] = dataBase.data[ RHO__(cellToCell[1], dataBase.numberOfCells) ]; +// data[2] = dataBase.data[ RHO__(cellToCell[2], dataBase.numberOfCells) ]; +// data[3] = dataBase.data[ RHO__(cellToCell[3], dataBase.numberOfCells) ]; +// data[4] = dataBase.data[ RHO__(cellToCell[4], dataBase.numberOfCells) ]; +// data[5] = dataBase.data[ RHO__(cellToCell[5], dataBase.numberOfCells) ]; +// data[6] = dataBase.data[ RHO__(cellIndex , dataBase.numberOfCells) ]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rho = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ +// childCons[1].rho = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ +// childCons[2].rho = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ +// childCons[3].rho = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ +// childCons[4].rho = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ +// childCons[5].rho = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ +// childCons[6].rho = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ +// childCons[7].rho = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ +// } +// +// { +// real data [7]; +// +// data[0] = dataBase.data[ RHO_U(cellToCell[0], dataBase.numberOfCells) ]; +// data[1] = dataBase.data[ RHO_U(cellToCell[1], dataBase.numberOfCells) ]; +// data[2] = dataBase.data[ RHO_U(cellToCell[2], dataBase.numberOfCells) ]; +// data[3] = dataBase.data[ RHO_U(cellToCell[3], dataBase.numberOfCells) ]; +// data[4] = dataBase.data[ RHO_U(cellToCell[4], dataBase.numberOfCells) ]; +// data[5] = dataBase.data[ RHO_U(cellToCell[5], dataBase.numberOfCells) ]; +// data[6] = dataBase.data[ RHO_U(cellIndex , dataBase.numberOfCells) ]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rhoU = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ +// childCons[1].rhoU = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ +// childCons[2].rhoU = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ +// childCons[3].rhoU = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ +// childCons[4].rhoU = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ +// childCons[5].rhoU = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ +// childCons[6].rhoU = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ +// childCons[7].rhoU = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ +// } +// +// { +// real data [7]; +// +// data[0] = dataBase.data[ RHO_V(cellToCell[0], dataBase.numberOfCells) ]; +// data[1] = dataBase.data[ RHO_V(cellToCell[1], dataBase.numberOfCells) ]; +// data[2] = dataBase.data[ RHO_V(cellToCell[2], dataBase.numberOfCells) ]; +// data[3] = dataBase.data[ RHO_V(cellToCell[3], dataBase.numberOfCells) ]; +// data[4] = dataBase.data[ RHO_V(cellToCell[4], dataBase.numberOfCells) ]; +// data[5] = dataBase.data[ RHO_V(cellToCell[5], dataBase.numberOfCells) ]; +// data[6] = dataBase.data[ RHO_V(cellIndex , dataBase.numberOfCells) ]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rhoV = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ +// childCons[1].rhoV = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ +// childCons[2].rhoV = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ +// childCons[3].rhoV = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ +// childCons[4].rhoV = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ +// childCons[5].rhoV = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ +// childCons[6].rhoV = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ +// childCons[7].rhoV = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ +// } +// +// { +// real data [7]; +// +// data[0] = dataBase.data[ RHO_W(cellToCell[0], dataBase.numberOfCells) ]; +// data[1] = dataBase.data[ RHO_W(cellToCell[1], dataBase.numberOfCells) ]; +// data[2] = dataBase.data[ RHO_W(cellToCell[2], dataBase.numberOfCells) ]; +// data[3] = dataBase.data[ RHO_W(cellToCell[3], dataBase.numberOfCells) ]; +// data[4] = dataBase.data[ RHO_W(cellToCell[4], dataBase.numberOfCells) ]; +// data[5] = dataBase.data[ RHO_W(cellToCell[5], dataBase.numberOfCells) ]; +// data[6] = dataBase.data[ RHO_W(cellIndex , dataBase.numberOfCells) ]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rhoW = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ +// childCons[1].rhoW = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ +// childCons[2].rhoW = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ +// childCons[3].rhoW = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ +// childCons[4].rhoW = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ +// childCons[5].rhoW = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ +// childCons[6].rhoW = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ +// childCons[7].rhoW = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ +// } +// +// { +// real data [7]; +// +// data[0] = dataBase.data[ RHO_E(cellToCell[0], dataBase.numberOfCells) ]; +// data[1] = dataBase.data[ RHO_E(cellToCell[1], dataBase.numberOfCells) ]; +// data[2] = dataBase.data[ RHO_E(cellToCell[2], dataBase.numberOfCells) ]; +// data[3] = dataBase.data[ RHO_E(cellToCell[3], dataBase.numberOfCells) ]; +// data[4] = dataBase.data[ RHO_E(cellToCell[4], dataBase.numberOfCells) ]; +// data[5] = dataBase.data[ RHO_E(cellToCell[5], dataBase.numberOfCells) ]; +// data[6] = dataBase.data[ RHO_E(cellIndex , dataBase.numberOfCells) ]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rhoE = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ +// childCons[1].rhoE = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ +// childCons[2].rhoE = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ +// childCons[3].rhoE = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ +// childCons[4].rhoE = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ +// childCons[5].rhoE = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ +// childCons[6].rhoE = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ +// childCons[7].rhoE = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ +// } +// +// #ifdef USE_PASSIVE_SCALAR +// { +// { +// real data[7]; +// +// data[0] = dataBase.data[RHO_S_1(cellToCell[0], dataBase.numberOfCells)]; +// data[1] = dataBase.data[RHO_S_1(cellToCell[1], dataBase.numberOfCells)]; +// data[2] = dataBase.data[RHO_S_1(cellToCell[2], dataBase.numberOfCells)]; +// data[3] = dataBase.data[RHO_S_1(cellToCell[3], dataBase.numberOfCells)]; +// data[4] = dataBase.data[RHO_S_1(cellToCell[4], dataBase.numberOfCells)]; +// data[5] = dataBase.data[RHO_S_1(cellToCell[5], dataBase.numberOfCells)]; +// data[6] = dataBase.data[RHO_S_1(cellIndex, dataBase.numberOfCells)]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rhoS_1 = data[6] + c1o8 * (+data[0] + data[2] + data[4] - data[1] - data[3] - data[5]); // PX PY PZ +// childCons[1].rhoS_1 = data[6] + c1o8 * (+data[0] + data[2] - data[4] - data[1] - data[3] + data[5]); // PX PY MZ +// childCons[2].rhoS_1 = data[6] + c1o8 * (+data[0] - data[2] + data[4] - data[1] + data[3] - data[5]); // PX MY PZ +// childCons[3].rhoS_1 = data[6] + c1o8 * (+data[0] - data[2] - data[4] - data[1] + data[3] + data[5]); // PX MY MZ +// childCons[4].rhoS_1 = data[6] + c1o8 * (-data[0] + data[2] + data[4] + data[1] - data[3] - data[5]); // MX PY PZ +// childCons[5].rhoS_1 = data[6] + c1o8 * (-data[0] + data[2] - data[4] + data[1] - data[3] + data[5]); // MX PY MZ +// childCons[6].rhoS_1 = data[6] + c1o8 * (-data[0] - data[2] + data[4] + data[1] + data[3] - data[5]); // MX MY PZ +// childCons[7].rhoS_1 = data[6] + c1o8 * (-data[0] - data[2] - data[4] + data[1] + data[3] + data[5]); // MX MY MZ +// } +// +// { +// real data[7]; +// +// data[0] = dataBase.data[RHO_S_2(cellToCell[0], dataBase.numberOfCells)]; +// data[1] = dataBase.data[RHO_S_2(cellToCell[1], dataBase.numberOfCells)]; +// data[2] = dataBase.data[RHO_S_2(cellToCell[2], dataBase.numberOfCells)]; +// data[3] = dataBase.data[RHO_S_2(cellToCell[3], dataBase.numberOfCells)]; +// data[4] = dataBase.data[RHO_S_2(cellToCell[4], dataBase.numberOfCells)]; +// data[5] = dataBase.data[RHO_S_2(cellToCell[5], dataBase.numberOfCells)]; +// data[6] = dataBase.data[RHO_S_2(cellIndex, dataBase.numberOfCells)]; +// +// // PX PY PZ MX MY MZ +// childCons[0].rhoS_2 = data[6] + c1o8 * (+data[0] + data[2] + data[4] - data[1] - data[3] - data[5]); // PX PY PZ +// childCons[1].rhoS_2 = data[6] + c1o8 * (+data[0] + data[2] - data[4] - data[1] - data[3] + data[5]); // PX PY MZ +// childCons[2].rhoS_2 = data[6] + c1o8 * (+data[0] - data[2] + data[4] - data[1] + data[3] - data[5]); // PX MY PZ +// childCons[3].rhoS_2 = data[6] + c1o8 * (+data[0] - data[2] - data[4] - data[1] + data[3] + data[5]); // PX MY MZ +// childCons[4].rhoS_2 = data[6] + c1o8 * (-data[0] + data[2] + data[4] + data[1] - data[3] - data[5]); // MX PY PZ +// childCons[5].rhoS_2 = data[6] + c1o8 * (-data[0] + data[2] - data[4] + data[1] - data[3] + data[5]); // MX PY MZ +// childCons[6].rhoS_2 = data[6] + c1o8 * (-data[0] - data[2] + data[4] + data[1] + data[3] - data[5]); // MX MY PZ +// childCons[7].rhoS_2 = data[6] + c1o8 * (-data[0] - data[2] - data[4] + data[1] + data[3] + data[5]); // MX MY MZ +// } +// } +// #endif // USE_PASSIVE_SCALAR +// +//#pragma unroll +// for( uint childIndex = 0; childIndex < 8; childIndex++ ){ +// +// uint childCellIndex = dataBase.coarseToFine[ COARSE_TO_FINE( index, ( 1 + childIndex ), dataBase.numberOfFineGhostCells ) ]; +// +// dataBase.data[ RHO__(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rho ; +// dataBase.data[ RHO_U(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoU; +// dataBase.data[ RHO_V(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoV; +// dataBase.data[ RHO_W(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoW; +// dataBase.data[ RHO_E(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoE; +// #ifdef USE_PASSIVE_SCALAR +// dataBase.data[ RHO_S_1(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoS_1; +// dataBase.data[ RHO_S_2(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoS_2; +// #endif // USE_PASSIVE_SCALAR +// } +//} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + __host__ __device__ inline void coarseToFineFunction( DataBaseStruct dataBase, uint startIndex, uint index ) { index += startIndex; @@ -68,179 +277,92 @@ __host__ __device__ inline void coarseToFineFunction( DataBaseStruct dataBase, u cellToCell[4] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 4, dataBase.numberOfCells ) ]; cellToCell[5] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 5, dataBase.numberOfCells ) ]; + ConservedVariables cons[7]; + + readCellData(cellToCell[0], dataBase, cons[0]); + readCellData(cellToCell[1], dataBase, cons[1]); + readCellData(cellToCell[2], dataBase, cons[2]); + readCellData(cellToCell[3], dataBase, cons[3]); + readCellData(cellToCell[4], dataBase, cons[4]); + readCellData(cellToCell[5], dataBase, cons[5]); + readCellData(cellIndex, dataBase, cons[6]); + ConservedVariables childCons [8]; + ConservedVariables zeroCons; + + // PX PY PZ MX MY MZ + childCons[0] = cons[6] + c1o8 * ( zeroCons + cons[0] + cons[2] + cons[4] - cons[1] - cons[3] - cons[5] ); // PX PY PZ + childCons[1] = cons[6] + c1o8 * ( zeroCons + cons[0] + cons[2] - cons[4] - cons[1] - cons[3] + cons[5] ); // PX PY MZ + childCons[2] = cons[6] + c1o8 * ( zeroCons + cons[0] - cons[2] + cons[4] - cons[1] + cons[3] - cons[5] ); // PX MY PZ + childCons[3] = cons[6] + c1o8 * ( zeroCons + cons[0] - cons[2] - cons[4] - cons[1] + cons[3] + cons[5] ); // PX MY MZ + childCons[4] = cons[6] + c1o8 * ( zeroCons - cons[0] + cons[2] + cons[4] + cons[1] - cons[3] - cons[5] ); // MX PY PZ + childCons[5] = cons[6] + c1o8 * ( zeroCons - cons[0] + cons[2] - cons[4] + cons[1] - cons[3] + cons[5] ); // MX PY MZ + childCons[6] = cons[6] + c1o8 * ( zeroCons - cons[0] - cons[2] + cons[4] + cons[1] + cons[3] - cons[5] ); // MX MY PZ + childCons[7] = cons[6] + c1o8 * ( zeroCons - cons[0] - cons[2] - cons[4] + cons[1] + cons[3] + cons[5] ); // MX MY MZ - { - real data [7]; - - data[0] = dataBase.data[ RHO__(cellToCell[0], dataBase.numberOfCells) ]; - data[1] = dataBase.data[ RHO__(cellToCell[1], dataBase.numberOfCells) ]; - data[2] = dataBase.data[ RHO__(cellToCell[2], dataBase.numberOfCells) ]; - data[3] = dataBase.data[ RHO__(cellToCell[3], dataBase.numberOfCells) ]; - data[4] = dataBase.data[ RHO__(cellToCell[4], dataBase.numberOfCells) ]; - data[5] = dataBase.data[ RHO__(cellToCell[5], dataBase.numberOfCells) ]; - data[6] = dataBase.data[ RHO__(cellIndex , dataBase.numberOfCells) ]; - - // PX PY PZ MX MY MZ - childCons[0].rho = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ - childCons[1].rho = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ - childCons[2].rho = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ - childCons[3].rho = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ - childCons[4].rho = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ - childCons[5].rho = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ - childCons[6].rho = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ - childCons[7].rho = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ - } +#pragma unroll + for( uint childIndex = 0; childIndex < 8; childIndex++ ){ - { - real data [7]; - - data[0] = dataBase.data[ RHO_U(cellToCell[0], dataBase.numberOfCells) ]; - data[1] = dataBase.data[ RHO_U(cellToCell[1], dataBase.numberOfCells) ]; - data[2] = dataBase.data[ RHO_U(cellToCell[2], dataBase.numberOfCells) ]; - data[3] = dataBase.data[ RHO_U(cellToCell[3], dataBase.numberOfCells) ]; - data[4] = dataBase.data[ RHO_U(cellToCell[4], dataBase.numberOfCells) ]; - data[5] = dataBase.data[ RHO_U(cellToCell[5], dataBase.numberOfCells) ]; - data[6] = dataBase.data[ RHO_U(cellIndex , dataBase.numberOfCells) ]; - - // PX PY PZ MX MY MZ - childCons[0].rhoU = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ - childCons[1].rhoU = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ - childCons[2].rhoU = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ - childCons[3].rhoU = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ - childCons[4].rhoU = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ - childCons[5].rhoU = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ - childCons[6].rhoU = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ - childCons[7].rhoU = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ - } + uint childCellIndex = dataBase.coarseToFine[ COARSE_TO_FINE( index, ( 1 + childIndex ), dataBase.numberOfFineGhostCells ) ]; - { - real data [7]; - - data[0] = dataBase.data[ RHO_V(cellToCell[0], dataBase.numberOfCells) ]; - data[1] = dataBase.data[ RHO_V(cellToCell[1], dataBase.numberOfCells) ]; - data[2] = dataBase.data[ RHO_V(cellToCell[2], dataBase.numberOfCells) ]; - data[3] = dataBase.data[ RHO_V(cellToCell[3], dataBase.numberOfCells) ]; - data[4] = dataBase.data[ RHO_V(cellToCell[4], dataBase.numberOfCells) ]; - data[5] = dataBase.data[ RHO_V(cellToCell[5], dataBase.numberOfCells) ]; - data[6] = dataBase.data[ RHO_V(cellIndex , dataBase.numberOfCells) ]; - - // PX PY PZ MX MY MZ - childCons[0].rhoV = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ - childCons[1].rhoV = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ - childCons[2].rhoV = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ - childCons[3].rhoV = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ - childCons[4].rhoV = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ - childCons[5].rhoV = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ - childCons[6].rhoV = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ - childCons[7].rhoV = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ + writeCellData(childCellIndex, dataBase, childCons[childIndex]); } +} - { - real data [7]; - - data[0] = dataBase.data[ RHO_W(cellToCell[0], dataBase.numberOfCells) ]; - data[1] = dataBase.data[ RHO_W(cellToCell[1], dataBase.numberOfCells) ]; - data[2] = dataBase.data[ RHO_W(cellToCell[2], dataBase.numberOfCells) ]; - data[3] = dataBase.data[ RHO_W(cellToCell[3], dataBase.numberOfCells) ]; - data[4] = dataBase.data[ RHO_W(cellToCell[4], dataBase.numberOfCells) ]; - data[5] = dataBase.data[ RHO_W(cellToCell[5], dataBase.numberOfCells) ]; - data[6] = dataBase.data[ RHO_W(cellIndex , dataBase.numberOfCells) ]; - - // PX PY PZ MX MY MZ - childCons[0].rhoW = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ - childCons[1].rhoW = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ - childCons[2].rhoW = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ - childCons[3].rhoW = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ - childCons[4].rhoW = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ - childCons[5].rhoW = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ - childCons[6].rhoW = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ - childCons[7].rhoW = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ - } +__host__ __device__ inline void coarseToFineFunctionPrimitiveInterpolation( DataBaseStruct dataBase, uint startIndex, uint index ) +{ + index += startIndex; - { - real data [7]; - - data[0] = dataBase.data[ RHO_E(cellToCell[0], dataBase.numberOfCells) ]; - data[1] = dataBase.data[ RHO_E(cellToCell[1], dataBase.numberOfCells) ]; - data[2] = dataBase.data[ RHO_E(cellToCell[2], dataBase.numberOfCells) ]; - data[3] = dataBase.data[ RHO_E(cellToCell[3], dataBase.numberOfCells) ]; - data[4] = dataBase.data[ RHO_E(cellToCell[4], dataBase.numberOfCells) ]; - data[5] = dataBase.data[ RHO_E(cellToCell[5], dataBase.numberOfCells) ]; - data[6] = dataBase.data[ RHO_E(cellIndex , dataBase.numberOfCells) ]; - - // PX PY PZ MX MY MZ - childCons[0].rhoE = data[6] + c1o8 * ( + data[0] + data[2] + data[4] - data[1] - data[3] - data[5] ); // PX PY PZ - childCons[1].rhoE = data[6] + c1o8 * ( + data[0] + data[2] - data[4] - data[1] - data[3] + data[5] ); // PX PY MZ - childCons[2].rhoE = data[6] + c1o8 * ( + data[0] - data[2] + data[4] - data[1] + data[3] - data[5] ); // PX MY PZ - childCons[3].rhoE = data[6] + c1o8 * ( + data[0] - data[2] - data[4] - data[1] + data[3] + data[5] ); // PX MY MZ - childCons[4].rhoE = data[6] + c1o8 * ( - data[0] + data[2] + data[4] + data[1] - data[3] - data[5] ); // MX PY PZ - childCons[5].rhoE = data[6] + c1o8 * ( - data[0] + data[2] - data[4] + data[1] - data[3] + data[5] ); // MX PY MZ - childCons[6].rhoE = data[6] + c1o8 * ( - data[0] - data[2] + data[4] + data[1] + data[3] - data[5] ); // MX MY PZ - childCons[7].rhoE = data[6] + c1o8 * ( - data[0] - data[2] - data[4] + data[1] + data[3] + data[5] ); // MX MY MZ - } + uint cellIndex = dataBase.coarseToFine[ COARSE_TO_FINE( index, 0, dataBase.numberOfFineGhostCells ) ]; - #ifdef USE_PASSIVE_SCALAR - { - { - real data[7]; - - data[0] = dataBase.data[RHO_S_1(cellToCell[0], dataBase.numberOfCells)]; - data[1] = dataBase.data[RHO_S_1(cellToCell[1], dataBase.numberOfCells)]; - data[2] = dataBase.data[RHO_S_1(cellToCell[2], dataBase.numberOfCells)]; - data[3] = dataBase.data[RHO_S_1(cellToCell[3], dataBase.numberOfCells)]; - data[4] = dataBase.data[RHO_S_1(cellToCell[4], dataBase.numberOfCells)]; - data[5] = dataBase.data[RHO_S_1(cellToCell[5], dataBase.numberOfCells)]; - data[6] = dataBase.data[RHO_S_1(cellIndex, dataBase.numberOfCells)]; - - // PX PY PZ MX MY MZ - childCons[0].rhoS_1 = data[6] + c1o8 * (+data[0] + data[2] + data[4] - data[1] - data[3] - data[5]); // PX PY PZ - childCons[1].rhoS_1 = data[6] + c1o8 * (+data[0] + data[2] - data[4] - data[1] - data[3] + data[5]); // PX PY MZ - childCons[2].rhoS_1 = data[6] + c1o8 * (+data[0] - data[2] + data[4] - data[1] + data[3] - data[5]); // PX MY PZ - childCons[3].rhoS_1 = data[6] + c1o8 * (+data[0] - data[2] - data[4] - data[1] + data[3] + data[5]); // PX MY MZ - childCons[4].rhoS_1 = data[6] + c1o8 * (-data[0] + data[2] + data[4] + data[1] - data[3] - data[5]); // MX PY PZ - childCons[5].rhoS_1 = data[6] + c1o8 * (-data[0] + data[2] - data[4] + data[1] - data[3] + data[5]); // MX PY MZ - childCons[6].rhoS_1 = data[6] + c1o8 * (-data[0] - data[2] + data[4] + data[1] + data[3] - data[5]); // MX MY PZ - childCons[7].rhoS_1 = data[6] + c1o8 * (-data[0] - data[2] - data[4] + data[1] + data[3] + data[5]); // MX MY MZ - } - - { - real data[7]; - - data[0] = dataBase.data[RHO_S_2(cellToCell[0], dataBase.numberOfCells)]; - data[1] = dataBase.data[RHO_S_2(cellToCell[1], dataBase.numberOfCells)]; - data[2] = dataBase.data[RHO_S_2(cellToCell[2], dataBase.numberOfCells)]; - data[3] = dataBase.data[RHO_S_2(cellToCell[3], dataBase.numberOfCells)]; - data[4] = dataBase.data[RHO_S_2(cellToCell[4], dataBase.numberOfCells)]; - data[5] = dataBase.data[RHO_S_2(cellToCell[5], dataBase.numberOfCells)]; - data[6] = dataBase.data[RHO_S_2(cellIndex, dataBase.numberOfCells)]; - - // PX PY PZ MX MY MZ - childCons[0].rhoS_2 = data[6] + c1o8 * (+data[0] + data[2] + data[4] - data[1] - data[3] - data[5]); // PX PY PZ - childCons[1].rhoS_2 = data[6] + c1o8 * (+data[0] + data[2] - data[4] - data[1] - data[3] + data[5]); // PX PY MZ - childCons[2].rhoS_2 = data[6] + c1o8 * (+data[0] - data[2] + data[4] - data[1] + data[3] - data[5]); // PX MY PZ - childCons[3].rhoS_2 = data[6] + c1o8 * (+data[0] - data[2] - data[4] - data[1] + data[3] + data[5]); // PX MY MZ - childCons[4].rhoS_2 = data[6] + c1o8 * (-data[0] + data[2] + data[4] + data[1] - data[3] - data[5]); // MX PY PZ - childCons[5].rhoS_2 = data[6] + c1o8 * (-data[0] + data[2] - data[4] + data[1] - data[3] + data[5]); // MX PY MZ - childCons[6].rhoS_2 = data[6] + c1o8 * (-data[0] - data[2] + data[4] + data[1] + data[3] - data[5]); // MX MY PZ - childCons[7].rhoS_2 = data[6] + c1o8 * (-data[0] - data[2] - data[4] + data[1] + data[3] + data[5]); // MX MY MZ - } - } - #endif // USE_PASSIVE_SCALAR + uint cellToCell [6]; + + cellToCell[0] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 0, dataBase.numberOfCells ) ]; + cellToCell[1] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 1, dataBase.numberOfCells ) ]; + cellToCell[2] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 2, dataBase.numberOfCells ) ]; + cellToCell[3] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 3, dataBase.numberOfCells ) ]; + cellToCell[4] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 4, dataBase.numberOfCells ) ]; + cellToCell[5] = dataBase.cellToCell[ CELL_TO_CELL( cellIndex, 5, dataBase.numberOfCells ) ]; + + PrimitiveVariables prim [7]; + ConservedVariables cons[7]; + + readCellData(cellToCell[0], dataBase, cons[0]); + readCellData(cellToCell[1], dataBase, cons[1]); + readCellData(cellToCell[2], dataBase, cons[2]); + readCellData(cellToCell[3], dataBase, cons[3]); + readCellData(cellToCell[4], dataBase, cons[4]); + readCellData(cellToCell[5], dataBase, cons[5]); + readCellData(cellIndex, dataBase, cons[6]); + + prim[0] = toPrimitiveVariables(cons[0], two); + prim[1] = toPrimitiveVariables(cons[1], two); + prim[2] = toPrimitiveVariables(cons[2], two); + prim[3] = toPrimitiveVariables(cons[3], two); + prim[4] = toPrimitiveVariables(cons[4], two); + prim[5] = toPrimitiveVariables(cons[5], two); + prim[6] = toPrimitiveVariables(cons[6], two); + + PrimitiveVariables childPrim [8]; + PrimitiveVariables zeroPrim; + + // PX PY PZ MX MY MZ + childPrim[0] = prim[6] + c1o8 * ( zeroPrim + prim[0] + prim[2] + prim[4] - prim[1] - prim[3] - prim[5] ); // PX PY PZ + childPrim[1] = prim[6] + c1o8 * ( zeroPrim + prim[0] + prim[2] - prim[4] - prim[1] - prim[3] + prim[5] ); // PX PY MZ + childPrim[2] = prim[6] + c1o8 * ( zeroPrim + prim[0] - prim[2] + prim[4] - prim[1] + prim[3] - prim[5] ); // PX MY PZ + childPrim[3] = prim[6] + c1o8 * ( zeroPrim + prim[0] - prim[2] - prim[4] - prim[1] + prim[3] + prim[5] ); // PX MY MZ + childPrim[4] = prim[6] + c1o8 * ( zeroPrim - prim[0] + prim[2] + prim[4] + prim[1] - prim[3] - prim[5] ); // MX PY PZ + childPrim[5] = prim[6] + c1o8 * ( zeroPrim - prim[0] + prim[2] - prim[4] + prim[1] - prim[3] + prim[5] ); // MX PY MZ + childPrim[6] = prim[6] + c1o8 * ( zeroPrim - prim[0] - prim[2] + prim[4] + prim[1] + prim[3] - prim[5] ); // MX MY PZ + childPrim[7] = prim[6] + c1o8 * ( zeroPrim - prim[0] - prim[2] - prim[4] + prim[1] + prim[3] + prim[5] ); // MX MY MZ #pragma unroll for( uint childIndex = 0; childIndex < 8; childIndex++ ){ uint childCellIndex = dataBase.coarseToFine[ COARSE_TO_FINE( index, ( 1 + childIndex ), dataBase.numberOfFineGhostCells ) ]; - dataBase.data[ RHO__(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rho ; - dataBase.data[ RHO_U(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoU; - dataBase.data[ RHO_V(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoV; - dataBase.data[ RHO_W(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoW; - dataBase.data[ RHO_E(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoE; - #ifdef USE_PASSIVE_SCALAR - dataBase.data[ RHO_S_1(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoS_1; - dataBase.data[ RHO_S_2(childCellIndex, dataBase.numberOfCells) ] = childCons[childIndex].rhoS_2; - #endif // USE_PASSIVE_SCALAR + ConservedVariables childCons = toConservedVariables(childPrim[childIndex], two); + + writeCellData(childCellIndex, dataBase, childCons); } } diff --git a/src/GksGpu/Interface/FineToCoarseKernel.cu b/src/GksGpu/Interface/FineToCoarseKernel.cu index 5a6a742d543b754478fe92c1a5b0dc5c4f3f023c..aaaeff5da509f16863719f5263885e9fca1e30bc 100644 --- a/src/GksGpu/Interface/FineToCoarseKernel.cu +++ b/src/GksGpu/Interface/FineToCoarseKernel.cu @@ -9,6 +9,9 @@ #include "DataBase/DataBaseStruct.h" #include "FlowStateData/FlowStateData.cuh" +#include "FlowStateData/FlowStateDataConversion.cuh" + +#include "FlowStateData/AccessDeviceData.cuh" #include "Definitions/PassiveScalar.h" #include "Definitions/MemoryAccessPattern.h" @@ -19,7 +22,8 @@ __global__ void fineToCoarseKernel ( DataBaseStruct dataBase, uint startIndex, uint numberOfEntities ); -__host__ __device__ inline void fineToCoarseFunction( DataBaseStruct dataBase, uint startIndex, uint index ); +__host__ __device__ inline void fineToCoarseFunction ( DataBaseStruct dataBase, uint startIndex, uint index ); +__host__ __device__ inline void fineToCoarseFunctionPrimitiveInterpolation( DataBaseStruct dataBase, uint startIndex, uint index ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -51,39 +55,57 @@ __global__ void fineToCoarseKernel( DataBaseStruct dataBase, uint startIndex, ui if( index >= numberOfEntities ) return; fineToCoarseFunction( dataBase, startIndex, index ); + //fineToCoarseFunctionPrimitiveInterpolation( dataBase, startIndex, index ); } __host__ __device__ inline void fineToCoarseFunction( DataBaseStruct dataBase, uint startIndex, uint index ) { index += startIndex; - ConservedVariables cons; + ConservedVariables parentCons; #pragma unroll for( uint childIdx = 1; childIdx < LENGTH_FINE_TO_COARSE; childIdx++ ){ uint cellIdx = dataBase.fineToCoarse[ FINE_TO_COARSE( index, childIdx, dataBase.numberOfCoarseGhostCells ) ]; - cons.rho += c1o8 * dataBase.data[ RHO__(cellIdx, dataBase.numberOfCells) ]; - cons.rhoU += c1o8 * dataBase.data[ RHO_U(cellIdx, dataBase.numberOfCells) ]; - cons.rhoV += c1o8 * dataBase.data[ RHO_V(cellIdx, dataBase.numberOfCells) ]; - cons.rhoW += c1o8 * dataBase.data[ RHO_W(cellIdx, dataBase.numberOfCells) ]; - cons.rhoE += c1o8 * dataBase.data[ RHO_E(cellIdx, dataBase.numberOfCells) ]; - #ifdef USE_PASSIVE_SCALAR - cons.rhoS_1 += c1o8 * dataBase.data[ RHO_S_1(cellIdx, dataBase.numberOfCells) ]; - cons.rhoS_2 += c1o8 * dataBase.data[ RHO_S_2(cellIdx, dataBase.numberOfCells) ]; - #endif // USE_PASSIVE_SCALAR + ConservedVariables cons; + + readCellData( cellIdx, dataBase, cons ); + + parentCons = parentCons + c1o8 * cons; + } + + { + uint cellIdx = dataBase.fineToCoarse[FINE_TO_COARSE(index, 0, dataBase.numberOfCoarseGhostCells)]; + + writeCellData(cellIdx, dataBase, parentCons); } +} + +__host__ __device__ inline void fineToCoarseFunctionPrimitiveInterpolation( DataBaseStruct dataBase, uint startIndex, uint index ) +{ + index += startIndex; + + PrimitiveVariables parentPrim; - uint cellIdx = dataBase.fineToCoarse[ FINE_TO_COARSE( index, 0, dataBase.numberOfCoarseGhostCells ) ]; - - dataBase.data[ RHO__(cellIdx, dataBase.numberOfCells) ] = cons.rho ; - dataBase.data[ RHO_U(cellIdx, dataBase.numberOfCells) ] = cons.rhoU; - dataBase.data[ RHO_V(cellIdx, dataBase.numberOfCells) ] = cons.rhoV; - dataBase.data[ RHO_W(cellIdx, dataBase.numberOfCells) ] = cons.rhoW; - dataBase.data[ RHO_E(cellIdx, dataBase.numberOfCells) ] = cons.rhoE; -#ifdef USE_PASSIVE_SCALAR - dataBase.data[ RHO_S_1(cellIdx, dataBase.numberOfCells) ] = cons.rhoS_1; - dataBase.data[ RHO_S_2(cellIdx, dataBase.numberOfCells) ] = cons.rhoS_2; -#endif // USE_PASSIVE_SCALAR +#pragma unroll + for( uint childIdx = 1; childIdx < LENGTH_FINE_TO_COARSE; childIdx++ ){ + + uint cellIdx = dataBase.fineToCoarse[ FINE_TO_COARSE( index, childIdx, dataBase.numberOfCoarseGhostCells ) ]; + + ConservedVariables cons; + + readCellData( cellIdx, dataBase, cons ); + + parentPrim = parentPrim + c1o8 * toPrimitiveVariables(cons, two); + } + + { + uint cellIdx = dataBase.fineToCoarse[FINE_TO_COARSE(index, 0, dataBase.numberOfCoarseGhostCells)]; + + ConservedVariables parentCons = toConservedVariables(parentPrim, two); + + writeCellData(cellIdx, dataBase, parentCons); + } } diff --git a/targets/apps/GKS/PoolFire/PoolFire.cpp b/targets/apps/GKS/PoolFire/PoolFire.cpp index be457327cfbcada69ac6247457bb299a998d1a98..320e47acc20ad001c58142db0dbb24b4018c8e9b 100644 --- a/targets/apps/GKS/PoolFire/PoolFire.cpp +++ b/targets/apps/GKS/PoolFire/PoolFire.cpp @@ -127,7 +127,7 @@ void thermalCavity( std::string path, std::string simulationName ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - bool threeDimensional = true; + bool threeDimensional = false; if( threeDimensional ) {