diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp index 1cdee8cd39b62006ed1aa28e856fcca4c2c641f1..aadfa18c658dcebe9e4c67a0c33995a0ba2cfca4 100644 --- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp +++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp @@ -8,8 +8,986 @@ #include "Communication/ExchangeData27.h" #include "Kernel/Kernel.h" +void updateGrid27(Parameter* para, + Communicator* comm, + CudaMemoryManager* cudaManager, + std::vector<std::shared_ptr<PorousMedia>>& pm, + int level, + unsigned int t, + std::vector < SPtr< Kernel>>& kernels) +{ + ////////////////////////////////////////////////////////////////////////// + + if( level != para->getFine() ) + { + updateGrid27(para, comm, cudaManager, pm, level+1, t, kernels); + updateGrid27(para, comm, cudaManager, pm, level+1, t, kernels); + } + + ////////////////////////////////////////////////////////////////////////// + + collision(para, pm, level, t, kernels); + + ////////////////////////////////////////////////////////////////////////// + + exchangeMultiGPU(para, comm, cudaManager, level); + + ////////////////////////////////////////////////////////////////////////// + + postCollisionBC(para, level); + + ////////////////////////////////////////////////////////////////////////// + + swapBetweenEvenAndOddTimestep(para, level); + + ////////////////////////////////////////////////////////////////////////// + + preCollisionBC(para, level); + + ////////////////////////////////////////////////////////////////////////// + + if( level != para->getFine() ) + { + fineToCoarse(); + + exchangeMultiGPU(para, comm, cudaManager, level); + + coarseToFine(); + } +} + +void collision(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level, unsigned int t, std::vector < SPtr< Kernel>>& kernels) +{ + kernels.at(level)->run(); + + ////////////////////////////////////////////////////////////////////////// + + if (para->getSimulatePorousMedia()) + collisionPorousMedia(para, pm, level); + + ////////////////////////////////////////////////////////////////////////// + + if (para->getDiffOn()) + collisionAdvectionDiffusion(para, level); + + { + if (para->getDiffMod() == 7) + { + //output << " Diff Mod 7\n"; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // incomp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + //KernelADincomp7(para->getParD(level)->numberofthreads, para->getParD(level)->diffusivity, para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + //getLastCudaError("KernelADincomp7 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion boundary condition + QNoSlipADincompDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->Temp.temp, + para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QNoSlipADincompDev7 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion + velocity boundary condition + if (t<15580)//(t>500000 && t<515580)//(t>300000 && t<315580) + { + QADVeloIncompDev7(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.tempPulse, + para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADVeloIncompDev7 execution failed"); + } + else + { + QADVeloIncompDev7(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.temp, + para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADVeloIncompDev7 execution failed"); + } + //QADVeloIncompDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADVeloIncompDev7 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion + velocity boundary condition + QADPressIncompDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempPress.temp, + para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADPressIncompDev7 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //// comp + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////advection diffusion kernel + //KernelThS7( para->getParD(level)->numberofthreads, para->getParD(level)->diffusivity, para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////advection diffusion boundary condition + //QADDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->Temp.temp, + // para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADDev27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////advection diffusion + velocity boundary condition + //QADVelDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.temp, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADVelDev27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////advection diffusion + velocity boundary condition + //QADPressDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempPress.temp, + // para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + // para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADPressDev27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } + else if (para->getDiffMod() == 27) + { + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // incomp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + // KernelADincomp27( para->getParD(level)->numberofthreads, para->getParD(level)->diffusivity, para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + //getLastCudaError("KernelADincomp27 execution failed"); + // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // //advection diffusion boundary condition + // QNoSlipADincompDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->Temp.temp, + // para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QNoSlipADincompDev27 execution failed"); + // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // //advection diffusion + velocity boundary condition + //if (t>500000 && t<515580)//(t>300000 && t<315580) + //{ + //QADVeloIncompDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADVeloIncompDev27 execution failed"); + //} + //else + //{ + // QADVeloIncompDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.temp, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVeloIncompDev27 execution failed"); + //} + // // QADVeloIncompDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // //para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.temp, + // //para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // //para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // //para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // //para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // // getLastCudaError("QADVeloIncompDev27 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion + pressure boundary condition + // QADPressIncompDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + //para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempPress.temp, + //para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + //para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + //para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + //para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADPressIncompDev27 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //// comp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + //KernelThS27(para->getParD(level)->numberofthreads, + // para->getParD(level)->diffusivity, + // para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, + // para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], + // para->getParD(level)->d27.f[0], + // para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion boundary condition + QADBBDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->Temp.temp, + para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADBBDev27 execution failed"); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Street Manhattan - never use again, please + QADDirichletDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.tempPulse, + para->getParD(level)->diffusivity, para->getParD(level)->concIndex, para->getParD(level)->QGeom.q27[0], + para->getParD(level)->numberOfPointsConc, para->getParD(level)->numberOfPointsConc, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADDirichletDev27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////advection diffusion + velocity boundary condition + //if (t<1000)//(t>100000 && t<103895)//(t>1600000 && t<1662317)//(t>500000 && t<515580)//(t<1000)//(t<15580)//(t>400000 && t<415580)// + //{ + // QADVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->Qinflow.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVelDev27 execution failed"); + //} + //else + //{ + // QADVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.temp, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->Qinflow.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVelDev27 execution failed"); + //} + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////advection diffusion + velocity boundary condition + ////QADPressDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + //// para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempPress.temp, + //// para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + //// para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + //// para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + //// para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + ////getLastCudaError("QADPressDev27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } + } +} + +void collisionPorousMedia(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level) +{ + for( int i = 0; i < pm.size(); i++ ) + { + KernelPMCumOneCompSP27(para->getParD(level)->numberofthreads, + para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, + para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, + para->getParD(level)->d0SP.f[0], + para->getParD(level)->size_Mat_SP, + level, + para->getForcesDev(), + pm[i]->getPorosity(), + pm[i]->getDarcyLBM(), + pm[i]->getForchheimerLBM(), + pm[i]->getSizePM(), + pm[i]->getHostNodeIDsPM(), + para->getParD(level)->evenOrOdd); + getLastCudaError("KernelPMCumOneCompSP27 execution failed"); + } +} +void collisionAdvectionDiffusion(Parameter* para, int level) +{ + if (para->getDiffMod() == 7) + { + //output << " Diff Mod 7\n"; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // incomp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + //KernelADincomp7(para->getParD(level)->numberofthreads, para->getParD(level)->diffusivity, para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + //getLastCudaError("KernelADincomp7 execution failed"); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // comp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + //KernelThS7( para->getParD(level)->numberofthreads, para->getParD(level)->diffusivity, para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + //getLastCudaError("KernelThS7 execution failed"); + } + else if (para->getDiffMod() == 27) + { + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // incomp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + // KernelADincomp27( para->getParD(level)->numberofthreads, para->getParD(level)->diffusivity, para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + //getLastCudaError("KernelADincomp27 execution failed"); + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //// comp + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //advection diffusion kernel + //KernelThS27(para->getParD(level)->numberofthreads, + // para->getParD(level)->diffusivity, + // para->getParD(level)->geoSP, + // para->getParD(level)->neighborX_SP, + // para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, + // para->getParD(level)->d0SP.f[0], + // para->getParD(level)->d27.f[0], + // para->getParD(level)->size_Mat_SP, + // para->getParD(level)->evenOrOdd); + } +} + +void exchangeMultiGPU(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, int level) +{ + if (para->getNumprocs() > 1) + { + // St. Lenz: exchange for post-collision data and pre-collision data are identical! + + ////1D domain decomposition + //exchangePostCollDataGPU27(para, comm, level); + //3D domain decomposition + //printf("start exchange Post X (level: %d, myID: %d) \n", level, para->getMyID()); + exchangePostCollDataXGPU27(para, comm, cudaManager, level); + //printf("end exchange Post X (level: %d, myID: %d) \n", level, para->getMyID()); + //printf("start exchange Post Y (level: %d, myID: %d) \n", level, para->getMyID()); + exchangePostCollDataYGPU27(para, comm, cudaManager, level); + //printf("end exchange Post Y (level: %d, myID: %d) \n", level, para->getMyID()); + //printf("start exchange Post Z (level: %d, myID: %d) \n", level, para->getMyID()); + exchangePostCollDataZGPU27(para, comm, cudaManager, level); + //printf("end exchange Post Z (level: %d, myID: %d) \n", level, para->getMyID()); + ////////////////////////////////////////////////////////////////////////// + //3D domain decomposition convection diffusion + if (para->getDiffOn()==true) + { + exchangePostCollDataADXGPU27(para, comm, cudaManager, level); + exchangePostCollDataADYGPU27(para, comm, cudaManager, level); + exchangePostCollDataADZGPU27(para, comm, cudaManager, level); + } + } +} +void postCollisionBC(Parameter* para, int level, unsigned int t) +{ + ////////////////////////////////////////////////////////////////////////// + // I N F L O W + ////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->kInflowQ > 0) + { + //QVelDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + // para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QVelDev27 execution failed"); + + //QVelDevComp27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + // para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QVelDevComp27 execution failed"); + + QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + para->getParD(level)->kInflowQ, para->getParD(level)->Qinflow.kArray, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QVelDevCompZeroPress27 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // D E P R E C A T E D + ////////////////////////////////////////////////////////////////////////// + + //QVelDevice1h27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + // para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, para->getParD(level)->omega, + // para->getPhi(), para->getAngularVelocity(), + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->coordX_SP, para->getParD(level)->coordY_SP, para->getParD(level)->coordZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QVelDev27 execution failed"); + } + + ////////////////////////////////////////////////////////////////////////// + // N O - S L I P + ////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->kQ > 0) + { + //QDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QWall.k, para->getParD(level)->QWall.q27[0], + // para->getParD(level)->kQ, para->getParD(level)->kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDev27 execution failed"); + + //BBDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QWall.k, para->getParD(level)->QWall.q27[0], + // para->getParD(level)->kQ, para->getParD(level)->kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("BBDev27 (Wall) execution failed"); + + //QDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QWall.k, para->getParD(level)->QWall.q27[0], + // para->getParD(level)->kQ, para->getParD(level)->kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDev27 (Wall) execution failed"); + + QDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->QWall.k, para->getParD(level)->QWall.q27[0], + para->getParD(level)->kQ, para->getParD(level)->kQ, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QDevComp27 (Wall) execution failed"); + } + + ////////////////////////////////////////////////////////////////////////// + // S L I P + ////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->kSlipQ > 0) + { + //QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0], para->getParD(level)->QSlip.k, + // para->getParD(level)->QSlip.q27[0], para->getParD(level)->kSlipQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("Slip27 execution failed"); + + QSlipDevComp27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0], para->getParD(level)->QSlip.k, + para->getParD(level)->QSlip.q27[0], para->getParD(level)->kSlipQ, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QSlipDev27 execution failed"); + } + + ////////////////////////////////////////////////////////////////////////// + // G E O M E T R Y + ////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->QGeom.kQ > 0) + { + //BBDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("BBDev27 (Wall) execution failed"); + + //QDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDev27 (Geom) execution failed"); + + //QVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->QGeom.Vx, para->getParD(level)->QGeom.Vy, para->getParD(level)->QGeom.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QVelDev27 execution failed"); + + //QDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDevComp27 (Geom) execution failed"); + + QVelDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->QGeom.Vx, para->getParD(level)->QGeom.Vy, para->getParD(level)->QGeom.Vz, + para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QVelDevComp27 execution failed"); + + //QDev3rdMomentsComp27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDev3rdMomentsComp27 (Geom) execution failed"); + + //QSlipDev27( para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, + // para->getParD(level)->QGeom.q27[0], para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("Slip27 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // D E P R E C A T E D + ////////////////////////////////////////////////////////////////////////// + // the GridGenerator does currently not provide normals! + + //QSlipGeomDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, + // para->getParD(level)->QGeom.q27[0], para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->QGeomNormalX.q27[0], para->getParD(level)->QGeomNormalY.q27[0], para->getParD(level)->QGeomNormalZ.q27[0], + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QSlipGeomDev27 execution failed"); + + //QSlipNormDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, + // para->getParD(level)->QGeom.q27[0], para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->QGeomNormalX.q27[0], para->getParD(level)->QGeomNormalY.q27[0], para->getParD(level)->QGeomNormalZ.q27[0], + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QSlipGeomDev27 execution failed"); + } + + ////////////////////////////////////////////////////////////////////////// + // O U T F L O W + ////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->kOutflowQ > 0) + { + ////////////////////////////////////////////////////////////////////////// + // D E P R E C A T E D + ////////////////////////////////////////////////////////////////////////// + + //QPressDevFixBackflow27( para->getParD(level)->numberofthreads, RhoBCOutflowD, + // para->getParD(level)->d0SP.f[0], QoutflowD.k, kOutflowQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressDev27 execution failed"); + } + + ////////////////////////////////////////////////////////////////////////// + // P R E S S U R E + ////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->kPressQ > 0) + { + QPressDev27_IntBB( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, para->getParD(level)->QPress.q27[0], + para->getParD(level)->QPress.kQ, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QPressDev27_IntBB fine execution failed"); + } + + ////////////////////////////////////////////////////////////////////////// + // A D V E C T I O N D I F F U S I O N + ////////////////////////////////////////////////////////////////////////// + + if (para->getDiffOn()) + { + if (para->getDiffMod() == 7) + { + if (para->getParD(level)->QGeom.kQ > 0) + { + //QNoSlipADincompDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->Temp.temp, + // para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QNoSlipADincompDev7 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // C O M P R E S S I B L E + ////////////////////////////////////////////////////////////////////////// + + QADDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->Temp.temp, + para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADDev27 execution failed"); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + if (para->getParD(level)->TempVel.kTemp > 0) + { + //QADVeloIncompDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADVeloIncompDev7 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // D E P R E C A T E D + ////////////////////////////////////////////////////////////////////////// + + //if (t<15580)//(t>500000 && t<515580)//(t>300000 && t<315580) + //{ + // QADVeloIncompDev7(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVeloIncompDev7 execution failed"); + //} + //else + //{ + // QADVeloIncompDev7(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.temp, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVeloIncompDev7 execution failed"); + //} + + ////////////////////////////////////////////////////////////////////////// + // C O M P R E S S I B L E + ////////////////////////////////////////////////////////////////////////// + + QADVelDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempVel.temp, + para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADVelDev27 execution failed"); + } + + if (para->getParD(level)->TempPress.kTemp > 0) + { + //QADPressIncompDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempPress.temp, + // para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + // para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADPressIncompDev7 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // C O M P R E S S I B L E + ////////////////////////////////////////////////////////////////////////// + + QADPressDev7( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d7.f[0], para->getParD(level)->TempPress.temp, + para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADPressDev27 execution failed"); + } + } + else if (para->getDiffMod() == 27) + { + if (para->getParD(level)->QGeom.kQ > 0) + { + //QNoSlipADincompDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->Temp.temp, + // para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QNoSlipADincompDev27 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // C O M P R E S S I B L E + ////////////////////////////////////////////////////////////////////////// + + QADBBDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->Temp.temp, + para->getParD(level)->diffusivity, para->getParD(level)->Temp.k, para->getParD(level)->QGeom.q27[0], + para->getParD(level)->Temp.kTemp, para->getParD(level)->Temp.kTemp, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADBBDev27 execution failed"); + } + + if (para->getParD(level)->TempVel.kTemp > 0) + { + QADVeloIncompDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.temp, + para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADVeloIncompDev27 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // D E P R E C A T E D + ////////////////////////////////////////////////////////////////////////// + + //if (t>500000 && t<515580)//(t>300000 && t<315580) + //{ + // QADVeloIncompDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVeloIncompDev27 execution failed"); + //} + //else + //{ + // QADVeloIncompDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.temp, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempVel.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->TempVel.kTemp, para->getParD(level)->TempVel.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVeloIncompDev27 execution failed"); + //} + + ////////////////////////////////////////////////////////////////////////// + // C O M P R E S S I B L E + ////////////////////////////////////////////////////////////////////////// + + QADVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.tempPulse, + para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->Qinflow.k, + para->getParD(level)->Qinflow.q27[0], para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADVelDev27 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // D E P R E C A T E D + ////////////////////////////////////////////////////////////////////////// + + //if (t<1000)//(t>100000 && t<103895)//(t>1600000 && t<1662317)//(t>500000 && t<515580)//(t<1000)//(t<15580)//(t>400000 && t<415580)// + //{ + // QADVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.tempPulse, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->Qinflow.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVelDev27 execution failed"); + //} + //else + //{ + // QADVelDev27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempVel.temp, + // para->getParD(level)->TempVel.velo, para->getParD(level)->diffusivity, para->getParD(level)->Qinflow.k, + // para->getParD(level)->Qinflow.q27[0], para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QADVelDev27 execution failed"); + //} + } + + if (para->getParD(level)->TempPress.kTemp > 0) + { + //QADPressIncompDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempPress.temp, + // para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + // para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + // para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QADPressIncompDev27 execution failed"); + + ////////////////////////////////////////////////////////////////////////// + // C O M P R E S S I B L E + ////////////////////////////////////////////////////////////////////////// + + QADPressDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + para->getParD(level)->d0SP.f[0], para->getParD(level)->d27.f[0], para->getParD(level)->TempPress.temp, + para->getParD(level)->TempPress.velo, para->getParD(level)->diffusivity, para->getParD(level)->TempPress.k, + para->getParD(level)->QPress.q27[0], para->getParD(level)->TempPress.kTemp, para->getParD(level)->TempPress.kTemp, + para->getParD(level)->omega, para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QADPressDev27 execution failed"); + + } + } + } +} + +void swapBetweenEvenAndOddTimestep(Parameter* para, int level) +{ + if (para->getParD(level)->evenOrOdd==true) para->getParD(level)->evenOrOdd=false; + else para->getParD(level)->evenOrOdd=true; +} + +void preCollisionBC(Parameter* para, int level) +{ + //////////////////////////////////////////////////////////////////////////////// + //QPressDevNEQ27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, + // para->getParD(level)->QPress.kN, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressDev27 execution failed"); + //////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////////////// + ////test for drag crisis + //if (para->getParD(level)->QGeom.kQ > 0) + //{ + // QDevCompHighNu27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QDevComp27 (Geom) execution failed"); + //} + ////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////////////// + ////press EQ comp + if (para->getParD(level)->QPress.kQ > 0) + { + QPressNoRhoDev27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, + para->getParD(level)->QPress.kN, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + getLastCudaError("QPressNoRhoDev27 execution failed"); + + //QPressDevEQZ27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, + // para->getParD(level)->QPress.kN, para->getParD(level)->kDistTestRE.f[0], + // para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(0)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressDevEQZ27 execution failed"); + + //QInflowScaleByPressDev27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, + // para->getParD(level)->QPress.kN, para->getParD(level)->QPress.kQ, para->getParD(0)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(0)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QInflowScaleByPressDev27 execution failed"); + } + + ////////////////////////////////////////////////////////////////////////////////// + ////only for a round off error test + //para->cudaCopyTestREtoHost(0,para->getParH(0)->QPress.kQ); + //printRE(para, t); + ////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////////////// + //QPressNoRhoDev27( para->getParD(level)->numberofthreads, para->getParD(level)->Qoutflow.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qoutflow.k, + // para->getParD(level)->Qoutflow.kN, para->getParD(level)->Qoutflow.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressNoRhoDev27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////// + ////press NEQ incomp + //QPressDevIncompNEQ27(para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, + // para->getParD(level)->QPress.kN, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressDevIncompNEQ27 execution failed"); + ////////////////////////////////////////////////////////////////////////////////// + //press NEQ comp + //QPressDevNEQ27( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, + // para->getParD(level)->QPress.kN, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressDevNEQ27 execution failed"); + //////////////////////////////////////////////////////////////////////////////// + //if ( myid == numprocs - 1) + //PressSchlaffer27( para->getParD(level)->numberofthreads, para->getParD(level)->Qoutflow.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qoutflow.Vx, + // para->getParD(level)->Qoutflow.Vy, para->getParD(level)->Qoutflow.Vz, + // para->getParD(level)->Qoutflow.deltaVz, para->getParD(level)->Qoutflow.k, + // para->getParD(level)->Qoutflow.kN, para->getParD(level)->kOutflowQ, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, + // para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("PressSchlaffer27 execution failed"); + //////////////////////////////////////////////////////////////////////////////// + //if ( myid == 0) + //{ + // VelSchlaffer27(para->getParD(level)->numberofthreads, t, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->Qinflow.deltaVz, para->getParD(level)->Qinflow.k, + // para->getParD(level)->Qinflow.kN, para->getParD(level)->kInflowQ, + // para->getParD(level)->omega, para->getParD(level)->neighborX_SP, + // para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("VelSchlaffer27 execution failed"); + //} + //////////////////////////////////////////////////////////////////////////////// + ////High noon incomp + //QVelDevIncompHighNu27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + // para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QVelDevComp27 execution failed"); + + //QDevIncompHighNu27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDevComp27 (Geom) execution failed"); + ////////////////////////////////////////////////////////////////////////////////// + ////High noon comp + //QVelDevCompHighNu27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + // para->getParD(level)->kInflowQ, para->getParD(level)->kInflowQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QVelDevComp27 execution failed"); + + //QDevCompHighNu27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QDevComp27 (Geom) execution failed"); + ////////////////////////////////////////////////////////////////////////////////// + +} void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, std::vector<std::shared_ptr<PorousMedia>> pm, int level, int max_level, unsigned int t, std::vector < SPtr< Kernel>> kernels) {