diff --git a/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.cu b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.cu new file mode 100644 index 0000000000000000000000000000000000000000..aaaa979e28d5c962a85ecef3cebc7060bbb3e7ed --- /dev/null +++ b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.cu @@ -0,0 +1,148 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr +//======================================================================================= +// includes, cuda +#include <cuda_runtime.h> +#include <helper_functions.h> +#include <helper_cuda.h> + +#include "LBM/LB.h" +#include <cuda_helper/CudaGrid.h> + +#include "BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion_Device.cuh" +#include "Parameter/Parameter.h" + + +void AdvectionDiffusionSlipVelocityCompressible( + uint numberOfThreads, + real * normalX, + real * normalY, + real * normalZ, + real * distributions, + real * distributionsAD, + int* QindexArray, + real * Qarrays, + uint numberOfBCnodes, + real omegaDiffusivity, + uint * neighborX, + uint * neighborY, + uint * neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); + + AdvectionDiffusionSlipVelocityCompressible_Device <<< grid.grid, grid.threads >>> ( + normalX, + normalY, + normalZ, + distributions, + distributionsAD, + QindexArray, + Qarrays, + numberOfBCnodes, + omegaDiffusivity, + neighborX, + neighborY, + neighborZ, + numberOfLBnodes, + isEvenTimestep); + getLastCudaError("AdvectionDiffusionSlipVelocityCompressible_Device execution failed"); +} + +void AdvectionDiffusionDirichlet( + unsigned int numberOfThreads, + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); + + AdvectionDiffusionDirichlet_Device<<< grid.grid, grid.threads >>> ( + DD, + DD27, + temp, + diffusivity, + k_Q, + QQ, + numberOfBCnodes, + om1, + neighborX, + neighborY, + neighborZ, + numberOfLBnodes, + isEvenTimestep); + getLastCudaError("AdvectionDiffusionDirichlet_Device execution failed"); +} + +void AdvectionDiffusionBounceBack( + unsigned int numberOfThreads, + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); + + AdvectionDiffusionBounceBack_Device<<< grid.grid, grid.threads >>> ( + DD, + DD27, + temp, + diffusivity, + k_Q, + QQ, + numberOfBCnodes, + om1, + neighborX, + neighborY, + neighborZ, + numberOfLBnodes, + isEvenTimestep); + getLastCudaError("AdvectionDiffusionBounceBack_Device execution failed"); +} diff --git a/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.h b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.h new file mode 100644 index 0000000000000000000000000000000000000000..7cd2d1086a66dcbce2412e160f6a0c75859fe877 --- /dev/null +++ b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.h @@ -0,0 +1,93 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr +//======================================================================================= +#ifndef AdvectionDiffusion_H +#define AdvectionDiffusion_H + +#include "LBM/LB.h" + +#include <cuda.h> +#include <cuda_runtime.h> + +struct LBMSimulationParameter; +class Parameter; + +////////////////////////////////////////////////////////////////////////// +//! \brief defines the behavior of a slip-AD boundary condition +void AdvectionDiffusionSlipVelocityCompressible( + uint numberOfThreads, + real * normalX, + real * normalY, + real * normalZ, + real * distributions, + real * distributionsAD, + int* QindexArray, + real * Qarrays, + uint numberOfBCnodes, + real omegaDiffusivity, + uint * neighborX, + uint * neighborY, + uint * neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep); + +void AdvectionDiffusionDirichlet( + unsigned int numberOfThreads, + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep); + +void AdvectionDiffusionBounceBack( + unsigned int numberOfThreads, + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep); + +#endif diff --git a/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionBounceBack.cu b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionBounceBack.cu new file mode 100644 index 0000000000000000000000000000000000000000..06588f0da93898f26a6f78c374594423692ddc1a --- /dev/null +++ b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionBounceBack.cu @@ -0,0 +1,306 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr +//======================================================================================= +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" + +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; + +__global__ void AdvectionDiffusionBounceBack_Device( + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + Distributions27 D27; + if (isEvenTimestep==true) + { + D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; + } + else + { + D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + const unsigned x = threadIdx.x; + const unsigned y = blockIdx.x; + const unsigned z = blockIdx.y; + + const unsigned nx = blockDim.x; + const unsigned ny = gridDim.x; + + const unsigned k = nx*(ny*z + y) + x; + ////////////////////////////////////////////////////////////////////////// + + if(k<numberOfBCnodes) + { + //////////////////////////////////////////////////////////////////////////////// + real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, + *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, + *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, + *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, + *q_dirBSE, *q_dirBNW; + q_dirE = &QQ[dP00 * numberOfBCnodes]; + q_dirW = &QQ[dM00 * numberOfBCnodes]; + q_dirN = &QQ[d0P0 * numberOfBCnodes]; + q_dirS = &QQ[d0M0 * numberOfBCnodes]; + q_dirT = &QQ[d00P * numberOfBCnodes]; + q_dirB = &QQ[d00M * numberOfBCnodes]; + q_dirNE = &QQ[dPP0 * numberOfBCnodes]; + q_dirSW = &QQ[dMM0 * numberOfBCnodes]; + q_dirSE = &QQ[dPM0 * numberOfBCnodes]; + q_dirNW = &QQ[dMP0 * numberOfBCnodes]; + q_dirTE = &QQ[dP0P * numberOfBCnodes]; + q_dirBW = &QQ[dM0M * numberOfBCnodes]; + q_dirBE = &QQ[dP0M * numberOfBCnodes]; + q_dirTW = &QQ[dM0P * numberOfBCnodes]; + q_dirTN = &QQ[d0PP * numberOfBCnodes]; + q_dirBS = &QQ[d0MM * numberOfBCnodes]; + q_dirBN = &QQ[d0PM * numberOfBCnodes]; + q_dirTS = &QQ[d0MP * numberOfBCnodes]; + q_dirTNE = &QQ[dPPP * numberOfBCnodes]; + q_dirTSW = &QQ[dMMP * numberOfBCnodes]; + q_dirTSE = &QQ[dPMP * numberOfBCnodes]; + q_dirTNW = &QQ[dMPP * numberOfBCnodes]; + q_dirBNE = &QQ[dPPM * numberOfBCnodes]; + q_dirBSW = &QQ[dMMM * numberOfBCnodes]; + q_dirBSE = &QQ[dPMM * numberOfBCnodes]; + q_dirBNW = &QQ[dMPM * numberOfBCnodes]; + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int KQK = k_Q[k]; + unsigned int ke = KQK; + unsigned int kw = neighborX[KQK]; + unsigned int kn = KQK; + unsigned int ks = neighborY[KQK]; + unsigned int kt = KQK; + unsigned int kb = neighborZ[KQK]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = KQK; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = KQK; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = KQK; + unsigned int kbn = kb; + unsigned int kts = ks; + unsigned int ktse = ks; + unsigned int kbnw = kbw; + unsigned int ktnw = kw; + unsigned int kbse = kbs; + unsigned int ktsw = ksw; + unsigned int kbne = kb; + unsigned int ktne = KQK; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + real f27_W = (D27.f[dP00])[ke ]; + real f27_E = (D27.f[dM00])[kw ]; + real f27_S = (D27.f[d0P0])[kn ]; + real f27_N = (D27.f[d0M0])[ks ]; + real f27_B = (D27.f[d00P])[kt ]; + real f27_T = (D27.f[d00M])[kb ]; + real f27_SW = (D27.f[dPP0])[kne ]; + real f27_NE = (D27.f[dMM0])[ksw ]; + real f27_NW = (D27.f[dPM0])[kse ]; + real f27_SE = (D27.f[dMP0])[knw ]; + real f27_BW = (D27.f[dP0P])[kte ]; + real f27_TE = (D27.f[dM0M])[kbw ]; + real f27_TW = (D27.f[dP0M])[kbe ]; + real f27_BE = (D27.f[dM0P])[ktw ]; + real f27_BS = (D27.f[d0PP])[ktn ]; + real f27_TN = (D27.f[d0MM])[kbs ]; + real f27_TS = (D27.f[d0PM])[kbn ]; + real f27_BN = (D27.f[d0MP])[kts ]; + real f27_BSW = (D27.f[dPPP])[ktne ]; + real f27_BNE = (D27.f[dMMP])[ktsw ]; + real f27_BNW = (D27.f[dPMP])[ktse ]; + real f27_BSE = (D27.f[dMPP])[ktnw ]; + real f27_TSW = (D27.f[dPPM])[kbne ]; + real f27_TNE = (D27.f[dMMM])[kbsw ]; + real f27_TNW = (D27.f[dPMM])[kbse ]; + real f27_TSE = (D27.f[dMPM])[kbnw ]; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; + } + else + { + D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real q; + q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]=f27_E ; + q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]=f27_W ; + q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]=f27_N ; + q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]=f27_S ; + q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]=f27_T ; + q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]=f27_B ; + q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=f27_NE ; + q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=f27_SW ; + q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=f27_SE ; + q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=f27_NW ; + q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=f27_TE ; + q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=f27_BW ; + q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=f27_BE ; + q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=f27_TW ; + q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=f27_TN ; + q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=f27_BS ; + q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=f27_BN ; + q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=f27_TS ; + q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=f27_TNE; + q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=f27_BSW; + q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=f27_BNE; + q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=f27_TSW; + q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=f27_TSE; + q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=f27_BNW; + q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=f27_BSE; + q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=f27_TNW; + } +} diff --git a/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionDirichlet.cu b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionDirichlet.cu new file mode 100644 index 0000000000000000000000000000000000000000..419a46d996252f3be5b80cebe69a687d4a0d4552 --- /dev/null +++ b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionDirichlet.cu @@ -0,0 +1,468 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr +//======================================================================================= +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include "basics/constants/NumericConstants.h" + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; + +__global__ void AdvectionDiffusionDirichlet_Device( + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + Distributions27 D; + if (isEvenTimestep==true) + { + D.f[dP00] = &DD[dP00 * numberOfLBnodes]; + D.f[dM00] = &DD[dM00 * numberOfLBnodes]; + D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; + D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; + D.f[d00P] = &DD[d00P * numberOfLBnodes]; + D.f[d00M] = &DD[d00M * numberOfLBnodes]; + D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; + D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; + D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; + D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; + D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; + D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; + D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; + D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; + D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; + D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; + D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; + D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; + D.f[d000] = &DD[d000 * numberOfLBnodes]; + D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; + D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; + D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; + D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; + D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; + D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; + D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; + D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; + } + else + { + D.f[dM00] = &DD[dP00 * numberOfLBnodes]; + D.f[dP00] = &DD[dM00 * numberOfLBnodes]; + D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; + D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; + D.f[d00M] = &DD[d00P * numberOfLBnodes]; + D.f[d00P] = &DD[d00M * numberOfLBnodes]; + D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; + D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; + D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; + D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; + D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; + D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; + D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; + D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; + D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; + D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; + D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; + D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; + D.f[d000] = &DD[d000 * numberOfLBnodes]; + D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; + D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; + D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; + D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; + D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; + D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; + D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; + D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; + } + + Distributions27 D27; + if (isEvenTimestep==true) + { + D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; + } + else + { + D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + const unsigned x = threadIdx.x; + const unsigned y = blockIdx.x; + const unsigned z = blockIdx.y; + + const unsigned nx = blockDim.x; + const unsigned ny = gridDim.x; + + const unsigned k = nx*(ny*z + y) + x; + ////////////////////////////////////////////////////////////////////////// + + if(k<numberOfBCnodes) + { + //////////////////////////////////////////////////////////////////////////////// + real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, + *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, + *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, + *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, + *q_dirBSE, *q_dirBNW; + q_dirE = &QQ[dP00 * numberOfBCnodes]; + q_dirW = &QQ[dM00 * numberOfBCnodes]; + q_dirN = &QQ[d0P0 * numberOfBCnodes]; + q_dirS = &QQ[d0M0 * numberOfBCnodes]; + q_dirT = &QQ[d00P * numberOfBCnodes]; + q_dirB = &QQ[d00M * numberOfBCnodes]; + q_dirNE = &QQ[dPP0 * numberOfBCnodes]; + q_dirSW = &QQ[dMM0 * numberOfBCnodes]; + q_dirSE = &QQ[dPM0 * numberOfBCnodes]; + q_dirNW = &QQ[dMP0 * numberOfBCnodes]; + q_dirTE = &QQ[dP0P * numberOfBCnodes]; + q_dirBW = &QQ[dM0M * numberOfBCnodes]; + q_dirBE = &QQ[dP0M * numberOfBCnodes]; + q_dirTW = &QQ[dM0P * numberOfBCnodes]; + q_dirTN = &QQ[d0PP * numberOfBCnodes]; + q_dirBS = &QQ[d0MM * numberOfBCnodes]; + q_dirBN = &QQ[d0PM * numberOfBCnodes]; + q_dirTS = &QQ[d0MP * numberOfBCnodes]; + q_dirTNE = &QQ[dPPP * numberOfBCnodes]; + q_dirTSW = &QQ[dMMP * numberOfBCnodes]; + q_dirTSE = &QQ[dPMP * numberOfBCnodes]; + q_dirTNW = &QQ[dMPP * numberOfBCnodes]; + q_dirBNE = &QQ[dPPM * numberOfBCnodes]; + q_dirBSW = &QQ[dMMM * numberOfBCnodes]; + q_dirBSE = &QQ[dPMM * numberOfBCnodes]; + q_dirBNW = &QQ[dMPM * numberOfBCnodes]; + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int KQK = k_Q[k]; + unsigned int kzero= KQK; + unsigned int ke = KQK; + unsigned int kw = neighborX[KQK]; + unsigned int kn = KQK; + unsigned int ks = neighborY[KQK]; + unsigned int kt = KQK; + unsigned int kb = neighborZ[KQK]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = KQK; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = KQK; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = KQK; + unsigned int kbn = kb; + unsigned int kts = ks; + unsigned int ktse = ks; + unsigned int kbnw = kbw; + unsigned int ktnw = kw; + unsigned int kbse = kbs; + unsigned int ktsw = ksw; + unsigned int kbne = kb; + unsigned int ktne = KQK; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + real f_W = (D.f[dP00])[ke ]; + real f_E = (D.f[dM00])[kw ]; + real f_S = (D.f[d0P0])[kn ]; + real f_N = (D.f[d0M0])[ks ]; + real f_B = (D.f[d00P])[kt ]; + real f_T = (D.f[d00M])[kb ]; + real f_SW = (D.f[dPP0])[kne ]; + real f_NE = (D.f[dMM0])[ksw ]; + real f_NW = (D.f[dPM0])[kse ]; + real f_SE = (D.f[dMP0])[knw ]; + real f_BW = (D.f[dP0P])[kte ]; + real f_TE = (D.f[dM0M])[kbw ]; + real f_TW = (D.f[dP0M])[kbe ]; + real f_BE = (D.f[dM0P])[ktw ]; + real f_BS = (D.f[d0PP])[ktn ]; + real f_TN = (D.f[d0MM])[kbs ]; + real f_TS = (D.f[d0PM])[kbn ]; + real f_BN = (D.f[d0MP])[kts ]; + real f_ZERO = (D.f[d000])[kzero]; + real f_BSW = (D.f[dPPP])[ktne ]; + real f_BNE = (D.f[dMMP])[ktsw ]; + real f_BNW = (D.f[dPMP])[ktse ]; + real f_BSE = (D.f[dMPP])[ktnw ]; + real f_TSW = (D.f[dPPM])[kbne ]; + real f_TNE = (D.f[dMMM])[kbsw ]; + real f_TNW = (D.f[dPMM])[kbse ]; + real f_TSE = (D.f[dMPM])[kbnw ]; + //////////////////////////////////////////////////////////////////////////////// + real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+f_ZERO; + real rho = rho0 + c1o1; + real OORho = c1o1/rho; + real vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); + real vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); + real vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); + //////////////////////////////////////////////////////////////////////////////// + real f27_W = (D27.f[dP00])[ke ]; + real f27_E = (D27.f[dM00])[kw ]; + real f27_S = (D27.f[d0P0])[kn ]; + real f27_N = (D27.f[d0M0])[ks ]; + real f27_B = (D27.f[d00P])[kt ]; + real f27_T = (D27.f[d00M])[kb ]; + real f27_SW = (D27.f[dPP0])[kne ]; + real f27_NE = (D27.f[dMM0])[ksw ]; + real f27_NW = (D27.f[dPM0])[kse ]; + real f27_SE = (D27.f[dMP0])[knw ]; + real f27_BW = (D27.f[dP0P])[kte ]; + real f27_TE = (D27.f[dM0M])[kbw ]; + real f27_TW = (D27.f[dP0M])[kbe ]; + real f27_BE = (D27.f[dM0P])[ktw ]; + real f27_BS = (D27.f[d0PP])[ktn ]; + real f27_TN = (D27.f[d0MM])[kbs ]; + real f27_TS = (D27.f[d0PM])[kbn ]; + real f27_BN = (D27.f[d0MP])[kts ]; + real f27_ZERO = (D27.f[d000])[kzero]; + real f27_BSW = (D27.f[dPPP])[ktne ]; + real f27_BNE = (D27.f[dMMP])[ktsw ]; + real f27_BNW = (D27.f[dPMP])[ktse ]; + real f27_BSE = (D27.f[dMPP])[ktnw ]; + real f27_TSW = (D27.f[dPPM])[kbne ]; + real f27_TNE = (D27.f[dMMM])[kbsw ]; + real f27_TNW = (D27.f[dPMM])[kbse ]; + real f27_TSE = (D27.f[dMPM])[kbnw ]; + //////////////////////////////////////////////////////////////////////////////// + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + //////////////////////////////////////////////////////////////////////////////// + real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + + f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + + f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; + + real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real TempD = temp[k]; + + real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; + } + else + { + D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; + D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; + D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; + D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; + D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; + D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; + D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; + D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; + D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; + D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; + D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; + D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; + D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; + D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; + D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; + D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; + D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; + D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; + D27.f[d000] = &DD27[d000 * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real omegaD = c3o1 - sqrt(c3o1); + real q; + + q = q_dirE[ ke ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]=(c2o1*feqW27_W -(f27_E *(q*omegaD-c1o1)-omegaD*feq27_E *(q-c1o1))/(omegaD-c1o1)+f27_W *q)/(q+c1o1); + q = q_dirW[ kw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]=(c2o1*feqW27_E -(f27_W *(q*omegaD-c1o1)-omegaD*feq27_W *(q-c1o1))/(omegaD-c1o1)+f27_E *q)/(q+c1o1); + q = q_dirN[ kn ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]=(c2o1*feqW27_S -(f27_N *(q*omegaD-c1o1)-omegaD*feq27_N *(q-c1o1))/(omegaD-c1o1)+f27_S *q)/(q+c1o1); + q = q_dirS[ ks ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]=(c2o1*feqW27_N -(f27_S *(q*omegaD-c1o1)-omegaD*feq27_S *(q-c1o1))/(omegaD-c1o1)+f27_N *q)/(q+c1o1); + q = q_dirT[ kt ]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]=(c2o1*feqW27_B -(f27_T *(q*omegaD-c1o1)-omegaD*feq27_T *(q-c1o1))/(omegaD-c1o1)+f27_B *q)/(q+c1o1); + q = q_dirB[ kb ]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]=(c2o1*feqW27_T -(f27_B *(q*omegaD-c1o1)-omegaD*feq27_B *(q-c1o1))/(omegaD-c1o1)+f27_T *q)/(q+c1o1); + q = q_dirNE[ kne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1); + q = q_dirSW[ ksw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1); + q = q_dirSE[ kse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1); + q = q_dirNW[ knw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1); + q = q_dirTE[ kte ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1); + q = q_dirBW[ kbw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1); + q = q_dirBE[ kbe ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1); + q = q_dirTW[ ktw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1); + q = q_dirTN[ ktn ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1); + q = q_dirBS[ kbs ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1); + q = q_dirBN[ kbn ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1); + q = q_dirTS[ kts ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1); + q = q_dirTNE[ktne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1); + q = q_dirBSW[kbsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1); + q = q_dirBNE[kbne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1); + q = q_dirTSW[ktsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1); + q = q_dirTSE[ktse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1); + q = q_dirBNW[kbnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1); + q = q_dirBSE[kbse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1); + q = q_dirTNW[ktnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1); + } +} diff --git a/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionSlipVelocityCompressible.cu b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionSlipVelocityCompressible.cu new file mode 100644 index 0000000000000000000000000000000000000000..252403e631a9aa8bf887c6277ab1ecda61c96490 --- /dev/null +++ b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusionSlipVelocityCompressible.cu @@ -0,0 +1,464 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr +//======================================================================================= +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" + +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; + +//////////////////////////////////////////////////////////////////////////////// +inline __device__ real calcDistributionBC_AD_interpol(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) { + real feq = weight * concentration * (c1o1 + c3o1 * v + c9o2 * v * v * concentration - v_sq * concentration); + return (c1o1 - q) / (c1o1 + q) * ((f - feq * omegaDiffusivity) / (c1o1 - omegaDiffusivity)) + (q * (f + finf) - c6o1 * weight * (jTangential)) / (c1o1 + q); +} +//////////////////////////////////////////////////////////////////////////////// +inline __device__ real calcDistributionBC_AD(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) { + return f - c6o1 * weight * jTangential; +} + + +// has to be excecuted before Fluid BCs +////////////////////////////////////////////////////////////////////////////// +__global__ void AdvectionDiffusionSlipVelocityCompressible_Device( + real *normalX, + real *normalY, + real *normalZ, + real *distributions, + real *distributionsAD, + int *QindexArray, + real *Qarrays, + uint numberOfBCnodes, + real omegaDiffusivity, + uint* neighborX, + uint* neighborY, + uint* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + Distributions27 D; + if (isEvenTimestep) + { + D.f[dP00] = &distributions[dP00 * numberOfLBnodes]; + D.f[dM00] = &distributions[dM00 * numberOfLBnodes]; + D.f[d0P0] = &distributions[d0P0 * numberOfLBnodes]; + D.f[d0M0] = &distributions[d0M0 * numberOfLBnodes]; + D.f[d00P] = &distributions[d00P * numberOfLBnodes]; + D.f[d00M] = &distributions[d00M * numberOfLBnodes]; + D.f[dPP0] = &distributions[dPP0 * numberOfLBnodes]; + D.f[dMM0] = &distributions[dMM0 * numberOfLBnodes]; + D.f[dPM0] = &distributions[dPM0 * numberOfLBnodes]; + D.f[dMP0] = &distributions[dMP0 * numberOfLBnodes]; + D.f[dP0P] = &distributions[dP0P * numberOfLBnodes]; + D.f[dM0M] = &distributions[dM0M * numberOfLBnodes]; + D.f[dP0M] = &distributions[dP0M * numberOfLBnodes]; + D.f[dM0P] = &distributions[dM0P * numberOfLBnodes]; + D.f[d0PP] = &distributions[d0PP * numberOfLBnodes]; + D.f[d0MM] = &distributions[d0MM * numberOfLBnodes]; + D.f[d0PM] = &distributions[d0PM * numberOfLBnodes]; + D.f[d0MP] = &distributions[d0MP * numberOfLBnodes]; + D.f[d000] = &distributions[d000 * numberOfLBnodes]; + D.f[dPPP] = &distributions[dPPP * numberOfLBnodes]; + D.f[dMMP] = &distributions[dMMP * numberOfLBnodes]; + D.f[dPMP] = &distributions[dPMP * numberOfLBnodes]; + D.f[dMPP] = &distributions[dMPP * numberOfLBnodes]; + D.f[dPPM] = &distributions[dPPM * numberOfLBnodes]; + D.f[dMMM] = &distributions[dMMM * numberOfLBnodes]; + D.f[dPMM] = &distributions[dPMM * numberOfLBnodes]; + D.f[dMPM] = &distributions[dMPM * numberOfLBnodes]; + } + else + { + D.f[dM00] = &distributions[dP00 * numberOfLBnodes]; + D.f[dP00] = &distributions[dM00 * numberOfLBnodes]; + D.f[d0M0] = &distributions[d0P0 * numberOfLBnodes]; + D.f[d0P0] = &distributions[d0M0 * numberOfLBnodes]; + D.f[d00M] = &distributions[d00P * numberOfLBnodes]; + D.f[d00P] = &distributions[d00M * numberOfLBnodes]; + D.f[dMM0] = &distributions[dPP0 * numberOfLBnodes]; + D.f[dPP0] = &distributions[dMM0 * numberOfLBnodes]; + D.f[dMP0] = &distributions[dPM0 * numberOfLBnodes]; + D.f[dPM0] = &distributions[dMP0 * numberOfLBnodes]; + D.f[dM0M] = &distributions[dP0P * numberOfLBnodes]; + D.f[dP0P] = &distributions[dM0M * numberOfLBnodes]; + D.f[dM0P] = &distributions[dP0M * numberOfLBnodes]; + D.f[dP0M] = &distributions[dM0P * numberOfLBnodes]; + D.f[d0MM] = &distributions[d0PP * numberOfLBnodes]; + D.f[d0PP] = &distributions[d0MM * numberOfLBnodes]; + D.f[d0MP] = &distributions[d0PM * numberOfLBnodes]; + D.f[d0PM] = &distributions[d0MP * numberOfLBnodes]; + D.f[d000] = &distributions[d000 * numberOfLBnodes]; + D.f[dPPP] = &distributions[dMMM * numberOfLBnodes]; + D.f[dMMP] = &distributions[dPPM * numberOfLBnodes]; + D.f[dPMP] = &distributions[dMPM * numberOfLBnodes]; + D.f[dMPP] = &distributions[dPMM * numberOfLBnodes]; + D.f[dPPM] = &distributions[dMMP * numberOfLBnodes]; + D.f[dMMM] = &distributions[dPPP * numberOfLBnodes]; + D.f[dPMM] = &distributions[dMPP * numberOfLBnodes]; + D.f[dMPM] = &distributions[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + Distributions27 DAD; + if (isEvenTimestep) + { + DAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; + DAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; + DAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; + DAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; + DAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; + DAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; + DAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; + DAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; + DAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; + DAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; + DAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; + DAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; + DAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; + DAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; + DAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; + DAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; + DAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; + DAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; + DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + DAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; + DAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; + DAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; + DAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; + DAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; + DAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; + DAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; + DAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; + } + else + { + DAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; + DAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; + DAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; + DAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; + DAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; + DAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; + DAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; + DAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; + DAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; + DAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; + DAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; + DAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; + DAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; + DAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; + DAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; + DAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; + DAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; + DAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; + DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + DAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; + DAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; + DAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; + DAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; + DAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; + DAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; + DAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; + DAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + const unsigned x = threadIdx.x; + const unsigned y = blockIdx.x; + const unsigned z = blockIdx.y; + + const unsigned nx = blockDim.x; + const unsigned ny = gridDim.x; + + const unsigned k = nx * (ny * z + y) + x; + ////////////////////////////////////////////////////////////////////////// + + if (k < numberOfBCnodes) + { + //////////////////////////////////////////////////////////////////////////////// + real NormX = normalX[k]; + real NormY = normalY[k]; + real NormZ = normalZ[k]; + //////////////////////////////////////////////////////////////////////////////// + real* q_dirE, * q_dirW, * q_dirN, * q_dirS, * q_dirT, * q_dirB, + * q_dirNE, * q_dirSW, * q_dirSE, * q_dirNW, * q_dirTE, * q_dirBW, + * q_dirBE, * q_dirTW, * q_dirTN, * q_dirBS, * q_dirBN, * q_dirTS, + * q_dirTNE, * q_dirTSW, * q_dirTSE, * q_dirTNW, * q_dirBNE, * q_dirBSW, + * q_dirBSE, * q_dirBNW; + q_dirE = &Qarrays[dP00 * numberOfBCnodes]; + q_dirW = &Qarrays[dM00 * numberOfBCnodes]; + q_dirN = &Qarrays[d0P0 * numberOfBCnodes]; + q_dirS = &Qarrays[d0M0 * numberOfBCnodes]; + q_dirT = &Qarrays[d00P * numberOfBCnodes]; + q_dirB = &Qarrays[d00M * numberOfBCnodes]; + q_dirNE = &Qarrays[dPP0 * numberOfBCnodes]; + q_dirSW = &Qarrays[dMM0 * numberOfBCnodes]; + q_dirSE = &Qarrays[dPM0 * numberOfBCnodes]; + q_dirNW = &Qarrays[dMP0 * numberOfBCnodes]; + q_dirTE = &Qarrays[dP0P * numberOfBCnodes]; + q_dirBW = &Qarrays[dM0M * numberOfBCnodes]; + q_dirBE = &Qarrays[dP0M * numberOfBCnodes]; + q_dirTW = &Qarrays[dM0P * numberOfBCnodes]; + q_dirTN = &Qarrays[d0PP * numberOfBCnodes]; + q_dirBS = &Qarrays[d0MM * numberOfBCnodes]; + q_dirBN = &Qarrays[d0PM * numberOfBCnodes]; + q_dirTS = &Qarrays[d0MP * numberOfBCnodes]; + q_dirTNE = &Qarrays[dPPP * numberOfBCnodes]; + q_dirTSW = &Qarrays[dMMP * numberOfBCnodes]; + q_dirTSE = &Qarrays[dPMP * numberOfBCnodes]; + q_dirTNW = &Qarrays[dMPP * numberOfBCnodes]; + q_dirBNE = &Qarrays[dPPM * numberOfBCnodes]; + q_dirBSW = &Qarrays[dMMM * numberOfBCnodes]; + q_dirBSE = &Qarrays[dPMM * numberOfBCnodes]; + q_dirBNW = &Qarrays[dMPM * numberOfBCnodes]; + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int KQK = QindexArray[k]; + unsigned int kzero = KQK; + unsigned int ke = KQK; + unsigned int kw = neighborX[KQK]; + unsigned int kn = KQK; + unsigned int ks = neighborY[KQK]; + unsigned int kt = KQK; + unsigned int kb = neighborZ[KQK]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = KQK; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = KQK; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = KQK; + unsigned int kbn = kb; + unsigned int kts = ks; + unsigned int ktse = ks; + unsigned int kbnw = kbw; + unsigned int ktnw = kw; + unsigned int kbse = kbs; + unsigned int ktsw = ksw; + unsigned int kbne = kb; + unsigned int ktne = KQK; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE, + f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; + + f_W = (D.f[dP00])[ke]; + f_E = (D.f[dM00])[kw]; + f_S = (D.f[d0P0])[kn]; + f_N = (D.f[d0M0])[ks]; + f_B = (D.f[d00P])[kt]; + f_T = (D.f[d00M])[kb]; + f_SW = (D.f[dPP0])[kne]; + f_NE = (D.f[dMM0])[ksw]; + f_NW = (D.f[dPM0])[kse]; + f_SE = (D.f[dMP0])[knw]; + f_BW = (D.f[dP0P])[kte]; + f_TE = (D.f[dM0M])[kbw]; + f_TW = (D.f[dP0M])[kbe]; + f_BE = (D.f[dM0P])[ktw]; + f_BS = (D.f[d0PP])[ktn]; + f_TN = (D.f[d0MM])[kbs]; + f_TS = (D.f[d0PM])[kbn]; + f_BN = (D.f[d0MP])[kts]; + f_BSW = (D.f[dPPP])[ktne]; + f_BNE = (D.f[dMMP])[ktsw]; + f_BNW = (D.f[dPMP])[ktse]; + f_BSE = (D.f[dMPP])[ktnw]; + f_TSW = (D.f[dPPM])[kbne]; + f_TNE = (D.f[dMMM])[kbsw]; + f_TNW = (D.f[dPMM])[kbse]; + f_TSE = (D.f[dMPM])[kbnw]; + //////////////////////////////////////////////////////////////////////////////// + real vx1, vx2, vx3, drho, q; + drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + + f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + + f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); + + vx1 = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + + ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + + (f_E - f_W)) / (c1o1 + drho); + + + vx2 = ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + + ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + + (f_N - f_S)) / (c1o1 + drho); + + vx3 = (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + + (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + + (f_T - f_B)) / (c1o1 + drho); + + real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho); + + //////////////////////////////////////////////////////////////////////////////// + f_W = (DAD.f[dP00])[ke]; + f_E = (DAD.f[dM00])[kw]; + f_S = (DAD.f[d0P0])[kn]; + f_N = (DAD.f[d0M0])[ks]; + f_B = (DAD.f[d00P])[kt]; + f_T = (DAD.f[d00M])[kb]; + f_SW = (DAD.f[dPP0])[kne]; + f_NE = (DAD.f[dMM0])[ksw]; + f_NW = (DAD.f[dPM0])[kse]; + f_SE = (DAD.f[dMP0])[knw]; + f_BW = (DAD.f[dP0P])[kte]; + f_TE = (DAD.f[dM0M])[kbw]; + f_TW = (DAD.f[dP0M])[kbe]; + f_BE = (DAD.f[dM0P])[ktw]; + f_BS = (DAD.f[d0PP])[ktn]; + f_TN = (DAD.f[d0MM])[kbs]; + f_TS = (DAD.f[d0PM])[kbn]; + f_BN = (DAD.f[d0MP])[kts]; + f_BSW = (DAD.f[dPPP])[ktne]; + f_BNE = (DAD.f[dMMP])[ktsw]; + f_BNW = (DAD.f[dPMP])[ktse]; + f_BSE = (DAD.f[dMPP])[ktnw]; + f_TSW = (DAD.f[dPPM])[kbne]; + f_TNE = (DAD.f[dMMM])[kbsw]; + f_TNW = (DAD.f[dPMM])[kbse]; + f_TSE = (DAD.f[dMPM])[kbnw]; + ////////////////////////////////////////////////////////////////////////// + if (!isEvenTimestep) + { + DAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; + DAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; + DAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; + DAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; + DAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; + DAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; + DAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; + DAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; + DAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; + DAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; + DAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; + DAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; + DAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; + DAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; + DAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; + DAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; + DAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; + DAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; + DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + DAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; + DAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; + DAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; + DAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; + DAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; + DAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; + DAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; + DAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; + } + else + { + DAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; + DAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; + DAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; + DAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; + DAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; + DAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; + DAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; + DAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; + DAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; + DAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; + DAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; + DAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; + DAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; + DAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; + DAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; + DAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; + DAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; + DAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; + DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + DAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; + DAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; + DAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; + DAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; + DAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; + DAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; + DAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; + DAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real concentration = + f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + + f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + + f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); + + real jx1 = + (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + + ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + + (f_E - f_W)) - (vx1 * concentration); + + real jx2 = + ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + + ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + + (f_N - f_S)) - (vx2 * concentration); + + real jx3 = + (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + + (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + + (f_T - f_B)) - (vx3 * concentration); + + real NormJ = jx1 * NormX + jx2 * NormY + jx3 * NormZ; + + real jTan1 = jx1 - NormJ * NormX; + real jTan2 = jx2 - NormJ * NormY; + real jTan3 = jx3 - NormJ * NormZ; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + q = q_dirE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dM00])[kw ] = calcDistributionBC_AD(q, c2o27, vx1, cu_sq, f_E, f_W, omegaDiffusivity, jTan1, concentration); } + q = q_dirW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dP00])[ke ] = calcDistributionBC_AD(q, c2o27, -vx1, cu_sq, f_W, f_E, omegaDiffusivity, -jTan1, concentration); } + q = q_dirN[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0M0])[ks ] = calcDistributionBC_AD(q, c2o27, vx2, cu_sq, f_N, f_S, omegaDiffusivity, jTan2, concentration); } + q = q_dirS[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0P0])[kn ] = calcDistributionBC_AD(q, c2o27, -vx2, cu_sq, f_S, f_N, omegaDiffusivity, -jTan2, concentration); } + q = q_dirT[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d00M])[kb ] = calcDistributionBC_AD(q, c2o27, vx3, cu_sq, f_T, f_B, omegaDiffusivity, jTan3, concentration); } + q = q_dirB[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d00P])[kt ] = calcDistributionBC_AD(q, c2o27, -vx3, cu_sq, f_B, f_T, omegaDiffusivity, -jTan3, concentration); } + q = q_dirNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMM0])[ksw ] = calcDistributionBC_AD(q, c1o54, vx1+vx2, cu_sq, f_NE, f_SW, omegaDiffusivity, jTan1+jTan2, concentration); } + q = q_dirSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPP0])[kne ] = calcDistributionBC_AD(q, c1o54, -vx1-vx2, cu_sq, f_SW, f_NE, omegaDiffusivity, -jTan1-jTan2, concentration); } + q = q_dirSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMP0])[knw ] = calcDistributionBC_AD(q, c1o54, vx1-vx2, cu_sq, f_SE, f_NW, omegaDiffusivity, jTan1-jTan2, concentration); } + q = q_dirNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPM0])[kse ] = calcDistributionBC_AD(q, c1o54, -vx1+vx2, cu_sq, f_NW, f_SE, omegaDiffusivity, -jTan1+jTan2, concentration); } + q = q_dirTE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dM0M])[kbw ] = calcDistributionBC_AD(q, c1o54, vx1 +vx3, cu_sq, f_TE, f_BW, omegaDiffusivity, jTan1 +jTan3, concentration); } + q = q_dirBW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dP0P])[kte ] = calcDistributionBC_AD(q, c1o54, -vx1 -vx3, cu_sq, f_BW, f_TE, omegaDiffusivity, -jTan1 -jTan3, concentration); } + q = q_dirBE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dM0P])[ktw ] = calcDistributionBC_AD(q, c1o54, vx1 -vx3, cu_sq, f_BE, f_TW, omegaDiffusivity, jTan1 -jTan3, concentration); } + q = q_dirTW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dP0M])[kbe ] = calcDistributionBC_AD(q, c1o54, -vx1 +vx3, cu_sq, f_TW, f_BE, omegaDiffusivity, -jTan1 +jTan3, concentration); } + q = q_dirTN[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0MM])[kbs ] = calcDistributionBC_AD(q, c1o54, vx2+vx3, cu_sq, f_TN, f_BS, omegaDiffusivity, jTan2+jTan3, concentration); } + q = q_dirBS[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0PP])[ktn ] = calcDistributionBC_AD(q, c1o54, -vx2-vx3, cu_sq, f_BS, f_TN, omegaDiffusivity, -jTan2-jTan3, concentration); } + q = q_dirBN[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0MP])[kts ] = calcDistributionBC_AD(q, c1o54, vx2-vx3, cu_sq, f_BN, f_TS, omegaDiffusivity, jTan2-jTan3, concentration); } + q = q_dirTS[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0PM])[kbn ] = calcDistributionBC_AD(q, c1o54, -vx2+vx3, cu_sq, f_TS, f_BN, omegaDiffusivity, -jTan2+jTan3, concentration); } + q = q_dirTNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMMM])[kbsw] = calcDistributionBC_AD(q, c1o216, vx1+vx2+vx3, cu_sq, f_TNE, f_BSW, omegaDiffusivity, jTan1+jTan2+jTan3, concentration); } + q = q_dirBSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPPP])[ktne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2-vx3, cu_sq, f_BSW, f_TNE, omegaDiffusivity, -jTan1-jTan2-jTan3, concentration); } + q = q_dirBNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMMP])[ktsw] = calcDistributionBC_AD(q, c1o216, vx1+vx2-vx3, cu_sq, f_BNE, f_TSW, omegaDiffusivity, jTan1+jTan2-jTan3, concentration); } + q = q_dirTSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPPM])[kbne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2+vx3, cu_sq, f_TSW, f_BNE, omegaDiffusivity, -jTan1-jTan2+jTan3, concentration); } + q = q_dirTSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMPM])[kbnw] = calcDistributionBC_AD(q, c1o216, vx1-vx2+vx3, cu_sq, f_TSE, f_BNW, omegaDiffusivity, jTan1-jTan2+jTan3, concentration); } + q = q_dirBNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPMP])[ktse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2-vx3, cu_sq, f_BNW, f_TSE, omegaDiffusivity, -jTan1+jTan2-jTan3, concentration); } + q = q_dirBSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMPP])[ktnw] = calcDistributionBC_AD(q, c1o216, vx1-vx2-vx3, cu_sq, f_BSE, f_TNW, omegaDiffusivity, jTan1-jTan2-jTan3, concentration); } + q = q_dirTNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPMM])[kbse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2+vx3, cu_sq, f_TNW, f_BSE, omegaDiffusivity, -jTan1+jTan2+jTan3, concentration); } + } +} diff --git a/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion_Device.cuh b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion_Device.cuh new file mode 100644 index 0000000000000000000000000000000000000000..6a7aacc4c82f3294de0946ea50dc800a4eb057c5 --- /dev/null +++ b/src/gpu/core/BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion_Device.cuh @@ -0,0 +1,84 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr +//======================================================================================= +#ifndef AdvectionDiffusion_Device_H +#define AdvectionDiffusion_Device_H + +#include "LBM/LB.h" + +////////////////////////////////////////////////////////////////////////// +//! \brief \ref AD_SlipVelDeviceComp : device function for the slip-AD boundary condition +__global__ void AdvectionDiffusionSlipVelocityCompressible_Device( + real * normalX, + real * normalY, + real * normalZ, + real * distributions, + real * distributionsAD, + int* QindexArray, + real * Qarrays, + uint numberOfBCnodes, + real omegaDiffusivity, + uint * neighborX, + uint * neighborY, + uint * neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep); + +__global__ void AdvectionDiffusionDirichlet_Device( + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep); + +__global__ void AdvectionDiffusionBounceBack_Device( + real* DD, + real* DD27, + real* temp, + real diffusivity, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep); + +#endif diff --git a/src/gpu/core/Calculation/UpdateGrid27.cpp b/src/gpu/core/Calculation/UpdateGrid27.cpp index 697c7c3b5db4932f6e6ea89fe946b6ebdb48eda6..8ddb7b6556e94be87c1af538e3026b10994ee703 100644 --- a/src/gpu/core/Calculation/UpdateGrid27.cpp +++ b/src/gpu/core/Calculation/UpdateGrid27.cpp @@ -1,3 +1,33 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// This file is part of VirtualFluids. VirtualFluids is free software: you can +// redistribute it and/or modify it under the terms of the GNU General Public +// License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. +// +//! \author Martin Schoenherr, Stephan Lenz, Anna Wellmann +//======================================================================================= #include "UpdateGrid27.h" #include <cuda_runtime.h> @@ -127,13 +157,6 @@ void UpdateGrid27::exchangeMultiGPU(int level, CudaStreamIndex streamIndex) exchangePostCollDataADZGPU27(para.get(), comm, cudaMemoryManager.get(), level); } - ////////////////////////////////////////////////////////////////////////// - // D E P R E C A T E D - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // 1D domain decomposition - // exchangePostCollDataGPU27(para, comm, level); } void UpdateGrid27::exchangeMultiGPU_noStreams_withPrepare(int level, bool useReducedComm) { @@ -236,9 +259,8 @@ void UpdateGrid27::postCollisionBC(int level, uint t) if (para->getDiffOn()) { this->adKernelManager->runADgeometryBCKernel(level); - this->adKernelManager->runADveloBCKernel(level); + this->adKernelManager->runADDirichletBCKernel(level); this->adKernelManager->runADslipBCKernel(level); - this->adKernelManager->runADpressureBCKernel(level); } } diff --git a/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu b/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu deleted file mode 100644 index d97e6ea567e44970816242aee11115b3975542f5..0000000000000000000000000000000000000000 --- a/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu +++ /dev/null @@ -1,7147 +0,0 @@ -/* Device code */ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" - -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADPress7( real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions7 D7; - if (isEvenTimestep==true) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB;//, - // *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - // *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - // *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - // *q_dirBSE, *q_dirBNW; - - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - //q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - //q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - //q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - //q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - //q_dirTE = &QQ[dP0P * numberOfBCnodes]; - //q_dirBW = &QQ[dM0M * numberOfBCnodes]; - //q_dirBE = &QQ[dP0M * numberOfBCnodes]; - //q_dirTW = &QQ[dM0P * numberOfBCnodes]; - //q_dirTN = &QQ[d0PP * numberOfBCnodes]; - //q_dirBS = &QQ[d0MM * numberOfBCnodes]; - //q_dirBN = &QQ[d0PM * numberOfBCnodes]; - //q_dirTS = &QQ[d0MP * numberOfBCnodes]; - //q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - //q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - //q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - //q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - //q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - //q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - //q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - //q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - ////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE, - f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; - - f_W = (D.f[dP00])[ke ]; - f_E = (D.f[dM00])[kw ]; - f_S = (D.f[d0P0])[kn ]; - f_N = (D.f[d0M0])[ks ]; - f_B = (D.f[d00P])[kt ]; - f_T = (D.f[d00M])[kb ]; - f_SW = (D.f[dPP0])[kne ]; - f_NE = (D.f[dMM0])[ksw ]; - f_NW = (D.f[dPM0])[kse ]; - f_SE = (D.f[dMP0])[knw ]; - f_BW = (D.f[dP0P])[kte ]; - f_TE = (D.f[dM0M])[kbw ]; - f_TW = (D.f[dP0M])[kbe ]; - f_BE = (D.f[dM0P])[ktw ]; - f_BS = (D.f[d0PP])[ktn ]; - f_TN = (D.f[d0MM])[kbs ]; - f_TS = (D.f[d0PM])[kbn ]; - f_BN = (D.f[d0MP])[kts ]; - f_BSW = (D.f[dPPP])[ktne ]; - f_BNE = (D.f[dMMP])[ktsw ]; - f_BNW = (D.f[dPMP])[ktse ]; - f_BSE = (D.f[dMPP])[ktnw ]; - f_TSW = (D.f[dPPM])[kbne ]; - f_TNE = (D.f[dMMM])[kbsw ]; - f_TNW = (D.f[dPMM])[kbse ]; - f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - /*real drho*/; - //real vx1_Inflow = zero; - //real vx2_Inflow = zero; - //real vx3_Inflow = velo[k]; - //real ux_sq_Inflow = vx1_Inflow * vx1_Inflow; - //real uy_sq_Inflow = vx2_Inflow * vx2_Inflow; - //real uz_sq_Inflow = vx3_Inflow * vx3_Inflow; - - - //drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - // f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - // f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); - - //real vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - //real vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //real vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - - real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[d000])[kzero]); - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - real vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - real vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - real vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - - //real cu_sq =1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - real ux_sq = vx1 * vx1; - real uy_sq = vx2 * vx2; - real uz_sq = vx3 * vx3; - real omegaD = c3o1 - sqrt(c3o1); - real Lam = -(c1o2-c1o1/omegaD); - real nue_d = Lam/c3o1; - //real ae = zero; - real ae = diffusivity/nue_d - c1o1; - - real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B; - real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B; - real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B; - //real TempD = temp[k]; - - - f7_ZERO = (D7.f[0])[kzero]; - f7_W = (D7.f[1])[ke ]; - f7_E = (D7.f[2])[kw ]; - f7_S = (D7.f[3])[kn ]; - f7_N = (D7.f[4])[ks ]; - f7_B = (D7.f[5])[kt ]; - f7_T = (D7.f[6])[kb ]; - - real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B; - - //feq7_ZERO = ConcD*(c1o3*(ae*(-3.0))-(ux_sq+uy_sq+uz_sq)); - feq7_E = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2); - feq7_W = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2); - feq7_N = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2); - feq7_S = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2); - feq7_T = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2); - feq7_B = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2); - - //feq7_ZERO = TempD*(c1o3*(ae*(-3.0f))-(ux_sq+uy_sq+uz_sq)); - feqW7_E = feq7_E;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2); - feqW7_W = feq7_W;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2); - feqW7_N = feq7_N;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2); - feqW7_S = feq7_S;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2); - feqW7_T = feq7_T;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2); - feqW7_B = feq7_B;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2); - - ////////////////////////////////////////////////////////////////////////// - //pointertausch - if (isEvenTimestep==false) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[1])[ke ] = f7_E - feq7_E + feqW7_W; //dP00 - //(D7.f[2])[kw ] = f7_W - feq7_W + feqW7_E; //dM00 - //(D7.f[3])[kn ] = f7_N - feq7_N + feqW7_S; //d0P0 - //(D7.f[4])[ks ] = f7_S - feq7_S + feqW7_N; //d0M0 - //(D7.f[5])[kt ] = f7_T - feq7_T + feqW7_B; //d00P - //(D7.f[6])[kb ] = f7_B - feq7_B + feqW7_T; //d00M - - ////////////////////////////////////////////////////////////////////////// - //mit Q's - real /*feq,*/ q; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[2])[kw]=(c2o1*feqW7_W-(f7_E*(q*omegaD-c1o1)-omegaD*feq7_E*(q-c1o1))/(omegaD-c1o1)+f7_W*q)/(q+c1o1);//f7_W - feq7_W + feqW7_E; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[1])[ke]=(c2o1*feqW7_E-(f7_W*(q*omegaD-c1o1)-omegaD*feq7_W*(q-c1o1))/(omegaD-c1o1)+f7_E*q)/(q+c1o1);//f7_E - feq7_E + feqW7_W; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[4])[ks]=(c2o1*feqW7_S-(f7_N*(q*omegaD-1.)-omegaD*feq7_N*(q-c1o1))/(omegaD-c1o1)+f7_S*q)/(q+c1o1);//f7_S - feq7_S + feqW7_N; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[3])[kn]=(c2o1*feqW7_N-(f7_S*(q*omegaD-c1o1)-omegaD*feq7_S*(q-c1o1))/(omegaD-c1o1)+f7_N*q)/(q+c1o1);//f7_N - feq7_N + feqW7_S; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[6])[kb]=(c2o1*feqW7_B-(f7_T*(q*omegaD-1.)-omegaD*feq7_T*(q-c1o1))/(omegaD-c1o1)+f7_B*q)/(q+c1o1);//f7_B - feq7_B + feqW7_T; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[5])[kt]=(c2o1*feqW7_T-(f7_B*(q*omegaD-c1o1)-omegaD*feq7_B*(q-c1o1))/(omegaD-c1o1)+f7_T*q)/(q+c1o1);//f7_T - feq7_T + feqW7_B; - } - - //////////////////////////////////////////////////////////////////////////// - ////ohne Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B; - //} - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADPress27( real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[dP00])[ke ]; - real f_E = (D.f[dM00])[kw ]; - real f_S = (D.f[d0P0])[kn ]; - real f_N = (D.f[d0M0])[ks ]; - real f_B = (D.f[d00P])[kt ]; - real f_T = (D.f[d00M])[kb ]; - real f_SW = (D.f[dPP0])[kne ]; - real f_NE = (D.f[dMM0])[ksw ]; - real f_NW = (D.f[dPM0])[kse ]; - real f_SE = (D.f[dMP0])[knw ]; - real f_BW = (D.f[dP0P])[kte ]; - real f_TE = (D.f[dM0M])[kbw ]; - real f_TW = (D.f[dP0M])[kbe ]; - real f_BE = (D.f[dM0P])[ktw ]; - real f_BS = (D.f[d0PP])[ktn ]; - real f_TN = (D.f[d0MM])[kbs ]; - real f_TS = (D.f[d0PM])[kbn ]; - real f_BN = (D.f[d0MP])[kts ]; - real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne ]; - real f_BNE = (D.f[dMMP])[ktsw ]; - real f_BNW = (D.f[dPMP])[ktse ]; - real f_BSE = (D.f[dMPP])[ktnw ]; - real f_TSW = (D.f[dPPM])[kbne ]; - real f_TNE = (D.f[dMMM])[kbsw ]; - real f_TNW = (D.f[dPMM])[kbse ]; - real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3, /*drho, feq,*/ q; - //drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - // f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - // f_T + f_B + f_N + f_S + f_E + f_W + f_ZERO; - - //vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - - //vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ f_ZERO; - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - real f27_W = (D27.f[dP00])[ke ]; - real f27_E = (D27.f[dM00])[kw ]; - real f27_S = (D27.f[d0P0])[kn ]; - real f27_N = (D27.f[d0M0])[ks ]; - real f27_B = (D27.f[d00P])[kt ]; - real f27_T = (D27.f[d00M])[kb ]; - real f27_SW = (D27.f[dPP0])[kne ]; - real f27_NE = (D27.f[dMM0])[ksw ]; - real f27_NW = (D27.f[dPM0])[kse ]; - real f27_SE = (D27.f[dMP0])[knw ]; - real f27_BW = (D27.f[dP0P])[kte ]; - real f27_TE = (D27.f[dM0M])[kbw ]; - real f27_TW = (D27.f[dP0M])[kbe ]; - real f27_BE = (D27.f[dM0P])[ktw ]; - real f27_BS = (D27.f[d0PP])[ktn ]; - real f27_TN = (D27.f[d0MM])[kbs ]; - real f27_TS = (D27.f[d0PM])[kbn ]; - real f27_BN = (D27.f[d0MP])[kts ]; - real f27_ZERO = (D27.f[d000])[kzero]; - real f27_BSW = (D27.f[dPPP])[ktne ]; - real f27_BNE = (D27.f[dMMP])[ktsw ]; - real f27_BNW = (D27.f[dPMP])[ktse ]; - real f27_BSE = (D27.f[dMPP])[ktnw ]; - real f27_TSW = (D27.f[dPPM])[kbne ]; - real f27_TNE = (D27.f[dMMM])[kbsw ]; - real f27_TNW = (D27.f[dPMM])[kbse ]; - real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - ////real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - //real feq27_E = c2over27* (ConcD+(one+ConcD)*(three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq)); - //real feq27_W = c2over27* (ConcD+(one+ConcD)*(three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq)); - //real feq27_N = c2over27* (ConcD+(one+ConcD)*(three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq)); - //real feq27_S = c2over27* (ConcD+(one+ConcD)*(three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq)); - //real feq27_T = c2over27* (ConcD+(one+ConcD)*(three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq)); - //real feq27_B = c2over27* (ConcD+(one+ConcD)*(three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq)); - //real feq27_NE = c1over54* (ConcD+(one+ConcD)*(three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - //real feq27_SW = c1over54* (ConcD+(one+ConcD)*(three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - //real feq27_SE = c1over54* (ConcD+(one+ConcD)*(three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - //real feq27_NW = c1over54* (ConcD+(one+ConcD)*(three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - //real feq27_TE = c1over54* (ConcD+(one+ConcD)*(three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - //real feq27_BW = c1over54* (ConcD+(one+ConcD)*(three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - //real feq27_BE = c1over54* (ConcD+(one+ConcD)*(three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - //real feq27_TW = c1over54* (ConcD+(one+ConcD)*(three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - //real feq27_TN = c1over54* (ConcD+(one+ConcD)*(three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - //real feq27_BS = c1over54* (ConcD+(one+ConcD)*(three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - //real feq27_BN = c1over54* (ConcD+(one+ConcD)*(three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - //real feq27_TS = c1over54* (ConcD+(one+ConcD)*(three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - //real feq27_TNE = c1over216*(ConcD+(one+ConcD)*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - //real feq27_BSW = c1over216*(ConcD+(one+ConcD)*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - //real feq27_BNE = c1over216*(ConcD+(one+ConcD)*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - //real feq27_TSW = c1over216*(ConcD+(one+ConcD)*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - //real feq27_TSE = c1over216*(ConcD+(one+ConcD)*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - //real feq27_BNW = c1over216*(ConcD+(one+ConcD)*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - //real feq27_BSE = c1over216*(ConcD+(one+ConcD)*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - //real feq27_TNW = c1over216*(ConcD+(one+ConcD)*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); - // - real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //real TempD = temp[k]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // velocity inflow - //vx1 = zero; - //vx2 = zero; - //vx3 = velo[k]; - - //real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - real feqW27_E = feq27_E ;// c2over27* TempD*(one+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); - real feqW27_W = feq27_W ;// c2over27* TempD*(one+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); - real feqW27_N = feq27_N ;// c2over27* TempD*(one+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); - real feqW27_S = feq27_S ;// c2over27* TempD*(one+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); - real feqW27_T = feq27_T ;// c2over27* TempD*(one+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); - real feqW27_B = feq27_B ;// c2over27* TempD*(one+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); - real feqW27_NE = feq27_NE ;// c1over54* TempD*(one+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feqW27_SW = feq27_SW ;// c1over54* TempD*(one+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feqW27_SE = feq27_SE ;// c1over54* TempD*(one+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feqW27_NW = feq27_NW ;// c1over54* TempD*(one+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feqW27_TE = feq27_TE ;// c1over54* TempD*(one+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feqW27_BW = feq27_BW ;// c1over54* TempD*(one+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feqW27_BE = feq27_BE ;// c1over54* TempD*(one+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feqW27_TW = feq27_TW ;// c1over54* TempD*(one+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feqW27_TN = feq27_TN ;// c1over54* TempD*(one+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feqW27_BS = feq27_BS ;// c1over54* TempD*(one+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feqW27_BN = feq27_BN ;// c1over54* TempD*(one+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feqW27_TS = feq27_TS ;// c1over54* TempD*(one+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feqW27_TNE = feq27_TNE;// c1over216*TempD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feqW27_BSW = feq27_BSW;// c1over216*TempD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feqW27_BNE = feq27_BNE;// c1over216*TempD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feqW27_TSW = feq27_TSW;// c1over216*TempD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feqW27_TSE = feq27_TSE;// c1over216*TempD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feqW27_BNW = feq27_BNW;// c1over216*TempD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feqW27_BSE = feq27_BSE;// c1over216*TempD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feqW27_TNW = feq27_TNW;// c1over216*TempD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]=(c2o1*feqW27_W -(f27_E *(q*omegaD-c1o1)-omegaD*feq27_E *(q-c1o1))/(omegaD-c1o1)+f27_W *q)/(q+c1o1); - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]=(c2o1*feqW27_E -(f27_W *(q*omegaD-c1o1)-omegaD*feq27_W *(q-c1o1))/(omegaD-c1o1)+f27_E *q)/(q+c1o1); - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]=(c2o1*feqW27_S -(f27_N *(q*omegaD-c1o1)-omegaD*feq27_N *(q-c1o1))/(omegaD-c1o1)+f27_S *q)/(q+c1o1); - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]=(c2o1*feqW27_N -(f27_S *(q*omegaD-c1o1)-omegaD*feq27_S *(q-c1o1))/(omegaD-c1o1)+f27_N *q)/(q+c1o1); - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]=(c2o1*feqW27_B -(f27_T *(q*omegaD-c1o1)-omegaD*feq27_T *(q-c1o1))/(omegaD-c1o1)+f27_B *q)/(q+c1o1); - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]=(c2o1*feqW27_T -(f27_B *(q*omegaD-c1o1)-omegaD*feq27_B *(q-c1o1))/(omegaD-c1o1)+f27_T *q)/(q+c1o1); - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1); - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1); - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1); - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1); - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1); - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1); - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1); - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1); - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1); - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1); - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1); - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1); - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1); - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1); - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1); - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1); - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1); - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1); - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1); - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADPressNEQNeighbor27( - real* DD, - real* DD27, - int* k_Q, - int* k_N, - int numberOfBCnodes, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep - ) -{ - Distributions27 D; - if (isEvenTimestep == true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep == true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if (k < numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - //Fluid - BC Nodes - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero = KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //distributions - real f_W = (D.f[dP00])[ke]; - real f_E = (D.f[dM00])[kw]; - real f_S = (D.f[d0P0])[kn]; - real f_N = (D.f[d0M0])[ks]; - real f_B = (D.f[d00P])[kt]; - real f_T = (D.f[d00M])[kb]; - real f_SW = (D.f[dPP0])[kne]; - real f_NE = (D.f[dMM0])[ksw]; - real f_NW = (D.f[dPM0])[kse]; - real f_SE = (D.f[dMP0])[knw]; - real f_BW = (D.f[dP0P])[kte]; - real f_TE = (D.f[dM0M])[kbw]; - real f_TW = (D.f[dP0M])[kbe]; - real f_BE = (D.f[dM0P])[ktw]; - real f_BS = (D.f[d0PP])[ktn]; - real f_TN = (D.f[d0MM])[kbs]; - real f_TS = (D.f[d0PM])[kbn]; - real f_BN = (D.f[d0MP])[kts]; - real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne]; - real f_BNE = (D.f[dMMP])[ktsw]; - real f_BNW = (D.f[dPMP])[ktse]; - real f_BSE = (D.f[dMPP])[ktnw]; - real f_TSW = (D.f[dPPM])[kbne]; - real f_TNE = (D.f[dMMM])[kbsw]; - real f_TNW = (D.f[dPMM])[kbse]; - real f_TSE = (D.f[dMPM])[kbnw]; - //////////////////////////////////////////////////////////////////////////////// - //macroscopic values - real rho0 = - (f_TNE + f_BSW) + (f_TSW + f_BNE) + (f_TSE + f_BNW) + (f_TNW + f_BSE) + - (f_NE + f_SW ) + (f_NW + f_SE ) + (f_TE + f_BW ) + (f_BE + f_TW ) + - (f_TN + f_BS ) + (f_BN + f_TS ) + - (f_E + f_W ) + (f_N + f_S ) + (f_T + f_B ) + f_ZERO; - real rho = rho0 + c1o1; - real OORho = c1o1 / rho; - - real vx1 = - OORho*((f_TNE - f_BSW) + (f_BNE - f_TSW) + (f_TSE - f_BNW) + (f_BSE - f_TNW) + - (f_NE - f_SW) + (f_SE - f_NW) + (f_TE - f_BW) + (f_BE - f_TW) + (f_E - f_W)); - real vx2 = - OORho*((f_TNE - f_BSW) + (f_BNE - f_TSW) + (f_BNW - f_TSE) + (f_TNW - f_BSE) + - (f_NE - f_SW) + (f_NW - f_SE) + (f_TN - f_BS) + (f_BN - f_TS) + (f_N - f_S)); - real vx3 = - OORho*((f_TNE - f_BSW) + (f_TSW - f_BNE) + (f_TSE - f_BNW) + (f_TNW - f_BSE) + - (f_TE - f_BW) + (f_TW - f_BE) + (f_TN - f_BS) + (f_TS - f_BN) + (f_T - f_B)); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //AD - BC Nodes - //////////////////////////////////////////////////////////////////////////////// - //distributions - real f27_W = (D27.f[dP00])[ke]; - real f27_E = (D27.f[dM00])[kw]; - real f27_S = (D27.f[d0P0])[kn]; - real f27_N = (D27.f[d0M0])[ks]; - real f27_B = (D27.f[d00P])[kt]; - real f27_T = (D27.f[d00M])[kb]; - real f27_SW = (D27.f[dPP0])[kne]; - real f27_NE = (D27.f[dMM0])[ksw]; - real f27_NW = (D27.f[dPM0])[kse]; - real f27_SE = (D27.f[dMP0])[knw]; - real f27_BW = (D27.f[dP0P])[kte]; - real f27_TE = (D27.f[dM0M])[kbw]; - real f27_TW = (D27.f[dP0M])[kbe]; - real f27_BE = (D27.f[dM0P])[ktw]; - real f27_BS = (D27.f[d0PP])[ktn]; - real f27_TN = (D27.f[d0MM])[kbs]; - real f27_TS = (D27.f[d0PM])[kbn]; - real f27_BN = (D27.f[d0MP])[kts]; - real f27_ZERO = (D27.f[d000])[kzero]; - real f27_BSW = (D27.f[dPPP])[ktne]; - real f27_BNE = (D27.f[dMMP])[ktsw]; - real f27_BNW = (D27.f[dPMP])[ktse]; - real f27_BSE = (D27.f[dMPP])[ktnw]; - real f27_TSW = (D27.f[dPPM])[kbne]; - real f27_TNE = (D27.f[dMMM])[kbsw]; - real f27_TNW = (D27.f[dPMM])[kbse]; - real f27_TSE = (D27.f[dMPM])[kbnw]; - //////////////////////////////////////////////////////////////////////////////// - real cusq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - //concentration - real ConcD = - (f27_TNE + f27_BSW) + (f27_TSW + f27_BNE) + (f27_TSE + f27_BNW) + (f27_TNW + f27_BSE) + - (f27_NE + f27_SW ) + (f27_NW + f27_SE ) + (f27_TE + f27_BW ) + (f27_BE + f27_TW ) + - (f27_TN + f27_BS ) + (f27_BN + f27_TS ) + - (f27_E + f27_W ) + (f27_N + f27_S ) + (f27_T + f27_B ) + f27_ZERO; - //////////////////////////////////////////////////////////////////////////////// - //calculate non-equilibrium - f27_ZERO -= c8o27* (ConcD-(ConcD+c1o1)*cusq); - f27_E -= c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); - f27_W -= c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); - f27_N -= c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); - f27_S -= c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); - f27_T -= c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); - f27_B -= c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); - f27_NE -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - f27_SW -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - f27_SE -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - f27_NW -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - f27_TE -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - f27_BW -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - f27_BE -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - f27_TW -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - f27_TN -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); - f27_BS -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - f27_BN -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); - f27_TS -= c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - f27_TNE -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - f27_BSW -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - f27_BNE -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - f27_TSW -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - f27_TSE -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - f27_BNW -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - f27_BSE -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - f27_TNW -= c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - //////////////////////////////////////////////////////////////////////////////// - ConcD = c0o1; - //////////////////////////////////////////////////////////////////////////////// - //add BC equilibrium - f27_ZERO += c8o27* (ConcD-(ConcD+c1o1)*cusq); - f27_E += c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); - f27_W += c2o27* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); - f27_N += c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); - f27_S += c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); - f27_T += c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); - f27_B += c2o27* (ConcD+(ConcD+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); - f27_NE += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - f27_SW += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - f27_SE += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - f27_NW += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - f27_TE += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - f27_BW += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - f27_BE += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - f27_TW += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - f27_TN += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); - f27_BS += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - f27_BN += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); - f27_TS += c1o54* (ConcD+(ConcD+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - f27_TNE += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - f27_BSW += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - f27_BNE += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - f27_TSW += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - f27_TSE += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - f27_BNW += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - f27_BSE += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - f27_TNW += c1o216*(ConcD+(ConcD+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - __syncthreads(); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Neighbors of BC Nodes - //////////////////////////////////////////////////////////////////////////////// - //index neighbor - unsigned int KNQK = k_N[k]; - unsigned int kNzero = KNQK; - unsigned int kNe = KNQK; - unsigned int kNw = neighborX[KNQK]; - unsigned int kNn = KNQK; - unsigned int kNs = neighborY[KNQK]; - unsigned int kNt = KNQK; - unsigned int kNb = neighborZ[KNQK]; - unsigned int kNsw = neighborY[kNw]; - unsigned int kNne = KNQK; - unsigned int kNse = kNs; - unsigned int kNnw = kNw; - unsigned int kNbw = neighborZ[kNw]; - unsigned int kNte = KNQK; - unsigned int kNbe = kNb; - unsigned int kNtw = kNw; - unsigned int kNbs = neighborZ[kNs]; - unsigned int kNtn = KNQK; - unsigned int kNbn = kNb; - unsigned int kNts = kNs; - unsigned int kNtse = kNs; - unsigned int kNbnw = kNbw; - unsigned int kNtnw = kNw; - unsigned int kNbse = kNbs; - unsigned int kNtsw = kNsw; - unsigned int kNbne = kNb; - unsigned int kNtne = KNQK; - unsigned int kNbsw = neighborZ[kNsw]; - //////////////////////////////////////////////////////////////////////////////// - //update distributions at neighbor nodes - (D27.f[dP00])[kNe ] = f27_W ; - (D27.f[dM00])[kNw ] = f27_E ; - (D27.f[d0P0])[kNn ] = f27_S ; - (D27.f[d0M0])[kNs ] = f27_N ; - (D27.f[d00P])[kNt ] = f27_B ; - (D27.f[d00M])[kNb ] = f27_T ; - (D27.f[dPP0])[kNne ] = f27_SW ; - (D27.f[dMM0])[kNsw ] = f27_NE ; - (D27.f[dPM0])[kNse ] = f27_NW ; - (D27.f[dMP0])[kNnw ] = f27_SE ; - (D27.f[dP0P])[kNte ] = f27_BW ; - (D27.f[dM0M])[kNbw ] = f27_TE ; - (D27.f[dP0M])[kNbe ] = f27_TW ; - (D27.f[dM0P])[kNtw ] = f27_BE ; - (D27.f[d0PP])[kNtn ] = f27_BS ; - (D27.f[d0MM])[kNbs ] = f27_TN ; - (D27.f[d0PM])[kNbn ] = f27_TS ; - (D27.f[d0MP])[kNts ] = f27_BN ; - (D27.f[d000])[kNzero] = f27_ZERO; - (D27.f[dPPP])[kNtne ] = f27_BSW ; - (D27.f[dMMP])[kNtsw ] = f27_BNE ; - (D27.f[dPMP])[kNtse ] = f27_BNW ; - (D27.f[dMPP])[kNtnw ] = f27_BSE ; - (D27.f[dPPM])[kNbne ] = f27_TSW ; - (D27.f[dMMM])[kNbsw ] = f27_TNE ; - (D27.f[dPMM])[kNbse ] = f27_TNW ; - (D27.f[dMPM])[kNbnw ] = f27_TSE ; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADVel7( real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions7 D7; - if (isEvenTimestep==true) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB;//, - - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - ////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE, - f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; - - f_W = (D.f[dP00])[ke ]; - f_E = (D.f[dM00])[kw ]; - f_S = (D.f[d0P0])[kn ]; - f_N = (D.f[d0M0])[ks ]; - f_B = (D.f[d00P])[kt ]; - f_T = (D.f[d00M])[kb ]; - f_SW = (D.f[dPP0])[kne ]; - f_NE = (D.f[dMM0])[ksw ]; - f_NW = (D.f[dPM0])[kse ]; - f_SE = (D.f[dMP0])[knw ]; - f_BW = (D.f[dP0P])[kte ]; - f_TE = (D.f[dM0M])[kbw ]; - f_TW = (D.f[dP0M])[kbe ]; - f_BE = (D.f[dM0P])[ktw ]; - f_BS = (D.f[d0PP])[ktn ]; - f_TN = (D.f[d0MM])[kbs ]; - f_TS = (D.f[d0PM])[kbn ]; - f_BN = (D.f[d0MP])[kts ]; - f_BSW = (D.f[dPPP])[ktne ]; - f_BNE = (D.f[dMMP])[ktsw ]; - f_BNW = (D.f[dPMP])[ktse ]; - f_BSE = (D.f[dMPP])[ktnw ]; - f_TSW = (D.f[dPPM])[kbne ]; - f_TNE = (D.f[dMMM])[kbsw ]; - f_TNW = (D.f[dPMM])[kbse ]; - f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - /*real drho*/; - real vx1_Inflow = c0o1; - real vx2_Inflow = c0o1; - real vx3_Inflow = velo[k]; - real ux_sq_Inflow = vx1_Inflow * vx1_Inflow; - real uy_sq_Inflow = vx2_Inflow * vx2_Inflow; - real uz_sq_Inflow = vx3_Inflow * vx3_Inflow; - - - ////drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - //// f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - //// f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); - - //real vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - //real vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //real vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - - real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[d000])[kzero]); - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - real vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - real vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - real vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - - //real cu_sq =1.5f*(vx1*vx1+vx2*vx2+vx3*vx3); - real ux_sq = vx1 * vx1; - real uy_sq = vx2 * vx2; - real uz_sq = vx3 * vx3; - real omegaD = c3o1 - sqrt(c3o1); - real Lam = -(c1o2-c1o1/omegaD); - real nue_d = Lam/c3o1; - //real ae = zero; - real ae = diffusivity/nue_d - c1o1; - - real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B; - real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B; - real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B; - real TempD = temp[k]; - - - f7_ZERO = (D7.f[0])[kzero]; - f7_W = (D7.f[1])[ke ]; - f7_E = (D7.f[2])[kw ]; - f7_S = (D7.f[3])[kn ]; - f7_N = (D7.f[4])[ks ]; - f7_B = (D7.f[5])[kt ]; - f7_T = (D7.f[6])[kb ]; - - real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B; - - //feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - feq7_E = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2); - feq7_W = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2); - feq7_N = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2); - feq7_S = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2); - feq7_T = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2); - feq7_B = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2); - - //feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - feqW7_E = TempD*(c1o6*(ae+c1o1)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2); - feqW7_W = TempD*(c1o6*(ae+c1o1)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2); - feqW7_N = TempD*(c1o6*(ae+c1o1)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2); - feqW7_S = TempD*(c1o6*(ae+c1o1)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2); - feqW7_T = TempD*(c1o6*(ae+c1o1)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2); - feqW7_B = TempD*(c1o6*(ae+c1o1)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2); - - ////////////////////////////////////////////////////////////////////////// - //pointertausch - if (isEvenTimestep==false) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[1])[ke ] = f7_E - feq7_E + feqW7_W; //dP00 - //(D7.f[2])[kw ] = f7_W - feq7_W + feqW7_E; //dM00 - //(D7.f[3])[kn ] = f7_N - feq7_N + feqW7_S; //d0P0 - //(D7.f[4])[ks ] = f7_S - feq7_S + feqW7_N; //d0M0 - //(D7.f[5])[kt ] = f7_T - feq7_T + feqW7_B; //d00P - //(D7.f[6])[kb ] = f7_B - feq7_B + feqW7_T; //d00M - - ////////////////////////////////////////////////////////////////////////// - //mit Q's - real /*feq,*/ q; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[2])[kw]=(c2o1*feqW7_W-(f7_E*(q*omegaD-c1o1)-omegaD*feq7_E*(q-c1o1))/(omegaD-c1o1)+f7_W*q)/(q+c1o1);//f7_W - feq7_W + feqW7_E; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[1])[ke]=(c2o1*feqW7_E-(f7_W*(q*omegaD-c1o1)-omegaD*feq7_W*(q-c1o1))/(omegaD-c1o1)+f7_E*q)/(q+c1o1);//f7_E - feq7_E + feqW7_W; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[4])[ks]=(c2o1*feqW7_S-(f7_N*(q*omegaD-c1o1)-omegaD*feq7_N*(q-c1o1))/(omegaD-c1o1)+f7_S*q)/(q+c1o1);//f7_S - feq7_S + feqW7_N; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[3])[kn]=(c2o1*feqW7_N-(f7_S*(q*omegaD-c1o1)-omegaD*feq7_S*(q-c1o1))/(omegaD-c1o1)+f7_N*q)/(q+c1o1);//f7_N - feq7_N + feqW7_S; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[6])[kb]=(c2o1*feqW7_B-(f7_T*(q*omegaD-c1o1)-omegaD*feq7_T*(q-c1o1))/(omegaD-c1o1)+f7_B*q)/(q+c1o1);//f7_B - feq7_B + feqW7_T; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - //q=0.; - (D7.f[5])[kt]=(c2o1*feqW7_T-(f7_B*(q*omegaD-c1o1)-omegaD*feq7_B*(q-c1o1))/(omegaD-c1o1)+f7_T*q)/(q+c1o1);//f7_T - feq7_T + feqW7_B; - } - - //////////////////////////////////////////////////////////////////////////// - ////ohne Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B; - //} - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADVel27(real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[dP00])[ke ]; - real f_E = (D.f[dM00])[kw ]; - real f_S = (D.f[d0P0])[kn ]; - real f_N = (D.f[d0M0])[ks ]; - real f_B = (D.f[d00P])[kt ]; - real f_T = (D.f[d00M])[kb ]; - real f_SW = (D.f[dPP0])[kne ]; - real f_NE = (D.f[dMM0])[ksw ]; - real f_NW = (D.f[dPM0])[kse ]; - real f_SE = (D.f[dMP0])[knw ]; - real f_BW = (D.f[dP0P])[kte ]; - real f_TE = (D.f[dM0M])[kbw ]; - real f_TW = (D.f[dP0M])[kbe ]; - real f_BE = (D.f[dM0P])[ktw ]; - real f_BS = (D.f[d0PP])[ktn ]; - real f_TN = (D.f[d0MM])[kbs ]; - real f_TS = (D.f[d0PM])[kbn ]; - real f_BN = (D.f[d0MP])[kts ]; - real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne ]; - real f_BNE = (D.f[dMMP])[ktsw ]; - real f_BNW = (D.f[dPMP])[ktse ]; - real f_BSE = (D.f[dMPP])[ktnw ]; - real f_TSW = (D.f[dPPM])[kbne ]; - real f_TNE = (D.f[dMMM])[kbsw ]; - real f_TNW = (D.f[dPMM])[kbse ]; - real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3, /*drho, feq,*/ q; - ////drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - //// f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - //// f_T + f_B + f_N + f_S + f_E + f_W + f_ZERO; - - //vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - - //vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ f_ZERO; - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - //real f27_W = (D27.f[dP00])[ke ]; - //real f27_E = (D27.f[dM00])[kw ]; - //real f27_S = (D27.f[d0P0])[kn ]; - //real f27_N = (D27.f[d0M0])[ks ]; - //real f27_B = (D27.f[d00P])[kt ]; - //real f27_T = (D27.f[d00M])[kb ]; - //real f27_SW = (D27.f[dPP0])[kne ]; - //real f27_NE = (D27.f[dMM0])[ksw ]; - //real f27_NW = (D27.f[dPM0])[kse ]; - //real f27_SE = (D27.f[dMP0])[knw ]; - //real f27_BW = (D27.f[dP0P])[kte ]; - //real f27_TE = (D27.f[dM0M])[kbw ]; - //real f27_TW = (D27.f[dP0M])[kbe ]; - //real f27_BE = (D27.f[dM0P])[ktw ]; - //real f27_BS = (D27.f[d0PP])[ktn ]; - //real f27_TN = (D27.f[d0MM])[kbs ]; - //real f27_TS = (D27.f[d0PM])[kbn ]; - //real f27_BN = (D27.f[d0MP])[kts ]; - //real f27_ZERO = (D27.f[d000])[kzero]; - //real f27_BSW = (D27.f[dPPP])[ktne ]; - //real f27_BNE = (D27.f[dMMP])[ktsw ]; - //real f27_BNW = (D27.f[dPMP])[ktse ]; - //real f27_BSE = (D27.f[dMPP])[ktnw ]; - //real f27_TSW = (D27.f[dPPM])[kbne ]; - //real f27_TNE = (D27.f[dMMM])[kbsw ]; - //real f27_TNW = (D27.f[dPMM])[kbse ]; - //real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - //real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - // f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - // f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - //real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - //real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - //real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - //real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - //real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - //real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - //real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - //real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - //real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - //real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - //real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - //real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - //real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - //real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - //real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - //real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - //real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - //real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real TempD = temp[k]; - //real TempD = four; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // velocity inflow - //vx1 = velo[k]; //zero; - //vx2 = zero; //velo[k];//zero;//velo[k]; - //vx3 = zero; - - ////real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - //real feqW27_E = c2over27* (TempD+(one+TempD)*(three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq)); - //real feqW27_W = c2over27* (TempD+(one+TempD)*(three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq)); - //real feqW27_N = c2over27* (TempD+(one+TempD)*(three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq)); - //real feqW27_S = c2over27* (TempD+(one+TempD)*(three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq)); - //real feqW27_T = c2over27* (TempD+(one+TempD)*(three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq)); - //real feqW27_B = c2over27* (TempD+(one+TempD)*(three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq)); - //real feqW27_NE = c1over54* (TempD+(one+TempD)*(three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - //real feqW27_SW = c1over54* (TempD+(one+TempD)*(three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - //real feqW27_SE = c1over54* (TempD+(one+TempD)*(three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - //real feqW27_NW = c1over54* (TempD+(one+TempD)*(three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - //real feqW27_TE = c1over54* (TempD+(one+TempD)*(three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - //real feqW27_BW = c1over54* (TempD+(one+TempD)*(three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - //real feqW27_BE = c1over54* (TempD+(one+TempD)*(three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - //real feqW27_TW = c1over54* (TempD+(one+TempD)*(three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - //real feqW27_TN = c1over54* (TempD+(one+TempD)*(three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - //real feqW27_BS = c1over54* (TempD+(one+TempD)*(three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - //real feqW27_BN = c1over54* (TempD+(one+TempD)*(three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - //real feqW27_TS = c1over54* (TempD+(one+TempD)*(three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - //real feqW27_TNE = c1over216*(TempD+(one+TempD)*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - //real feqW27_BSW = c1over216*(TempD+(one+TempD)*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - //real feqW27_BNE = c1over216*(TempD+(one+TempD)*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - //real feqW27_TSW = c1over216*(TempD+(one+TempD)*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - //real feqW27_TSE = c1over216*(TempD+(one+TempD)*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - //real feqW27_BNW = c1over216*(TempD+(one+TempD)*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - //real feqW27_BSE = c1over216*(TempD+(one+TempD)*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - //real feqW27_TNW = c1over216*(TempD+(one+TempD)*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); - // - real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D27.f[dM00])[kw ]= four; - //(D27.f[dP00])[ke ]= four; - //(D27.f[d0M0])[ks ]= four; - //(D27.f[d0P0])[kn ]= four; - //(D27.f[d00M])[kb ]= four; - //(D27.f[d00P])[kt ]= four; - //(D27.f[dMM0])[ksw ]= four; - //(D27.f[dPP0])[kne ]= four; - //(D27.f[dMP0])[knw ]= four; - //(D27.f[dPM0])[kse ]= four; - //(D27.f[dM0M])[kbw ]= four; - //(D27.f[dP0P])[kte ]= four; - //(D27.f[dM0P])[ktw ]= four; - //(D27.f[dP0M])[kbe ]= four; - //(D27.f[d0MM])[kbs ]= four; - //(D27.f[d0PP])[ktn ]= four; - //(D27.f[d0MP])[kts ]= four; - //(D27.f[d0PM])[kbn ]= four; - //(D27.f[dMMM])[kbsw]= four; - //(D27.f[dPPP])[ktne]= four; - //(D27.f[dMMP])[ktsw]= four; - //(D27.f[dPPM])[kbne]= four; - //(D27.f[dMPM])[kbnw]= four; - //(D27.f[dPMP])[ktse]= four; - //(D27.f[dMPP])[ktnw]= four; - //(D27.f[dPMM])[kbse]= four; - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]= -feqW27_W + c2o1 * c2o27 * TempD; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]= -feqW27_E + c2o1 * c2o27 * TempD; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]= -feqW27_S + c2o1 * c2o27 * TempD; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]= -feqW27_N + c2o1 * c2o27 * TempD; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]= -feqW27_B + c2o1 * c2o27 * TempD; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]= -feqW27_T + c2o1 * c2o27 * TempD; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]= -feqW27_SW + c2o1 * c1o54 * TempD; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]= -feqW27_NE + c2o1 * c1o54 * TempD; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]= -feqW27_NW + c2o1 * c1o54 * TempD; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]= -feqW27_SE + c2o1 * c1o54 * TempD; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]= -feqW27_BW + c2o1 * c1o54 * TempD; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]= -feqW27_TE + c2o1 * c1o54 * TempD; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]= -feqW27_TW + c2o1 * c1o54 * TempD; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]= -feqW27_BE + c2o1 * c1o54 * TempD; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54 * TempD; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54 * TempD; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]= -feqW27_TS + c2o1 * c1o54 * TempD; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54 * TempD; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD; - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[dM00])[kw ]=(two*feqW27_W -(f27_E *(q*omegaD-one)-omegaD*feq27_E *(q-one))/(omegaD-one)+f27_W *q)/(q+one); - //q = q_dirW[k]; if (q>=zero && q<=one) (D27.f[dP00])[ke ]=(two*feqW27_E -(f27_W *(q*omegaD-one)-omegaD*feq27_W *(q-one))/(omegaD-one)+f27_E *q)/(q+one); - //q = q_dirN[k]; if (q>=zero && q<=one) (D27.f[d0M0])[ks ]=(two*feqW27_S -(f27_N *(q*omegaD-one)-omegaD*feq27_N *(q-one))/(omegaD-one)+f27_S *q)/(q+one); - //q = q_dirS[k]; if (q>=zero && q<=one) (D27.f[d0P0])[kn ]=(two*feqW27_N -(f27_S *(q*omegaD-one)-omegaD*feq27_S *(q-one))/(omegaD-one)+f27_N *q)/(q+one); - //q = q_dirT[k]; if (q>=zero && q<=one) (D27.f[d00M])[kb ]=(two*feqW27_B -(f27_T *(q*omegaD-one)-omegaD*feq27_T *(q-one))/(omegaD-one)+f27_B *q)/(q+one); - //q = q_dirB[k]; if (q>=zero && q<=one) (D27.f[d00P])[kt ]=(two*feqW27_T -(f27_B *(q*omegaD-one)-omegaD*feq27_B *(q-one))/(omegaD-one)+f27_T *q)/(q+one); - //q = q_dirNE[k]; if (q>=zero && q<=one) (D27.f[dMM0])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one); - //q = q_dirSW[k]; if (q>=zero && q<=one) (D27.f[dPP0])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one); - //q = q_dirSE[k]; if (q>=zero && q<=one) (D27.f[dMP0])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one); - //q = q_dirNW[k]; if (q>=zero && q<=one) (D27.f[dPM0])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one); - //q = q_dirTE[k]; if (q>=zero && q<=one) (D27.f[dM0M])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one); - //q = q_dirBW[k]; if (q>=zero && q<=one) (D27.f[dP0P])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one); - //q = q_dirBE[k]; if (q>=zero && q<=one) (D27.f[dM0P])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one); - //q = q_dirTW[k]; if (q>=zero && q<=one) (D27.f[dP0M])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one); - //q = q_dirTN[k]; if (q>=zero && q<=one) (D27.f[d0MM])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one); - //q = q_dirBS[k]; if (q>=zero && q<=one) (D27.f[d0PP])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one); - //q = q_dirBN[k]; if (q>=zero && q<=one) (D27.f[d0MP])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one); - //q = q_dirTS[k]; if (q>=zero && q<=one) (D27.f[d0PM])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one); - //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dMMM])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one); - //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dPPP])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one); - //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dMMP])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one); - //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dPPM])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one); - //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dMPM])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one); - //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dPMP])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one); - //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dMPP])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one); - //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QAD7( real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions7 D7; - if (isEvenTimestep==true) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB;//, - // *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - // *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - // *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - // *q_dirBSE, *q_dirBNW; - - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - //q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - //q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - //q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - //q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - //q_dirTE = &QQ[dP0P * numberOfBCnodes]; - //q_dirBW = &QQ[dM0M * numberOfBCnodes]; - //q_dirBE = &QQ[dP0M * numberOfBCnodes]; - //q_dirTW = &QQ[dM0P * numberOfBCnodes]; - //q_dirTN = &QQ[d0PP * numberOfBCnodes]; - //q_dirBS = &QQ[d0MM * numberOfBCnodes]; - //q_dirBN = &QQ[d0PM * numberOfBCnodes]; - //q_dirTS = &QQ[d0MP * numberOfBCnodes]; - //q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - //q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - //q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - //q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - //q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - //q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - //q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - //q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - ////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE, - f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; - - f_W = (D.f[dP00])[ke ]; - f_E = (D.f[dM00])[kw ]; - f_S = (D.f[d0P0])[kn ]; - f_N = (D.f[d0M0])[ks ]; - f_B = (D.f[d00P])[kt ]; - f_T = (D.f[d00M])[kb ]; - f_SW = (D.f[dPP0])[kne ]; - f_NE = (D.f[dMM0])[ksw ]; - f_NW = (D.f[dPM0])[kse ]; - f_SE = (D.f[dMP0])[knw ]; - f_BW = (D.f[dP0P])[kte ]; - f_TE = (D.f[dM0M])[kbw ]; - f_TW = (D.f[dP0M])[kbe ]; - f_BE = (D.f[dM0P])[ktw ]; - f_BS = (D.f[d0PP])[ktn ]; - f_TN = (D.f[d0MM])[kbs ]; - f_TS = (D.f[d0PM])[kbn ]; - f_BN = (D.f[d0MP])[kts ]; - f_BSW = (D.f[dPPP])[ktne ]; - f_BNE = (D.f[dMMP])[ktsw ]; - f_BNW = (D.f[dPMP])[ktse ]; - f_BSE = (D.f[dMPP])[ktnw ]; - f_TSW = (D.f[dPPM])[kbne ]; - f_TNE = (D.f[dMMM])[kbsw ]; - f_TNW = (D.f[dPMM])[kbse ]; - f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3/*, drho*/; - //drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - // f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - // f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); - - //vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - - //vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[d000])[kzero]); - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - - //real cu_sq =c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - real ux_sq = vx1 * vx1; - real uy_sq = vx2 * vx2; - real uz_sq = vx3 * vx3; - real omegaD = c3o1 - sqrt(c3o1); - real Lam = -(c1o2-c1o1/omegaD); - real nue_d = Lam/c3o1; - //real ae = zero; - real ae = diffusivity/nue_d - c1o1; - - real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B; - real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B; - real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B; - real TempD = temp[k]; - - - f7_ZERO = (D7.f[0])[kzero]; - f7_W = (D7.f[1])[ke ]; - f7_E = (D7.f[2])[kw ]; - f7_S = (D7.f[3])[kn ]; - f7_N = (D7.f[4])[ks ]; - f7_B = (D7.f[5])[kt ]; - f7_T = (D7.f[6])[kb ]; - - real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B; - - //feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - feq7_E = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2); - feq7_W = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2); - feq7_N = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2); - feq7_S = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2); - feq7_T = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2); - feq7_B = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2); - - //feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - feqW7_E = TempD*(c1o6*(ae+c1o1));//+c1o2*(ux_sq)+vx1*c1o2); - feqW7_W = TempD*(c1o6*(ae+c1o1));//+c1o2*(ux_sq)-vx1*c1o2); - feqW7_N = TempD*(c1o6*(ae+c1o1));//+c1o2*(uy_sq)+vx2*c1o2); - feqW7_S = TempD*(c1o6*(ae+c1o1));//+c1o2*(uy_sq)-vx2*c1o2); - feqW7_T = TempD*(c1o6*(ae+c1o1));//+c1o2*(uz_sq)+vx3*c1o2); - feqW7_B = TempD*(c1o6*(ae+c1o1));//+c1o2*(uz_sq)-vx3*c1o2); - - ////////////////////////////////////////////////////////////////////////// - //pointertausch - if (isEvenTimestep==false) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[1])[ke ] = f7_E - feq7_E + feqW7_W; //dP00 - //(D7.f[2])[kw ] = f7_W - feq7_W + feqW7_E; //dM00 - //(D7.f[3])[kn ] = f7_N - feq7_N + feqW7_S; //d0P0 - //(D7.f[4])[ks ] = f7_S - feq7_S + feqW7_N; //d0M0 - //(D7.f[5])[kt ] = f7_T - feq7_T + feqW7_B; //d00P - //(D7.f[6])[kb ] = f7_B - feq7_B + feqW7_T; //d00M - - //////////////////////////////////////////////////////////////////////////// - ////mit Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B; - //} - - ////////////////////////////////////////////////////////////////////////// - //ohne Q's - real /*feq,*/ q; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADDirichlet27( - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[dP00])[ke ]; - real f_E = (D.f[dM00])[kw ]; - real f_S = (D.f[d0P0])[kn ]; - real f_N = (D.f[d0M0])[ks ]; - real f_B = (D.f[d00P])[kt ]; - real f_T = (D.f[d00M])[kb ]; - real f_SW = (D.f[dPP0])[kne ]; - real f_NE = (D.f[dMM0])[ksw ]; - real f_NW = (D.f[dPM0])[kse ]; - real f_SE = (D.f[dMP0])[knw ]; - real f_BW = (D.f[dP0P])[kte ]; - real f_TE = (D.f[dM0M])[kbw ]; - real f_TW = (D.f[dP0M])[kbe ]; - real f_BE = (D.f[dM0P])[ktw ]; - real f_BS = (D.f[d0PP])[ktn ]; - real f_TN = (D.f[d0MM])[kbs ]; - real f_TS = (D.f[d0PM])[kbn ]; - real f_BN = (D.f[d0MP])[kts ]; - real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne ]; - real f_BNE = (D.f[dMMP])[ktsw ]; - real f_BNW = (D.f[dPMP])[ktse ]; - real f_BSE = (D.f[dMPP])[ktnw ]; - real f_TSW = (D.f[dPPM])[kbne ]; - real f_TNE = (D.f[dMMM])[kbsw ]; - real f_TNW = (D.f[dPMM])[kbse ]; - real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3, /*drho, feq,*/ q; - ////drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - //// f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - //// f_T + f_B + f_N + f_S + f_E + f_W + f_ZERO; - - //vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - - //vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+f_ZERO; - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - real f27_W = (D27.f[dP00])[ke ]; - real f27_E = (D27.f[dM00])[kw ]; - real f27_S = (D27.f[d0P0])[kn ]; - real f27_N = (D27.f[d0M0])[ks ]; - real f27_B = (D27.f[d00P])[kt ]; - real f27_T = (D27.f[d00M])[kb ]; - real f27_SW = (D27.f[dPP0])[kne ]; - real f27_NE = (D27.f[dMM0])[ksw ]; - real f27_NW = (D27.f[dPM0])[kse ]; - real f27_SE = (D27.f[dMP0])[knw ]; - real f27_BW = (D27.f[dP0P])[kte ]; - real f27_TE = (D27.f[dM0M])[kbw ]; - real f27_TW = (D27.f[dP0M])[kbe ]; - real f27_BE = (D27.f[dM0P])[ktw ]; - real f27_BS = (D27.f[d0PP])[ktn ]; - real f27_TN = (D27.f[d0MM])[kbs ]; - real f27_TS = (D27.f[d0PM])[kbn ]; - real f27_BN = (D27.f[d0MP])[kts ]; - real f27_ZERO = (D27.f[d000])[kzero]; - real f27_BSW = (D27.f[dPPP])[ktne ]; - real f27_BNE = (D27.f[dMMP])[ktsw ]; - real f27_BNW = (D27.f[dPMP])[ktse ]; - real f27_BSE = (D27.f[dMPP])[ktnw ]; - real f27_TSW = (D27.f[dPPM])[kbne ]; - real f27_TNE = (D27.f[dMMM])[kbsw ]; - real f27_TNW = (D27.f[dPMM])[kbse ]; - real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - //real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real TempD = temp[k];//one;//temp[k]; - - //real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[ ke ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]=(c2o1*feqW27_W -(f27_E *(q*omegaD-c1o1)-omegaD*feq27_E *(q-c1o1))/(omegaD-c1o1)+f27_W *q)/(q+c1o1); - q = q_dirW[ kw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]=(c2o1*feqW27_E -(f27_W *(q*omegaD-c1o1)-omegaD*feq27_W *(q-c1o1))/(omegaD-c1o1)+f27_E *q)/(q+c1o1); - q = q_dirN[ kn ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]=(c2o1*feqW27_S -(f27_N *(q*omegaD-c1o1)-omegaD*feq27_N *(q-c1o1))/(omegaD-c1o1)+f27_S *q)/(q+c1o1); - q = q_dirS[ ks ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]=(c2o1*feqW27_N -(f27_S *(q*omegaD-c1o1)-omegaD*feq27_S *(q-c1o1))/(omegaD-c1o1)+f27_N *q)/(q+c1o1); - q = q_dirT[ kt ]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]=(c2o1*feqW27_B -(f27_T *(q*omegaD-c1o1)-omegaD*feq27_T *(q-c1o1))/(omegaD-c1o1)+f27_B *q)/(q+c1o1); - q = q_dirB[ kb ]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]=(c2o1*feqW27_T -(f27_B *(q*omegaD-c1o1)-omegaD*feq27_B *(q-c1o1))/(omegaD-c1o1)+f27_T *q)/(q+c1o1); - q = q_dirNE[ kne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1); - q = q_dirSW[ ksw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1); - q = q_dirSE[ kse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1); - q = q_dirNW[ knw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1); - q = q_dirTE[ kte ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1); - q = q_dirBW[ kbw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1); - q = q_dirBE[ kbe ]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1); - q = q_dirTW[ ktw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1); - q = q_dirTN[ ktn ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1); - q = q_dirBS[ kbs ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1); - q = q_dirBN[ kbn ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1); - q = q_dirTS[ kts ]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1); - q = q_dirTNE[ktne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1); - q = q_dirBSW[kbsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1); - q = q_dirBNE[kbne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1); - q = q_dirTSW[ktsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1); - q = q_dirTSE[ktse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1); - q = q_dirBNW[kbnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1); - q = q_dirBSE[kbse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1); - q = q_dirTNW[ktnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1); - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[dM00])[kw ]=(two*feqW27_W -(f27_E *(q*omegaD-one)-omegaD*feq27_E *(q-one))/(omegaD-one)+f27_W *q)/(q+one); - //q = q_dirW[k]; if (q>=zero && q<=one) (D27.f[dP00])[ke ]=(two*feqW27_E -(f27_W *(q*omegaD-one)-omegaD*feq27_W *(q-one))/(omegaD-one)+f27_E *q)/(q+one); - //q = q_dirN[k]; if (q>=zero && q<=one) (D27.f[d0M0])[ks ]=(two*feqW27_S -(f27_N *(q*omegaD-one)-omegaD*feq27_N *(q-one))/(omegaD-one)+f27_S *q)/(q+one); - //q = q_dirS[k]; if (q>=zero && q<=one) (D27.f[d0P0])[kn ]=(two*feqW27_N -(f27_S *(q*omegaD-one)-omegaD*feq27_S *(q-one))/(omegaD-one)+f27_N *q)/(q+one); - //q = q_dirT[k]; if (q>=zero && q<=one) (D27.f[d00M])[kb ]=(two*feqW27_B -(f27_T *(q*omegaD-one)-omegaD*feq27_T *(q-one))/(omegaD-one)+f27_B *q)/(q+one); - //q = q_dirB[k]; if (q>=zero && q<=one) (D27.f[d00P])[kt ]=(two*feqW27_T -(f27_B *(q*omegaD-one)-omegaD*feq27_B *(q-one))/(omegaD-one)+f27_T *q)/(q+one); - //q = q_dirNE[k]; if (q>=zero && q<=one) (D27.f[dMM0])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one); - //q = q_dirSW[k]; if (q>=zero && q<=one) (D27.f[dPP0])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one); - //q = q_dirSE[k]; if (q>=zero && q<=one) (D27.f[dMP0])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one); - //q = q_dirNW[k]; if (q>=zero && q<=one) (D27.f[dPM0])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one); - //q = q_dirTE[k]; if (q>=zero && q<=one) (D27.f[dM0M])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one); - //q = q_dirBW[k]; if (q>=zero && q<=one) (D27.f[dP0P])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one); - //q = q_dirBE[k]; if (q>=zero && q<=one) (D27.f[dM0P])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one); - //q = q_dirTW[k]; if (q>=zero && q<=one) (D27.f[dP0M])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one); - //q = q_dirTN[k]; if (q>=zero && q<=one) (D27.f[d0MM])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one); - //q = q_dirBS[k]; if (q>=zero && q<=one) (D27.f[d0PP])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one); - //q = q_dirBN[k]; if (q>=zero && q<=one) (D27.f[d0MP])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one); - //q = q_dirTS[k]; if (q>=zero && q<=one) (D27.f[d0PM])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one); - //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dMMM])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one); - //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dPPP])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one); - //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dMMP])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one); - //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dPPM])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one); - //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dMPM])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one); - //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dPMP])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one); - //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dMPP])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one); - //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADBB27( real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //Distributions27 D; - //if (isEvenTimestep==true) - //{ - // D.f[dP00] = &DD[dP00 * size_Mat]; - // D.f[dM00] = &DD[dM00 * size_Mat]; - // D.f[d0P0] = &DD[d0P0 * size_Mat]; - // D.f[d0M0] = &DD[d0M0 * size_Mat]; - // D.f[d00P] = &DD[d00P * size_Mat]; - // D.f[d00M] = &DD[d00M * size_Mat]; - // D.f[dPP0] = &DD[dPP0 * size_Mat]; - // D.f[dMM0] = &DD[dMM0 * size_Mat]; - // D.f[dPM0] = &DD[dPM0 * size_Mat]; - // D.f[dMP0] = &DD[dMP0 * size_Mat]; - // D.f[dP0P] = &DD[dP0P * size_Mat]; - // D.f[dM0M] = &DD[dM0M * size_Mat]; - // D.f[dP0M] = &DD[dP0M * size_Mat]; - // D.f[dM0P] = &DD[dM0P * size_Mat]; - // D.f[d0PP] = &DD[d0PP * size_Mat]; - // D.f[d0MM] = &DD[d0MM * size_Mat]; - // D.f[d0PM] = &DD[d0PM * size_Mat]; - // D.f[d0MP] = &DD[d0MP * size_Mat]; - // D.f[d000] = &DD[d000 * size_Mat]; - // D.f[dPPP] = &DD[dPPP * size_Mat]; - // D.f[dMMP] = &DD[dMMP * size_Mat]; - // D.f[dPMP] = &DD[dPMP * size_Mat]; - // D.f[dMPP] = &DD[dMPP * size_Mat]; - // D.f[dPPM] = &DD[dPPM * size_Mat]; - // D.f[dMMM] = &DD[dMMM * size_Mat]; - // D.f[dPMM] = &DD[dPMM * size_Mat]; - // D.f[dMPM] = &DD[dMPM * size_Mat]; - //} - //else - //{ - // D.f[dM00] = &DD[dP00 * size_Mat]; - // D.f[dP00] = &DD[dM00 * size_Mat]; - // D.f[d0M0] = &DD[d0P0 * size_Mat]; - // D.f[d0P0] = &DD[d0M0 * size_Mat]; - // D.f[d00M] = &DD[d00P * size_Mat]; - // D.f[d00P] = &DD[d00M * size_Mat]; - // D.f[dMM0] = &DD[dPP0 * size_Mat]; - // D.f[dPP0] = &DD[dMM0 * size_Mat]; - // D.f[dMP0] = &DD[dPM0 * size_Mat]; - // D.f[dPM0] = &DD[dMP0 * size_Mat]; - // D.f[dM0M] = &DD[dP0P * size_Mat]; - // D.f[dP0P] = &DD[dM0M * size_Mat]; - // D.f[dM0P] = &DD[dP0M * size_Mat]; - // D.f[dP0M] = &DD[dM0P * size_Mat]; - // D.f[d0MM] = &DD[d0PP * size_Mat]; - // D.f[d0PP] = &DD[d0MM * size_Mat]; - // D.f[d0MP] = &DD[d0PM * size_Mat]; - // D.f[d0PM] = &DD[d0MP * size_Mat]; - // D.f[d000] = &DD[d000 * size_Mat]; - // D.f[dPPP] = &DD[dMMM * size_Mat]; - // D.f[dMMP] = &DD[dPPM * size_Mat]; - // D.f[dPMP] = &DD[dMPM * size_Mat]; - // D.f[dMPP] = &DD[dPMM * size_Mat]; - // D.f[dPPM] = &DD[dMMP * size_Mat]; - // D.f[dMMM] = &DD[dPPP * size_Mat]; - // D.f[dPMM] = &DD[dMPP * size_Mat]; - // D.f[dMPM] = &DD[dPMP * size_Mat]; - //} - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - //unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //real f_W = (D.f[dP00])[ke ]; - //real f_E = (D.f[dM00])[kw ]; - //real f_S = (D.f[d0P0])[kn ]; - //real f_N = (D.f[d0M0])[ks ]; - //real f_B = (D.f[d00P])[kt ]; - //real f_T = (D.f[d00M])[kb ]; - //real f_SW = (D.f[dPP0])[kne ]; - //real f_NE = (D.f[dMM0])[ksw ]; - //real f_NW = (D.f[dPM0])[kse ]; - //real f_SE = (D.f[dMP0])[knw ]; - //real f_BW = (D.f[dP0P])[kte ]; - //real f_TE = (D.f[dM0M])[kbw ]; - //real f_TW = (D.f[dP0M])[kbe ]; - //real f_BE = (D.f[dM0P])[ktw ]; - //real f_BS = (D.f[d0PP])[ktn ]; - //real f_TN = (D.f[d0MM])[kbs ]; - //real f_TS = (D.f[d0PM])[kbn ]; - //real f_BN = (D.f[d0MP])[kts ]; - //real f_ZERO = (D.f[d000])[kzero]; - //real f_BSW = (D.f[dPPP])[ktne ]; - //real f_BNE = (D.f[dMMP])[ktsw ]; - //real f_BNW = (D.f[dPMP])[ktse ]; - //real f_BSE = (D.f[dMPP])[ktnw ]; - //real f_TSW = (D.f[dPPM])[kbne ]; - //real f_TNE = (D.f[dMMM])[kbsw ]; - //real f_TNW = (D.f[dPMM])[kbse ]; - //real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - //real vx1, vx2, vx3, /*drho, feq,*/ q; - real q; - ////drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - //// f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - //// f_T + f_B + f_N + f_S + f_E + f_W + f_ZERO; - - //vx1 = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - // (f_E - f_W); - - - //vx2 = (-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - // ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - // (f_N - f_S); - - //vx3 = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - // (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - // (f_T - f_B); - //real rho0 = (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+f_ZERO; - //real rho = rho0 + c1o1; - //real OORho = c1o1/rho; - //vx1 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - //vx2 = OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - //vx3 = OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - real f27_W = (D27.f[dP00])[ke ]; - real f27_E = (D27.f[dM00])[kw ]; - real f27_S = (D27.f[d0P0])[kn ]; - real f27_N = (D27.f[d0M0])[ks ]; - real f27_B = (D27.f[d00P])[kt ]; - real f27_T = (D27.f[d00M])[kb ]; - real f27_SW = (D27.f[dPP0])[kne ]; - real f27_NE = (D27.f[dMM0])[ksw ]; - real f27_NW = (D27.f[dPM0])[kse ]; - real f27_SE = (D27.f[dMP0])[knw ]; - real f27_BW = (D27.f[dP0P])[kte ]; - real f27_TE = (D27.f[dM0M])[kbw ]; - real f27_TW = (D27.f[dP0M])[kbe ]; - real f27_BE = (D27.f[dM0P])[ktw ]; - real f27_BS = (D27.f[d0PP])[ktn ]; - real f27_TN = (D27.f[d0MM])[kbs ]; - real f27_TS = (D27.f[d0PM])[kbn ]; - real f27_BN = (D27.f[d0MP])[kts ]; - //real f27_ZERO = (D27.f[d000])[kzero]; - real f27_BSW = (D27.f[dPPP])[ktne ]; - real f27_BNE = (D27.f[dMMP])[ktsw ]; - real f27_BNW = (D27.f[dPMP])[ktse ]; - real f27_BSE = (D27.f[dMPP])[ktnw ]; - real f27_TSW = (D27.f[dPPM])[kbne ]; - real f27_TNE = (D27.f[dMMM])[kbsw ]; - real f27_TNW = (D27.f[dPMM])[kbse ]; - real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - //real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - //real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - // f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - // f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - //real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - //real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - //real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - //real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - //real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - //real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - //real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - //real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - //real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - //real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - //real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - //real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - //real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - //real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - //real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - //real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - //real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - //real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //real TempD = temp[k]; - - //real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - //real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - //real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - //real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - //real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - //real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - //real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - //real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - //real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - //real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - //real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - //real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - //real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - //real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - //real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - //real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - //real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - //real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]=f27_E ; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]=f27_W ; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]=f27_N ; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]=f27_S ; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]=f27_T ; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]=f27_B ; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=f27_NE ; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=f27_SW ; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=f27_SE ; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=f27_NW ; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=f27_TE ; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=f27_BW ; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=f27_BE ; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=f27_TW ; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=f27_TN ; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=f27_BS ; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=f27_BN ; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=f27_TS ; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=f27_TNE; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=f27_BSW; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=f27_BNE; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=f27_TSW; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=f27_TSE; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=f27_BNW; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=f27_BSE; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=f27_TNW; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////// ////// -////// incomp ////// -////// ////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QNoSlipADincomp7( - real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //Distributions27 D; - //if (isEvenTimestep==true) - //{ - // D.f[dP00] = &DD[dP00 * size_Mat]; - // D.f[dM00] = &DD[dM00 * size_Mat]; - // D.f[d0P0] = &DD[d0P0 * size_Mat]; - // D.f[d0M0] = &DD[d0M0 * size_Mat]; - // D.f[d00P] = &DD[d00P * size_Mat]; - // D.f[d00M] = &DD[d00M * size_Mat]; - // D.f[dPP0] = &DD[dPP0 * size_Mat]; - // D.f[dMM0] = &DD[dMM0 * size_Mat]; - // D.f[dPM0] = &DD[dPM0 * size_Mat]; - // D.f[dMP0] = &DD[dMP0 * size_Mat]; - // D.f[dP0P] = &DD[dP0P * size_Mat]; - // D.f[dM0M] = &DD[dM0M * size_Mat]; - // D.f[dP0M] = &DD[dP0M * size_Mat]; - // D.f[dM0P] = &DD[dM0P * size_Mat]; - // D.f[d0PP] = &DD[d0PP * size_Mat]; - // D.f[d0MM] = &DD[d0MM * size_Mat]; - // D.f[d0PM] = &DD[d0PM * size_Mat]; - // D.f[d0MP] = &DD[d0MP * size_Mat]; - // D.f[d000] = &DD[d000 * size_Mat]; - // D.f[dPPP] = &DD[dPPP * size_Mat]; - // D.f[dMMP] = &DD[dMMP * size_Mat]; - // D.f[dPMP] = &DD[dPMP * size_Mat]; - // D.f[dMPP] = &DD[dMPP * size_Mat]; - // D.f[dPPM] = &DD[dPPM * size_Mat]; - // D.f[dMMM] = &DD[dMMM * size_Mat]; - // D.f[dPMM] = &DD[dPMM * size_Mat]; - // D.f[dMPM] = &DD[dMPM * size_Mat]; - //} - //else - //{ - // D.f[dM00] = &DD[dP00 * size_Mat]; - // D.f[dP00] = &DD[dM00 * size_Mat]; - // D.f[d0M0] = &DD[d0P0 * size_Mat]; - // D.f[d0P0] = &DD[d0M0 * size_Mat]; - // D.f[d00M] = &DD[d00P * size_Mat]; - // D.f[d00P] = &DD[d00M * size_Mat]; - // D.f[dMM0] = &DD[dPP0 * size_Mat]; - // D.f[dPP0] = &DD[dMM0 * size_Mat]; - // D.f[dMP0] = &DD[dPM0 * size_Mat]; - // D.f[dPM0] = &DD[dMP0 * size_Mat]; - // D.f[dM0M] = &DD[dP0P * size_Mat]; - // D.f[dP0P] = &DD[dM0M * size_Mat]; - // D.f[dM0P] = &DD[dP0M * size_Mat]; - // D.f[dP0M] = &DD[dM0P * size_Mat]; - // D.f[d0MM] = &DD[d0PP * size_Mat]; - // D.f[d0PP] = &DD[d0MM * size_Mat]; - // D.f[d0MP] = &DD[d0PM * size_Mat]; - // D.f[d0PM] = &DD[d0MP * size_Mat]; - // D.f[d000] = &DD[d000 * size_Mat]; - // D.f[dPPP] = &DD[dMMM * size_Mat]; - // D.f[dMMP] = &DD[dPPM * size_Mat]; - // D.f[dPMP] = &DD[dMPM * size_Mat]; - // D.f[dMPP] = &DD[dPMM * size_Mat]; - // D.f[dPPM] = &DD[dMMP * size_Mat]; - // D.f[dMMM] = &DD[dPPP * size_Mat]; - // D.f[dPMM] = &DD[dMPP * size_Mat]; - // D.f[dMPM] = &DD[dPMP * size_Mat]; - //} - - Distributions7 D7; - if (isEvenTimestep==true) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB; - - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - ////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - //unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = KQK; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = KQK; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = KQK; - //unsigned int kbn = kb; - //unsigned int kts = ks; - //unsigned int ktse = ks; - //unsigned int kbnw = kbw; - //unsigned int ktnw = kw; - //unsigned int kbse = kbs; - //unsigned int ktsw = ksw; - //unsigned int kbne = kb; - //unsigned int ktne = KQK; - //unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //real f_W = (D.f[dP00])[ke ]; - //real f_E = (D.f[dM00])[kw ]; - //real f_S = (D.f[d0P0])[kn ]; - //real f_N = (D.f[d0M0])[ks ]; - //real f_B = (D.f[d00P])[kt ]; - //real f_T = (D.f[d00M])[kb ]; - //real f_SW = (D.f[dPP0])[kne ]; - //real f_NE = (D.f[dMM0])[ksw ]; - //real f_NW = (D.f[dPM0])[kse ]; - //real f_SE = (D.f[dMP0])[knw ]; - //real f_BW = (D.f[dP0P])[kte ]; - //real f_TE = (D.f[dM0M])[kbw ]; - //real f_TW = (D.f[dP0M])[kbe ]; - //real f_BE = (D.f[dM0P])[ktw ]; - //real f_BS = (D.f[d0PP])[ktn ]; - //real f_TN = (D.f[d0MM])[kbs ]; - //real f_TS = (D.f[d0PM])[kbn ]; - //real f_BN = (D.f[d0MP])[kts ]; - //real f_BSW = (D.f[dPPP])[ktne ]; - //real f_BNE = (D.f[dMMP])[ktsw ]; - //real f_BNW = (D.f[dPMP])[ktse ]; - //real f_BSE = (D.f[dMPP])[ktnw ]; - //real f_TSW = (D.f[dPPM])[kbne ]; - //real f_TNE = (D.f[dMMM])[kbsw ]; - //real f_TNW = (D.f[dPMM])[kbse ]; - //real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - //real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - //real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - //real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - ////d�rrrrrty !!!!!!!!!!!!! - // real vx1 = ten * ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - // real vx2 = ten * ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - // real vx3 = ten * ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - - //real cu_sq =c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //real ux_sq = vx1 * vx1; - //real uy_sq = vx2 * vx2; - //real uz_sq = vx3 * vx3; - //////////////////////////////////////////////////////////////////////////////// - //BGK - //real omegaD = three - sqrt(three); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = diffusivity/nue_d - one; //zero; - - real f7_E,f7_W,f7_N,f7_S,f7_T,f7_B; - //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B; - //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B; - real TempD = temp[k]; - - - //f7_ZERO = (D7.f[0])[kzero]; - f7_W = (D7.f[1])[ke ]; - f7_E = (D7.f[2])[kw ]; - f7_S = (D7.f[3])[kn ]; - f7_N = (D7.f[4])[ks ]; - f7_B = (D7.f[5])[kt ]; - f7_T = (D7.f[6])[kb ]; - - //real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B; - - ////feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //feq7_E = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2); - //feq7_W = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2); - //feq7_N = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2); - //feq7_S = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2); - //feq7_T = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2); - //feq7_B = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2); - - ////feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //feqW7_E = TempD*(c1o6*(ae+one));//+c1o2*(ux_sq)+vx1*c1o2); - //feqW7_W = TempD*(c1o6*(ae+one));//+c1o2*(ux_sq)-vx1*c1o2); - //feqW7_N = TempD*(c1o6*(ae+one));//+c1o2*(uy_sq)+vx2*c1o2); - //feqW7_S = TempD*(c1o6*(ae+one));//+c1o2*(uy_sq)-vx2*c1o2); - //feqW7_T = TempD*(c1o6*(ae+one));//+c1o2*(uz_sq)+vx3*c1o2); - //feqW7_B = TempD*(c1o6*(ae+one));//+c1o2*(uz_sq)-vx3*c1o2); - - //////////////////////////////////////////////////////////////////////////////// - //TRT - real cs2 = c1o4; - ////////////////////////////////////////////////////////////////////////// - //pointertausch - if (isEvenTimestep==false) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////// - ////mit Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // //q=zero; - // (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B; - //} - - //////////////////////////////////////////////////////////////////////////// - ////ohne Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[2])[kw]=f7_W;// - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[1])[ke]=f7_E;// - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[4])[ks]=f7_S;// - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[3])[kn]=f7_N;// - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[6])[kb]=f7_B;// - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[5])[kt]=f7_T;// - feq7_T + feqW7_B; - //} - - - ////////////////////////////////////////////////////////////////////////// - //ohne Q's aber mit TRT - real /*feq,*/ q; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[2])[kw]= -f7_W + cs2 * TempD; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[1])[ke]= -f7_E + cs2 * TempD; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[4])[ks]= -f7_S + cs2 * TempD; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[3])[kn]= -f7_N + cs2 * TempD; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[6])[kb]= -f7_B + cs2 * TempD; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[5])[kt]= -f7_T + cs2 * TempD; - } - - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QNoSlipADincomp27( - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[dP00])[ke ]; - real f_E = (D.f[dM00])[kw ]; - real f_S = (D.f[d0P0])[kn ]; - real f_N = (D.f[d0M0])[ks ]; - real f_B = (D.f[d00P])[kt ]; - real f_T = (D.f[d00M])[kb ]; - real f_SW = (D.f[dPP0])[kne ]; - real f_NE = (D.f[dMM0])[ksw ]; - real f_NW = (D.f[dPM0])[kse ]; - real f_SE = (D.f[dMP0])[knw ]; - real f_BW = (D.f[dP0P])[kte ]; - real f_TE = (D.f[dM0M])[kbw ]; - real f_TW = (D.f[dP0M])[kbe ]; - real f_BE = (D.f[dM0P])[ktw ]; - real f_BS = (D.f[d0PP])[ktn ]; - real f_TN = (D.f[d0MM])[kbs ]; - real f_TS = (D.f[d0PM])[kbn ]; - real f_BN = (D.f[d0MP])[kts ]; - //real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne ]; - real f_BNE = (D.f[dMMP])[ktsw ]; - real f_BNW = (D.f[dPMP])[ktse ]; - real f_BSE = (D.f[dMPP])[ktnw ]; - real f_TSW = (D.f[dPPM])[kbne ]; - real f_TNE = (D.f[dMMM])[kbsw ]; - real f_TNW = (D.f[dPMM])[kbse ]; - real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - real f27_W = (D27.f[dP00])[ke ]; - real f27_E = (D27.f[dM00])[kw ]; - real f27_S = (D27.f[d0P0])[kn ]; - real f27_N = (D27.f[d0M0])[ks ]; - real f27_B = (D27.f[d00P])[kt ]; - real f27_T = (D27.f[d00M])[kb ]; - real f27_SW = (D27.f[dPP0])[kne ]; - real f27_NE = (D27.f[dMM0])[ksw ]; - real f27_NW = (D27.f[dPM0])[kse ]; - real f27_SE = (D27.f[dMP0])[knw ]; - real f27_BW = (D27.f[dP0P])[kte ]; - real f27_TE = (D27.f[dM0M])[kbw ]; - real f27_TW = (D27.f[dP0M])[kbe ]; - real f27_BE = (D27.f[dM0P])[ktw ]; - real f27_BS = (D27.f[d0PP])[ktn ]; - real f27_TN = (D27.f[d0MM])[kbs ]; - real f27_TS = (D27.f[d0PM])[kbn ]; - real f27_BN = (D27.f[d0MP])[kts ]; - real f27_ZERO = (D27.f[d000])[kzero]; - real f27_BSW = (D27.f[dPPP])[ktne ]; - real f27_BNE = (D27.f[dMMP])[ktsw ]; - real f27_BNW = (D27.f[dPMP])[ktse ]; - real f27_BSE = (D27.f[dMPP])[ktnw ]; - real f27_TSW = (D27.f[dPPM])[kbne ]; - real f27_TNE = (D27.f[dMMM])[kbsw ]; - real f27_TNW = (D27.f[dPMM])[kbse ]; - real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - //real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real TempD = temp[k]; - - //real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]=(c2o1*feqW27_W -(f27_E *(q*omegaD-c1o1)-omegaD*feq27_E *(q-c1o1))/(omegaD-c1o1)+f27_W *q)/(q+c1o1); - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]=(c2o1*feqW27_E -(f27_W *(q*omegaD-c1o1)-omegaD*feq27_W *(q-c1o1))/(omegaD-c1o1)+f27_E *q)/(q+c1o1); - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]=(c2o1*feqW27_S -(f27_N *(q*omegaD-c1o1)-omegaD*feq27_N *(q-c1o1))/(omegaD-c1o1)+f27_S *q)/(q+c1o1); - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]=(c2o1*feqW27_N -(f27_S *(q*omegaD-c1o1)-omegaD*feq27_S *(q-c1o1))/(omegaD-c1o1)+f27_N *q)/(q+c1o1); - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]=(c2o1*feqW27_B -(f27_T *(q*omegaD-c1o1)-omegaD*feq27_T *(q-c1o1))/(omegaD-c1o1)+f27_B *q)/(q+c1o1); - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]=(c2o1*feqW27_T -(f27_B *(q*omegaD-c1o1)-omegaD*feq27_B *(q-c1o1))/(omegaD-c1o1)+f27_T *q)/(q+c1o1); - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1); - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1); - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1); - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1); - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1); - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1); - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1); - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1); - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1); - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1); - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1); - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1); - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1); - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1); - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1); - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1); - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1); - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1); - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1); - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADVeloIncomp7( - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //Distributions27 D; - //if (isEvenTimestep==true) - //{ - // D.f[dP00] = &DD[dP00 * size_Mat]; - // D.f[dM00] = &DD[dM00 * size_Mat]; - // D.f[d0P0] = &DD[d0P0 * size_Mat]; - // D.f[d0M0] = &DD[d0M0 * size_Mat]; - // D.f[d00P] = &DD[d00P * size_Mat]; - // D.f[d00M] = &DD[d00M * size_Mat]; - // D.f[dPP0] = &DD[dPP0 * size_Mat]; - // D.f[dMM0] = &DD[dMM0 * size_Mat]; - // D.f[dPM0] = &DD[dPM0 * size_Mat]; - // D.f[dMP0] = &DD[dMP0 * size_Mat]; - // D.f[dP0P] = &DD[dP0P * size_Mat]; - // D.f[dM0M] = &DD[dM0M * size_Mat]; - // D.f[dP0M] = &DD[dP0M * size_Mat]; - // D.f[dM0P] = &DD[dM0P * size_Mat]; - // D.f[d0PP] = &DD[d0PP * size_Mat]; - // D.f[d0MM] = &DD[d0MM * size_Mat]; - // D.f[d0PM] = &DD[d0PM * size_Mat]; - // D.f[d0MP] = &DD[d0MP * size_Mat]; - // D.f[d000] = &DD[d000 * size_Mat]; - // D.f[dPPP] = &DD[dPPP * size_Mat]; - // D.f[dMMP] = &DD[dMMP * size_Mat]; - // D.f[dPMP] = &DD[dPMP * size_Mat]; - // D.f[dMPP] = &DD[dMPP * size_Mat]; - // D.f[dPPM] = &DD[dPPM * size_Mat]; - // D.f[dMMM] = &DD[dMMM * size_Mat]; - // D.f[dPMM] = &DD[dPMM * size_Mat]; - // D.f[dMPM] = &DD[dMPM * size_Mat]; - //} - //else - //{ - // D.f[dM00] = &DD[dP00 * size_Mat]; - // D.f[dP00] = &DD[dM00 * size_Mat]; - // D.f[d0M0] = &DD[d0P0 * size_Mat]; - // D.f[d0P0] = &DD[d0M0 * size_Mat]; - // D.f[d00M] = &DD[d00P * size_Mat]; - // D.f[d00P] = &DD[d00M * size_Mat]; - // D.f[dMM0] = &DD[dPP0 * size_Mat]; - // D.f[dPP0] = &DD[dMM0 * size_Mat]; - // D.f[dMP0] = &DD[dPM0 * size_Mat]; - // D.f[dPM0] = &DD[dMP0 * size_Mat]; - // D.f[dM0M] = &DD[dP0P * size_Mat]; - // D.f[dP0P] = &DD[dM0M * size_Mat]; - // D.f[dM0P] = &DD[dP0M * size_Mat]; - // D.f[dP0M] = &DD[dM0P * size_Mat]; - // D.f[d0MM] = &DD[d0PP * size_Mat]; - // D.f[d0PP] = &DD[d0MM * size_Mat]; - // D.f[d0MP] = &DD[d0PM * size_Mat]; - // D.f[d0PM] = &DD[d0MP * size_Mat]; - // D.f[d000] = &DD[d000 * size_Mat]; - // D.f[dPPP] = &DD[dMMM * size_Mat]; - // D.f[dMMP] = &DD[dPPM * size_Mat]; - // D.f[dPMP] = &DD[dMPM * size_Mat]; - // D.f[dMPP] = &DD[dPMM * size_Mat]; - // D.f[dPPM] = &DD[dMMP * size_Mat]; - // D.f[dMMM] = &DD[dPPP * size_Mat]; - // D.f[dPMM] = &DD[dMPP * size_Mat]; - // D.f[dMPM] = &DD[dPMP * size_Mat]; - //} - - Distributions7 D7; - if (isEvenTimestep==true) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB; - - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - ////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - //unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = KQK; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = KQK; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = KQK; - //unsigned int kbn = kb; - //unsigned int kts = ks; - //unsigned int ktse = ks; - //unsigned int kbnw = kbw; - //unsigned int ktnw = kw; - //unsigned int kbse = kbs; - //unsigned int ktsw = ksw; - //unsigned int kbne = kb; - //unsigned int ktne = KQK; - //unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //real f_W = (D.f[dP00])[ke ]; - //real f_E = (D.f[dM00])[kw ]; - //real f_S = (D.f[d0P0])[kn ]; - //real f_N = (D.f[d0M0])[ks ]; - //real f_B = (D.f[d00P])[kt ]; - //real f_T = (D.f[d00M])[kb ]; - //real f_SW = (D.f[dPP0])[kne ]; - //real f_NE = (D.f[dMM0])[ksw ]; - //real f_NW = (D.f[dPM0])[kse ]; - //real f_SE = (D.f[dMP0])[knw ]; - //real f_BW = (D.f[dP0P])[kte ]; - //real f_TE = (D.f[dM0M])[kbw ]; - //real f_TW = (D.f[dP0M])[kbe ]; - //real f_BE = (D.f[dM0P])[ktw ]; - //real f_BS = (D.f[d0PP])[ktn ]; - //real f_TN = (D.f[d0MM])[kbs ]; - //real f_TS = (D.f[d0PM])[kbn ]; - //real f_BN = (D.f[d0MP])[kts ]; - //real f_BSW = (D.f[dPPP])[ktne ]; - //real f_BNE = (D.f[dMMP])[ktsw ]; - //real f_BNW = (D.f[dPMP])[ktse ]; - //real f_BSE = (D.f[dMPP])[ktnw ]; - //real f_TSW = (D.f[dPPM])[kbne ]; - //real f_TNE = (D.f[dMMM])[kbsw ]; - //real f_TNW = (D.f[dPMM])[kbse ]; - //real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - //real vx1_Inflow = c0o1; - //real vx2_Inflow = velo[k]; - //real vx3_Inflow = c0o1; - //real ux_sq_Inflow = vx1_Inflow * vx1_Inflow; - //real uy_sq_Inflow = vx2_Inflow * vx2_Inflow; - //real uz_sq_Inflow = vx3_Inflow * vx3_Inflow; - //////////////////////////////////////////////////////////////////////////////// - //real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - //real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - //real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - ////d�rrrrrty !!!!!!!!!!!!! - // real vx1 = ten * ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - // real vx2 = ten * ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - // real vx3 = ten * ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - //real cu_sq =1.5f*(vx1*vx1+vx2*vx2+vx3*vx3); - //real ux_sq = vx1 * vx1; - //real uy_sq = vx2 * vx2; - //real uz_sq = vx3 * vx3; - - real f7_E,f7_W,f7_N,f7_S,f7_T,f7_B; - //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B; - //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B; - real TempD = temp[k]; - - //f7_ZERO = (D7.f[0])[kzero]; - f7_W = (D7.f[1])[ke ]; - f7_E = (D7.f[2])[kw ]; - f7_S = (D7.f[3])[kn ]; - f7_N = (D7.f[4])[ks ]; - f7_B = (D7.f[5])[kt ]; - f7_T = (D7.f[6])[kb ]; - - //real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B; - - //////////////////////////////////////////////////////////////////////////////// - //BGK - //real omegaD = three - sqrt(three); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - ////real ae = zero; - //real ae = diffusivity/nue_d - one; - - ////feq7_ZERO = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //feq7_E = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2); - //feq7_W = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2); - //feq7_N = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2); - //feq7_S = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2); - //feq7_T = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2); - //feq7_B = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2); - - ////feq7_ZERO = TempD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //feqW7_E = TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2); - //feqW7_W = TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2); - //feqW7_N = TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2); - //feqW7_S = TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2); - //feqW7_T = TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2); - //feqW7_B = TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2); - - // //////////////////////////////////////////////////////////////////////////////// - ////TRT Yoshida Kernel - based on Ying - real cs2 = c1o4; - // real Lam = diffusivity/(one)/cs2; - // real omegaD = - one / (Lam + c1o2); - // real ae = zero; - // //////////////////////////////////////////////////////////////////////////////// - //real Mom000 = f7_ZERO + f7_W + f7_E + f7_N + f7_S + f7_T + f7_B; //1 - // real Mom100 = f7_E - f7_W; - // real Mom010 = f7_N - f7_S; - // real Mom001 = f7_T - f7_B; - // real Mom222 = six*f7_ZERO - f7_W - f7_E - f7_N - f7_S - f7_T - f7_B; - // real Mom200 = two*f7_W + two*f7_E - f7_N - f7_S - f7_T - f7_B; - // real Mom022 = f7_N + f7_S - f7_T - f7_B; - - // real Meq000 = ConcD; - // real Meq100 = ConcD*vx1; - // real Meq010 = ConcD*vx2; - // real Meq001 = ConcD*vx3; - // real Meq222 = c3o4*ConcD; - // real Meq200 = zero; - // real Meq022 = zero; - - // // relaxation TRT Yoshida - - // // odd - // Mom100 = omegaD * (Mom100-Meq100); - // Mom010 = omegaD * (Mom010-Meq010); - // Mom001 = omegaD * (Mom001-Meq001); - // - // // even - // Mom000 = -one*(Mom000-Meq000); - // Mom222 = -one*(Mom222-Meq222); - // Mom200 = -one*(Mom200-Meq200); - // Mom022 = -one*(Mom022-Meq022); - // - // //Back transformation to distributions - // f7_ZERO = f7_ZERO + c1o7*Mom000 + c1o7*Mom222; //1 - // f7_E = f7_E + c1o7*Mom000 + c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200; //2 - // f7_W = f7_W + c1o7*Mom000 - c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200; //3 - // f7_N = f7_N + c1o7*Mom000 + c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //4 - // f7_S = f7_S + c1o7*Mom000 - c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //5 - // f7_T = f7_T + c1o7*Mom000 + c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //6 - // f7_B = f7_B + c1o7*Mom000 - c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //7 - - - - - - ////////////////////////////////////////////////////////////////////////// - //pointertausch - if (isEvenTimestep==false) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////// - ////mit Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-one)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-one)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B; - //} - - //////////////////////////////////////////////////////////////////////////// - ////ohne Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[2])[kw]=f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[1])[ke]=f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[4])[ks]=f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[3])[kn]=f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[6])[kb]=f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[5])[kt]=f7_T - feq7_T + feqW7_B; - //} - - ////////////////////////////////////////////////////////////////////////// - //ohne Q's aber mit TRT - real /*feq,*/ q; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[2])[kw]= -f7_W + cs2 * TempD; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[1])[ke]= -f7_E + cs2 * TempD; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[4])[ks]= -f7_S + cs2 * TempD; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[3])[kn]= -f7_N + cs2 * TempD; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[6])[kb]= -f7_B + cs2 * TempD; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[5])[kt]= -f7_T + cs2 * TempD; - } - - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADVeloIncomp27( - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - //unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[dP00])[ke ]; - real f_E = (D.f[dM00])[kw ]; - real f_S = (D.f[d0P0])[kn ]; - real f_N = (D.f[d0M0])[ks ]; - real f_B = (D.f[d00P])[kt ]; - real f_T = (D.f[d00M])[kb ]; - real f_SW = (D.f[dPP0])[kne ]; - real f_NE = (D.f[dMM0])[ksw ]; - real f_NW = (D.f[dPM0])[kse ]; - real f_SE = (D.f[dMP0])[knw ]; - real f_BW = (D.f[dP0P])[kte ]; - real f_TE = (D.f[dM0M])[kbw ]; - real f_TW = (D.f[dP0M])[kbe ]; - real f_BE = (D.f[dM0P])[ktw ]; - real f_BS = (D.f[d0PP])[ktn ]; - real f_TN = (D.f[d0MM])[kbs ]; - real f_TS = (D.f[d0PM])[kbn ]; - real f_BN = (D.f[d0MP])[kts ]; - //real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne ]; - real f_BNE = (D.f[dMMP])[ktsw ]; - real f_BNW = (D.f[dPMP])[ktse ]; - real f_BSE = (D.f[dMPP])[ktnw ]; - real f_TSW = (D.f[dPPM])[kbne ]; - real f_TNE = (D.f[dMMM])[kbsw ]; - real f_TNW = (D.f[dPMM])[kbse ]; - real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - //real f27_W = (D27.f[dP00])[ke ]; - //real f27_E = (D27.f[dM00])[kw ]; - //real f27_S = (D27.f[d0P0])[kn ]; - //real f27_N = (D27.f[d0M0])[ks ]; - //real f27_B = (D27.f[d00P])[kt ]; - //real f27_T = (D27.f[d00M])[kb ]; - //real f27_SW = (D27.f[dPP0])[kne ]; - //real f27_NE = (D27.f[dMM0])[ksw ]; - //real f27_NW = (D27.f[dPM0])[kse ]; - //real f27_SE = (D27.f[dMP0])[knw ]; - //real f27_BW = (D27.f[dP0P])[kte ]; - //real f27_TE = (D27.f[dM0M])[kbw ]; - //real f27_TW = (D27.f[dP0M])[kbe ]; - //real f27_BE = (D27.f[dM0P])[ktw ]; - //real f27_BS = (D27.f[d0PP])[ktn ]; - //real f27_TN = (D27.f[d0MM])[kbs ]; - //real f27_TS = (D27.f[d0PM])[kbn ]; - //real f27_BN = (D27.f[d0MP])[kts ]; - //real f27_ZERO = (D27.f[d000])[kzero]; - //real f27_BSW = (D27.f[dPPP])[ktne ]; - //real f27_BNE = (D27.f[dMMP])[ktsw ]; - //real f27_BNW = (D27.f[dPMP])[ktse ]; - //real f27_BSE = (D27.f[dMPP])[ktnw ]; - //real f27_TSW = (D27.f[dPPM])[kbne ]; - //real f27_TNE = (D27.f[dMMM])[kbsw ]; - //real f27_TNW = (D27.f[dPMM])[kbse ]; - //real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - //real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - // f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - // f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - //real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - //real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - //real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - //real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - //real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - //real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - //real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - //real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - //real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - //real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - //real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - //real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - //real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - //real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - //real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - //real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - //real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - //real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real TempD = temp[k]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // velocity inflow - vx1 = velo[k];//zero; - vx2 = c0o1;//velo[k]; - vx3 = c0o1; - - //real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]= -feqW27_W + c2o1 * c2o27 * TempD; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]= -feqW27_E + c2o1 * c2o27 * TempD; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]= -feqW27_S + c2o1 * c2o27 * TempD; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]= -feqW27_N + c2o1 * c2o27 * TempD; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]= -feqW27_B + c2o1 * c2o27 * TempD; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]= -feqW27_T + c2o1 * c2o27 * TempD; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]= -feqW27_SW + c2o1 * c1o54 * TempD; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]= -feqW27_NE + c2o1 * c1o54 * TempD; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]= -feqW27_NW + c2o1 * c1o54 * TempD; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]= -feqW27_SE + c2o1 * c1o54 * TempD; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]= -feqW27_BW + c2o1 * c1o54 * TempD; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]= -feqW27_TE + c2o1 * c1o54 * TempD; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]= -feqW27_TW + c2o1 * c1o54 * TempD; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]= -feqW27_BE + c2o1 * c1o54 * TempD; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54 * TempD; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54 * TempD; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]= -feqW27_TS + c2o1 * c1o54 * TempD; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54 * TempD; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD; - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[dM00])[kw ]=(two*feqW27_W -(f27_E *(q*omegaD-one)-omegaD*feq27_E *(q-one))/(omegaD-one)+f27_W *q)/(q+one); - //q = q_dirW[k]; if (q>=zero && q<=one) (D27.f[dP00])[ke ]=(two*feqW27_E -(f27_W *(q*omegaD-one)-omegaD*feq27_W *(q-one))/(omegaD-one)+f27_E *q)/(q+one); - //q = q_dirN[k]; if (q>=zero && q<=one) (D27.f[d0M0])[ks ]=(two*feqW27_S -(f27_N *(q*omegaD-one)-omegaD*feq27_N *(q-one))/(omegaD-one)+f27_S *q)/(q+one); - //q = q_dirS[k]; if (q>=zero && q<=one) (D27.f[d0P0])[kn ]=(two*feqW27_N -(f27_S *(q*omegaD-one)-omegaD*feq27_S *(q-one))/(omegaD-one)+f27_N *q)/(q+one); - //q = q_dirT[k]; if (q>=zero && q<=one) (D27.f[d00M])[kb ]=(two*feqW27_B -(f27_T *(q*omegaD-one)-omegaD*feq27_T *(q-one))/(omegaD-one)+f27_B *q)/(q+one); - //q = q_dirB[k]; if (q>=zero && q<=one) (D27.f[d00P])[kt ]=(two*feqW27_T -(f27_B *(q*omegaD-one)-omegaD*feq27_B *(q-one))/(omegaD-one)+f27_T *q)/(q+one); - //q = q_dirNE[k]; if (q>=zero && q<=one) (D27.f[dMM0])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one); - //q = q_dirSW[k]; if (q>=zero && q<=one) (D27.f[dPP0])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one); - //q = q_dirSE[k]; if (q>=zero && q<=one) (D27.f[dMP0])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one); - //q = q_dirNW[k]; if (q>=zero && q<=one) (D27.f[dPM0])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one); - //q = q_dirTE[k]; if (q>=zero && q<=one) (D27.f[dM0M])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one); - //q = q_dirBW[k]; if (q>=zero && q<=one) (D27.f[dP0P])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one); - //q = q_dirBE[k]; if (q>=zero && q<=one) (D27.f[dM0P])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one); - //q = q_dirTW[k]; if (q>=zero && q<=one) (D27.f[dP0M])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one); - //q = q_dirTN[k]; if (q>=zero && q<=one) (D27.f[d0MM])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one); - //q = q_dirBS[k]; if (q>=zero && q<=one) (D27.f[d0PP])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one); - //q = q_dirBN[k]; if (q>=zero && q<=one) (D27.f[d0MP])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one); - //q = q_dirTS[k]; if (q>=zero && q<=one) (D27.f[d0PM])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one); - //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dMMM])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one); - //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dPPP])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one); - //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dMMP])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one); - //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dPPM])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one); - //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dMPM])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one); - //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dPMP])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one); - //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dMPP])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one); - //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADPressIncomp7( real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - /* Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * size_Mat]; - D.f[dM00] = &DD[dM00 * size_Mat]; - D.f[d0P0] = &DD[d0P0 * size_Mat]; - D.f[d0M0] = &DD[d0M0 * size_Mat]; - D.f[d00P] = &DD[d00P * size_Mat]; - D.f[d00M] = &DD[d00M * size_Mat]; - D.f[dPP0] = &DD[dPP0 * size_Mat]; - D.f[dMM0] = &DD[dMM0 * size_Mat]; - D.f[dPM0] = &DD[dPM0 * size_Mat]; - D.f[dMP0] = &DD[dMP0 * size_Mat]; - D.f[dP0P] = &DD[dP0P * size_Mat]; - D.f[dM0M] = &DD[dM0M * size_Mat]; - D.f[dP0M] = &DD[dP0M * size_Mat]; - D.f[dM0P] = &DD[dM0P * size_Mat]; - D.f[d0PP] = &DD[d0PP * size_Mat]; - D.f[d0MM] = &DD[d0MM * size_Mat]; - D.f[d0PM] = &DD[d0PM * size_Mat]; - D.f[d0MP] = &DD[d0MP * size_Mat]; - D.f[d000] = &DD[d000 * size_Mat]; - D.f[dPPP] = &DD[dPPP * size_Mat]; - D.f[dMMP] = &DD[dMMP * size_Mat]; - D.f[dPMP] = &DD[dPMP * size_Mat]; - D.f[dMPP] = &DD[dMPP * size_Mat]; - D.f[dPPM] = &DD[dPPM * size_Mat]; - D.f[dMMM] = &DD[dMMM * size_Mat]; - D.f[dPMM] = &DD[dPMM * size_Mat]; - D.f[dMPM] = &DD[dMPM * size_Mat]; - } - else - { - D.f[dM00] = &DD[dP00 * size_Mat]; - D.f[dP00] = &DD[dM00 * size_Mat]; - D.f[d0M0] = &DD[d0P0 * size_Mat]; - D.f[d0P0] = &DD[d0M0 * size_Mat]; - D.f[d00M] = &DD[d00P * size_Mat]; - D.f[d00P] = &DD[d00M * size_Mat]; - D.f[dMM0] = &DD[dPP0 * size_Mat]; - D.f[dPP0] = &DD[dMM0 * size_Mat]; - D.f[dMP0] = &DD[dPM0 * size_Mat]; - D.f[dPM0] = &DD[dMP0 * size_Mat]; - D.f[dM0M] = &DD[dP0P * size_Mat]; - D.f[dP0P] = &DD[dM0M * size_Mat]; - D.f[dM0P] = &DD[dP0M * size_Mat]; - D.f[dP0M] = &DD[dM0P * size_Mat]; - D.f[d0MM] = &DD[d0PP * size_Mat]; - D.f[d0PP] = &DD[d0MM * size_Mat]; - D.f[d0MP] = &DD[d0PM * size_Mat]; - D.f[d0PM] = &DD[d0MP * size_Mat]; - D.f[d000] = &DD[d000 * size_Mat]; - D.f[dPPP] = &DD[dMMM * size_Mat]; - D.f[dMMP] = &DD[dPPM * size_Mat]; - D.f[dPMP] = &DD[dMPM * size_Mat]; - D.f[dMPP] = &DD[dPMM * size_Mat]; - D.f[dPPM] = &DD[dMMP * size_Mat]; - D.f[dMMM] = &DD[dPPP * size_Mat]; - D.f[dPMM] = &DD[dMPP * size_Mat]; - D.f[dMPM] = &DD[dPMP * size_Mat]; - }*/ - - Distributions7 D7; - if (isEvenTimestep==true) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k<numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB; - - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - ////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = KQK; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = KQK; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = KQK; - //unsigned int kbn = kb; - //unsigned int kts = ks; - //unsigned int ktse = ks; - //unsigned int kbnw = kbw; - //unsigned int ktnw = kw; - //unsigned int kbse = kbs; - //unsigned int ktsw = ksw; - //unsigned int kbne = kb; - //unsigned int ktne = KQK; - //unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - /* real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE, - f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; - - f_W = (D.f[dP00])[ke ]; - f_E = (D.f[dM00])[kw ]; - f_S = (D.f[d0P0])[kn ]; - f_N = (D.f[d0M0])[ks ]; - f_B = (D.f[d00P])[kt ]; - f_T = (D.f[d00M])[kb ]; - f_SW = (D.f[dPP0])[kne ]; - f_NE = (D.f[dMM0])[ksw ]; - f_NW = (D.f[dPM0])[kse ]; - f_SE = (D.f[dMP0])[knw ]; - f_BW = (D.f[dP0P])[kte ]; - f_TE = (D.f[dM0M])[kbw ]; - f_TW = (D.f[dP0M])[kbe ]; - f_BE = (D.f[dM0P])[ktw ]; - f_BS = (D.f[d0PP])[ktn ]; - f_TN = (D.f[d0MM])[kbs ]; - f_TS = (D.f[d0PM])[kbn ]; - f_BN = (D.f[d0MP])[kts ]; - f_BSW = (D.f[dPPP])[ktne ]; - f_BNE = (D.f[dMMP])[ktsw ]; - f_BNW = (D.f[dPMP])[ktse ]; - f_BSE = (D.f[dMPP])[ktnw ]; - f_TSW = (D.f[dPPM])[kbne ]; - f_TNE = (D.f[dMMM])[kbsw ]; - f_TNW = (D.f[dPMM])[kbse ]; - f_TSE = (D.f[dMPM])[kbnw ];*/ - //////////////////////////////////////////////////////////////////////////////// - //real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - //real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - //real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - ////d�rrrrrty !!!!!!!!!!!!! - // real vx1 = ten * ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - // real vx2 = ten * ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - // real vx3 = ten * ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - - //real cu_sq =1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - //real ux_sq = vx1 * vx1; - //real uy_sq = vx2 * vx2; - //real uz_sq = vx3 * vx3; - ////////////////////////////////////////////////////////////////////////// - //BGK - //real omegaD = three - sqrt(three); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - ////real ae = zero; - //real ae = diffusivity/nue_d - one; - - real f7_ZERO,f7_E,f7_W,f7_N,f7_S,f7_T,f7_B; - //real /*feq7_ZERO,*/feq7_E,feq7_W,feq7_N,feq7_S,feq7_T,feq7_B; - //real /*feqW7_ZERO,*/feqW7_E,feqW7_W,feqW7_N,feqW7_S,feqW7_T,feqW7_B; - //real TempD = temp[k]; - - - f7_ZERO = (D7.f[0])[kzero]; - f7_W = (D7.f[1])[ke ]; - f7_E = (D7.f[2])[kw ]; - f7_S = (D7.f[3])[kn ]; - f7_N = (D7.f[4])[ks ]; - f7_B = (D7.f[5])[kt ]; - f7_T = (D7.f[6])[kb ]; - - real ConcD = f7_ZERO + f7_E + f7_W + f7_N + f7_S + f7_T + f7_B; - - ////feq7_ZERO = ConcD*(c1o3*(ae*(-3.0))-(ux_sq+uy_sq+uz_sq)); - //feq7_E = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2); - //feq7_W = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2); - //feq7_N = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2); - //feq7_S = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2); - //feq7_T = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2); - //feq7_B = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2); - - ////feq7_ZERO = TempD*(c1o3*(ae*(-3.0f))-(ux_sq+uy_sq+uz_sq)); - //feqW7_E = feq7_E;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)+vx1_Inflow*c1o2); - //feqW7_W = feq7_W;// TempD*(c1o6*(ae+one)+c1o2*(ux_sq_Inflow)-vx1_Inflow*c1o2); - //feqW7_N = feq7_N;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)+vx2_Inflow*c1o2); - //feqW7_S = feq7_S;// TempD*(c1o6*(ae+one)+c1o2*(uy_sq_Inflow)-vx2_Inflow*c1o2); - //feqW7_T = feq7_T;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)+vx3_Inflow*c1o2); - //feqW7_B = feq7_B;// TempD*(c1o6*(ae+one)+c1o2*(uz_sq_Inflow)-vx3_Inflow*c1o2); - - ////////////////////////////////////////////////////////////////////////// - //TRT Yoshida Kernel - based on Ying - real cs2 = c1o4; - real Lam = diffusivity/(c1o1)/cs2; - //real omegaD = - c1o1 / (Lam + c1o2); - real nue_d = Lam/c3o1; - - ////////////////////////////////////////////////////////////////////////// - //pointertausch - if (isEvenTimestep==false) - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[1] = &DD7[1*numberOfLBnodes]; - D7.f[2] = &DD7[2*numberOfLBnodes]; - D7.f[3] = &DD7[3*numberOfLBnodes]; - D7.f[4] = &DD7[4*numberOfLBnodes]; - D7.f[5] = &DD7[5*numberOfLBnodes]; - D7.f[6] = &DD7[6*numberOfLBnodes]; - } - else - { - D7.f[0] = &DD7[0*numberOfLBnodes]; - D7.f[2] = &DD7[1*numberOfLBnodes]; - D7.f[1] = &DD7[2*numberOfLBnodes]; - D7.f[4] = &DD7[3*numberOfLBnodes]; - D7.f[3] = &DD7[4*numberOfLBnodes]; - D7.f[6] = &DD7[5*numberOfLBnodes]; - D7.f[5] = &DD7[6*numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////// - ////mit Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[2])[kw]=(two*feqW7_W-(f7_E*(q*omegaD-one)-omegaD*feq7_E*(q-one))/(omegaD-one)+f7_W*q)/(q+one);//f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[1])[ke]=(two*feqW7_E-(f7_W*(q*omegaD-one)-omegaD*feq7_W*(q-one))/(omegaD-one)+f7_E*q)/(q+one);//f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[4])[ks]=(two*feqW7_S-(f7_N*(q*omegaD-1.)-omegaD*feq7_N*(q-one))/(omegaD-one)+f7_S*q)/(q+one);//f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[3])[kn]=(two*feqW7_N-(f7_S*(q*omegaD-one)-omegaD*feq7_S*(q-one))/(omegaD-one)+f7_N*q)/(q+one);//f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[6])[kb]=(two*feqW7_B-(f7_T*(q*omegaD-1.)-omegaD*feq7_T*(q-one))/(omegaD-one)+f7_B*q)/(q+one);//f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // //q=0.; - // (D7.f[5])[kt]=(two*feqW7_T-(f7_B*(q*omegaD-one)-omegaD*feq7_B*(q-one))/(omegaD-one)+f7_T*q)/(q+one);//f7_T - feq7_T + feqW7_B; - //} - - //////////////////////////////////////////////////////////////////////////// - ////ohne Q's - //real /*feq,*/ q; - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[2])[kw]= 0.1;//test - // //(D7.f[2])[kw]=f7_W - feq7_W + feqW7_E; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[1])[ke]= 0.1;//test - // //(D7.f[1])[ke]=f7_E - feq7_E + feqW7_W; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[4])[ks]= 0.1;//test - // //(D7.f[4])[ks]=f7_S - feq7_S + feqW7_N; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[3])[kn]= 0.1;//test - // //(D7.f[3])[kn]=f7_N - feq7_N + feqW7_S; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[6])[kb]= 0.1;//test - // //(D7.f[6])[kb]=f7_B - feq7_B + feqW7_T; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // (D7.f[5])[kt]= 0.1;//test - // //(D7.f[5])[kt]=f7_T - feq7_T + feqW7_B; - //} - - - ////////////////////////////////////////////////////////////////////////// - //ohne Q's aber mit TRT - real /*feq,*/ q; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[2])[kw]= f7_W + nue_d * ConcD; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[1])[ke]= f7_E + nue_d * ConcD; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[4])[ks]= f7_S + nue_d * ConcD; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[3])[kn]= f7_N + nue_d * ConcD; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[6])[kb]= f7_B + nue_d * ConcD; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - (D7.f[5])[kt]= f7_T + nue_d * ConcD; - } - - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QADPressIncomp27( - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[dP00] = &DD[dP00 * numberOfLBnodes]; - D.f[dM00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00P] = &DD[d00P * numberOfLBnodes]; - D.f[d00M] = &DD[d00M * numberOfLBnodes]; - D.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &DD[dP0P * numberOfLBnodes]; - D.f[dM0M] = &DD[dM0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dP0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dM0P * numberOfLBnodes]; - D.f[d0PP] = &DD[d0PP * numberOfLBnodes]; - D.f[d0MM] = &DD[d0MM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0PM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dPPP * numberOfLBnodes]; - D.f[dMMP] = &DD[dMMP * numberOfLBnodes]; - D.f[dPMP] = &DD[dPMP * numberOfLBnodes]; - D.f[dMPP] = &DD[dMPP * numberOfLBnodes]; - D.f[dPPM] = &DD[dPPM * numberOfLBnodes]; - D.f[dMMM] = &DD[dMMM * numberOfLBnodes]; - D.f[dPMM] = &DD[dPMM * numberOfLBnodes]; - D.f[dMPM] = &DD[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &DD[dP00 * numberOfLBnodes]; - D.f[dP00] = &DD[dM00 * numberOfLBnodes]; - D.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; - D.f[d00M] = &DD[d00P * numberOfLBnodes]; - D.f[d00P] = &DD[d00M * numberOfLBnodes]; - D.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &DD[dP0P * numberOfLBnodes]; - D.f[dP0P] = &DD[dM0M * numberOfLBnodes]; - D.f[dM0P] = &DD[dP0M * numberOfLBnodes]; - D.f[dP0M] = &DD[dM0P * numberOfLBnodes]; - D.f[d0MM] = &DD[d0PP * numberOfLBnodes]; - D.f[d0PP] = &DD[d0MM * numberOfLBnodes]; - D.f[d0MP] = &DD[d0PM * numberOfLBnodes]; - D.f[d0PM] = &DD[d0MP * numberOfLBnodes]; - D.f[d000] = &DD[d000 * numberOfLBnodes]; - D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; - D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; - D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; - D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; - D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; - D.f[dMMM] = &DD[dPPP * numberOfLBnodes]; - D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; - D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if(k < numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real *q_dirE, *q_dirW, *q_dirN, *q_dirS, *q_dirT, *q_dirB, - *q_dirNE, *q_dirSW, *q_dirSE, *q_dirNW, *q_dirTE, *q_dirBW, - *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS, - *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW, - *q_dirBSE, *q_dirBNW; - q_dirE = &QQ[dP00 * numberOfBCnodes]; - q_dirW = &QQ[dM00 * numberOfBCnodes]; - q_dirN = &QQ[d0P0 * numberOfBCnodes]; - q_dirS = &QQ[d0M0 * numberOfBCnodes]; - q_dirT = &QQ[d00P * numberOfBCnodes]; - q_dirB = &QQ[d00M * numberOfBCnodes]; - q_dirNE = &QQ[dPP0 * numberOfBCnodes]; - q_dirSW = &QQ[dMM0 * numberOfBCnodes]; - q_dirSE = &QQ[dPM0 * numberOfBCnodes]; - q_dirNW = &QQ[dMP0 * numberOfBCnodes]; - q_dirTE = &QQ[dP0P * numberOfBCnodes]; - q_dirBW = &QQ[dM0M * numberOfBCnodes]; - q_dirBE = &QQ[dP0M * numberOfBCnodes]; - q_dirTW = &QQ[dM0P * numberOfBCnodes]; - q_dirTN = &QQ[d0PP * numberOfBCnodes]; - q_dirBS = &QQ[d0MM * numberOfBCnodes]; - q_dirBN = &QQ[d0PM * numberOfBCnodes]; - q_dirTS = &QQ[d0MP * numberOfBCnodes]; - q_dirTNE = &QQ[dPPP * numberOfBCnodes]; - q_dirTSW = &QQ[dMMP * numberOfBCnodes]; - q_dirTSE = &QQ[dPMP * numberOfBCnodes]; - q_dirTNW = &QQ[dMPP * numberOfBCnodes]; - q_dirBNE = &QQ[dPPM * numberOfBCnodes]; - q_dirBSW = &QQ[dMMM * numberOfBCnodes]; - q_dirBSE = &QQ[dPMM * numberOfBCnodes]; - q_dirBNW = &QQ[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[k]; - //unsigned int kzero= KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[dP00])[ke ]; - real f_E = (D.f[dM00])[kw ]; - real f_S = (D.f[d0P0])[kn ]; - real f_N = (D.f[d0M0])[ks ]; - real f_B = (D.f[d00P])[kt ]; - real f_T = (D.f[d00M])[kb ]; - real f_SW = (D.f[dPP0])[kne ]; - real f_NE = (D.f[dMM0])[ksw ]; - real f_NW = (D.f[dPM0])[kse ]; - real f_SE = (D.f[dMP0])[knw ]; - real f_BW = (D.f[dP0P])[kte ]; - real f_TE = (D.f[dM0M])[kbw ]; - real f_TW = (D.f[dP0M])[kbe ]; - real f_BE = (D.f[dM0P])[ktw ]; - real f_BS = (D.f[d0PP])[ktn ]; - real f_TN = (D.f[d0MM])[kbs ]; - real f_TS = (D.f[d0PM])[kbn ]; - real f_BN = (D.f[d0MP])[kts ]; - //real f_ZERO = (D.f[d000])[kzero]; - real f_BSW = (D.f[dPPP])[ktne ]; - real f_BNE = (D.f[dMMP])[ktsw ]; - real f_BNW = (D.f[dPMP])[ktse ]; - real f_BSE = (D.f[dMPP])[ktnw ]; - real f_TSW = (D.f[dPPM])[kbne ]; - real f_TNE = (D.f[dMMM])[kbsw ]; - real f_TNW = (D.f[dPMM])[kbse ]; - real f_TSE = (D.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W)); - real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S)); - real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B)); - //////////////////////////////////////////////////////////////////////////////// - //real f27_W = (D27.f[dP00])[ke ]; - //real f27_E = (D27.f[dM00])[kw ]; - //real f27_S = (D27.f[d0P0])[kn ]; - //real f27_N = (D27.f[d0M0])[ks ]; - //real f27_B = (D27.f[d00P])[kt ]; - //real f27_T = (D27.f[d00M])[kb ]; - //real f27_SW = (D27.f[dPP0])[kne ]; - //real f27_NE = (D27.f[dMM0])[ksw ]; - //real f27_NW = (D27.f[dPM0])[kse ]; - //real f27_SE = (D27.f[dMP0])[knw ]; - //real f27_BW = (D27.f[dP0P])[kte ]; - //real f27_TE = (D27.f[dM0M])[kbw ]; - //real f27_TW = (D27.f[dP0M])[kbe ]; - //real f27_BE = (D27.f[dM0P])[ktw ]; - //real f27_BS = (D27.f[d0PP])[ktn ]; - //real f27_TN = (D27.f[d0MM])[kbs ]; - //real f27_TS = (D27.f[d0PM])[kbn ]; - //real f27_BN = (D27.f[d0MP])[kts ]; - //real f27_ZERO = (D27.f[d000])[kzero]; - //real f27_BSW = (D27.f[dPPP])[ktne ]; - //real f27_BNE = (D27.f[dMMP])[ktsw ]; - //real f27_BNW = (D27.f[dPMP])[ktse ]; - //real f27_BSE = (D27.f[dMPP])[ktnw ]; - //real f27_TSW = (D27.f[dPPM])[kbne ]; - //real f27_TNE = (D27.f[dMMM])[kbsw ]; - //real f27_TNW = (D27.f[dPMM])[kbse ]; - //real f27_TSE = (D27.f[dMPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - //////////////////////////////////////////////////////////////////////////////// - //real ConcD = f27_TSE + f27_TNW + f27_TNE + f27_TSW + f27_BSE + f27_BNW + f27_BNE + f27_BSW + - //f27_BN + f27_TS + f27_TN + f27_BS + f27_BE + f27_TW + f27_TE + f27_BW + f27_SE + f27_NW + f27_NE + f27_SW + - //f27_T + f27_B + f27_N + f27_S + f27_E + f27_W + f27_ZERO; - - //real feq27_ZERO = c8over27* ConcD*(one-cu_sq); - /*real feq27_E = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - real feq27_W = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - real feq27_N = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - real feq27_S = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - real feq27_T = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - real feq27_B = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - real feq27_NE = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - real feq27_SW = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - real feq27_SE = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - real feq27_NW = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - real feq27_TE = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - real feq27_BW = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - real feq27_BE = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - real feq27_TW = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - real feq27_TN = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - real feq27_BS = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - real feq27_BN = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - real feq27_TS = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - real feq27_TNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - real feq27_BSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - real feq27_BNE = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - real feq27_TSW = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - real feq27_TSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - real feq27_BNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - real feq27_BSE = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - real feq27_TNW = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);*/ - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real TempD = temp[k]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // velocity inflow - //vx1 = zero; - //vx2 = zero; - //vx3 = velo[k]; - - //real feqW27_ZERO = c8over27* TempD*(one-cu_sq); - real feqW27_E = c2o27* TempD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); //feq27_E ;// - real feqW27_W = c2o27* TempD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); //feq27_W ;// - real feqW27_N = c2o27* TempD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); //feq27_N ;// - real feqW27_S = c2o27* TempD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); //feq27_S ;// - real feqW27_T = c2o27* TempD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); //feq27_T ;// - real feqW27_B = c2o27* TempD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); //feq27_B ;// - real feqW27_NE = c1o54* TempD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); //feq27_NE ;// - real feqW27_SW = c1o54* TempD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); //feq27_SW ;// - real feqW27_SE = c1o54* TempD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); //feq27_SE ;// - real feqW27_NW = c1o54* TempD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); //feq27_NW ;// - real feqW27_TE = c1o54* TempD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); //feq27_TE ;// - real feqW27_BW = c1o54* TempD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); //feq27_BW ;// - real feqW27_BE = c1o54* TempD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); //feq27_BE ;// - real feqW27_TW = c1o54* TempD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); //feq27_TW ;// - real feqW27_TN = c1o54* TempD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); //feq27_TN ;// - real feqW27_BS = c1o54* TempD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); //feq27_BS ;// - real feqW27_BN = c1o54* TempD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); //feq27_BN ;// - real feqW27_TS = c1o54* TempD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); //feq27_TS ;// - real feqW27_TNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); //feq27_TNE;// - real feqW27_BSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); //feq27_BSW;// - real feqW27_BNE = c1o216*TempD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); //feq27_BNE;// - real feqW27_TSW = c1o216*TempD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); //feq27_TSW;// - real feqW27_TSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); //feq27_TSE;// - real feqW27_BNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); //feq27_BNW;// - real feqW27_BSE = c1o216*TempD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); //feq27_BSE;// - real feqW27_TNW = c1o216*TempD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //feq27_TNW;// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real omegaD = c3o1 - sqrt(c3o1); - //real Lam = -(c1o2-one/omegaD); - //real nue_d = Lam/three; - //real ae = zero; - //real ae = diffusivity/nue_d - one; - - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D27.f[dP00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dM00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00M * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dPMP * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dMPM * numberOfLBnodes]; - } - else - { - D27.f[dM00] = &DD27[dP00 * numberOfLBnodes]; - D27.f[dP00] = &DD27[dM00 * numberOfLBnodes]; - D27.f[d0M0] = &DD27[d0P0 * numberOfLBnodes]; - D27.f[d0P0] = &DD27[d0M0 * numberOfLBnodes]; - D27.f[d00M] = &DD27[d00P * numberOfLBnodes]; - D27.f[d00P] = &DD27[d00M * numberOfLBnodes]; - D27.f[dMM0] = &DD27[dPP0 * numberOfLBnodes]; - D27.f[dPP0] = &DD27[dMM0 * numberOfLBnodes]; - D27.f[dMP0] = &DD27[dPM0 * numberOfLBnodes]; - D27.f[dPM0] = &DD27[dMP0 * numberOfLBnodes]; - D27.f[dM0M] = &DD27[dP0P * numberOfLBnodes]; - D27.f[dP0P] = &DD27[dM0M * numberOfLBnodes]; - D27.f[dM0P] = &DD27[dP0M * numberOfLBnodes]; - D27.f[dP0M] = &DD27[dM0P * numberOfLBnodes]; - D27.f[d0MM] = &DD27[d0PP * numberOfLBnodes]; - D27.f[d0PP] = &DD27[d0MM * numberOfLBnodes]; - D27.f[d0MP] = &DD27[d0PM * numberOfLBnodes]; - D27.f[d0PM] = &DD27[d0MP * numberOfLBnodes]; - D27.f[d000] = &DD27[d000 * numberOfLBnodes]; - D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; - D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; - D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; - D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; - D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; - D27.f[dMMM] = &DD27[dPPP * numberOfLBnodes]; - D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; - D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[d000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM00])[kw ]= -feqW27_W + c2o1 * c2o27 * TempD; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP00])[ke ]= -feqW27_E + c2o1 * c2o27 * TempD; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0M0])[ks ]= -feqW27_S + c2o1 * c2o27 * TempD; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0P0])[kn ]= -feqW27_N + c2o1 * c2o27 * TempD; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00M])[kb ]= -feqW27_B + c2o1 * c2o27 * TempD; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d00P])[kt ]= -feqW27_T + c2o1 * c2o27 * TempD; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMM0])[ksw ]= -feqW27_SW + c2o1 * c1o54 * TempD; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPP0])[kne ]= -feqW27_NE + c2o1 * c1o54 * TempD; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMP0])[knw ]= -feqW27_NW + c2o1 * c1o54 * TempD; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPM0])[kse ]= -feqW27_SE + c2o1 * c1o54 * TempD; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0M])[kbw ]= -feqW27_BW + c2o1 * c1o54 * TempD; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0P])[kte ]= -feqW27_TE + c2o1 * c1o54 * TempD; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dM0P])[ktw ]= -feqW27_TW + c2o1 * c1o54 * TempD; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dP0M])[kbe ]= -feqW27_BE + c2o1 * c1o54 * TempD; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54 * TempD; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54 * TempD; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0MP])[kts ]= -feqW27_TS + c2o1 * c1o54 * TempD; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[d0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54 * TempD; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dMPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dPMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD; - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[dM00])[kw ]=(two*feqW27_W -(f27_E *(q*omegaD-one)-omegaD*feq27_E *(q-one))/(omegaD-one)+f27_W *q)/(q+one); - //q = q_dirW[k]; if (q>=zero && q<=one) (D27.f[dP00])[ke ]=(two*feqW27_E -(f27_W *(q*omegaD-one)-omegaD*feq27_W *(q-one))/(omegaD-one)+f27_E *q)/(q+one); - //q = q_dirN[k]; if (q>=zero && q<=one) (D27.f[d0M0])[ks ]=(two*feqW27_S -(f27_N *(q*omegaD-one)-omegaD*feq27_N *(q-one))/(omegaD-one)+f27_S *q)/(q+one); - //q = q_dirS[k]; if (q>=zero && q<=one) (D27.f[d0P0])[kn ]=(two*feqW27_N -(f27_S *(q*omegaD-one)-omegaD*feq27_S *(q-one))/(omegaD-one)+f27_N *q)/(q+one); - //q = q_dirT[k]; if (q>=zero && q<=one) (D27.f[d00M])[kb ]=(two*feqW27_B -(f27_T *(q*omegaD-one)-omegaD*feq27_T *(q-one))/(omegaD-one)+f27_B *q)/(q+one); - //q = q_dirB[k]; if (q>=zero && q<=one) (D27.f[d00P])[kt ]=(two*feqW27_T -(f27_B *(q*omegaD-one)-omegaD*feq27_B *(q-one))/(omegaD-one)+f27_T *q)/(q+one); - //q = q_dirNE[k]; if (q>=zero && q<=one) (D27.f[dMM0])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one); - //q = q_dirSW[k]; if (q>=zero && q<=one) (D27.f[dPP0])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one); - //q = q_dirSE[k]; if (q>=zero && q<=one) (D27.f[dMP0])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one); - //q = q_dirNW[k]; if (q>=zero && q<=one) (D27.f[dPM0])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one); - //q = q_dirTE[k]; if (q>=zero && q<=one) (D27.f[dM0M])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one); - //q = q_dirBW[k]; if (q>=zero && q<=one) (D27.f[dP0P])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one); - //q = q_dirBE[k]; if (q>=zero && q<=one) (D27.f[dM0P])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one); - //q = q_dirTW[k]; if (q>=zero && q<=one) (D27.f[dP0M])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one); - //q = q_dirTN[k]; if (q>=zero && q<=one) (D27.f[d0MM])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one); - //q = q_dirBS[k]; if (q>=zero && q<=one) (D27.f[d0PP])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one); - //q = q_dirBN[k]; if (q>=zero && q<=one) (D27.f[d0MP])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one); - //q = q_dirTS[k]; if (q>=zero && q<=one) (D27.f[d0PM])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one); - //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dMMM])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one); - //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dPPP])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one); - //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dMMP])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one); - //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dPPM])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one); - //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dMPM])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one); - //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dPMP])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one); - //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dMPP])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one); - //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dPMM])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -inline __device__ real calcDistributionBC_AD_interpol(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) { - real feq = weight * concentration * (c1o1 + c3o1 * v + c9o2 * v * v * concentration - v_sq * concentration); - return (c1o1 - q) / (c1o1 + q) * ((f - feq * omegaDiffusivity) / (c1o1 - omegaDiffusivity)) + (q * (f + finf) - c6o1 * weight * (jTangential)) / (c1o1 + q); -} -//////////////////////////////////////////////////////////////////////////////// -inline __device__ real calcDistributionBC_AD(real q, real weight, real v, real v_sq, real f, real finf, real omegaDiffusivity, real jTangential, real concentration) { - return f - c6o1 * weight * jTangential; -} - - -// has to be excecuted before Fluid BCs -////////////////////////////////////////////////////////////////////////////// -__global__ void AD_SlipVelDeviceComp( - real *normalX, - real *normalY, - real *normalZ, - real *distributions, - real *distributionsAD, - int *QindexArray, - real *Qarrays, - uint numberOfBCnodes, - real omegaDiffusivity, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep) - { - D.f[dP00] = &distributions[dP00 * numberOfLBnodes]; - D.f[dM00] = &distributions[dM00 * numberOfLBnodes]; - D.f[d0P0] = &distributions[d0P0 * numberOfLBnodes]; - D.f[d0M0] = &distributions[d0M0 * numberOfLBnodes]; - D.f[d00P] = &distributions[d00P * numberOfLBnodes]; - D.f[d00M] = &distributions[d00M * numberOfLBnodes]; - D.f[dPP0] = &distributions[dPP0 * numberOfLBnodes]; - D.f[dMM0] = &distributions[dMM0 * numberOfLBnodes]; - D.f[dPM0] = &distributions[dPM0 * numberOfLBnodes]; - D.f[dMP0] = &distributions[dMP0 * numberOfLBnodes]; - D.f[dP0P] = &distributions[dP0P * numberOfLBnodes]; - D.f[dM0M] = &distributions[dM0M * numberOfLBnodes]; - D.f[dP0M] = &distributions[dP0M * numberOfLBnodes]; - D.f[dM0P] = &distributions[dM0P * numberOfLBnodes]; - D.f[d0PP] = &distributions[d0PP * numberOfLBnodes]; - D.f[d0MM] = &distributions[d0MM * numberOfLBnodes]; - D.f[d0PM] = &distributions[d0PM * numberOfLBnodes]; - D.f[d0MP] = &distributions[d0MP * numberOfLBnodes]; - D.f[d000] = &distributions[d000 * numberOfLBnodes]; - D.f[dPPP] = &distributions[dPPP * numberOfLBnodes]; - D.f[dMMP] = &distributions[dMMP * numberOfLBnodes]; - D.f[dPMP] = &distributions[dPMP * numberOfLBnodes]; - D.f[dMPP] = &distributions[dMPP * numberOfLBnodes]; - D.f[dPPM] = &distributions[dPPM * numberOfLBnodes]; - D.f[dMMM] = &distributions[dMMM * numberOfLBnodes]; - D.f[dPMM] = &distributions[dPMM * numberOfLBnodes]; - D.f[dMPM] = &distributions[dMPM * numberOfLBnodes]; - } - else - { - D.f[dM00] = &distributions[dP00 * numberOfLBnodes]; - D.f[dP00] = &distributions[dM00 * numberOfLBnodes]; - D.f[d0M0] = &distributions[d0P0 * numberOfLBnodes]; - D.f[d0P0] = &distributions[d0M0 * numberOfLBnodes]; - D.f[d00M] = &distributions[d00P * numberOfLBnodes]; - D.f[d00P] = &distributions[d00M * numberOfLBnodes]; - D.f[dMM0] = &distributions[dPP0 * numberOfLBnodes]; - D.f[dPP0] = &distributions[dMM0 * numberOfLBnodes]; - D.f[dMP0] = &distributions[dPM0 * numberOfLBnodes]; - D.f[dPM0] = &distributions[dMP0 * numberOfLBnodes]; - D.f[dM0M] = &distributions[dP0P * numberOfLBnodes]; - D.f[dP0P] = &distributions[dM0M * numberOfLBnodes]; - D.f[dM0P] = &distributions[dP0M * numberOfLBnodes]; - D.f[dP0M] = &distributions[dM0P * numberOfLBnodes]; - D.f[d0MM] = &distributions[d0PP * numberOfLBnodes]; - D.f[d0PP] = &distributions[d0MM * numberOfLBnodes]; - D.f[d0MP] = &distributions[d0PM * numberOfLBnodes]; - D.f[d0PM] = &distributions[d0MP * numberOfLBnodes]; - D.f[d000] = &distributions[d000 * numberOfLBnodes]; - D.f[dPPP] = &distributions[dMMM * numberOfLBnodes]; - D.f[dMMP] = &distributions[dPPM * numberOfLBnodes]; - D.f[dPMP] = &distributions[dMPM * numberOfLBnodes]; - D.f[dMPP] = &distributions[dPMM * numberOfLBnodes]; - D.f[dPPM] = &distributions[dMMP * numberOfLBnodes]; - D.f[dMMM] = &distributions[dPPP * numberOfLBnodes]; - D.f[dPMM] = &distributions[dMPP * numberOfLBnodes]; - D.f[dMPM] = &distributions[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - Distributions27 DAD; - if (isEvenTimestep) - { - DAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; - DAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; - DAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; - DAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; - DAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; - DAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; - DAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; - DAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; - DAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; - DAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; - DAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; - DAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; - DAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; - DAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; - DAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; - DAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; - DAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; - DAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; - DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; - DAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; - DAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; - DAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; - DAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; - DAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; - DAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; - DAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; - DAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; - } - else - { - DAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; - DAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; - DAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; - DAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; - DAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; - DAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; - DAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; - DAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; - DAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; - DAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; - DAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; - DAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; - DAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; - DAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; - DAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; - DAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; - DAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; - DAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; - DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; - DAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; - DAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; - DAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; - DAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; - DAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; - DAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; - DAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; - DAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - const unsigned x = threadIdx.x; // Globaler x-Index - const unsigned y = blockIdx.x; // Globaler y-Index - const unsigned z = blockIdx.y; // Globaler z-Index - - const unsigned nx = blockDim.x; - const unsigned ny = gridDim.x; - - const unsigned k = nx * (ny * z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if (k < numberOfBCnodes) - { - //////////////////////////////////////////////////////////////////////////////// - real NormX = normalX[k]; - real NormY = normalY[k]; - real NormZ = normalZ[k]; - //////////////////////////////////////////////////////////////////////////////// - real* q_dirE, * q_dirW, * q_dirN, * q_dirS, * q_dirT, * q_dirB, - * q_dirNE, * q_dirSW, * q_dirSE, * q_dirNW, * q_dirTE, * q_dirBW, - * q_dirBE, * q_dirTW, * q_dirTN, * q_dirBS, * q_dirBN, * q_dirTS, - * q_dirTNE, * q_dirTSW, * q_dirTSE, * q_dirTNW, * q_dirBNE, * q_dirBSW, - * q_dirBSE, * q_dirBNW; - q_dirE = &Qarrays[dP00 * numberOfBCnodes]; - q_dirW = &Qarrays[dM00 * numberOfBCnodes]; - q_dirN = &Qarrays[d0P0 * numberOfBCnodes]; - q_dirS = &Qarrays[d0M0 * numberOfBCnodes]; - q_dirT = &Qarrays[d00P * numberOfBCnodes]; - q_dirB = &Qarrays[d00M * numberOfBCnodes]; - q_dirNE = &Qarrays[dPP0 * numberOfBCnodes]; - q_dirSW = &Qarrays[dMM0 * numberOfBCnodes]; - q_dirSE = &Qarrays[dPM0 * numberOfBCnodes]; - q_dirNW = &Qarrays[dMP0 * numberOfBCnodes]; - q_dirTE = &Qarrays[dP0P * numberOfBCnodes]; - q_dirBW = &Qarrays[dM0M * numberOfBCnodes]; - q_dirBE = &Qarrays[dP0M * numberOfBCnodes]; - q_dirTW = &Qarrays[dM0P * numberOfBCnodes]; - q_dirTN = &Qarrays[d0PP * numberOfBCnodes]; - q_dirBS = &Qarrays[d0MM * numberOfBCnodes]; - q_dirBN = &Qarrays[d0PM * numberOfBCnodes]; - q_dirTS = &Qarrays[d0MP * numberOfBCnodes]; - q_dirTNE = &Qarrays[dPPP * numberOfBCnodes]; - q_dirTSW = &Qarrays[dMMP * numberOfBCnodes]; - q_dirTSE = &Qarrays[dPMP * numberOfBCnodes]; - q_dirTNW = &Qarrays[dMPP * numberOfBCnodes]; - q_dirBNE = &Qarrays[dPPM * numberOfBCnodes]; - q_dirBSW = &Qarrays[dMMM * numberOfBCnodes]; - q_dirBSE = &Qarrays[dPMM * numberOfBCnodes]; - q_dirBNW = &Qarrays[dMPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = QindexArray[k]; - unsigned int kzero = KQK; - unsigned int ke = KQK; - unsigned int kw = neighborX[KQK]; - unsigned int kn = KQK; - unsigned int ks = neighborY[KQK]; - unsigned int kt = KQK; - unsigned int kb = neighborZ[KQK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = KQK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = KQK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = KQK; - unsigned int kbn = kb; - unsigned int kts = ks; - unsigned int ktse = ks; - unsigned int kbnw = kbw; - unsigned int ktnw = kw; - unsigned int kbse = kbs; - unsigned int ktsw = ksw; - unsigned int kbne = kb; - unsigned int ktne = KQK; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE, - f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; - - f_W = (D.f[dP00])[ke]; - f_E = (D.f[dM00])[kw]; - f_S = (D.f[d0P0])[kn]; - f_N = (D.f[d0M0])[ks]; - f_B = (D.f[d00P])[kt]; - f_T = (D.f[d00M])[kb]; - f_SW = (D.f[dPP0])[kne]; - f_NE = (D.f[dMM0])[ksw]; - f_NW = (D.f[dPM0])[kse]; - f_SE = (D.f[dMP0])[knw]; - f_BW = (D.f[dP0P])[kte]; - f_TE = (D.f[dM0M])[kbw]; - f_TW = (D.f[dP0M])[kbe]; - f_BE = (D.f[dM0P])[ktw]; - f_BS = (D.f[d0PP])[ktn]; - f_TN = (D.f[d0MM])[kbs]; - f_TS = (D.f[d0PM])[kbn]; - f_BN = (D.f[d0MP])[kts]; - f_BSW = (D.f[dPPP])[ktne]; - f_BNE = (D.f[dMMP])[ktsw]; - f_BNW = (D.f[dPMP])[ktse]; - f_BSE = (D.f[dMPP])[ktnw]; - f_TSW = (D.f[dPPM])[kbne]; - f_TNE = (D.f[dMMM])[kbsw]; - f_TNW = (D.f[dPMM])[kbse]; - f_TSE = (D.f[dMPM])[kbnw]; - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3, drho, q; - drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); - - vx1 = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - (f_E - f_W)) / (c1o1 + drho); - - - vx2 = ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - (f_N - f_S)) / (c1o1 + drho); - - vx3 = (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - (f_T - f_B)) / (c1o1 + drho); - - real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho); - - //////////////////////////////////////////////////////////////////////////////// - f_W = (DAD.f[dP00])[ke]; - f_E = (DAD.f[dM00])[kw]; - f_S = (DAD.f[d0P0])[kn]; - f_N = (DAD.f[d0M0])[ks]; - f_B = (DAD.f[d00P])[kt]; - f_T = (DAD.f[d00M])[kb]; - f_SW = (DAD.f[dPP0])[kne]; - f_NE = (DAD.f[dMM0])[ksw]; - f_NW = (DAD.f[dPM0])[kse]; - f_SE = (DAD.f[dMP0])[knw]; - f_BW = (DAD.f[dP0P])[kte]; - f_TE = (DAD.f[dM0M])[kbw]; - f_TW = (DAD.f[dP0M])[kbe]; - f_BE = (DAD.f[dM0P])[ktw]; - f_BS = (DAD.f[d0PP])[ktn]; - f_TN = (DAD.f[d0MM])[kbs]; - f_TS = (DAD.f[d0PM])[kbn]; - f_BN = (DAD.f[d0MP])[kts]; - f_BSW = (DAD.f[dPPP])[ktne]; - f_BNE = (DAD.f[dMMP])[ktsw]; - f_BNW = (DAD.f[dPMP])[ktse]; - f_BSE = (DAD.f[dMPP])[ktnw]; - f_TSW = (DAD.f[dPPM])[kbne]; - f_TNE = (DAD.f[dMMM])[kbsw]; - f_TNW = (DAD.f[dPMM])[kbse]; - f_TSE = (DAD.f[dMPM])[kbnw]; - ////////////////////////////////////////////////////////////////////////// - if (!isEvenTimestep) - { - DAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; - DAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; - DAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; - DAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; - DAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; - DAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; - DAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; - DAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; - DAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; - DAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; - DAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; - DAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; - DAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; - DAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; - DAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; - DAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; - DAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; - DAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; - DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; - DAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; - DAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; - DAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; - DAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; - DAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; - DAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; - DAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; - DAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; - } - else - { - DAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; - DAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; - DAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; - DAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; - DAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; - DAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; - DAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; - DAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; - DAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; - DAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; - DAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; - DAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; - DAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; - DAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; - DAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; - DAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; - DAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; - DAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; - DAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; - DAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; - DAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; - DAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; - DAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; - DAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; - DAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; - DAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; - DAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real concentration = - f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW + - f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + - f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[d000])[kzero]); - - real jx1 = - (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) + - (f_E - f_W)) - (vx1 * concentration); - - real jx2 = - ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) + - ((f_BN - f_TS) + (f_TN - f_BS)) + (-(f_SE - f_NW) + (f_NE - f_SW)) + - (f_N - f_S)) - (vx2 * concentration); - - real jx3 = - (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) + - (-(f_BN - f_TS) + (f_TN - f_BS)) + ((f_TE - f_BW) - (f_BE - f_TW)) + - (f_T - f_B)) - (vx3 * concentration); - - //jx1 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity); - //jx2 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity); - //jx3 *= (c2o1 - omegaDiffusivity) / (c2o1 - c2o1 * omegaDiffusivity); - - real NormJ = jx1 * NormX + jx2 * NormY + jx3 * NormZ; - - real jTan1 = jx1 - NormJ * NormX; - real jTan2 = jx2 - NormJ * NormY; - real jTan3 = jx3 - NormJ * NormZ; - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dM00])[kw ] = calcDistributionBC_AD(q, c2o27, vx1, cu_sq, f_E, f_W, omegaDiffusivity, jTan1, concentration); } - q = q_dirW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dP00])[ke ] = calcDistributionBC_AD(q, c2o27, -vx1, cu_sq, f_W, f_E, omegaDiffusivity, -jTan1, concentration); } - q = q_dirN[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0M0])[ks ] = calcDistributionBC_AD(q, c2o27, vx2, cu_sq, f_N, f_S, omegaDiffusivity, jTan2, concentration); } - q = q_dirS[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0P0])[kn ] = calcDistributionBC_AD(q, c2o27, -vx2, cu_sq, f_S, f_N, omegaDiffusivity, -jTan2, concentration); } - q = q_dirT[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d00M])[kb ] = calcDistributionBC_AD(q, c2o27, vx3, cu_sq, f_T, f_B, omegaDiffusivity, jTan3, concentration); } - q = q_dirB[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d00P])[kt ] = calcDistributionBC_AD(q, c2o27, -vx3, cu_sq, f_B, f_T, omegaDiffusivity, -jTan3, concentration); } - q = q_dirNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMM0])[ksw ] = calcDistributionBC_AD(q, c1o54, vx1+vx2, cu_sq, f_NE, f_SW, omegaDiffusivity, jTan1+jTan2, concentration); } - q = q_dirSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPP0])[kne ] = calcDistributionBC_AD(q, c1o54, -vx1-vx2, cu_sq, f_SW, f_NE, omegaDiffusivity, -jTan1-jTan2, concentration); } - q = q_dirSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMP0])[knw ] = calcDistributionBC_AD(q, c1o54, vx1-vx2, cu_sq, f_SE, f_NW, omegaDiffusivity, jTan1-jTan2, concentration); } - q = q_dirNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPM0])[kse ] = calcDistributionBC_AD(q, c1o54, -vx1+vx2, cu_sq, f_NW, f_SE, omegaDiffusivity, -jTan1+jTan2, concentration); } - q = q_dirTE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dM0M])[kbw ] = calcDistributionBC_AD(q, c1o54, vx1 +vx3, cu_sq, f_TE, f_BW, omegaDiffusivity, jTan1 +jTan3, concentration); } - q = q_dirBW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dP0P])[kte ] = calcDistributionBC_AD(q, c1o54, -vx1 -vx3, cu_sq, f_BW, f_TE, omegaDiffusivity, -jTan1 -jTan3, concentration); } - q = q_dirBE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dM0P])[ktw ] = calcDistributionBC_AD(q, c1o54, vx1 -vx3, cu_sq, f_BE, f_TW, omegaDiffusivity, jTan1 -jTan3, concentration); } - q = q_dirTW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dP0M])[kbe ] = calcDistributionBC_AD(q, c1o54, -vx1 +vx3, cu_sq, f_TW, f_BE, omegaDiffusivity, -jTan1 +jTan3, concentration); } - q = q_dirTN[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0MM])[kbs ] = calcDistributionBC_AD(q, c1o54, vx2+vx3, cu_sq, f_TN, f_BS, omegaDiffusivity, jTan2+jTan3, concentration); } - q = q_dirBS[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0PP])[ktn ] = calcDistributionBC_AD(q, c1o54, -vx2-vx3, cu_sq, f_BS, f_TN, omegaDiffusivity, -jTan2-jTan3, concentration); } - q = q_dirBN[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0MP])[kts ] = calcDistributionBC_AD(q, c1o54, vx2-vx3, cu_sq, f_BN, f_TS, omegaDiffusivity, jTan2-jTan3, concentration); } - q = q_dirTS[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[d0PM])[kbn ] = calcDistributionBC_AD(q, c1o54, -vx2+vx3, cu_sq, f_TS, f_BN, omegaDiffusivity, -jTan2+jTan3, concentration); } - q = q_dirTNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMMM])[kbsw] = calcDistributionBC_AD(q, c1o216, vx1+vx2+vx3, cu_sq, f_TNE, f_BSW, omegaDiffusivity, jTan1+jTan2+jTan3, concentration); } - q = q_dirBSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPPP])[ktne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2-vx3, cu_sq, f_BSW, f_TNE, omegaDiffusivity, -jTan1-jTan2-jTan3, concentration); } - q = q_dirBNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMMP])[ktsw] = calcDistributionBC_AD(q, c1o216, vx1+vx2-vx3, cu_sq, f_BNE, f_TSW, omegaDiffusivity, jTan1+jTan2-jTan3, concentration); } - q = q_dirTSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPPM])[kbne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2+vx3, cu_sq, f_TSW, f_BNE, omegaDiffusivity, -jTan1-jTan2+jTan3, concentration); } - q = q_dirTSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMPM])[kbnw] = calcDistributionBC_AD(q, c1o216, vx1-vx2+vx3, cu_sq, f_TSE, f_BNW, omegaDiffusivity, jTan1-jTan2+jTan3, concentration); } - q = q_dirBNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPMP])[ktse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2-vx3, cu_sq, f_BNW, f_TSE, omegaDiffusivity, -jTan1+jTan2-jTan3, concentration); } - q = q_dirBSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dMPP])[ktnw] = calcDistributionBC_AD(q, c1o216, vx1-vx2-vx3, cu_sq, f_BSE, f_TNW, omegaDiffusivity, jTan1-jTan2-jTan3, concentration); } - q = q_dirTNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dPMM])[kbse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2+vx3, cu_sq, f_TNW, f_BSE, omegaDiffusivity, -jTan1+jTan2+jTan3, concentration); } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/core/GPU/GPU_Interface.h b/src/gpu/core/GPU/GPU_Interface.h index dc3ac7370a5af615d0ed3ea1ef533c4c1c424ca3..d94821361e7ea80d2e6ba3187d267fcb73e2b7c7 100644 --- a/src/gpu/core/GPU/GPU_Interface.h +++ b/src/gpu/core/GPU/GPU_Interface.h @@ -322,244 +322,6 @@ void LBCalcMeasurePoints27(real* vxMP, unsigned int numberOfThreads, bool isEvenTimestep); -void QADDev7(unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -////////////////////////////////////////////////////////////////////////// -//! \brief defines the behavior of a slip-AD boundary condition -void ADSlipVelDevComp( - uint numberOfThreads, - real * normalX, - real * normalY, - real * normalZ, - real * distributions, - real * distributionsAD, - int* QindexArray, - real * Qarrays, - uint numberOfBCnodes, - real omegaDiffusivity, - uint * neighborX, - uint * neighborY, - uint * neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADDirichletDev27( unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADBBDev27( unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADVelDev7(unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - - -void QADVelDev27( unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADPressDev7( unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADPressDev27(unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADPressNEQNeighborDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - int* k_Q, - int* k_N, - int numberOfBCnodes, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep - ); - -void QNoSlipADincompDev7(unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QNoSlipADincompDev27(unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADVeloIncompDev7( unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - - -void QADVeloIncompDev27( unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADPressIncompDev7( unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -void QADPressIncompDev27( unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - void ScaleCF27( real* DC, real* DF, unsigned int* neighborCX, diff --git a/src/gpu/core/GPU/GPU_Kernels.cuh b/src/gpu/core/GPU/GPU_Kernels.cuh index de38cb7338f34501c1b6d1c54382b40ebd96c63f..d2a8935eb029f9ae55661517db926cfab1ed4517 100644 --- a/src/gpu/core/GPU/GPU_Kernels.cuh +++ b/src/gpu/core/GPU/GPU_Kernels.cuh @@ -293,227 +293,8 @@ __global__ void LBCalcMeasurePoints(real* vxMP, real* DD, bool isEvenTimestep); -//Advection / Diffusion BCs -__global__ void QAD7( real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - ////////////////////////////////////////////////////////////////////////// -//! \brief \ref AD_SlipVelDeviceComp : device function for the slip-AD boundary condition -__global__ void AD_SlipVelDeviceComp( - real * normalX, - real * normalY, - real * normalZ, - real * distributions, - real * distributionsAD, - int* QindexArray, - real * Qarrays, - uint numberOfBCnodes, - real omegaDiffusivity, - uint * neighborX, - uint * neighborY, - uint * neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADDirichlet27( real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADBB27( real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADVel7( real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); -__global__ void QADVel27(real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADPress7( real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADPress27( real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADPressNEQNeighbor27( - real* DD, - real* DD27, - int* k_Q, - int* k_N, - int numberOfBCnodes, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep - ); - -__global__ void QNoSlipADincomp7( real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QNoSlipADincomp27( real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADVeloIncomp7( real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADVeloIncomp27( real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADPressIncomp7(real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); - -__global__ void QADPressIncomp27( real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep); diff --git a/src/gpu/core/GPU/LBMKernel.cu b/src/gpu/core/GPU/LBMKernel.cu index 6f063b302867b60481984d83ab2df48e91f62c6e..770cb0397f8fdb770a40c8f91e8a97302128de87 100644 --- a/src/gpu/core/GPU/LBMKernel.cu +++ b/src/gpu/core/GPU/LBMKernel.cu @@ -698,547 +698,6 @@ void LBCalcMeasurePoints27( getLastCudaError("LBCalcMeasurePoints execution failed"); } ////////////////////////////////////////////////////////////////////////// -void QADPressDev7( - unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADPress7<<< grid.grid, grid.threads >>>( - DD, - DD7, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADPress7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADPressDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADPress27<<< grid.grid, grid.threads >>>( - DD, - DD27, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADPress27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADPressNEQNeighborDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - int* k_Q, - int* k_N, - int numberOfBCnodes, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADPressNEQNeighbor27<<< grid.grid, grid.threads >>>( - DD, - DD27, - k_Q, - k_N, - numberOfBCnodes, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADPressNEQNeighbor27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADVelDev7( - unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADVel7<<< grid.grid, grid.threads >>> ( - DD, - DD7, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADVel7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADVelDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADVel27<<< grid.grid, grid.threads >>> ( - DD, - DD27, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADVel27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADDev7( - unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QAD7<<< grid.grid, grid.threads >>> ( - DD, - DD7, - temp, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QAD7 execution failed"); -} - - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -void ADSlipVelDevComp( - uint numberOfThreads, - real * normalX, - real * normalY, - real * normalZ, - real * distributions, - real * distributionsAD, - int* QindexArray, - real * Qarrays, - uint numberOfBCnodes, - real omegaDiffusivity, - uint * neighborX, - uint * neighborY, - uint * neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - AD_SlipVelDeviceComp <<< grid.grid, grid.threads >>> ( - normalX, - normalY, - normalZ, - distributions, - distributionsAD, - QindexArray, - Qarrays, - numberOfBCnodes, - omegaDiffusivity, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("AD_SlipVelDeviceComp execution failed"); -} -////////////////////////////////////////////////////////////////////////// - -void QADDirichletDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADDirichlet27<<< grid.grid, grid.threads >>> ( - DD, - DD27, - temp, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADDirichletDev27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADBBDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADBB27<<< grid.grid, grid.threads >>> ( - DD, - DD27, - temp, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADBB27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QNoSlipADincompDev7( - unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QNoSlipADincomp7<<< grid.grid, grid.threads >>> ( - DD, - DD7, - temp, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QNoSlipADincomp7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QNoSlipADincompDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QNoSlipADincomp27<<< grid.grid, grid.threads >>> ( - DD, - DD27, - temp, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QNoSlipADincomp27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADVeloIncompDev7( - unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADVeloIncomp7<<< grid.grid, grid.threads >>> ( - DD, - DD7, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADVeloIncomp7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADVeloIncompDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADVeloIncomp27<<< grid.grid, grid.threads >>> ( - DD, - DD27, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADVeloIncomp27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADPressIncompDev7( - unsigned int numberOfThreads, - real* DD, - real* DD7, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADPressIncomp7<<< grid.grid, grid.threads >>>( - DD, - DD7, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADPressIncomp7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void QADPressIncompDev27( - unsigned int numberOfThreads, - real* DD, - real* DD27, - real* temp, - real* velo, - real diffusivity, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes); - - QADPressIncomp27<<< grid.grid, grid.threads >>>( - DD, - DD27, - temp, - velo, - diffusivity, - k_Q, - QQ, - numberOfBCnodes, - om1, - neighborX, - neighborY, - neighborZ, - numberOfLBnodes, - isEvenTimestep); - getLastCudaError("QADPressIncomp27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// void ScaleCF27( real* DC, real* DF, diff --git a/src/gpu/core/Kernel/ADKernelManager.cpp b/src/gpu/core/Kernel/ADKernelManager.cpp index cce56d123216cb2501a254f5d99c1c3832f21aa1..4e7c3d90057550805252cce8d0f3d9fdbb1496cd 100644 --- a/src/gpu/core/Kernel/ADKernelManager.cpp +++ b/src/gpu/core/Kernel/ADKernelManager.cpp @@ -26,13 +26,12 @@ // You should have received a copy of the GNU General Public License along // with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. // -//! \file ADKernelManager.h -//! \ingroup KernelManager //! \author Martin Schoenherr //======================================================================================= #include "Kernel/ADKernelManager.h" #include "GPU/CudaMemoryManager.h" #include "GPU/GPU_Interface.h" +#include "BoundaryConditions/AdvectionDiffusion/AdvectionDiffusion.h" #include "Parameter/Parameter.h" #include "Kernel/AdvectionDiffusionKernel.h" @@ -69,7 +68,7 @@ void ADKernelManager::runADcollisionKernel(const int level)const void ADKernelManager::runADslipBCKernel(const int level) const{ if (para->getParD(level)->slipBC.numberOfBCnodes > 1) { - ADSlipVelDevComp( + AdvectionDiffusionSlipVelocityCompressible( para->getParD(level)->numberofthreads, para->getParD(level)->slipBC.normalX, para->getParD(level)->slipBC.normalY, @@ -88,71 +87,10 @@ void ADKernelManager::runADslipBCKernel(const int level) const{ } } -void ADKernelManager::runADpressureBCKernel(const int level) const{ - if (para->getParD(level)->TempPress.kTemp > 0){ - // QADPressIncompDev27( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD27.f[0], - // para->getParD(level)->TempPress.temp, - // para->getParD(level)->TempPress.velo, - // para->getParD(level)->diffusivity, - // para->getParD(level)->TempPress.k, - // para->getParD(level)->pressureBC.q27[0], - // para->getParD(level)->TempPress.kTemp, - // para->getParD(level)->omega, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - - ////////////////////////////////////////////////////////////////////////// - // C O M P R E S S I B L E - ////////////////////////////////////////////////////////////////////////// - QADPressDev27( - para->getParD(level)->numberofthreads, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD.f[0], - para->getParD(level)->TempPress.temp, - para->getParD(level)->TempPress.velo, - para->getParD(level)->diffusivity, - para->getParD(level)->TempPress.k, - para->getParD(level)->pressureBC.q27[0], - para->getParD(level)->TempPress.kTemp, - para->getParD(level)->omega, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - } -} - void ADKernelManager::runADgeometryBCKernel(const int level) const { if (para->getParD(level)->geometryBC.numberOfBCnodes > 0) { - // QNoSlipADincompDev27( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD27.f[0], - // para->getParD(level)->Temp.temp, - // para->getParD(level)->diffusivity, - // para->getParD(level)->Temp.k, - // para->getParD(level)->geometryBC.q27[0], - // para->getParD(level)->Temp.kTemp, - // para->getParD(level)->omega, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - - ////////////////////////////////////////////////////////////////////////// - // C O M P R E S S I B L E - ////////////////////////////////////////////////////////////////////////// - - QADBBDev27( + AdvectionDiffusionBounceBack( para->getParD(level)->numberofthreads, para->getParD(level)->distributions.f[0], para->getParD(level)->distributionsAD.f[0], @@ -170,34 +108,13 @@ void ADKernelManager::runADgeometryBCKernel(const int level) const } } -void ADKernelManager::runADveloBCKernel(const int level) const{ +void ADKernelManager::runADDirichletBCKernel(const int level) const{ if (para->getParD(level)->TempVel.kTemp > 0){ - // QADVeloIncompDev27( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD27.f[0], - // para->getParD(level)->TempVel.temp, - // para->getParD(level)->TempVel.velo, - // para->getParD(level)->diffusivity, - // para->getParD(level)->TempVel.k, - // para->getParD(level)->velocityBC.q27[0], - // para->getParD(level)->TempVel.kTemp, - // para->getParD(level)->omega, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - - ////////////////////////////////////////////////////////////////////////// - // C O M P R E S S I B L E - ////////////////////////////////////////////////////////////////////////// - QADVelDev27( + AdvectionDiffusionDirichlet( para->getParD(level)->numberofthreads, para->getParD(level)->distributions.f[0], para->getParD(level)->distributionsAD.f[0], para->getParD(level)->TempVel.tempPulse, - para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->velocityBC.k, para->getParD(level)->velocityBC.q27[0], diff --git a/src/gpu/core/Kernel/ADKernelManager.h b/src/gpu/core/Kernel/ADKernelManager.h index 86a59d58371377fa3b4468f1f9e8bac94e0184d4..650fca4e4c0812c1f8b702d0b45ac4e6608f82df 100644 --- a/src/gpu/core/Kernel/ADKernelManager.h +++ b/src/gpu/core/Kernel/ADKernelManager.h @@ -26,8 +26,6 @@ // You should have received a copy of the GNU General Public License along // with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. // -//! \file ADKernelManager.h -//! \ingroup KernelManager //! \author Martin Schoenherr //======================================================================================= #ifndef ADVECTION_DIFFUSION_H @@ -65,14 +63,11 @@ public: void runADgeometryBCKernel(const int level) const; //! \brief calls the device function of the velocity boundary condition for advection diffusion - void runADveloBCKernel(const int level) const; + void runADDirichletBCKernel(const int level) const; //! \brief calls the device function of the slip boundary condition for advection diffusion void runADslipBCKernel(const int level) const; - //! \brief calls the device function of the pressure boundary condition for advection diffusion - void runADpressureBCKernel(const int level) const; - //! \brief copy the concentration from device to host and writes VTK file with concentration //! \param cudaMemoryManager instance of class CudaMemoryManager void printAD(const int level, SPtr<CudaMemoryManager> cudaMemoryManager) const;